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;
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;
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;
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;
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
private ConversationHolder conversation;
private ICdmEntitySession cdmEntitySession;
- private Composite composite;
private TermVocabulary vocabulary;
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);
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);
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);
}
+ 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));
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);
}
}
@Override
public void refresh(){
- structuresTreeEditorComposite.getViewer().refresh();
- propertiesTreeEditorComposite.getViewer().refresh();
characterTreeEditorComposite.getViewer().setInput(characterTreeEditorComposite.getViewer().getInput());
}
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;
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();
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;
+ }
+
}