fix #8755 Show all structure/property trees in CharacterEditor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 9 Dec 2019 17:16:28 +0000 (18:16 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 9 Dec 2019 17:16:56 +0000 (18:16 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/CharacterTransfer.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/AbstractTermTreeEditor.java

index 1e74c87b1b77d91b91eb189ce0071b07979f5441..53046d3fb00f7f92c8263219e290a3aa2613e2fe 100644 (file)
@@ -36,8 +36,10 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -59,8 +61,8 @@ import eu.etaxonomy.cdm.api.service.ITermTreeService;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.description.Character;
 import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.term.DefinedTerm;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
@@ -68,9 +70,13 @@ import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.AppModelId;
+import eu.etaxonomy.taxeditor.editor.definedterm.FeatureTreeViewerComparator;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
+import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureNodeDragListener;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDropAdapter;
 import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditorComposite;
@@ -80,7 +86,6 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
@@ -97,8 +102,6 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         ModifyListener, IE4ViewerPart, IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
 
     private FeatureTreeEditorComposite<Character> characterTreeEditorComposite;
-    private FeatureTreeEditorComposite<DefinedTermBase> propertiesTreeEditorComposite;
-    private FeatureTreeEditorComposite<DefinedTermBase> structuresTreeEditorComposite;
     private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
 
     @Inject
@@ -113,7 +116,6 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
     private ConversationHolder conversation;
 
     private ICdmEntitySession cdmEntitySession;
-    private Composite composite;
 
     private TermVocabulary vocabulary;
 
@@ -170,19 +172,14 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         formToolkit.adapt(sashForm);
         formToolkit.paintBordersFor(sashForm);
 
-        composite = new Composite(sashForm, SWT.NONE);
+        Composite composite = new Composite(sashForm, SWT.NONE);
         formToolkit.adapt(composite);
         formToolkit.paintBordersFor(composite);
         GridLayout gl_composite = new GridLayout(1, false);
         gl_composite.marginWidth = 0;
         composite.setLayout(gl_composite);
 
-        structuresTreeEditorComposite = addFeatureTreeEditor(composite);
-
-        initFeatureTreeComposite(TermType.Structure, structuresTreeEditorComposite,
-                new FeatureNodeDragListener(structuresTreeEditorComposite.getViewer()), null, null, null, null);
-
-        structuresTreeEditorComposite.getLabel_title().setText(Messages.CharacterEditor_STRUCTURES);
+        TreeViewer structureViewer = createTreeViewer(composite, TermType.Structure);
 
         Composite composite_1 = new Composite(sashForm, SWT.NONE);
         formToolkit.adapt(composite_1);
@@ -191,16 +188,11 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
         gl_composite_1.marginWidth = 0;
         composite_1.setLayout(gl_composite_1);
 
-        propertiesTreeEditorComposite = addFeatureTreeEditor(composite_1);
-        initFeatureTreeComposite(TermType.Property, propertiesTreeEditorComposite,
-                new CharacterDragListener(structuresTreeEditorComposite.getViewer(), propertiesTreeEditorComposite.getViewer()),
-                null,
-                new Transfer[] {CharacterTransfer.getInstance()},
-                null,
-                null
+        TreeViewer propertyViewer = createTreeViewer(composite_1, TermType.Property);
 
-        );
-        propertiesTreeEditorComposite.getLabel_title().setText(Messages.CharacterEditor_PROPERTIES);
+        int ops = DND.DROP_COPY | DND.DROP_MOVE;
+        Transfer[] transfers = new Transfer[] {CharacterTransfer.getInstance()};
+        propertyViewer.addDragSupport(ops, transfers, new CharacterDragListener(structureViewer, propertyViewer));
 
         Composite composite_3 = new Composite(sashForm, SWT.NONE);
         formToolkit.adapt(composite_3);
@@ -218,8 +210,8 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
                 if(!isVocabularySet()){
                     return;
                 }
-                ISelection structureTreeSelection = structuresTreeEditorComposite.getViewer().getSelection();
-                ISelection propertyTreeSelection = propertiesTreeEditorComposite.getViewer().getSelection();
+                ISelection structureTreeSelection = structureViewer.getSelection();
+                ISelection propertyTreeSelection = propertyViewer.getSelection();
                 if(structureTreeSelection==null || propertyTreeSelection==null || characterTreeEditorComposite.getFeatureTree()==null){
                     MessagingUtils.warningDialog(Messages.CharacterEditor_CANNOT_PERFORM_TITLE, CharacterEditor.this,
                             Messages.CharacterEditor_CANNOT_PERFORM_MESSAGE);
@@ -251,6 +243,22 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
 
     }
 
+    private TreeViewer createTreeViewer(Composite parent, TermType termType) {
+        Composite composite = new Composite(parent, SWT.NONE);
+        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+        composite.setLayout(new GridLayout(1, false));
+        Label label = new Label(composite, SWT.NONE);
+        label.setText(termType.getMessage());
+        TreeViewer viewer = new TreeViewer(composite);
+        viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+        viewer.setContentProvider(new FeatureTreeContentProvider());
+        viewer.setLabelProvider(new FeatureTreeLabelProvider());
+        viewer.setComparator(new FeatureTreeViewerComparator());
+        viewer.addSelectionChangedListener(this);
+        viewer.setInput(CdmStore.getService(ITermTreeService.class).list(termType, null, null, null, AbstractTermTreeEditor.TREE_PROPERTY_PATH));
+        return viewer;
+    }
+
     private <T extends DefinedTermBase> FeatureTreeEditorComposite<T> addFeatureTreeEditor(Composite composite_3) {
         FeatureTreeEditorComposite<T> featureTreeEditorComposite = new FeatureTreeEditorComposite<>(composite_3, SWT.NONE);
         featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
@@ -291,26 +299,15 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
     public static Collection<Character> createCharacters(TreeSelection structureTreeSelection, TreeSelection propertyTreeSelection){
         Set<Character> characters = new HashSet<>();
         //get selected structures and properties
-        Iterator<TermNode<DefinedTermBase>> structureIterator = structureTreeSelection.iterator();
+        Iterator<TermNode<DefinedTerm>> structureIterator = structureTreeSelection.iterator();
 
         //create all combinations of structures and properties
         while(structureIterator.hasNext()){
-            TermNode<DefinedTermBase> structureNode = structureIterator.next();
-            Iterator<TermNode<DefinedTermBase>> propertiesIterator = propertyTreeSelection.iterator();
+            TermNode<DefinedTerm> structureNode = structureIterator.next();
+            Iterator<TermNode<DefinedTerm>> propertiesIterator = propertyTreeSelection.iterator();
             while(propertiesIterator.hasNext()){
-                TermNode<DefinedTermBase> propertyNode = propertiesIterator.next();
-                Representation structureRepresentation = structureNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
-                Representation propertyRepresentation = propertyNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
-                String label = null;
-                String abbrevLabel = null;
-                if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
-                    label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
-                }
-                if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
-                    abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
-                }
-                //create new Character
-                Character character = Character.NewInstance(structureNode, propertyNode, null, label, abbrevLabel);
+                TermNode<DefinedTerm> propertyNode = propertiesIterator.next();
+                Character character = CharacterTransfer.createCharacter(structureNode, propertyNode);
                 characters.add(character);
             }
         }
@@ -439,8 +436,6 @@ public class CharacterEditor implements IFeatureTreeEditor,IConversationEnabled,
 
     @Override
     public void refresh(){
-        structuresTreeEditorComposite.getViewer().refresh();
-        propertiesTreeEditorComposite.getViewer().refresh();
         characterTreeEditorComposite.getViewer().setInput(characterTreeEditorComposite.getViewer().getInput());
     }
 
index c4f614b51e8271bd1041c89a73ba85fb4408f1dc..766f719f894e4b17a761de69f4d6c7695119bdfa 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.swt.dnd.ByteArrayTransfer;
 import org.eclipse.swt.dnd.TransferData;
 
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
+import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.description.Character;
 import eu.etaxonomy.cdm.model.term.DefinedTerm;
 import eu.etaxonomy.cdm.model.term.Representation;
@@ -103,17 +104,7 @@ public class CharacterTransfer extends ByteArrayTransfer {
                         IFeatureNodeService featureNodeService = CdmStore.getService(IFeatureNodeService.class);
                         TermNode<DefinedTerm> structure = featureNodeService.load(UUID.fromString(split[0]));
                         TermNode<DefinedTerm> property = featureNodeService.load(UUID.fromString(split[1]));
-                        Representation structureRepresentation = structure.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
-                        Representation propertyRepresentation = property.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
-                        String label = null;
-                        String abbrevLabel = null;
-                        if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
-                            label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
-                        }
-                        if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
-                            abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
-                        }
-                        characters.add(Character.NewInstance(structure, property, null, label, abbrevLabel));
+                        characters.add(createCharacter(structure, property));
                     }
                 }catch(EOFException e){
                     return characters.toArray();
@@ -125,4 +116,33 @@ public class CharacterTransfer extends ByteArrayTransfer {
         return null;
     }
 
+    public static Character createCharacter(TermNode<DefinedTerm> structureNode,
+            TermNode<DefinedTerm> propertyNode) {
+        Representation structureRepresentation = structureNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
+        if(structureRepresentation==null){
+            structureRepresentation = structureNode.getTerm().getRepresentation(Language.DEFAULT());
+        }
+        Representation propertyRepresentation = propertyNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
+        if(propertyRepresentation==null){
+            propertyRepresentation = propertyNode.getTerm().getRepresentation(Language.DEFAULT());
+        }
+        String label = null;
+        String abbrevLabel = null;
+        if(structureRepresentation!=null && propertyRepresentation!=null){
+            if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
+                label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
+            }
+            if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
+                abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
+            }
+        }
+        if(label!=null){
+            //default label
+            label = structureNode.getTerm().getLabel()+" "+propertyNode.getTerm().getLabel();
+        }
+        //create new Character
+        Character character = Character.NewInstance(structureNode, propertyNode, null, label, abbrevLabel);
+        return character;
+    }
+
 }
index cda46955b1d4a2468b9b4f97d7b92ac1b8df8515..a525a4bf53e989d1d99f5e7aa326169f476bc1cb 100644 (file)
@@ -79,7 +79,7 @@ public abstract class AbstractTermTreeEditor implements IFeatureTreeEditor, ISel
         IE4ViewerPart, IPartContentHasDetails, IPartContentHasSupplementalData,
         IContextListener, IConversationEnabled, IDirtyMarkable {
 
-    protected static final List<String> TREE_PROPERTY_PATH = Arrays.asList(new String[] {
+    public static final List<String> TREE_PROPERTY_PATH = Arrays.asList(new String[] {
             "root", //$NON-NLS-1$
             "root.children", //$NON-NLS-1$
             "root.children.inapplicableIf", //$NON-NLS-1$