distribution maps are shown again
authorn.hoffmann <n.hoffmann@localhost>
Thu, 23 Sep 2010 12:23:36 +0000 (12:23 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 23 Sep 2010 12:23:36 +0000 (12:23 +0000)
15 files changed:
.gitattributes
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/CdmSectionPart.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/DetailsViewPart.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/DetailsViewer.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/CdmFormFactory.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/ImageElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/AbstractCdmDetailElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/AbstractCdmDetailSection.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailElement.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailSection.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/taxon/TaxonBaseDetailElement.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceContentProvider.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewPart.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractCdmViewPart.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/FeatureNodeContainer.java

index bbe6b367f0fc1a3e643e174192712b48c7a190d0..9b946ce7511a7ced5e771e95e52bd1219e7c4116 100644 (file)
@@ -543,6 +543,8 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/description/detail
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/description/detail/QuantitativeDataDetailElement.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/description/detail/TaxonInteractionDetailElement.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/description/detail/TextDataDetailElement.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailElement.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailSection.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/AbstractTypeDesignationElement.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/AuthorshipDetailElement.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/AuthorshipDetailSection.java -text
index 00cde7b37b43b7508732b2dd900a14f7cc305d92..9cee4841bbf1e7abfdf71bf1bfb01b54565fe29c 100644 (file)
@@ -15,6 +15,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.ui.forms.SectionPart;
 
+import eu.etaxonomy.cdm.model.common.IVersionableEntity;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer;
@@ -27,7 +28,7 @@ import eu.etaxonomy.taxeditor.section.ITaxonDetailSection;
  * @created Feb 8, 2010
  * @version 1.0
  */
-public class CdmSectionPart<T extends VersionableEntity> extends SectionPart implements IPropertyChangeListener{
+public class CdmSectionPart<T extends IVersionableEntity> extends SectionPart implements IPropertyChangeListener{
        
        private static final Logger logger = Logger
                                .getLogger(CdmSectionPart.class);
@@ -44,7 +45,7 @@ public class CdmSectionPart<T extends VersionableEntity> extends SectionPart imp
                if(input instanceof AbstractGroupedContainer){
                        input = ((AbstractGroupedContainer) input).getData();
                }
-               if(input instanceof VersionableEntity){
+               if(input instanceof IVersionableEntity){
                        logger.trace("Setting input for section: " + formSection.getClass().getSimpleName());
                        if((input instanceof TaxonBase) && (formSection instanceof ITaxonDetailSection)){
                                ((ITaxonDetailSection) formSection).setTaxon((TaxonBase) input);
index 134fd8b46909f676e38362634c662d98710fc9a2..b4da810e81a5dfb12cb157651344a0304a036374 100644 (file)
@@ -19,6 +19,7 @@ import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.part.EditorPart;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
 import eu.etaxonomy.taxeditor.editor.Page;
@@ -44,7 +45,7 @@ public class DetailsViewPart extends AbstractCdmEditorViewPart implements IPartC
 
        @Override
        public void createViewer(Composite parent) {
-               selectionService.addPostSelectionListener(this);
+               //selectionService.addPostSelectionListener(this);
                
                viewer = new DetailsViewer(parent, this);
                getSite().setSelectionProvider(viewer);
@@ -72,8 +73,12 @@ public class DetailsViewPart extends AbstractCdmEditorViewPart implements IPartC
                        
                        // do not show details for feature nodes TODO really? 
                        if(((IStructuredSelection) selection).getFirstElement() instanceof FeatureNodeContainer){
-                               showEmptyPage();
-                               return;
+                               // do show the map for distributions
+                               Feature feature = ((FeatureNodeContainer) ((IStructuredSelection) selection).getFirstElement()).getFeature();
+                               if(!feature.equals(Feature.DISTRIBUTION())){
+                                       showEmptyPage();
+                                       return;
+                               }
                        }
                        
                        showViewer(part, selection);
index 6316589cf367d7c63b8c6a19cf81bf2ad994a8b7..c541c071c3e2d5bc58e5f08808344a5e949d4b19 100644 (file)
@@ -38,6 +38,7 @@ import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory.EntityDetailType;
 import eu.etaxonomy.taxeditor.forms.RootElement;
 import eu.etaxonomy.taxeditor.model.AbstractCdmViewPart;
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 
 /**
  * @author n.hoffmann
@@ -61,7 +62,8 @@ public class DetailsViewer extends AbstractCdmDataViewer {
                MEDIA, 
                TEAM_OR_PERSON_BASE,
                DERIVED_UNIT_BASE,
-               FIELD_OBSERVATION
+               FIELD_OBSERVATION,
+               FEATURE_DISTRIBUTION
        }
        
        private VIEW_PART currentViewPart;
@@ -148,7 +150,12 @@ public class DetailsViewer extends AbstractCdmDataViewer {
                        if(currentViewPart != VIEW_PART.FIELD_OBSERVATION){
                                createFieldObservationElementSection(rootElement);
                                currentViewPart = VIEW_PART.FIELD_OBSERVATION;
-                       }                       
+                       }       
+               }else if(getInput() instanceof FeatureNodeContainer) {
+                       if(currentViewPart != VIEW_PART.FEATURE_DISTRIBUTION){
+                               createFeatureDistributionSection(rootElement);
+                               currentViewPart = VIEW_PART.FEATURE_DISTRIBUTION;
+                       }
                }else{
                        destroySections();
                        currentViewPart = VIEW_PART.EMPTY;
@@ -157,6 +164,7 @@ public class DetailsViewer extends AbstractCdmDataViewer {
                layout();
        }
 
+
        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.Viewer#getSelection()
         */
@@ -380,4 +388,15 @@ public class DetailsViewer extends AbstractCdmDataViewer {
                
                addPart(fieldObservationElementSection);
        }
+       
+       /**
+        * @param rootElement
+        */
+       private void createFeatureDistributionSection(RootElement parent) {
+               destroySections();
+               
+               AbstractFormSection featureDistributionSection =formFactory.createCdmDetailSection(DetailType.FEATURE_DISTRIBUTION, getConversationHolder(), parent, this, Section.TWISTIE | Section.EXPANDED);
+               
+               addPart(featureDistributionSection);
+       }
 }
index 716324fe8db6c610dcafc0b93c20030d7f925e52..c7c712c5dcd7b20628351607b559cae9b6de4468 100644 (file)
@@ -180,6 +180,8 @@ import eu.etaxonomy.taxeditor.section.description.detail.IndividualsAssociationD
 import eu.etaxonomy.taxeditor.section.description.detail.QuantitativeDataDetailElement;
 import eu.etaxonomy.taxeditor.section.description.detail.TaxonInteractionDetailElement;
 import eu.etaxonomy.taxeditor.section.description.detail.TextDataDetailElement;
+import eu.etaxonomy.taxeditor.section.feature.FeatureDistributionDetailElement;
+import eu.etaxonomy.taxeditor.section.feature.FeatureDistributionDetailSection;
 import eu.etaxonomy.taxeditor.section.name.AuthorshipDetailElement;
 import eu.etaxonomy.taxeditor.section.name.AuthorshipDetailSection;
 import eu.etaxonomy.taxeditor.section.name.NameDetailElement;
@@ -911,7 +913,8 @@ public class CdmFormFactory extends FormToolkit{
                FIELD_OBSERVATION, 
                DERIVED_UNIT_FACADE, 
                GATHERING_EVENT, 
-               DERIVED_UNIT, NATURAL_LANGUAGE
+               DERIVED_UNIT, NATURAL_LANGUAGE, 
+               FEATURE_DISTRIBUTION
        }
        
        /**
@@ -980,6 +983,9 @@ public class CdmFormFactory extends FormToolkit{
                case NATURAL_LANGUAGE:
                        section = new NaturalLanguageSection(this, conversation, parentElement, selectionProvider, style);
                        break;
+               case FEATURE_DISTRIBUTION:
+                       section = new FeatureDistributionDetailSection(this, conversation, parentElement, selectionProvider, style);
+                       break;
                }
                parentElement.addElement(section);
                adapt(section);
@@ -1042,6 +1048,13 @@ public class CdmFormFactory extends FormToolkit{
                case NATURAL_LANGUAGE:
                        element = new NaturalLanguageDetailElement(this, parentElement);
                        break;
+               case FEATURE_DISTRIBUTION:
+                       element = new FeatureDistributionDetailElement(this, parentElement);
+                       break;
+               }
+               
+               if(element == null){
+                       logger.error("Detail element was not created. Seems like the case was not implemented for the requested detail type: " + detailType);
                }
                
                adapt(element);
index f76decfbe003684ae748e1e6287603652d5c83b2..082efaeebb5e5030506f4d34374f0551a49827f2 100644 (file)
@@ -9,6 +9,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 
@@ -63,8 +64,9 @@ public class ImageElement extends AbstractCdmFormElement implements ControlListe
        /** 
         * @return
         */
-       public int calculateWidth() {           
-               return browser.getBounds().width;
+       public int calculateWidth() {   
+               Rectangle boundaries = browser.getBounds();
+               return boundaries.width;
        }
        
        /* (non-Javadoc)
index 73a7a36e9c0c0c1c831e0fde3878d21bfbad8a70..58a71248ed17e9df8f4a467937702ab81edf38a5 100644 (file)
@@ -21,6 +21,7 @@ import org.eclipse.swt.widgets.Composite;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
@@ -34,7 +35,7 @@ import eu.etaxonomy.taxeditor.forms.ISelectable;
  * @created Feb 26, 2010
  * @version 1.0
  */
-public abstract class AbstractCdmDetailElement<T extends AnnotatableEntity> extends
+public abstract class AbstractCdmDetailElement<T extends IAnnotatableEntity> extends
                AbstractCdmFormElement implements IEntityElement<T>, ISelectable, IEnableableFormElement, IConversationEnabled{
 
        private static final Logger logger = Logger
index f83dcb8e5550dd67a471a9c7304164d55b46138d..3cab9794748ebe020c3cb077f7ce82a5e27db958 100644 (file)
@@ -20,22 +20,22 @@ import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.forms.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.forms.ISelectableElement;
 import eu.etaxonomy.taxeditor.forms.SelectionArbitrator;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
 
 /**
  * @author n.hoffmann
  * @created Feb 26, 2010
  * @version 1.0
  */
-public abstract class AbstractCdmDetailSection<T extends AnnotatableEntity> extends AbstractFormSection<T> implements IEnableableFormElement, IExpansionListener{
+public abstract class AbstractCdmDetailSection<T extends IAnnotatableEntity> extends AbstractFormSection<T> implements IEnableableFormElement, IExpansionListener{
 
 
        private static final Logger logger = Logger
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailElement.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailElement.java
new file mode 100644 (file)
index 0000000..0108e6d
--- /dev/null
@@ -0,0 +1,122 @@
+// $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.section.feature;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import eu.etaxonomy.cdm.ext.geo.EditGeoServiceUtilities;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.Distribution;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
+import eu.etaxonomy.taxeditor.forms.ImageElement;
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 23, 2010
+ * @version 1.0
+ */
+public class FeatureDistributionDetailElement extends AbstractCdmDetailElement<FeatureNodeContainer> {
+       
+       private static final Logger logger = Logger
+       .getLogger(FeatureDistributionDetailElement.class);
+
+       private ImageElement image;
+       
+       /**
+        * @param formFactory
+        * @param formElement
+        */
+       public FeatureDistributionDetailElement(CdmFormFactory formFactory,
+                       ICdmFormElement formElement) {
+               super(formFactory, formElement);
+       }
+
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls(eu.etaxonomy.taxeditor.forms.ICdmFormElement, eu.etaxonomy.cdm.model.common.AnnotatableEntity, int)
+        */
+       @Override
+       protected void createControls(ICdmFormElement formElement, FeatureNodeContainer entity,
+                       int style) {
+               
+               image = formFactory.createImageElement(formElement, null, style);
+               image.setImageUri(getMapUri(getEntity()));
+               formElement.getLayoutComposite().layout();
+       }
+
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java.lang.Object)
+        */
+       @Override
+       public void handleEvent(Object eventSource) {
+               // 
+       }
+
+       /**
+        * @return
+        * @throws URISyntaxException 
+        */
+       private URI getMapUri(FeatureNodeContainer container){
+               String accessPoint = PreferencesUtil.getMapServiceAccessPoint();
+               Map<PresenceAbsenceTermBase<?>, java.awt.Color> presenceAbsenceTermColors = null;
+               // FIXME due to a bug in the rest map service we have to ensure that width will always be an even number
+               // image.calculateWidth() % 2 == 1 ? image.calculateWidth() + 1 : 
+               int width = image.calculateWidth();
+               
+               String bbox = "-180,-90,180,90"; 
+               String backLayer = null;
+
+               List<Language> languages = Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()});
+               
+               String parameter = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(getDistributions(), presenceAbsenceTermColors, width, 0, bbox, backLayer, languages);
+               
+               try {
+                       URI mapUri = new URI(accessPoint + "?" + parameter + "&ms=1000");
+                       return mapUri;
+               } catch (URISyntaxException e) {
+                       logger.error(e);
+               }
+               return null;
+       }
+       
+       /**
+        * @return
+        */
+       private Set<Distribution> getDistributions() {
+               HashSet<Distribution> distributions = new HashSet<Distribution>();
+               
+               for (DescriptionElementBase element : getEntity().getDescriptionElements()) {
+                       if (element instanceof Distribution) {
+                               distributions.add((Distribution) element);
+                       }
+               }
+               return distributions;
+       }
+
+}
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailSection.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/feature/FeatureDistributionDetailSection.java
new file mode 100644 (file)
index 0000000..4279571
--- /dev/null
@@ -0,0 +1,62 @@
+// $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.section.feature;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ISelectionProvider;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
+import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
+import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 23, 2010
+ * @version 1.0
+ */
+public class FeatureDistributionDetailSection extends AbstractCdmDetailSection<Feature> {
+       
+
+       private static final Logger logger = Logger
+                       .getLogger(FeatureDistributionDetailSection.class);
+
+       /**
+        * @param formFactory
+        * @param conversation
+        * @param parentElement
+        * @param selectionProvider
+        * @param style
+        */
+       public FeatureDistributionDetailSection(CdmFormFactory formFactory,
+                       ConversationHolder conversation, ICdmFormElement parentElement,
+                       ISelectionProvider selectionProvider, int style) {
+               super(formFactory, conversation, parentElement, selectionProvider, style);
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection#getDetailType()
+        */
+       @Override
+       protected DetailType getDetailType() {
+               return DetailType.FEATURE_DISTRIBUTION;
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection#getHeading()
+        */
+       @Override
+       public String getHeading() {
+               return "Distribution Map";
+       }
+}
index d45cfc2e5401153088ea28ab81492d73665d7d96..49864fe8ad2d71b17cab3c349ce84afa36f23a22 100644 (file)
@@ -26,7 +26,6 @@ import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
 import eu.etaxonomy.taxeditor.forms.selection.ReferenceSelectionElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
-import eu.etaxonomy.taxeditor.section.name.NameDetailElement;
 import eu.etaxonomy.taxeditor.section.name.NonViralNameDetailElement;
 
 /**
index 37785aed35c16c9bb842e7e7ecf9b78b969b8a52..8e8589af463ee491b6ae81c0804626b510190ec8 100644 (file)
@@ -39,9 +39,10 @@ public class CdmDataSourceContentProvider implements IStructuredContentProvider
         * (non-Javadoc)
         * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
         */
-       @SuppressWarnings("unchecked")
        public Object[] getElements(Object inputElement) {
-               List<CdmMetaDataAwareDataSourceContainer> containers = (List<CdmMetaDataAwareDataSourceContainer>) inputElement;
-               return containers.toArray();
+               if(inputElement instanceof List){
+                       return ((List) inputElement).toArray();
+               }
+               return new Object[]{};
        }
 }
index 585025041967edebe6ef8a05371f073300057dea..d16fc8655811925e8d87749167e1ec46dcd2f80a 100644 (file)
@@ -12,6 +12,8 @@ package eu.etaxonomy.taxeditor.datasource.view;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.apache.log4j.Logger;
@@ -172,6 +174,19 @@ public class CdmDataSourceViewPart extends ViewPart implements IContextListener{
                                                processedDataSources.add(new CdmMetaDataAwareDataSourceContainer(dataSource));
                                                monitor.worked(1);
                                        }
+                                       
+                                       Collections.sort(processedDataSources, new Comparator<CdmMetaDataAwareDataSourceContainer>() {
+
+                                               @Override
+                                               public int compare(
+                                                               CdmMetaDataAwareDataSourceContainer o1,
+                                                               CdmMetaDataAwareDataSourceContainer o2) {
+                                                       String name1 = o1.getDataSource().getName();
+                                                       String name2 = o2.getDataSource().getName();
+                                                       return name1.compareTo(name2);
+                                               }
+                                       });
+                                       
                                }finally{
                                        monitor.done();
                                }
index 22d3da403cbc54a9153211b382e7788c2d9b3f94..92ef28fa82bfeaff80028eb8ce1276fa73132841 100644 (file)
@@ -56,7 +56,7 @@ public abstract class AbstractCdmViewPart extends ViewPart implements ISelection
        @Override
        public void createPartControl(Composite parent) {
                selectionService = getSite().getWorkbenchWindow().getSelectionService();
-               selectionService.addSelectionListener(this);
+               selectionService.addPostSelectionListener(this);
                
                pageBook = new PageBook(parent, SWT.NULL);
                createViewerComposite(pageBook);
index 678e6b658cc323e36598425e0b1781fece51f555..a73768b603731c3c65de86e40f487e59546b6f6c 100644 (file)
@@ -17,10 +17,16 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
+import eu.etaxonomy.cdm.model.common.Marker;
+import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
@@ -41,7 +47,7 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
  * @created Sep 20, 2010
  * @version 1.0
  */
-public class FeatureNodeContainer {
+public class FeatureNodeContainer implements IAnnotatableEntity{
        private static final Logger logger = Logger
                        .getLogger(FeatureNodeContainer.class);
 
@@ -57,7 +63,18 @@ public class FeatureNodeContainer {
        private FeatureNode featureNode;
        private List<FeatureNodeContainer> children = new ArrayList<FeatureNodeContainer>();
        private List<DescriptionElementBase> descriptionElements = new ArrayList<DescriptionElementBase>();
+
+
+       private DescriptionBase description;
        
+       /**
+        * @param description
+        */
+       private FeatureNodeContainer(DescriptionBase description) {
+               this.description = description; 
+       }
+
+
        /**
         * Traverses the given {@link FeatureNode} and computes a FeatureNodeContainer branch if the
         * given {@link TaxonDescription} has elements for the given feature node or any of its children
@@ -71,7 +88,7 @@ public class FeatureNodeContainer {
                
                List<FeatureNode> children = featureTree.getRootChildren();
                
-               FeatureNodeContainer root = new FeatureNodeContainer();
+               FeatureNodeContainer root = new FeatureNodeContainer(description);
                
                for(FeatureNode featureNode : children){
                        FeatureNodeContainer branch = findLeaves(featureNode, description);
@@ -107,7 +124,7 @@ public class FeatureNodeContainer {
                if(elements.isEmpty()){
                        return null;
                }else{
-                       FeatureNodeContainer container = new FeatureNodeContainer();
+                       FeatureNodeContainer container = new FeatureNodeContainer(description);
                        container.setFeatureNode(featureNode);
                        container.setDescriptionElements(elements);
                        
@@ -127,7 +144,7 @@ public class FeatureNodeContainer {
                        FeatureNodeContainer parentContainer = featureNodeMap.get(parentFeatureNode);
                        // create a new container if necessary
                        if(parentContainer == null){
-                               parentContainer = new FeatureNodeContainer();
+                               parentContainer = new FeatureNodeContainer(getDescription());
                                parentContainer.setFeatureNode(parentFeatureNode);
                                featureNodeMap.put(parentFeatureNode, parentContainer);
                        }
@@ -286,4 +303,64 @@ public class FeatureNodeContainer {
        public Feature getFeature(){
                return featureNode.getFeature();
        }
+
+       public DescriptionBase getDescription(){
+               return description;
+       }
+       
+       /**************** NOT USED *****************/
+       
+       @Override
+       public User getUpdatedBy() {return null;}
+
+       @Override
+       public void setUpdatedBy(User updatedBy) {}
+
+       @Override
+       public DateTime getUpdated() {return null;}
+
+       @Override
+       public void setUpdated(DateTime updated) {}
+
+       @Override
+       public int getId() {return 0;}
+
+       @Override
+       public void setId(int id) {}
+
+       @Override
+       public UUID getUuid() {return null;}
+
+       @Override
+       public void setUuid(UUID uuid) {}
+
+       @Override
+       public DateTime getCreated() {return null;}
+
+       @Override
+       public void setCreated(DateTime created) {}
+
+       @Override
+       public User getCreatedBy() {return null;}
+
+       @Override
+       public void setCreatedBy(User createdBy) {}
+
+       @Override
+       public Set<Annotation> getAnnotations() {return null;}
+
+       @Override
+       public void addAnnotation(Annotation annotation) {}
+
+       @Override
+       public void removeAnnotation(Annotation annotation) {}
+
+       @Override
+       public Set<Marker> getMarkers() { return null; }
+
+       @Override
+       public void addMarker(Marker marker) {}
+
+       @Override
+       public void removeMarker(Marker marker) {}
 }