taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/DeleteNodeHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroupedContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ContainerFactory.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/EditorAnnotation.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalSynonymGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineBreakListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSquigglesStrategy.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSupport.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisapplicationContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragSourceEffect.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetEffect.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymContainer.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractHomotypicalGroupContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedNameContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ContainerFactory.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/EditorAnnotation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/HomotypicalSynonymGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/IContainerConstants.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineBreakListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSquigglesStrategy.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSupport.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisapplicationContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisappliedGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/NameViewer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/RulerWithIcon.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/SynonymContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragSourceEffect.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetEffect.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetListener.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/AbstractDynamicConceptRelationMenu.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeAcceptedTaxonToSynonymHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeHandler.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationContentProvider.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationLabelProvider.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/EmptyRoot.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/IterableSynonymyList.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymContentProvider.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymLabelProvider.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/ContextManager.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreStateManager.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
*
* @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
*/
- public TaxonNameEditor getNameEditor();
+ public TaxonNameEditor getEditor();
/**
* <p>dragEntered</p>
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
// setDirty(true);
dirty = true;
super.editorDirtyStateChanged();
- TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
- page.getSelectedObject().refresh();
+ if(element instanceof TaxonBase){
+ TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
+ AbstractGroupedContainer container = page.getContainer((TaxonBase) element);
+ if(container != null){
+ container.refresh();
+ }
+ }
}
/**
+++ /dev/null
-/**
- *
- */
-package eu.etaxonomy.taxeditor.editor.name;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-
-/**
- * <p>ContainerFactory class.</p>
- *
- * @author n.hoffmann
- * @version $Id: $
- */
-public class ContainerFactory {
-
- /** Constant <code>ACCEPTED=1</code> */
- public static final int ACCEPTED = 1;
- /** Constant <code>SYNONYM=2</code> */
- public static final int SYNONYM = 2;
- /** Constant <code>MISAPPLICATION=3</code> */
- public static final int MISAPPLICATION = 3;
- /** Constant <code>CONCEPT=4</code> */
- public static final int CONCEPT = 4;
-
- private static ContainerFactory instance = new ContainerFactory();
-
- private ContainerFactory(){}
-
- /**
- * <p>Getter for the field <code>instance</code>.</p>
- *
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.ContainerFactory} object.
- */
- public static synchronized ContainerFactory getInstance(){
- return instance;
- }
-
- /**
- * <p>createAcceptedTaxonsHomotypicGroup</p>
- *
- * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- */
- public void createAcceptedTaxonsHomotypicGroup(TaxonNameEditor taxonNameEditor) {
- Taxon taxon = taxonNameEditor.getTaxon();
-
- // Draw homotypic group synonyms
- HomotypicalGroup homotypicGroup = (HomotypicalGroup) HibernateProxyHelper.deproxy(taxon.getHomotypicGroup());
- List<Synonym> homotypicSynonyms = homotypicGroup.getSynonymsInGroup(taxon.getSec());
-
- HomotypicalSynonymGroup group = taxonNameEditor.getHomotypicSynonymGroup();
-
- // check if the taxon has changed
- if(group != null && ! taxon.getHomotypicGroup().equals(group.getGroup()) ){
- group.removeAllContainers();
- group.clear();
- group = null;
- }
-
- // first run
- if(group == null){
- HomotypicalSynonymGroup homotypicalSynonymGroup = new HomotypicalSynonymGroup(taxonNameEditor, homotypicGroup);
- taxonNameEditor.setHomotypicSynonymGroup(homotypicalSynonymGroup);
- AcceptedNameContainer acceptedNameContainer = new AcceptedNameContainer(taxonNameEditor, homotypicalSynonymGroup);
-
- taxonNameEditor.setAcceptedNameContainer(acceptedNameContainer);
- for(Synonym synonym : homotypicSynonyms){
- createContainerFactoryMethod(SYNONYM, homotypicalSynonymGroup, synonym, taxonNameEditor);
- }
- }
- // subsequent runs
- else{
- fillGroup(group, homotypicSynonyms, ACCEPTED, taxonNameEditor);
- }
- }
-
- /**
- * <p>createHeterotypicSynonymGroups</p>
- *
- * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- */
- public void createHeterotypicSynonymGroups(TaxonNameEditor taxonNameEditor) {
- Taxon taxon = taxonNameEditor.getTaxon();
-
- List<HomotypicalGroup> homotypicalGroups = taxon.getHeterotypicSynonymyGroups();
-
- // reatins a reference to the homotypical group widgets
- Map<HomotypicalGroup, HomotypicalSynonymGroup> retainedGroups = taxonNameEditor.getHeterotypicSynonymGroupsMap();
-
- taxonNameEditor.clearHeterotypicSynonymGroups();
-
- // iterate over taxas synonymy groups
- for (HomotypicalGroup homotypicalGroup : homotypicalGroups) {
- HomotypicalGroup homotypicalGroupDeproxied = (HomotypicalGroup) HibernateProxyHelper.deproxy(homotypicalGroup);
-
- HomotypicalSynonymGroup group;
- if(retainedGroups.containsKey(homotypicalGroupDeproxied)){
- group = retainedGroups.get(homotypicalGroupDeproxied);
- retainedGroups.remove(homotypicalGroupDeproxied);
- }else{
- group = new HomotypicalSynonymGroup(taxonNameEditor, homotypicalGroupDeproxied);
- }
-
- createHeterotypicSynonymGroup(taxonNameEditor, group);
- taxonNameEditor.addHeterotypicSynonymGroup(group);
- }
-
- // remove all groups that did not match
- for(AbstractGroup group : retainedGroups.values()){
- group.clear();
- }
- }
-
- /**
- * <p>createMisapplicationGroup</p>
- *
- * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- */
- public void createMisapplicationGroup(TaxonNameEditor taxonNameEditor) {
- Taxon taxon = taxonNameEditor.getTaxon();
-
- List<TaxonBase> content = new ArrayList<TaxonBase>(taxon.getMisappliedNames());
-
- if(content.size() == 0 && taxonNameEditor.getMisappliedGroup() != null){
- taxonNameEditor.getMisappliedGroup().clear();
- taxonNameEditor.setMisapplicationsGroup(null);
- }else{
- AbstractGroup group = getMisappliedGroup(taxonNameEditor);
- fillGroup(group, content, MISAPPLICATION, taxonNameEditor);
- }
- }
-
- /**
- * <p>createConceptGroup</p>
- *
- * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- */
- public void createConceptGroup(TaxonNameEditor taxonNameEditor) {
- Taxon taxon = taxonNameEditor.getTaxon();
-
- Set<TaxonRelationship> filteredTaxonRelations = new HashSet<TaxonRelationship>();
-
- for (TaxonRelationship relationship : taxon.getTaxonRelations()) {
- if (! relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) ||
- relationship.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {
- filteredTaxonRelations.add(relationship);
- }
- }
-
- if(filteredTaxonRelations.size() == 0 && taxonNameEditor.getConceptGroup() != null){
- taxonNameEditor.getConceptGroup().clear();
- taxonNameEditor.setConceptGroup(null);
- }else{
- ConceptGroup group = getConceptGroup(taxonNameEditor);
-
- // reatain old container
- List<AbstractGroupedContainer<Taxon>> groupedContainers = group.getGroupedContainers();
-
- group.removeAllContainers();
-
- // Draw concept relation elements
- for (TaxonRelationship relationship : filteredTaxonRelations) {
- ConceptContainer.getNewInstance(group.getNameEditor(), group, relationship);
- }
- }
- }
-
-
- /**
- * <p>fillGroup</p>
- *
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
- * @param content a {@link java.util.List} object.
- * @param mode a int.
- * @param taxonNameEditor
- */
- public void fillGroup(AbstractGroup group, List<? extends TaxonBase> content, int mode, TaxonNameEditor taxonNameEditor){
- if(content == null || (mode != ACCEPTED && content.size() == 0)){
- return;
- }
-
- AbstractGroupedContainer[] retainedContainers = (AbstractGroupedContainer[]) group.getGroupedContainers().toArray(new AbstractGroupedContainer[0]);
-
- group.clearContainers();
-
- if(retainedContainers.length > 0 && retainedContainers[0] instanceof AcceptedNameContainer){
- group.add(retainedContainers[0]);
- retainedContainers[0] = null;
- }
-
- for(TaxonBase taxonBase : content){
- AbstractGroupedContainer existingContainer = null;
- int i = 0;
- for(AbstractGroupedContainer container : retainedContainers){
- if(container != null && taxonBase.equals(container.getData())){
- existingContainer = container;
- retainedContainers[i] = null;
- }
- i++;
- }
- if(existingContainer != null){
- group.add(existingContainer);
- }else{
- createContainerFactoryMethod(mode == ACCEPTED ? SYNONYM : mode, group, taxonBase, taxonNameEditor);
- }
- }
-
- // delete all container that were not used
- for(AbstractGroupedContainer container : retainedContainers){
- if(container != null){
- group.deleteContainer(container);
- }
- }
- }
-
- /**
- * <p>createContainerFactoryMethod</p>
- *
- * @param mode a int.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
- * @param taxonBase a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object.
- * @param taxonNameEditor
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
- */
- public AbstractGroupedContainer createContainerFactoryMethod(int mode, AbstractGroup group, TaxonBase taxonBase, TaxonNameEditor taxonNameEditor){
- AbstractGroupedContainer container = null;
-
- switch(mode){
- case ACCEPTED:
- container = new AcceptedNameContainer(group.getNameEditor(), group);
- break;
- case SYNONYM:
- container = new SynonymContainer(group.getNameEditor(), group, (Synonym) taxonBase);
- break;
- case MISAPPLICATION:
- container = new MisapplicationContainer(group.getNameEditor(), group, (Taxon) taxonBase);
- break;
- case CONCEPT:
- container = null;
- }
-
- taxonNameEditor.getManagedForm().addPart(container);
-
- return container;
- }
-
- /**
- * <p>createHeterotypicSynonymGroup</p>
- *
- * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
- */
- public void createHeterotypicSynonymGroup(TaxonNameEditor taxonNameEditor, HomotypicalSynonymGroup group) {
- Taxon taxon = taxonNameEditor.getTaxon();
-
- List<AbstractGroupedContainer<Synonym>> groupedContainers = group.getGroupedContainers();
-
- List<Synonym> heterotypicSynonyms = group.getGroup().getSynonymsInGroup(taxon.getSec());
-
- fillGroup(group, heterotypicSynonyms, SYNONYM, taxonNameEditor);
- }
-
-
- private MisappliedGroup getMisappliedGroup(TaxonNameEditor editor) {
- if(editor.getMisappliedGroup() == null){
- // Create the group composite
- editor.setMisapplicationsGroup(new MisappliedGroup(editor));
- }
-
- MisappliedGroup misappliedGroup = editor.getMisappliedGroup();
-
- // Put the group composite before concept group composite, if any
- if (editor.getConceptGroup() != null) {
- editor.getMisappliedGroup().getControl().moveAbove(editor.getConceptGroup().getControl());
- }
-
- return misappliedGroup;
- }
-
-
- private ConceptGroup getConceptGroup(TaxonNameEditor editor) {
- if(editor.getConceptGroup() == null){
- // Create the group composite
- editor.setConceptGroup(new ConceptGroup(editor));
- }
-
- ConceptGroup conceptGroup = editor.getConceptGroup();
-
- // Put the group composite after misapplied group composite, if any
- if (editor.getMisappliedGroup() != null) {
- editor.getConceptGroup().getControl().moveBelow(editor.getMisappliedGroup().getControl());
- }
-
- return conceptGroup;
-
- }
-}
+++ /dev/null
-/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-
-package eu.etaxonomy.taxeditor.editor.name;
-
-import java.util.List;
-
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-
-/**
- * <p>HomotypicalSynonymGroup class.</p>
- *
- * @author p.ciardelli
- * @created 13.01.2009
- * @version 1.0
- */
-public class HomotypicalSynonymGroup extends AbstractGroup {
-
- private HomotypicalGroup group;
-
- /**
- * <p>Constructor for HomotypicalSynonymGroup.</p>
- *
- * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
- */
- public HomotypicalSynonymGroup(TaxonNameEditor editor, HomotypicalGroup group) {
- super(editor);
- this.group = group;
- }
-
- /**
- * <p>Getter for the field <code>group</code>.</p>
- *
- * @return a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
- */
- public HomotypicalGroup getGroup() {
- return group;
- }
-
- /** {@inheritDoc} */
- @Override
- public void redraw() {
- List<Synonym> synonyms = getGroup().getSynonymsInGroup(getNameEditor().getTaxon().getSec());
-
- ContainerFactory.getInstance().fillGroup(this, synonyms, ContainerFactory.SYNONYM, editor);
- }
-
- /**
- * <p>onComplete</p>
- *
- * @return a boolean.
- */
- public boolean onComplete() {
- // TODO Auto-generated method stub
- return false;
- }
-}
+++ /dev/null
-/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-
-package eu.etaxonomy.taxeditor.editor.name;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-
-/**
- * <p>MisappliedGroup class.</p>
- *
- * @author p.ciardelli
- * @created 13.01.2009
- * @version 1.0
- */
-public class MisappliedGroup extends AbstractGroup<Taxon> {
-
- /**
- * <p>Constructor for MisappliedGroup.</p>
- *
- * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- */
- public MisappliedGroup(TaxonNameEditor editor) {
- super(editor);
- }
-
- /** {@inheritDoc} */
- @Override
- public void redraw() {
- List<Taxon> misapplications = new ArrayList<Taxon>(editor.getTaxon().getMisappliedNames());
- ContainerFactory.getInstance().fillGroup(this, misapplications, ContainerFactory.MISAPPLICATION, editor);
- }
-
- /**
- * <p>onComplete</p>
- *
- * @return a boolean.
- */
- public boolean onComplete() {
- // TODO Auto-generated method stub
- return false;
- }
-}
package eu.etaxonomy.taxeditor.editor.name;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import org.apache.log4j.Logger;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AcceptedGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.AcceptedNameContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.ContainerFactory;
+import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetListener;
import eu.etaxonomy.taxeditor.model.IPartChangeListener;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled, IPostOperationEnabled, IPartContentHasDetails, IPartChangeListener
, ISelectionListener, IDropTargetable {
- private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);
-
- public class Tupel{
-
- public HomotypicalGroup homotypicalGroup;
- public HomotypicalSynonymGroup group;
-
- public Tupel(HomotypicalGroup homotypicalGroup, HomotypicalSynonymGroup group){
- this.homotypicalGroup = homotypicalGroup;
- this.group = group;
- }
-
- }
-
/** Constant <code>ID="eu.etaxonomy.taxeditor.taxonNameEditor"</code> */
public static final String ID = "eu.etaxonomy.taxeditor.taxonNameEditor";
private MultiPageTaxonEditor editor;
- private AbstractGroupedContainer selectedObject;
-
- private AcceptedNameContainer acceptedNameContainer;
-
+ private TaxonBase selection;
+
private ConversationHolder conversation;
private MenuManager menuManager;
private Menu menu;
-
- private List<Tupel> heterotypicSynonymGroupTupel = new ArrayList<Tupel>();
private MisappliedGroup misappliedGroup;
private ConceptGroup conceptGroup;
+ private List<HomotypicalSynonymGroup> heterotypicSynonymGroups = new ArrayList<HomotypicalSynonymGroup>();
private DropTarget target;
private ISelectionService selectionService;
- private ContainerFactory containerFactory;
+ private AcceptedGroup acceptedGroup;
- private HomotypicalSynonymGroup homotypicalSynonymGroup;
-
- private AbstractGroupedContainer objectAffectedByLastOperation;
+ private TaxonBase objectAffectedByLastOperation;
/**
* <p>Constructor for TaxonNameEditor.</p>
public TaxonNameEditor(MultiPageTaxonEditor editor){
this.editor = editor;
conversation = editor.getConversationHolder();
-
- containerFactory = ContainerFactory.getInstance();
}
}
public boolean setInput(Object input) {
if (input instanceof AbstractGroupedContainer) {
- selectedObject = (AbstractGroupedContainer) input;
- provider.setSelection(new StructuredSelection(selectedObject.getData()));
+ selection = ((AbstractGroupedContainer) input).getData();
+ provider.setSelection(new StructuredSelection(selection));
}
return super.setInput(input);
}
parent.setLayout(layout);
parent.setBackground(EditorUtil.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
- createNameComposites();
+ createOrUpdateNameComposites();
createDragSupport();
/**
* <p>createNameComposites</p>
*/
- protected void createNameComposites(){
- containerFactory.createAcceptedTaxonsHomotypicGroup(this);
-
- containerFactory.createHeterotypicSynonymGroups(this);
+ public void createOrUpdateNameComposites(){
- containerFactory.createMisapplicationGroup(this);
-
- containerFactory.createConceptGroup(this);
-
- // disabling for testing
- for(AbstractGroupedContainer container : getGroupedContainers()){
- container.setMenu(getMenu());
- }
+ ContainerFactory.createOrUpdateAcceptedTaxonsHomotypicGroup(this);
+ ContainerFactory.createOrUpdateHeterotypicSynonymyGroups(this);
+ ContainerFactory.createOrUpdateMisapplicationsGroup(this);
+ ContainerFactory.createOrUpdateConceptGroup(this);
+
// Redraw composite
managedForm.reflow(true);
}
+
+
+
/**
* <p>Getter for the field <code>taxon</code>.</p>
*
/** {@inheritDoc} */
@Override
public void setFocus(){
- getSelectedObject().setSelected();
+ if(getSelectedContainer() == null){
+ throw new IllegalStateException("There should always be a selected object.");
+ }
+ getSelectedContainer().setSelected();
}
/** {@inheritDoc} */
*/
public boolean redraw(boolean focus) {
- createNameComposites();
+ createOrUpdateNameComposites();
if(focus){
setFocus();
return true;
}
- private AbstractGroupedContainer getContainerForData(CdmBase data) {
- if(data == null && (selectedObject != null && ! selectedObject.getControl().isDisposed())){
- return selectedObject;
- }
-
- List<AbstractGroupedContainer> groupedContainers = getGroupedContainers();
- for(AbstractGroupedContainer container : groupedContainers){
- if(container.getData().equals(data)){
- return container;
- }
- }
- return acceptedNameContainer;
- }
/**
* <p>getMultiPageTaxonEditor</p>
redraw(false);
- objectAffectedByLastOperation = getContainerForData(objectAffectedByOperation);
+ if(objectAffectedByOperation instanceof TaxonBase){
+ objectAffectedByLastOperation = (TaxonBase) objectAffectedByOperation;
+ }
return true;
}
-
- private CdmBase getSelectedData() {
- if(selectedObject != null){
- return selectedObject.getData();
- }
- return null;
- }
-
/**
* <p>Getter for the field <code>managedForm</code>.</p>
*
provider = new SimpleSelectionProvider();
getSite().setSelectionProvider(provider);
-
- logger.trace("New Editor instance created.");
}
/**
/**
* <p>Getter for the field <code>acceptedNameContainer</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.AcceptedNameContainer} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AcceptedNameContainer} object.
*/
public AcceptedNameContainer getAcceptedNameContainer() {
- return acceptedNameContainer;
+ return getAcceptedGroup().getAcceptedNameContainer();
}
/**
* <p>getSynonymGroup</p>
*
* @param homotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
*/
- public HomotypicalSynonymGroup getSynonymGroup(HomotypicalGroup homotypicalGroup) {
- if(getHomotypicSynonymGroup() != null && getHomotypicSynonymGroup().getGroup().equals(homotypicalGroup)){
- return getHomotypicSynonymGroup();
- }
-
- for(Tupel tupel : heterotypicSynonymGroupTupel){
- if(tupel.homotypicalGroup.equals(homotypicalGroup)){
- return tupel.group;
+ public HomotypicalSynonymGroup getHomotypicalGroupContainer(HomotypicalGroup homotypicalGroup) {
+ for(HomotypicalSynonymGroup group : getHeterotypicSynonymGroups()){
+ if(group.getGroup().equals(homotypicalGroup)){
+ return group;
}
}
/**
* <p>Getter for the field <code>conceptGroup</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.ConceptGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup} object.
*/
public ConceptGroup getConceptGroup() {
return conceptGroup;
public List<AbstractGroup> getAllGroups(){
List<AbstractGroup> allGroups = new ArrayList<AbstractGroup>();
- allGroups.add(getHomotypicSynonymGroup());
+ allGroups.add(getAcceptedGroup());
allGroups.addAll(getHeterotypicSynonymGroups());
}
- /**
- * <p>removeContainer</p>
- *
- * @param container a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
- */
- public void removeContainer(AbstractGroupedContainer container) {
- container.remove();
- }
-
- /**
- * <p>addCompositeForTaxonBase</p>
- *
- * @param taxonBase a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object.
- * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
- */
- public void addCompositeForTaxonBase(TaxonBase taxonBase, IDropTargetable target) {
-
-// if(target instanceof AbstractGroup){
-// ((AbstractGroup) target).redraw();
-// }else if(target instanceof TaxonNameEditor){
-// if(taxonBase instanceof Synonym){
-// Synonym synonym = (Synonym) taxonBase;
-// HomotypicalSynonymGroup group = new HomotypicalSynonymGroup(this, synonym.getHomotypicGroup());
-// ContainerFactory.getInstance().createHeterotypicSynonymGroup(this, group);
-// }
-// }
-
-// if(taxonBase instanceof Synonym && target instanceof HomotypicalSynonymGroup){
-// new SynonymContainer(this, (HomotypicalSynonymGroup) target, (Synonym) taxonBase);
-// }else if(taxonBase instanceof Synonym && target instanceof TaxonNameEditor){
-// Synonym synonym = (Synonym) taxonBase;
-// HomotypicalSynonymGroup group = new HomotypicalSynonymGroup(this, synonym.getHomotypicGroup());
-//
-// new SynonymContainer(this, group, (Synonym) taxonBase);
-// }
-
-
-
-// else if(target instanceof MisappliedGroup){
-// Taxon taxon = (Taxon) taxonBase;
-//
-// if (taxon.isMisapplication()){
-// containerFactory.createMisapplication(this, taxon);
-// }else if(! taxon.equals(this.taxon)){
-// throw new RuntimeException("Unsupported operands");
-// }
-// }
- }
-
/**
* <p>getNameEditor</p>
*
* @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
*/
- public TaxonNameEditor getNameEditor() {
+ public TaxonNameEditor getEditor() {
return this;
}
/**
* <p>Getter for the field <code>selectedObject</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
*/
- public AbstractGroupedContainer getSelectedObject(){
+ public AbstractGroupedContainer getSelectedContainer(){
+
+ TaxonBase selectedTaxonBase = null;
+
TaxonEditorInput input = (TaxonEditorInput) editor.getEditorInput();
if(input.getInitiallySelectedTaxonBase() != null){
-
- TaxonBase initiallySelectedTaxonBase = input.getInitiallySelectedTaxonBase();
- AbstractGroupedContainer container = getContainerForData(initiallySelectedTaxonBase);
- if(container != null){
-// input.setInitiallySelectedTaxonBase(null);
- return container;
- }
+ selectedTaxonBase = input.getInitiallySelectedTaxonBase();
}else{
- if(selectedObject != null){
- return selectedObject;
+ if(selection != null){
+ selectedTaxonBase = selection;
}
}
- return acceptedNameContainer;
+
+ return (selectedTaxonBase != null) ? getContainer(selectedTaxonBase) : getAcceptedNameContainer();
}
/**
/**
* <p>Setter for the field <code>conceptGroup</code>.</p>
*
- * @param conceptGroup a {@link eu.etaxonomy.taxeditor.editor.name.ConceptGroup} object.
+ * @param conceptGroup a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup} object.
*/
public void setConceptGroup(ConceptGroup conceptGroup) {
this.conceptGroup = conceptGroup;
/**
* <p>setMisapplicationsGroup</p>
*
- * @param misappliedGroup a {@link eu.etaxonomy.taxeditor.editor.name.MisappliedGroup} object.
+ * @param misappliedGroup a {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup} object.
*/
public void setMisapplicationsGroup(MisappliedGroup misappliedGroup) {
this.misappliedGroup = misappliedGroup;
* @return a {@link java.util.List} object.
*/
public List<HomotypicalSynonymGroup> getHeterotypicSynonymGroups(){
- List<HomotypicalSynonymGroup> list = new ArrayList<HomotypicalSynonymGroup>(heterotypicSynonymGroupTupel.size());
-
- for(Tupel tupel : heterotypicSynonymGroupTupel){
- list.add(tupel.group);
- }
-
- return list;
+ return heterotypicSynonymGroups;
}
- /**
- * <p>getHeterotypicSynonymGroupsMap</p>
- *
- * @return a {@link java.util.Map} object.
- */
- public Map<HomotypicalGroup, HomotypicalSynonymGroup> getHeterotypicSynonymGroupsMap(){
- Map<HomotypicalGroup, HomotypicalSynonymGroup> map = new HashMap<HomotypicalGroup, HomotypicalSynonymGroup>(heterotypicSynonymGroupTupel.size());
-
- for(Tupel tupel : heterotypicSynonymGroupTupel){
- map.put(tupel.homotypicalGroup, tupel.group);
- }
-
- return map;
- }
-
- /**
- * <p>clearHeterotypicSynonymGroups</p>
- */
- public void clearHeterotypicSynonymGroups(){
- heterotypicSynonymGroupTupel.clear();
- }
/**
* <p>addHeterotypicSynonymGroup</p>
*
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
*/
public void addHeterotypicSynonymGroup(HomotypicalSynonymGroup group) {
- heterotypicSynonymGroupTupel.add(new Tupel(group.getGroup(), group));
+ heterotypicSynonymGroups.add(group);
}
- /**
- * <p>removeHeterotypicSynonymGroup</p>
- *
- * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
- */
- public void removeHeterotypicSynonymGroup(HomotypicalGroup group) {
- Tupel shouldBeRemoved = null;
- for(Tupel tupel : heterotypicSynonymGroupTupel){
- if(tupel.group.equals(group)){
- shouldBeRemoved = tupel;
- break;
- }
- }
-
- if(shouldBeRemoved != null){
- heterotypicSynonymGroupTupel.remove(shouldBeRemoved);
- }
- }
-
-
-
/**
* <p>getHomotypicSynonymGroup</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
*/
- public HomotypicalSynonymGroup getHomotypicSynonymGroup() {
- return homotypicalSynonymGroup;
+ public AcceptedGroup getAcceptedGroup() {
+ return acceptedGroup;
}
/**
- * <p>setHomotypicSynonymGroup</p>
- *
- * @param homotypicalSynonymGroup a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
- */
- public void setHomotypicSynonymGroup(
- HomotypicalSynonymGroup homotypicalSynonymGroup) {
- this.homotypicalSynonymGroup = homotypicalSynonymGroup;
- }
-
- /**
- * <p>Setter for the field <code>acceptedNameContainer</code>.</p>
- *
- * @param acceptedNameContainer a {@link eu.etaxonomy.taxeditor.editor.name.AcceptedNameContainer} object.
+ *
+ * @param acceptedGroup
*/
- public void setAcceptedNameContainer(
- AcceptedNameContainer acceptedNameContainer) {
- this.acceptedNameContainer = acceptedNameContainer;
+ public void setAcceptedGroup(
+ AcceptedGroup acceptedGroup) {
+ this.acceptedGroup = acceptedGroup;
}
/**
* <p>Getter for the field <code>misappliedGroup</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.MisappliedGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup} object.
*/
public MisappliedGroup getMisappliedGroup() {
return misappliedGroup;
* @return a boolean.
*/
public boolean onComplete() {
- objectAffectedByLastOperation.setSelected();
+ getContainer(objectAffectedByLastOperation).setSelected();
return true;
}
// getSelectedObject().colorSelected(AbstractGroupedContainer.SELECTED_NO_FOCUS);
}
}
+
+
+
+ /**
+ * @param retainedGroup
+ */
+ public void removeGroup(AbstractGroup group) {
+ if(group != null){
+ group.dispose();
+ getHeterotypicSynonymGroups().remove(group);
+ }
+ }
+
+
+
+ /**
+ * @param element
+ * @return
+ */
+ public AbstractGroupedContainer getContainer(TaxonBase taxonBase) {
+ List<AbstractGroupedContainer> groupedContainers = getGroupedContainers();
+ for(AbstractGroupedContainer container : groupedContainers){
+ if(container.getData().equals(taxonBase) && container.getNameViewer().getTextWidget() != null){
+ return container;
+ }
+ }
+ return getAcceptedNameContainer();
+ }
}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import java.util.ArrayList;
import java.util.List;
-import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.IDropTargetable;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetEffect;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetListener;
import eu.etaxonomy.taxeditor.preference.Resources;
/**
* @created 25.06.2008
* @version 1.0
*/
-public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargetable{
+public abstract class AbstractGroup implements IDropTargetable{
private Composite control;
- private List<AbstractGroupedContainer<T>> groupedContainers = new ArrayList<AbstractGroupedContainer<T>>();
+ private List<AbstractGroupedContainer> groupedContainers = new ArrayList<AbstractGroupedContainer>();
protected TaxonNameEditor editor;
*/
public AbstractGroup(TaxonNameEditor editor){
this.editor = editor;
-
+ }
+
+ protected void createContent(){
createControl();
+ createContainers();
+
// Drop functionality
this.setDroppable(true);
-
+
+ editor.getManagedForm().reflow(true);
}
-
+
/**
* <p>createControl</p>
*/
layout.verticalSpacing = 0;
layout.horizontalSpacing = 0;
control.setLayout(layout);
-
+
control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
}
/**
* <p>add</p>
*
- * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
*/
public void add(AbstractGroupedContainer groupedContainer){
groupedContainers.add(groupedContainer);
/**
* <p>remove</p>
*
- * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
*/
public void remove(AbstractGroupedContainer groupedContainer){
- deleteContainer(groupedContainer);
+ groupedContainer.dispose();
groupedContainers.remove(groupedContainer);
- editor.getManagedForm().reflow(true);
- }
-
- /**
- * <p>removeAllContainers</p>
- */
- public void removeAllContainers() {
- for(AbstractGroupedContainer container : groupedContainers){
- deleteContainer(container);
+ if(!(this instanceof AcceptedGroup) && groupedContainers.isEmpty()){
+ getEditor().removeGroup(this);
}
-
- groupedContainers.clear();
- }
-
- /**
- * <p>clearContainers</p>
- */
- public void clearContainers(){
- groupedContainers.clear();
- }
-
- /**
- * <p>deleteContainer</p>
- *
- * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
- */
- public void deleteContainer(AbstractGroupedContainer groupedContainer){
- groupedContainer.setMenu(null);
- groupedContainer.getControl().dispose();
- }
-
- /**
- * <p>clear</p>
- */
- public void clear(){
- control.setMenu(null);
- control.dispose();
- }
+ }
/**
* <p>Getter for the field <code>groupedContainers</code>.</p>
*
* @return a {@link java.util.List} object.
*/
- public List<AbstractGroupedContainer<T>> getGroupedContainers(){
+ public List<AbstractGroupedContainer> getGroupedContainers(){
return groupedContainers;
}
}
}
}
-
- /**
- * <p>Getter for the field <code>control</code>.</p>
- *
- * @return a {@link org.eclipse.swt.widgets.Composite} object.
- */
- public Composite getControl(){
- return control;
- }
/**
* <p>getNameEditor</p>
*
* @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
*/
- public TaxonNameEditor getNameEditor() {
+ public TaxonNameEditor getEditor() {
return editor;
}
*/
public void dragEntered() {
Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
-
+
for(AbstractGroupedContainer container : groupedContainers){
container.setBackground(color);
}
/**
* <p>redraw</p>
*/
- public abstract void redraw();
+ public void redraw(){
+ emptyGroup();
+ createContainers();
+ }
+
+ protected abstract void createContainers();
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.IDropTargetable#getControl()
+ */
+ @Override
+ public Composite getControl() {
+ return control;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
+ */
+ @Override
+ public boolean onComplete() {
+ return true;
+ }
+
+ public void dispose(){
+ if(getControl() != null){
+ for(AbstractGroupedContainer container : getGroupedContainers()){
+ container.dispose();
+ }
+ getControl().setMenu(null);
+ getControl().dispose();
+ }
+ }
+
+ /**
+ * @param object
+ */
+ public void setMenu(Menu menu) {
+ getControl().setMenu(menu);
+ for(AbstractGroupedContainer container : getGroupedContainers()){
+ container.setMenu(menu);
+ }
+
+ }
+
+ protected void emptyGroup(){
+ for(AbstractGroupedContainer container : groupedContainers){
+ container.dispose();
+ }
+ groupedContainers.clear();
+ }
}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
-import java.lang.reflect.Method;
import java.util.Set;
import org.eclipse.core.runtime.Assert;
import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.NameRelationship;
import eu.etaxonomy.cdm.model.name.NonViralName;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDragListener;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDragSourceEffect;
import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInNewGroupOperation;
import eu.etaxonomy.taxeditor.labels.ILabelImageStrategy;
import eu.etaxonomy.taxeditor.labels.LabelImageProvider;
-import eu.etaxonomy.taxeditor.model.ImageResources;
import eu.etaxonomy.taxeditor.model.NameHelper;
import eu.etaxonomy.taxeditor.model.TextHelper;
import eu.etaxonomy.taxeditor.parser.ParseHandler;
* @created 02.06.2008
* @version 1.0
*/
-abstract public class AbstractGroupedContainer<T extends TaxonBase> implements IFormPart {
-
- /**
- *
- */
- public static final int SELECTED_FOCUS = 1;
- /** Constant <code>SELECTED_NO_FOCUS=2</code> */
- public static final int SELECTED_NO_FOCUS = 2;
- /** Constant <code>NOT_SELECTED=3</code> */
- public static final int NOT_SELECTED = 3;
-
- /**
- * ************ COMPOSITE TYPES ************
- */
- public String compositeType;
- /** Constant <code>ACCEPTED_TAXON="accepted_name_composite"</code> */
- public static final String ACCEPTED_TAXON = "accepted_name_composite";
- /** Constant <code>HOMOTYPIC_SYNONYM="homotypic_name_composite"</code> */
- public static final String HOMOTYPIC_SYNONYM = "homotypic_name_composite";
- /** Constant <code>HETEROTYPIC_SYNONYM="heterotypic_name_composite"</code> */
- public static final String HETEROTYPIC_SYNONYM = "heterotypic_name_composite";
- /** Constant <code>MISAPPLIED_NAME="misappliedname_name_composite"</code> */
- public static final String MISAPPLIED_NAME = "misappliedname_name_composite";
- /** Constant <code>CONCEPTRELATION="concept_name_composite"</code> */
- public static final String CONCEPTRELATION = "concept_name_composite";
-
- /**
- * ************ INDENTATIONS ************
- */
- public static final int ACCEPTED_INDENT = 20;
- /** Constant <code>SYNONYM_INDENT=40</code> */
- public static final int SYNONYM_INDENT = 40;
- /** Constant <code>HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60</code> */
- public static final int HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60;
- /** Constant <code>MISAPPLIEDNAME_INDENT=40</code> */
- public static final int MISAPPLIEDNAME_INDENT = 40;
- /** Constant <code>CONCEPT_INDENT=40</code> */
- public static final int CONCEPT_INDENT = 40;
+abstract public class AbstractGroupedContainer<T extends TaxonBase> implements IFormPart, IContainerConstants {
-
- /**
- * ************ ICONS ************
- */
- public static final Image ACCEPTED_ICON = ImageResources.getImage(ImageResources.BLACK_SQUARE_ICON);
- /** Constant <code>HOMOTYPIC_SYNONYM_ICON</code> */
- public static final Image HOMOTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYN_ICON);
- /** Constant <code>HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
- public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
- ImageResources.HOMOTYPIC_SYN_ORIGINAL_ICON);
- /** Constant <code>HETEROTYPIC_SYNONYM_ICON</code> */
- public static final Image HETEROTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HETEROTYPIC_SYN_ICON);
- public static final Image HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON);
- public static final Image INVALID_OR_NUDUM_NAME_ICON = ImageResources.getImage(ImageResources.NOM_INVAL_NUD_SYN_ICON);
- /** Constant <code>HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
- public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
- ImageResources.HETEROTYPIC_SYN_ORIGINAL_ICON);
- /** Constant <code>MISAPPLIEDNAME_ICON</code> */
- public static final Image MISAPPLIEDNAME_ICON = ImageResources.getImage(ImageResources.MISAPPLIED_NAME_ICON);
- /** Constant <code>CONCEPT_ICON</code> */
- public static final Image CONCEPT_ICON = ImageResources.getImage(ImageResources.CONCEPT_ICON);
- /** Constant <code>AUTONYM_ICON</code> */
- public static final Image AUTONYM_ICON = ImageResources
- .getImage(ImageResources.AUTONYM_ICON);
- /** Constant <code>MOVE</code> */
- public static final Image MOVE = ImageResources.getImage(ImageResources.MOVE_ICON);
-
- /**
- * ************ TRANSFORMATIONS ************
- */
- public static final String ADD_GROUP_BASIONYM = "add_group_basionym";
- /** Constant <code>REMOVE_GROUP_BASIONYM="remove_group_basionym"</code> */
- public static final String REMOVE_GROUP_BASIONYM = "remove_group_basionym";
-
- private static final String EMPTY_NAME_PROMPT = "Click to add name";
-
protected ParseHandler parseHandler;
private FocusListener nameCompositeFocusListener;
private ModifyListener nameCompositeModifyListener;
-
- protected TaxonNameEditor editor;
-
protected NameViewer nameViewer;
- private AbstractGroup<T> group;
+ private AbstractGroup group;
private Label nonEditableInfoLabel;
private DefaultToolTip nonEditableInfoHover;
* <p>Constructor for AbstractGroupedContainer.</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
* @param taxonBase a T object.
* @param <T> a T object.
*/
- public AbstractGroupedContainer(TaxonNameEditor editor, AbstractGroup<T> group, T taxonBase){
- this.editor = editor;
-
- this.group = group;
- group.add(this);
-
+ public AbstractGroupedContainer(T taxonBase){
setData(taxonBase);
-
+ parseHandler = ParseHandler.NewInstance(taxonBase.getName());
+ }
+
+ public void createContent(){
createControl();
createTextViewer();
createLineWrapSupport();
createLineBreakListener();
- setMenu(editor.getMenu());
+ setMenu(getEditor().getMenu());
setDraggableControl(new Control[]{getControl(), getNameViewer().getRulerControl()});
createEmptyViewerPrompt(EMPTY_NAME_PROMPT);
- parseHandler = ParseHandler.NewInstance(getNameViewer().getTextWidget(), taxonBase.getName());
initializeComposite();
TaxonNameBase synonymName = ParseHandler.quickParse(text);
EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation
- ("New Heterotypic Synonym", editor.getUndoContext(), editor.getTaxon(), synonymName, editor));
+ ("New Heterotypic Synonym", getEditor().getUndoContext(), getEditor().getTaxon(), synonymName, getEditor()));
}
/**
String text = NameHelper.getDisplayNameWithRef(getTaxonBase());
+ if(getNameViewer().getTextWidget() == null){
+ // we might get here via dnd. Look slike it can be ignored
+ return;
+ }
+
if (text.length() == 0) {
initEmptyText();
- } else {
+ } else if(! getNameViewer().getTextWidget().getText().equals(text)) {
removeListener();
getNameViewer().getTextWidget().setText(text);
addListener();
/**
* <p>Getter for the field <code>group</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
*/
public AbstractGroup getGroup(){
+ if(group == null){
+ throw new IllegalStateException("Group shall not be null.");
+ }
return group;
}
* <p>createControl</p>
*/
protected void createControl() {
- control = editor.getToolkit().createComposite(group.getControl());
+ control = getEditor().getToolkit().createComposite(getGroup().getControl());
control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
}
+ /**
+ * @return
+ */
+ protected TaxonNameEditor getEditor() {
+ return getGroup().getEditor();
+ }
+
/**
* <p>Getter for the field <code>control</code>.</p>
*
* <p>createLineWrapSupport</p>
*/
protected void createLineWrapSupport() {
- new LineWrapSupport(getNameViewer(), editor.getManagedForm());
+ new LineWrapSupport(getNameViewer(), getEditor().getManagedForm());
}
focusListener = new FocusAdapter() {
public void focusGained(FocusEvent e) {
- for(AbstractGroupedContainer container : editor.getGroupedContainers()){
+ for(AbstractGroupedContainer container : getEditor().getGroupedContainers()){
container.colorSelected(NOT_SELECTED);
}
- editor.getManagedForm().setInput(AbstractGroupedContainer.this);
+ getEditor().getManagedForm().setInput(AbstractGroupedContainer.this);
placeCursor();
colorSelected(SELECTED_FOCUS);
}
* @return a boolean.
*/
public boolean isSelected(){
- return editor.getSelectedObject() == this;
+ return getEditor().getSelectedContainer() == this;
}
/**
Runnable runnable = new Runnable() {
public void run() {
- editor.getManagedForm().setInput(selection);
+ getEditor().getManagedForm().setInput(selection);
}
};
display.timerExec(1000, runnable);
/**
* <p>Getter for the field <code>nameViewer</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.NameViewer} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.NameViewer} object.
*/
public NameViewer getNameViewer() {
if (nameViewer == null){
*/
public void setDirty(boolean isDirty) {
if(isDirty){
- editor.getManagedForm().dirtyStateChanged();
+ getEditor().getManagedForm().dirtyStateChanged();
}
this.isDirty = isDirty;
}
}
if (nonEditableInfoLabel == null) {
- nonEditableInfoLabel = editor.getToolkit().createLabel(control, "");
+ nonEditableInfoLabel = getEditor().getToolkit().createLabel(control, "");
TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP);
// Set indent to viewer ruler's width
if (getNameViewer().getRulerControl() != null) {
/**
* <p>Setter for the field <code>group</code>.</p>
*
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
*/
- public void setGroup(AbstractGroup<T> group) {
+ public void setGroup(AbstractGroup group) {
this.group = group;
}
*/
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
+ if(getControl() != null){
+ setMenu(null);
+ getControl().dispose();
+ }
}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 21, 2011
+ * @version 1.0
+ */
+public abstract class AbstractHomotypicalGroupContainer extends AbstractGroup {
+
+ private HomotypicalGroup group;
+
+ /**
+ * @param editor
+ */
+ public AbstractHomotypicalGroupContainer(TaxonNameEditor editor, HomotypicalGroup group) {
+ super(editor);
+ this.group = group;
+
+ createContent();
+ }
+
+ protected abstract void createSynonymContainer();
+
+ protected List<Synonym> getSynonyms(){
+ return getGroup().getSynonymsInGroup(getEditor().getTaxon().getSec());
+ }
+
+ /**
+ * @param group the group to set
+ */
+ public void setGroup(HomotypicalGroup group) {
+ this.group = group;
+ }
+
+ public void redraw(HomotypicalGroup homotypicalGroup){
+ if(redrawNeeded(homotypicalGroup)){
+ setGroup(homotypicalGroup);
+ redraw();
+ }
+ }
+
+ /**
+ *
+ * @param homotypicalGroup
+ * @return
+ */
+ protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+ List<Synonym> synonyms = homotypicalGroup.getSynonymsInGroup(getEditor().getTaxon().getSec());
+
+ List<Synonym> presentSynonyms = new ArrayList<Synonym>();
+
+ for(AbstractGroupedContainer container : getGroupedContainers()){
+ if(container.getData() instanceof Synonym){
+ presentSynonyms.add((Synonym) container.getData());
+ }
+ }
+
+ boolean result = ! (presentSynonyms.containsAll(synonyms) && synonyms.containsAll(presentSynonyms));
+
+ return result;
+ }
+
+ /**
+ * @return the group
+ */
+ public HomotypicalGroup getGroup() {
+ return group;
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Color;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.preference.Resources;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 20, 2011
+ * @version 1.0
+ */
+public class AcceptedGroup extends AbstractHomotypicalGroupContainer {
+
+ private AcceptedNameContainer acceptedContainer;
+
+ /**
+ * @param editor
+ * @param group
+ */
+ public AcceptedGroup(TaxonNameEditor editor, HomotypicalGroup group) {
+ super(editor, group);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#dragEntered()
+ */
+ @Override
+ public void dragEntered() {
+ Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
+ acceptedContainer.setBackground(color);
+ super.dragEntered();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#dragLeft()
+ */
+ @Override
+ public void dragLeft() {
+ acceptedContainer.restoreColor();
+ super.dragLeft();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup#getGroupedContainers()
+ */
+ @Override
+ public List<AbstractGroupedContainer> getGroupedContainers() {
+ List<AbstractGroupedContainer> containers = new ArrayList<AbstractGroupedContainer>();
+ containers.add(getAcceptedNameContainer());
+ containers.addAll(super.getGroupedContainers());
+ return containers;
+ }
+
+ /**
+ *
+ */
+ protected void createContainers() {
+ this.acceptedContainer = new AcceptedNameContainer(getEditor().getTaxon());
+ acceptedContainer.setGroup(this);
+
+ acceptedContainer.createContent();
+
+ createSynonymContainer();
+ }
+
+ protected void createSynonymContainer(){
+ for(Synonym synonym : getSynonyms()){
+ SynonymContainer container = new SynonymContainer(this, synonym);
+ this.add(container);
+ container.createContent();
+ }
+ }
+
+ /**
+ * @param acceptedNameContainer
+ */
+ public void setAcceptedNameContainer(AcceptedNameContainer acceptedNameContainer) {
+ this.acceptedContainer = acceptedNameContainer;
+ acceptedContainer.setGroup(this);
+ }
+
+ public AcceptedNameContainer getAcceptedNameContainer(){
+ return acceptedContainer;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#emptyGroup()
+ */
+ @Override
+ protected void emptyGroup() {
+ acceptedContainer.dispose();
+ acceptedContainer = null;
+ super.emptyGroup();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractHomotypicalGroupContainer#redrawNeeded(eu.etaxonomy.cdm.model.name.HomotypicalGroup)
+ */
+ @Override
+ protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+ if(! acceptedContainer.getData().equals(getEditor().getTaxon())){
+ return true;
+ }
+ return super.redrawNeeded(homotypicalGroup);
+ }
+}
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.eclipse.swt.graphics.Font;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.preference.Resources;
/**
*/
public class AcceptedNameContainer extends AbstractGroupedContainer<Taxon> {
+ private AcceptedGroup acceptedGroup;
+
+
/**
* <p>Constructor for AcceptedNameContainer.</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
*/
- public AcceptedNameContainer(TaxonNameEditor editor, AbstractGroup group) {
- super(editor, group, editor.getTaxon());
+ public AcceptedNameContainer(Taxon taxon) {
+ super(taxon);
}
return EditorUtil.getFont(Resources.ACCEPTED_TAXON_FONT);
}
-
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#setGroup(eu.etaxonomy.taxeditor.editor.name.AbstractGroup)
+ */
+ public void setGroup(AcceptedGroup group) {
+ this.acceptedGroup = group;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#getGroup()
+ */
+ @Override
+ public AbstractGroup getGroup() {
+ return acceptedGroup;
+ }
/** {@inheritDoc} */
@Override
protected void updateNonEditableInfo() {
// not needed
}
-
+
@Override
protected void updateIcon() {
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.eclipse.swt.graphics.Font;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.preference.Resources;
/**
private ConceptContainer(TaxonNameEditor editor, AbstractGroup group,
Taxon relatedTaxon, TaxonRelationshipType relationshipType,
boolean acceptedTaxonIsFromTaxon) {
- super(editor, group, relatedTaxon);
+ super(relatedTaxon);
// FIXME the acceptedTaxonIsFromTaxon is never used and
// I can't remember what is was used for in the first place
* <p>getNewInstance</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
* @param relationship a {@link eu.etaxonomy.cdm.model.taxon.TaxonRelationship} object.
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.ConceptContainer} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptContainer} object.
*/
public static ConceptContainer getNewInstance(TaxonNameEditor editor, AbstractGroup group, TaxonRelationship relationship){
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
/**
* <p>ConceptGroup class.</p>
* @created 21.01.2009
* @version 1.0
*/
-public class ConceptGroup extends AbstractGroup<Taxon> {
+public class ConceptGroup extends AbstractGroup {
/**
* <p>Constructor for ConceptGroup.</p>
super(editor);
}
- /** {@inheritDoc} */
- @Override
- public void redraw() {
- // TODO Auto-generated method stub
-
- }
- /**
- * <p>onComplete</p>
- *
- * @return a boolean.
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
*/
- public boolean onComplete() {
+ @Override
+ protected void createContainers() {
// TODO Auto-generated method stub
- return false;
+
}
-
}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>ContainerFactory class.</p>
+ *
+ * @author n.hoffmann
+ * @version $Id: $
+ */
+public class ContainerFactory {
+
+ /**
+ * @param taxonNameEditor
+ */
+ public static void createOrUpdateAcceptedTaxonsHomotypicGroup(
+ TaxonNameEditor taxonNameEditor) {
+
+ if(taxonNameEditor.getAcceptedGroup() == null){
+ taxonNameEditor.setAcceptedGroup(new AcceptedGroup(taxonNameEditor, taxonNameEditor.getTaxon().getHomotypicGroup()));
+ }
+ else{
+ taxonNameEditor.getAcceptedGroup().redraw(taxonNameEditor.getTaxon().getHomotypicGroup());
+ }
+
+ }
+
+ /**
+ * @param taxonNameEditor
+ */
+ public static void createOrUpdateHeterotypicSynonymyGroups(
+ TaxonNameEditor taxonNameEditor) {
+ List<HomotypicalSynonymGroup> retainedGroups = new ArrayList<HomotypicalSynonymGroup>();
+
+ for(HomotypicalSynonymGroup group : taxonNameEditor.getHeterotypicSynonymGroups()){
+ retainedGroups.add(group);
+ }
+
+ for(HomotypicalGroup homotypicalGroup : taxonNameEditor.getTaxon().getHeterotypicSynonymyGroups()){
+ HomotypicalSynonymGroup group = createOrUpdateHeterotypicSynonymyGroup(taxonNameEditor, homotypicalGroup);
+
+ retainedGroups.remove(group);
+ }
+
+ for(HomotypicalSynonymGroup retainedGroup : retainedGroups){
+ taxonNameEditor.removeGroup(retainedGroup);
+ }
+ }
+
+
+ public static HomotypicalSynonymGroup createOrUpdateHeterotypicSynonymyGroup(
+ TaxonNameEditor taxonNameEditor, HomotypicalGroup homotypicalGroup){
+ HomotypicalSynonymGroup group = null;
+ if(taxonNameEditor.getHomotypicalGroupContainer(homotypicalGroup) == null){
+ group = new HomotypicalSynonymGroup(taxonNameEditor, homotypicalGroup);
+ taxonNameEditor.addHeterotypicSynonymGroup(group);
+ if(taxonNameEditor.getMisappliedGroup() != null){
+ group.getControl().moveAbove(taxonNameEditor.getMisappliedGroup().getControl());
+ }
+ }
+ else{
+ group = taxonNameEditor.getHomotypicalGroupContainer(homotypicalGroup);
+ group.redraw(homotypicalGroup);
+ }
+
+ return group;
+ }
+
+ /**
+ * @param taxonNameEditor
+ */
+ public static void createOrUpdateMisapplicationsGroup(
+ TaxonNameEditor taxonNameEditor) {
+ MisappliedGroup group = taxonNameEditor.getMisappliedGroup();
+ if(taxonNameEditor.getTaxon().getMisappliedNames().isEmpty()){
+ taxonNameEditor.removeGroup(group);
+ taxonNameEditor.setMisapplicationsGroup(null);
+ }else{
+ if(group == null){
+ taxonNameEditor.setMisapplicationsGroup(new MisappliedGroup(taxonNameEditor));
+ }else{
+ group.redraw();
+ }
+ }
+
+ }
+
+ /**
+ * @param taxonNameEditor
+ */
+ public static void createOrUpdateConceptGroup(
+ TaxonNameEditor taxonNameEditor) {
+ Set<TaxonRelationship> filteredTaxonRelations = new HashSet<TaxonRelationship>();
+
+ for (TaxonRelationship relationship : taxonNameEditor.getTaxon().getTaxonRelations()) {
+ if (! relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) ||
+ relationship.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {
+ filteredTaxonRelations.add(relationship);
+ }
+ }
+
+ if(! filteredTaxonRelations.isEmpty()){
+ taxonNameEditor.setConceptGroup(new ConceptGroup(taxonNameEditor));
+ }
+ }
+
+}
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IMarker;
--- /dev/null
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>HomotypicalSynonymGroup class.</p>
+ *
+ * @author p.ciardelli
+ * @created 13.01.2009
+ * @version 1.0
+ */
+public class HomotypicalSynonymGroup extends AbstractHomotypicalGroupContainer {
+
+ /**
+ * <p>Constructor for HomotypicalSynonymGroup.</p>
+ *
+ * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+ * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
+ */
+ public HomotypicalSynonymGroup(TaxonNameEditor editor, HomotypicalGroup group) {
+ super(editor, group);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
+ */
+ @Override
+ protected void createContainers() {
+ createSynonymContainer();
+ }
+
+ protected void createSynonymContainer(){
+ int i = 0;
+ int indent = IContainerConstants.SYNONYM_INDENT;
+ Image icon = IContainerConstants.HETEROTYPIC_SYNONYM_ICON;
+ for(Synonym synonym : getSynonyms()){
+ if(i > 0){
+ indent = IContainerConstants.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT;
+ icon = IContainerConstants.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON;
+ }
+ SynonymContainer container = new SynonymContainer(this, synonym, indent, icon);
+ this.add(container);
+ container.createContent();
+ i++;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractHomotypicalGroupContainer#redrawNeeded(eu.etaxonomy.cdm.model.name.HomotypicalGroup)
+ */
+ @Override
+ protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+ return super.redrawNeeded(homotypicalGroup);
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.taxeditor.model.ImageResources;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 20, 2011
+ * @version 1.0
+ */
+public interface IContainerConstants {
+ /**
+ *
+ */
+ public static final int SELECTED_FOCUS = 1;
+ /** Constant <code>SELECTED_NO_FOCUS=2</code> */
+ public static final int SELECTED_NO_FOCUS = 2;
+ /** Constant <code>NOT_SELECTED=3</code> */
+ public static final int NOT_SELECTED = 3;
+
+ /**
+ * ************ COMPOSITE TYPES ************
+ */
+ /** Constant <code>ACCEPTED_TAXON="accepted_name_composite"</code> */
+ public static final String ACCEPTED_TAXON = "accepted_name_composite";
+ /** Constant <code>HOMOTYPIC_SYNONYM="homotypic_name_composite"</code> */
+ public static final String HOMOTYPIC_SYNONYM = "homotypic_name_composite";
+ /** Constant <code>HETEROTYPIC_SYNONYM="heterotypic_name_composite"</code> */
+ public static final String HETEROTYPIC_SYNONYM = "heterotypic_name_composite";
+ /** Constant <code>MISAPPLIED_NAME="misappliedname_name_composite"</code> */
+ public static final String MISAPPLIED_NAME = "misappliedname_name_composite";
+ /** Constant <code>CONCEPTRELATION="concept_name_composite"</code> */
+ public static final String CONCEPTRELATION = "concept_name_composite";
+
+ /**
+ * ************ INDENTATIONS ************
+ */
+ public static final int ACCEPTED_INDENT = 20;
+ /** Constant <code>SYNONYM_INDENT=40</code> */
+ public static final int SYNONYM_INDENT = 40;
+ /** Constant <code>HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60</code> */
+ public static final int HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60;
+ /** Constant <code>MISAPPLIEDNAME_INDENT=40</code> */
+ public static final int MISAPPLIEDNAME_INDENT = 40;
+ /** Constant <code>CONCEPT_INDENT=40</code> */
+ public static final int CONCEPT_INDENT = 40;
+
+
+ /**
+ * ************ ICONS ************
+ */
+ public static final Image ACCEPTED_ICON = ImageResources.getImage(ImageResources.BLACK_SQUARE_ICON);
+ /** Constant <code>HOMOTYPIC_SYNONYM_ICON</code> */
+ public static final Image HOMOTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYN_ICON);
+ /** Constant <code>HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
+ public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
+ ImageResources.HOMOTYPIC_SYN_ORIGINAL_ICON);
+ /** Constant <code>HETEROTYPIC_SYNONYM_ICON</code> */
+ public static final Image HETEROTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HETEROTYPIC_SYN_ICON);
+ public static final Image HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON);
+ public static final Image INVALID_OR_NUDUM_NAME_ICON = ImageResources.getImage(ImageResources.NOM_INVAL_NUD_SYN_ICON);
+ /** Constant <code>HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
+ public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
+ ImageResources.HETEROTYPIC_SYN_ORIGINAL_ICON);
+ /** Constant <code>MISAPPLIEDNAME_ICON</code> */
+ public static final Image MISAPPLIEDNAME_ICON = ImageResources.getImage(ImageResources.MISAPPLIED_NAME_ICON);
+ /** Constant <code>CONCEPT_ICON</code> */
+ public static final Image CONCEPT_ICON = ImageResources.getImage(ImageResources.CONCEPT_ICON);
+ /** Constant <code>AUTONYM_ICON</code> */
+ public static final Image AUTONYM_ICON = ImageResources
+ .getImage(ImageResources.AUTONYM_ICON);
+ /** Constant <code>MOVE</code> */
+ public static final Image MOVE = ImageResources.getImage(ImageResources.MOVE_ICON);
+
+ /**
+ * ************ TRANSFORMATIONS ************
+ */
+ public static final String ADD_GROUP_BASIONYM = "add_group_basionym";
+ /** Constant <code>REMOVE_GROUP_BASIONYM="remove_group_basionym"</code> */
+ public static final String REMOVE_GROUP_BASIONYM = "remove_group_basionym";
+
+ public static final String EMPTY_NAME_PROMPT = "Click to add name";
+}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import java.util.ArrayList;
import java.util.Collection;
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.AnnotationPainter.SquigglesStrategy;
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.apache.log4j.Logger;
import org.eclipse.jface.text.TextViewer;
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import org.eclipse.swt.graphics.Font;
* <p>Constructor for MisapplicationContainer.</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
* @param misappliedName a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
*/
- public MisapplicationContainer(TaxonNameEditor editor, AbstractGroup group, Taxon misappliedName) {
- super(editor, group, misappliedName);
+ public MisapplicationContainer(AbstractGroup group, Taxon misappliedName) {
+ super(misappliedName);
}
--- /dev/null
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>MisappliedGroup class.</p>
+ *
+ * @author p.ciardelli
+ * @created 13.01.2009
+ * @version 1.0
+ */
+public class MisappliedGroup extends AbstractGroup{
+
+ /**
+ * <p>Constructor for MisappliedGroup.</p>
+ *
+ * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+ */
+ public MisappliedGroup(TaxonNameEditor editor) {
+ super(editor);
+
+ createContent();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
+ */
+ @Override
+ protected void createContainers() {
+ for(Taxon misapplication : getEditor().getTaxon().getMisappliedNames()){
+ MisapplicationContainer container = new MisapplicationContainer(this, misapplication);
+ this.add(container);
+ container.createContent();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup#redraw()
+ */
+ @Override
+ public void redraw() {
+ if(redrawNeeded()){
+ super.redraw();
+ }
+ }
+
+ /**
+ * @return
+ */
+ private boolean redrawNeeded() {
+ Set<Taxon> misapplications = getEditor().getTaxon().getMisappliedNames();
+
+ Set<Taxon> presentMisapplication = new HashSet<Taxon>();
+
+ for (AbstractGroupedContainer<Taxon> container : getGroupedContainers()){
+ presentMisapplication.add(container.getData());
+ }
+ return ! (presentMisapplication.containsAll(misapplications) && misapplications.containsAll(presentMisapplication));
+ }
+}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import java.util.Iterator;
-import org.apache.log4j.Logger;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.text.Document;
* @version 1.0
*/
public class NameViewer extends SourceViewer {
- private static final Logger logger = Logger
- .getLogger(NameViewer.class);
/** Constant <code>RULER_WIDTH=16</code> */
public static final int RULER_WIDTH = 16;
if (ruler instanceof RulerWithIcon) {
((RulerWithIcon) ruler).setIcon(icon);
} else {
- logger.warn("Viewer's IVerticalRuler is not an instance of RulerWithIcon.");
+ throw new IllegalStateException("Viewer's IVerticalRuler is not an instance of RulerWithIcon.");
}
}
Assert.isNotNull(this.getTextWidget());
this.getTextWidget().setText(text);
} catch (RuntimeException e) {
- logger.error("Could not set the text for a name viewer");
throw e;
}
}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import java.util.Iterator;
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
import java.util.Set;
import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
*/
public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
+ private int indent = SYNONYM_INDENT;
+ private Image icon = HETEROTYPIC_SYNONYM_ICON;
+
/**
* <p>Constructor for SynonymContainer.</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
* @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
*/
- public SynonymContainer(TaxonNameEditor editor, AbstractGroup group, Synonym synonym) {
- super(editor, group, synonym);
+ public SynonymContainer(AbstractHomotypicalGroupContainer group, Synonym synonym) {
+ super(synonym);
+ }
+
+ public SynonymContainer(AbstractHomotypicalGroupContainer group, Synonym synonym, int indent, Image icon){
+ super(synonym);
+ this.indent = indent;
+ this.icon = icon;
}
/* (non-Javadoc)
protected void updateIcon(){
TaxonNameBase name = getName();
- if (isHomotypic()) {
- if (name.isGroupsBasionym()) {
- setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
- } else {
- setIcon(HOMOTYPIC_SYNONYM_ICON);
- }
-
- return;
- }
-
if(! name.getStatus().isEmpty()){
-
+
Set<NomenclaturalStatus> allStatus = name.getStatus();
for (NomenclaturalStatus status : allStatus){
}
}
}
+
+ if (isHomotypic()) {
+ if(name.isGroupsBasionym()){
+ setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
+ }else{
+ setIcon(HOMOTYPIC_SYNONYM_ICON);
+ }
- if (name.getHomotypicalGroup().getBasionyms().isEmpty()) {
- setIcon(HETEROTYPIC_SYNONYM_ICON);
- }else{
- if (name.isGroupsBasionym()) {
+ return;
+ } else{
+ if(name.isGroupsBasionym()){
setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
- } else {
- setIcon(HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON);
- }
- }
-
+ return;
+ }
+ }
+
+ setIcon(icon);
}
private boolean isHomotypic() {
HomotypicalGroup group = getSynonym().getHomotypicGroup();
- return group.equals(editor.getTaxon().getHomotypicGroup());
+ return group.equals(getEditor().getTaxon().getHomotypicGroup());
}
/**
* @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#updateIndent()
*/
@Override
- protected void updateIndent() {
- TaxonNameBase name = getName();
-
- if (!isHomotypic() && !name.getHomotypicalGroup().getBasionyms().isEmpty() && !name.isGroupsBasionym()) {
- setIndent(HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT);
- return;
- }
-
- setIndent(SYNONYM_INDENT);
+ protected void updateIndent() {
+ setIndent(this.indent );
}
}
/**
*
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
-import org.apache.log4j.Logger;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.ui.forms.ManagedForm;
import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
/**
* <p>NameEditorDragListener class.</p>
*/
public class NameEditorDragListener extends DragSourceAdapter {
- private static final Logger logger = Logger.getLogger(NameEditorDragListener.class);
-
private AbstractGroupedContainer container;
/**
* <p>Constructor for NameEditorDragListener.</p>
*
- * @param container a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ * @param container a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
*/
public NameEditorDragListener(AbstractGroupedContainer container){
this.container = container;
if(!event.doit)
return;
if(event.detail == DND.DROP_MOVE){
- logger.warn("drag finished");
- container.remove();
+ ManagedForm managedForm = container.getGroup().getEditor().getManagedForm();
+ container.getGroup().remove(container);
+ managedForm.reflow(true);
}
};
/**
*
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
import org.eclipse.swt.dnd.DragSourceEffect;
import org.eclipse.swt.dnd.DragSourceEvent;
/**
*
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
import org.eclipse.swt.dnd.DropTargetEffect;
import org.eclipse.swt.dnd.DropTargetEvent;
/**
*
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
-import org.apache.log4j.Logger;
import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetAdapter;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.IDropTargetable;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractHomotypicalGroupContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptToSynonymOperation;
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation;
*/
public class NameEditorDropTargetListener extends DropTargetAdapter {
- private static final Logger logger = Logger.getLogger(NameEditorDropTargetListener.class);
-
- private TaxonNameEditor editor;
-
private IDropTargetable target;
/**
*/
public NameEditorDropTargetListener(IDropTargetable target){
this.target = target;
- editor = target.getNameEditor();
}
/** {@inheritDoc} */
// Execute operation if it has been initiated
if (operation == null) {
- logger.warn("User unsuccessfully tried to drop: " + taxonBase.getClass() +
+ EditorUtil.warn(getClass(), "User unsuccessfully tried to drop: " + taxonBase.getClass() +
". Target: " + target);
dropTargetEvent.detail = DND.DROP_NONE;
} else {
if(taxonBase instanceof Synonym){
Synonym synonym = (Synonym) taxonBase;
- if(target instanceof HomotypicalSynonymGroup){
- HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
- return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(),
- editor.getTaxon(), synonym, homotypicalGroup, target);
+ return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(),
+ getEditor().getTaxon(), synonym, homotypicalGroup, target);
}
else if(target instanceof MisappliedGroup){
- return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", editor.getUndoContext(),
- editor.getTaxon(), synonym, target);
+ return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", getEditor().getUndoContext(),
+ getEditor().getTaxon(), synonym, target);
}
else if(target instanceof TaxonNameEditor){
- return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(),
- editor.getTaxon(), synonym, null, target);
+ return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(),
+ getEditor().getTaxon(), synonym, null, target);
}
}else if(taxonBase instanceof Taxon){
Taxon concept = (Taxon) taxonBase;
- if(target instanceof HomotypicalSynonymGroup){
- HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
- return new ChangeConceptToSynonymOperation("Change to Synonym", editor.getUndoContext(),
- editor.getTaxon(), concept, homotypicalGroup, target);
+ return new ChangeConceptToSynonymOperation("Change to Synonym", getEditor().getUndoContext(),
+ getEditor().getTaxon(), concept, homotypicalGroup, target);
}
else if(target instanceof MisappliedGroup ){
- return new ChangeConceptRelationshipTypeOperation("Change", editor.getUndoContext(),
- editor.getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
+ return new ChangeConceptRelationshipTypeOperation("Change", getEditor().getUndoContext(),
+ getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
}
}
private HomotypicalGroup getHomotypicalGroup() {
- if(target instanceof HomotypicalSynonymGroup){
- return ((HomotypicalSynonymGroup) target).getGroup();
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ return ((AbstractHomotypicalGroupContainer) target).getGroup();
}
return null;
}
}
return null;
}
+
+ /**
+ * @return
+ *
+ */
+ private TaxonNameEditor getEditor() {
+ return target.getEditor();
+ }
}
* @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
* @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
* @param newHomotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
- * @param editor a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+ * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
*/
public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext,
- Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup, IPostOperationEnabled editor) {
- super(label, undoContext, taxon, editor);
+ Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup, IPostOperationEnabled postOperationEnabled) {
+ super(label, undoContext, taxon, postOperationEnabled);
this.synonym = synonym;
if(synonym == null){
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
import eu.etaxonomy.cdm.model.common.VersionableEntity;
import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
-import eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
import eu.etaxonomy.taxeditor.editor.view.AbstractCdmDataViewer;
import eu.etaxonomy.taxeditor.editor.view.detail.DetailsViewer;
import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
getEntity().removeParsingProblem(ParserProblem.CheckRank);
TaxonNameEditor nameEditor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
- nameEditor.getSelectedObject().getNameViewer().clearErrors();
+ nameEditor.getSelectedContainer().getNameViewer().clearErrors();
}
}
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.navigation.navigator;
import java.util.ArrayList;
import java.util.Iterator;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;
/**
* <p>SynonymContentProvider class.</p>
package eu.etaxonomy.taxeditor.dialogs;
-import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.LockedException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
/**
* TODO wrap in a LoginModule
* @version 1.0
*/
public class LoginDialog extends Dialog {
-
-
- private static final Logger logger = Logger.getLogger(LoginDialog.class);
-
+
private static Text text_password;
private static Text text_username;
String username = text_username.getText().trim();
String password = text_password.getText().trim();
- UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
-
- try{
- CdmStore.getLoginManager().authenticate(token);
- }catch(BadCredentialsException e){
- logger.error("Bad credentials", e);
- StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
- }catch(LockedException e){
- logger.error("Account is locked", e);
- StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
- }catch(IllegalArgumentException e){
- logger.error("Null argument for either user or password", e);
- StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
- }
-
+ CdmStore.getLoginManager().authenticate(username, password);
+
super.okPressed();
}
*/
package eu.etaxonomy.taxeditor.parser;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
*/
private NonViralName name;
- /**
- * The widget, the name got entered in
- */
- private Control textWidget;
-
private boolean doResolveInReferences;
/**
* @param textWidget
* @param name
*/
- private ParseHandler(Control textWidget, TaxonNameBase name){
- if(textWidget != null){
- this.textWidget = textWidget;
- checkControlHasText();
- }else{
- throw new IllegalArgumentException("text widget must not be null");
- }
-
+ private ParseHandler(TaxonNameBase name){
if(name == null){
this.name = nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
}else{
* @param name An initial NonViralName or null when creating a new name
* @return An instance of this class
*/
- public static ParseHandler NewInstance(Control textWidget, TaxonNameBase name){
- return new ParseHandler(textWidget, name);
+ public static ParseHandler NewInstance(TaxonNameBase name){
+ return new ParseHandler(name);
}
return nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
}
- /**
- * Check if the given control has a getText() method
- */
- private void checkControlHasText(){
- Class clazz = textWidget.getClass();
-
- try {
- clazz.getDeclaredMethod("getText", null);
- } catch (SecurityException e) {
- } catch (NoSuchMethodException e) {
- throw new IllegalArgumentException("Given composite does not have a getText method");
- }
- }
-
/**
* Parses the string that was entered into the text widget and returns a
* NonViralName object that resulted from the parsing process.
}
return null;
}
-
- /**
- * <p>Getter for the field <code>textWidget</code>.</p>
- *
- * @return The Control this ParseHandler is attached to.
- */
- public Control getTextWidget() {
- return textWidget;
- }
-
- /**
- * <p>Setter for the field <code>textWidget</code>.</p>
- *
- * @param textWidget The textWidget to set
- */
- public void setTextWidget(Control textWidget) {
- this.textWidget = textWidget;
- checkControlHasText();
- }
}
import java.util.Observable;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.LockedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
*
* @param token a {@link org.springframework.security.authentication.UsernamePasswordAuthenticationToken} object.
*/
- public void authenticate(UsernamePasswordAuthenticationToken token){
- Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);
- SecurityContextHolder.getContext().setAuthentication(authentication);
-
- this.setChanged();
- this.notifyObservers();
+ public void authenticate(String username, String password){
+ try{
+ UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
+
+ SecurityContextHolder.clearContext();
+ Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ }
+ catch(BadCredentialsException e){
+ StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
+ }
+ catch(LockedException e){
+ StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
+ }
+ catch(IllegalArgumentException e){
+ StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
+ }
+ finally{
+ this.setChanged();
+ this.notifyObservers();
+ }
}
/**
}
return null;
}
+
+ public void logoutAll(){
+ SecurityContextHolder.clearContext();
+ notifyObservers();
+ }
}
+++ /dev/null
-// $Id$
-/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-
-package eu.etaxonomy.taxeditor.store;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.ui.IMemento;
-
-import eu.etaxonomy.taxeditor.dialogs.LoginDialog;
-import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
-
-/**
- * <p>StoreStateManager class.</p>
- *
- * @author n.hoffmann
- * @created Sep 30, 2010
- * @version 1.0
- */
-public class StoreStateManager extends ContextListenerAdapter {
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
- */
- /** {@inheritDoc} */
- @Override
- public void contextStart(IMemento memento, IProgressMonitor monitor) {
- authenticate();
- }
-
- private int authenticate(){
- LoginDialog loginDialog = new LoginDialog(StoreUtil.getShell());
- return loginDialog.open();
- }
-}
import org.osgi.framework.BundleContext;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreStateManager;
/**
* The activator class controls the plug-in life cycle