From e598b1c7bdd91989669bf33eac26013567c0a595 Mon Sep 17 00:00:00 2001 From: Katja Luther Date: Wed, 8 Jun 2016 16:01:23 +0200 Subject: [PATCH] changes to fix the checklist editor --- .../view/checklist/ChecklistEditor.java | 56 +++++++++++----- .../checklist/ChecklistLabelProvider.java | 65 ++++++++++++++----- .../edit/DistributionEditingSupport.java | 43 +++++++----- .../taxeditor/preference/IPreferenceKeys.java | 2 + .../taxeditor/preference/PreferencesUtil.java | 12 ++++ .../wizard/AvailableDistributionPage.java | 1 + 6 files changed, 133 insertions(+), 46 deletions(-) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java index 7cdb3ea6e..8461e0e50 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java @@ -99,6 +99,9 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I */ private static final String CHECKLIST_EDITOR_MEMENTO_KEY = "checklistEditor"; + + + private class ChecklistJob extends Job { private List taxonNodes; @@ -110,6 +113,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I super(title); this.taxonNodes = listTaxonNodes; + } /* @@ -187,6 +191,8 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I private final ICdmEntitySession cdmEntitySession; + private ChecklistLabelProvider labelProvider; + private SortedSet terms = null; private ToolItem toolItem; private ChecklistDropdownSelectionListener dropListener; @@ -213,6 +219,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I */ public ChecklistEditor() { cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); + } /** {@inheritDoc} */ @@ -222,10 +229,10 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I taxonNodeService = CdmStore.getService(ITaxonNodeService.class); selectionService = getSite().getWorkbenchWindow().getSelectionService(); selectionService.addSelectionListener(this); + viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); + labelProvider = new ChecklistLabelProvider(this.viewer); + terms = labelProvider.getNamedAreas(); filter = new ChecklistEditorFilter(); - ChecklistLabelProvider labelProvider = new ChecklistLabelProvider(); - terms = (SortedSet) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(), - CdmStore.getDefaultLanguage()); createTopComposite(parent); loadDataInput(); } @@ -241,7 +248,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I final Text searchText = createSearchBar(parent); createToolbar(parent); - viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); + getSite().setSelectionProvider(viewer); final ModifyListener modifyListener = new ChecklistModifyListener(viewer, filter, searchText); @@ -254,7 +261,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I createTable(); viewer.setContentProvider(new ChecklistContentProvider()); - viewer.setLabelProvider(new ChecklistLabelProvider(viewer)); + viewer.setLabelProvider(this.labelProvider); comparator = new ChecklistEditorComparator(); viewer.setComparator(comparator); @@ -351,19 +358,19 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I column.getColumn().setResizable(true); column.getColumn().setMoveable(true); column.getColumn().addSelectionListener(getSelectionAdapter(column.getColumn(), columnIndex)); - if (columnIndex == 1) { + if (columnIndex == 0) { table.setSortColumn(column.getColumn()); } if (columnIndex == 2) { /** uncommented it for now because no rank editing is wanted **/ // column.setEditingSupport(new RankEditingSupport(viewer, this)); } - if (columnIndex >= 4) { + if (columnIndex >= 3) { //read PrefrenceStore to setWidth according to last saved state if(restoreValuesForColumnWidth.get(columnIndex)){ column.getColumn().setWidth(100); }else{ - column.getColumn().setWidth(0); + column.getColumn().setWidth(100); } column.setEditingSupport(new DistributionEditingSupport(viewer, this, columnIndex)); } @@ -383,11 +390,19 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I List bounds) { Map restoreColumnWidth = new HashMap(); if (terms != null) { - int columnIndex = 4; + int columnIndex = 3; for (DefinedTermBase term : terms) { if(term != null){ restoreColumnWidth.put(columnIndex, PreferencesUtil.getPreferenceStore().getBoolean(term.getUuid().toString())); - titles.add(term.getTitleCache()); + if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){ + if (term.getIdInVocabulary() != null){ + titles.add(term.getIdInVocabulary()); + } else{ + titles.add(term.getTitleCache()); + } + }else{ + titles.add(term.getTitleCache()); + } bounds.add(200); columnIndex++; } @@ -427,7 +442,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I TaxonNode taxonNode = checklistEditorInput.getTaxonNode(); if (classification != null && taxonNode == null) { countNodes = taxonNodeService.countAllNodesForClassification(classification); - statusLabel.setText("Anzahl der Elemente: " + (countNodes != null ? countNodes : "uknown")); + statusLabel.setText("Anzahl der Elemente: " + (countNodes != null ? countNodes : "unknown")); // This should not kill the view nor the editor if something goes // wrong // TODO: don't load the whole taxonNode Object but rather a small @@ -505,9 +520,13 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I Table table = viewer.getTable(); table.setRedraw(false); SortedSet oldTerms = terms; - ChecklistLabelProvider labelProvider = new ChecklistLabelProvider(); - terms = (SortedSet) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(), CdmStore.getDefaultLanguage()); - SortedSet newTerms = terms; + +// if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){ +// +// } else{ +// terms = (SortedSet) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(), CdmStore.getDefaultLanguage()); +// } + SortedSet newTerms = labelProvider.getNamedAreas(); toolItem.removeSelectionListener(dropListener); hideDistributionColumns(oldTerms); createToolbarItems(); @@ -517,7 +536,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I addTableViewerColumn(term.getTitleCache(), 200, count); acitivateNewColumnInDropDownMenu(term); } - viewer.setLabelProvider(new ChecklistLabelProvider(viewer)); + viewer.setLabelProvider(labelProvider); getService().schedule(new ChecklistJob("loading Taxa", selectedTaxonNodes), Job.LONG); table.setRedraw(true); viewer.refresh(); @@ -793,4 +812,11 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I // TODO Auto-generated method stub return null; } + + /** + * @return the labelProvider + */ + public ChecklistLabelProvider getLabelProvider() { + return labelProvider; + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistLabelProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistLabelProvider.java index 0ae5336b3..56c931a56 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistLabelProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistLabelProvider.java @@ -12,7 +12,9 @@ package eu.etaxonomy.taxeditor.editor.view.checklist; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.UUID; @@ -29,6 +31,7 @@ import eu.etaxonomy.cdm.api.service.ITermService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.DefinedTermBase; import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.TermIdInVocabularyComparator; import eu.etaxonomy.cdm.model.common.TermLanguageComparator; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.cdm.model.description.Distribution; @@ -48,7 +51,7 @@ public class ChecklistLabelProvider extends LabelProvider implements ITableLabel public static final String DEFAULT_ENTRY = ""; private IDescriptionService descriptionService; - private final List> namedAreas; + private final SortedSet namedAreas; TableViewer viewer = null; /** @@ -92,17 +95,17 @@ public class ChecklistLabelProvider extends LabelProvider implements ITableLabel //TODO load areas by this list List listTaxonDescriptions = descriptionService.listTaxonDescriptions(taxon, null, null, null, null, null, DESC_INIT_STRATEGY);; - NonViralName nonVirlaName = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class); + NonViralName nonViralName = HibernateProxyHelper.deproxy(taxon.getName(), NonViralName.class); switch (columnIndex) { case 0: String taxonName = null; - taxonName = (nonVirlaName != null) ? nonVirlaName.getNameCache() : null; + taxonName = (nonViralName != null) ? nonViralName.getNameCache() : null; return (taxonName != null) ? taxonName : DEFAULT_ENTRY; case 1: String authorship = null; - authorship = (nonVirlaName != null) ? nonVirlaName.getAuthorshipCache() : null; + authorship = (nonViralName != null) ? nonViralName.getAuthorshipCache() : null; return (authorship != null) ? authorship : DEFAULT_ENTRY; // case 2: // String ref = null; @@ -125,13 +128,24 @@ public class ChecklistLabelProvider extends LabelProvider implements ITableLabel for (TaxonDescription td : listTaxonDescriptions) { for (DescriptionElementBase deb : td.getElements()) { if (deb instanceof Distribution) { - Distribution distribution = (Distribution) deb; - String area = distribution.toString(); + Distribution distribution = HibernateProxyHelper.deproxy(deb, Distribution.class); + String area = null; + if (distribution.getArea() != null ){ + if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){ + area = distribution.getArea().getIdInVocabulary(); + }else{ + area = distribution.getArea().getTitleCache(); + } + }else{ + continue; + } + if(viewer != null){ TableColumn column = viewer.getTable().getColumn(columnIndex); if (area.equalsIgnoreCase(column.getText())) { - return (distribution.getStatus().getTitleCache() != null)?distribution.getStatus().getTitleCache():DEFAULT_ENTRY; - } + return (distribution.getStatus().getTitleCache() != null)?distribution.getStatus().getTitleCache():DEFAULT_ENTRY; + } + } } } @@ -145,20 +159,24 @@ public class ChecklistLabelProvider extends LabelProvider implements ITableLabel "descriptions.*", "description.state" }); - private List> loadNamedAreas() { + private SortedSet loadNamedAreas() { IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore(); String values = preferenceStore.getString(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS); if (values != null && values != "") { String[] split = values.split(","); List listValue = Arrays.asList(split); - ArrayList> termlist = new ArrayList>(); + List termlist = new ArrayList(); + Set uuidList = new HashSet(); + UUID uuid; for(String s : listValue){ - UUID uuid = UUID.fromString(s); - ITermService service = CdmStore.getService(ITermService.class); - DefinedTermBase definedTermBase = service.load(uuid); - termlist.add(definedTermBase); + uuid = UUID.fromString(s); + uuidList.add(uuid); + } - return termlist; + ITermService service = CdmStore.getService(ITermService.class); + termlist = service.find(uuidList); + + return getTermsOrderedByIdInVocabulary(termlist); } return null; } @@ -176,7 +194,22 @@ public class ChecklistLabelProvider extends LabelProvider implements ITableLabel /** * @return the namedAreas */ - public List> getNamedAreas() { + public SortedSet getNamedAreas() { return namedAreas; } + + /** + * @param namedAreas + * @param defaultLanguage + * @return + */ + public SortedSet getTermsOrderedByIdInVocabulary(List namedAreas) { + TermIdInVocabularyComparator comp = new TermIdInVocabularyComparator(); + + SortedSet result = new TreeSet(comp); + if(namedAreas != null){ + result.addAll(namedAreas); + } + return result; + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/edit/DistributionEditingSupport.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/edit/DistributionEditingSupport.java index 4f0f7f5f2..80153af57 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/edit/DistributionEditingSupport.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/edit/DistributionEditingSupport.java @@ -26,7 +26,7 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.cdm.model.location.NamedArea; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor; -import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistLabelProvider; +import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.CdmStore; public final class DistributionEditingSupport extends EditingSupport { @@ -71,7 +71,7 @@ public final class DistributionEditingSupport extends EditingSupport { Taxon taxon = (Taxon) element; Distribution distributionForColumn = getDistributionForColumn(taxon); if (distributionForColumn != null) { - distributionForColumn.getStatus().getTitleCache(); + return distributionForColumn.getStatus().getTitleCache(); } // return PresenceAbsenceTerms } @@ -91,9 +91,9 @@ public final class DistributionEditingSupport extends EditingSupport { createDistributionForColumn(taxon, occurenceStatus); } // viewer.update(distribution, null); - viewer.update(element, null); - viewer.refresh(); - editor.setDirty(true); +// viewer.update(element, null); +// viewer.refresh(); +// editor.setDirty(true); editor.changed(element); viewer.refresh(); } @@ -115,8 +115,16 @@ public final class DistributionEditingSupport extends EditingSupport { for (DescriptionElementBase deb : td.getElements()) { if (deb instanceof Distribution) { Distribution distribution = (Distribution) deb; - if (column.getText().equalsIgnoreCase(distribution.getArea().getTitleCache())) { - return distribution; + if (distribution.getArea() != null){ + if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){ + if (column.getText().equalsIgnoreCase(distribution.getArea().getIdInVocabulary())) { + return distribution; + } + }else{ + if (column.getText().equalsIgnoreCase(distribution.getArea().getTitleCache())) { + return distribution; + } + } } } } @@ -127,18 +135,22 @@ public final class DistributionEditingSupport extends EditingSupport { private void createDistributionForColumn(Taxon taxon, PresenceAbsenceTerm occurenceStatus) { TableColumn column = viewer.getTable().getColumn(columnIndex); - ChecklistLabelProvider labelProvider = new ChecklistLabelProvider(); - List> namedAreas = labelProvider.getNamedAreas(); - SortedSet> terms = (SortedSet>) labelProvider.getTermsOrderedByLabels( - namedAreas, CdmStore.getDefaultLanguage()); + SortedSet namedAreas = this.editor.getLabelProvider().getNamedAreas(); - if (terms != null) { - for (DefinedTermBase term : terms) { - if (column.getText().equalsIgnoreCase(term.getTitleCache())) { + + if (namedAreas != null) { + for (DefinedTermBase term : namedAreas) { + boolean sameArea = true; + if (!PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){ + sameArea = column.getText().equalsIgnoreCase(term.getTitleCache()); + } else{ + sameArea = column.getText().equalsIgnoreCase(term.getIdInVocabulary()); + } + if (sameArea) { NamedArea area = (NamedArea) term; Distribution distribution = Distribution.NewInstance(area, occurenceStatus); Set descriptions = taxon.getDescriptions(); - if (descriptions != null) { + if (!descriptions.isEmpty()) { for (TaxonDescription desc : descriptions) { // add to first taxon description desc.addElement(distribution); @@ -147,6 +159,7 @@ public final class DistributionEditingSupport extends EditingSupport { } else {// there are no TaxonDescription yet. TaxonDescription td = TaxonDescription.NewInstance(taxon); td.addElement(distribution); + break; } } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java index bba640bed..272244e78 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java @@ -151,6 +151,8 @@ public interface IPreferenceKeys { public static final String DISTRIBUTION_AREA_OCCURENCE_STATUS_GRAYED = "eu.etaxonomy.taxeditor.checklist.distributionAreaStatusGrayed"; + public static final String CHECKLIST_ID_IN_VOCABULARY = "eu.etaxonomy.taxeditor.checklist.checklistIdInVocabulary"; + public static final String SHOW_ADVANCED_MEDIA_SECTION = "eu.etaxonomy.taxeditor.media.showAdvancedMedia"; public static final String SHOW_SIMPLE_NAME_DETAILS_SECTION = "eu.etaxonomy.taxeditor.name.showSimpleName"; diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java index 4b91378f2..3fe7ed44b 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java @@ -80,6 +80,8 @@ public class PreferencesUtil implements IPreferenceKeys { public static final String P2_REPOSITORIES_DELIM = ","; public static final String P2_REPOSITORY_FIELDS_DELIM = ";"; + + /** *

* getPreferenceStore @@ -397,6 +399,7 @@ public class PreferencesUtil implements IPreferenceKeys { getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_WIDTH, "1000"); getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_HEIGHT, "1000"); getPreferenceStore().setDefault(IPreferenceKeys.DISTRIBUTION_AREA_PREFRENCES_ACTIVE, false); + getPreferenceStore().setDefault(CHECKLIST_ID_IN_VOCABULARY, true); } /** @@ -836,6 +839,15 @@ public class PreferencesUtil implements IPreferenceKeys { getPreferenceStore().setValue(IS_SHOW_UP_WIDGET_IS_DISPOSED, selection); } + /** + * @return + */ + public static boolean isShowIdInVocabularyInChecklistEditor() { + return getPreferenceStore().getBoolean(IPreferenceKeys.CHECKLIST_ID_IN_VOCABULARY); + } + public static void setShowIdInVocabularyInChecklistEditor(boolean selection) { + getPreferenceStore().setValue(CHECKLIST_ID_IN_VOCABULARY, selection); + } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/AvailableDistributionPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/AvailableDistributionPage.java index b53b064e5..32eebc475 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/AvailableDistributionPage.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/AvailableDistributionPage.java @@ -247,6 +247,7 @@ public class AvailableDistributionPage extends WizardPage implements ICdmEntityS this.viewer.setGrayed(element, false); int length = tcp.getChildren(element).length; if(length>1){ + this.viewer.expandToLevel(element, CheckboxTreeViewer.ALL_LEVELS); this.viewer.setSubtreeChecked(element, checked); } } -- 2.34.1