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
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;
* @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);
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);
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;
@Override
public void createViewer(Composite parent) {
- selectionService.addPostSelectionListener(this);
+ //selectionService.addPostSelectionListener(this);
viewer = new DetailsViewer(parent, this);
getSite().setSelectionProvider(viewer);
// 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);
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
MEDIA,
TEAM_OR_PERSON_BASE,
DERIVED_UNIT_BASE,
- FIELD_OBSERVATION
+ FIELD_OBSERVATION,
+ FEATURE_DISTRIBUTION
}
private VIEW_PART currentViewPart;
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;
layout();
}
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.Viewer#getSelection()
*/
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);
+ }
}
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;
FIELD_OBSERVATION,
DERIVED_UNIT_FACADE,
GATHERING_EVENT,
- DERIVED_UNIT, NATURAL_LANGUAGE
+ DERIVED_UNIT, NATURAL_LANGUAGE,
+ FEATURE_DISTRIBUTION
}
/**
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);
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);
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;
/**
* @return
*/
- public int calculateWidth() {
- return browser.getBounds().width;
+ public int calculateWidth() {
+ Rectangle boundaries = browser.getBounds();
+ return boundaries.width;
}
/* (non-Javadoc)
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;
* @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
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
--- /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.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;
+ }
+
+}
--- /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.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";
+ }
+}
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;
/**
* (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[]{};
}
}
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;
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();
}
@Override
public void createPartControl(Composite parent) {
selectionService = getSite().getWorkbenchWindow().getSelectionService();
- selectionService.addSelectionListener(this);
+ selectionService.addPostSelectionListener(this);
pageBook = new PageBook(parent, SWT.NULL);
createViewerComposite(pageBook);
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;
* @created Sep 20, 2010
* @version 1.0
*/
-public class FeatureNodeContainer {
+public class FeatureNodeContainer implements IAnnotatableEntity{
private static final Logger logger = Logger
.getLogger(FeatureNodeContainer.class);
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
List<FeatureNode> children = featureTree.getRootChildren();
- FeatureNodeContainer root = new FeatureNodeContainer();
+ FeatureNodeContainer root = new FeatureNodeContainer(description);
for(FeatureNode featureNode : children){
FeatureNodeContainer branch = findLeaves(featureNode, description);
if(elements.isEmpty()){
return null;
}else{
- FeatureNodeContainer container = new FeatureNodeContainer();
+ FeatureNodeContainer container = new FeatureNodeContainer(description);
container.setFeatureNode(featureNode);
container.setDescriptionElements(elements);
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);
}
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) {}
}