private static Class serviceClass;
public AbstractBulkEditorInput() {
-
+ super(true);
}
/**
}
private TaxonEditorInput(UUID uuid, CdmType type) {
+ super(true);
this.conversation = CdmStore.createConversation();
switch(type) {
case PARENT_TAXON_NODE:
private Group group;
protected CdmAuthorityEditorInput(ConversationHolder conversation, Group group) {
+ super(true);
this.conversation = conversation;
this.group = group;
private final ConversationHolder conversation;
protected AbstractIdentificationEditorInput(ConversationHolder conversation) {
+ super(true);
this.conversation = conversation;
}
import java.util.Collection;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.UUID;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.MenuManager;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider;
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
*/
public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
- ISelectionChangedListener, IPostOperationEnabled , ICdmEntitySessionEnabled {
+ ISelectionChangedListener, IPostOperationEnabled{
public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"; //$NON-NLS-1$
private ISelection selection = null;
- private final ICdmEntitySession cdmEntitySession;
private DerivateContentProvider contentProvider;
* Default constructor
*/
public DerivateView() {
- cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
}
@Override
generateMultiLinkSingleReads();
labelProvider.setMultiLinkSingleReads(multiLinkSingleReads);
IEditorInput editorInput = getEditorInput();
- viewer.setInput(((DerivateViewEditorInput) editorInput).getRootUUIDs());
+ viewer.setInput(((DerivateViewEditorInput) editorInput).getRootEntities());
//set selection to selected derivate if only one was selected
if(editorInput instanceof DerivateViewEditorInput){
- Set<UUID> derivateUUIDs = ((DerivateViewEditorInput) editorInput).getDerivateUUIDs();
- if(derivateUUIDs.size()==1){
- SpecimenOrObservationBase<?> specimen = CdmStore.getService(IOccurrenceService.class).load(derivateUUIDs.iterator().next());
- if(specimen!=null){
+ Set<SpecimenOrObservationBase<?>> derivateEntities = ((DerivateViewEditorInput) editorInput).getDerivateEntities();
+ if(derivateEntities.size()==1){
+ SpecimenOrObservationBase<?> specimen = derivateEntities.iterator().next();
+ if(specimen != null){
viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
}
}
// commit the conversation and start a new transaction immediately
conversation.commit(true);
- CdmStore.getService(IOccurrenceService.class).merge(getRootEntities());
+ ((DerivateViewEditorInput) getEditorInput()).merge();
monitor.worked(1);
this.setDirty(false);
if(!conversation.isBound()){
conversation.bind();
}
- cdmEntitySession.bind();
+ ((DerivateViewEditorInput) getEditorInput()).bind();
}
@Override
@Override
public void dispose() {
- cdmEntitySession.dispose();
+ ((DerivateViewEditorInput) getEditorInput()).dispose();
super.dispose();
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
- */
- @Override
- public ICdmEntitySession getCdmEntitySession() {
- return cdmEntitySession;
- }
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
- */
- @Override
- public List<SpecimenOrObservationBase> getRootEntities() {
- return contentProvider.getRootElements();
- }
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
- */
- @Override
- public Map<Object, List<String>> getPropertyPathsMap() {
- // TODO Auto-generated method stub
- return null;
- }
@Override
public boolean canAttachMedia() {
*/
package eu.etaxonomy.taxeditor.editor.view.derivate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.Messages;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
* @date 25.11.2013
*
*/
-public class DerivateViewEditorInput implements IEditorInput{
+public class DerivateViewEditorInput extends CdmEntitySessionInput implements IEditorInput {
/**
* The selected derivate {@link UUID}s
*/
- private final Set<UUID> derivateUUIDs;
+ private final Set<SpecimenOrObservationBase<?>> derivateEntities;
/**
* List of the {@link UUID}s of the root elements of the hierarchy (may be the same objects as the derivates)
*/
+ private Set<SpecimenOrObservationBase<?>> rootEntities;
private Set<UUID> rootUUIDs;
private final ConversationHolder conversationHolder;
+ private static final List<String> SPECIMEN_INIT_STRATEGY = Arrays.asList(new String[] {
+ "descriptions",
+ "annotations",
+ "markers",
+ "credits",
+ "extensions",
+ "rights",
+ "sources",
+ "derivationEvents.derivatives.annotations",
+ "derivationEvents.derivatives.markers",
+ "derivationEvents.derivatives.credits",
+ "derivationEvents.derivatives.extensions",
+ "derivationEvents.derivatives.rights",
+ "derivationEvents.derivatives.sources"
+ });
+
/**
* Creates an editor input for the {@link DerivateView} with the currently selected derivates and the
* corresponding {@link FieldUnit}s (both may be the same object).
* @param rootUUIDs the root of the hierarchy
*/
public DerivateViewEditorInput(Set<UUID> derivateUuids) {
- super();
+ super(false);
+ rootUUIDs = derivateUuids;
+ //FIXME:Remoting temporary hack for making the sessions work
+ //This should ideally be changed to initializing the
+ //super class with a collection of (id) objects which can
+ //then be used for the hashCode, equals methods
+ initSession();
this.conversationHolder = CdmStore.createConversation();
- this.derivateUUIDs = derivateUuids;
- this.rootUUIDs = new HashSet<UUID>();
+ this.derivateEntities = new HashSet<SpecimenOrObservationBase<?>>();
+ this.rootEntities = new HashSet<SpecimenOrObservationBase<?>>();
for (UUID uuid : derivateUuids) {
- SpecimenOrObservationBase<?> derivate = CdmStore.getService(IOccurrenceService.class).load(uuid);
+ SpecimenOrObservationBase<?> derivate = CdmStore.getService(IOccurrenceService.class).load(uuid, SPECIMEN_INIT_STRATEGY);
+ derivateEntities.add(derivate);
if(derivate instanceof FieldUnit){
- rootUUIDs.add(uuid);
+ rootEntities.add(derivate);
}
else if(derivate instanceof DerivedUnit){
SpecimenOrObservationBase<?> topMostDerivate = EditorUtil.getTopMostDerivate(derivate);
if(topMostDerivate!=null){
- rootUUIDs.add(topMostDerivate.getUuid());
+ rootEntities.add(topMostDerivate);
}
}
}
- if(rootUUIDs.isEmpty()){
- rootUUIDs = derivateUUIDs;
+ if(rootEntities.isEmpty()){
+ rootEntities = derivateEntities;
}
- if(rootUUIDs.isEmpty()){
+ if(rootEntities.isEmpty()){
MessagingUtils.messageDialog(Messages.DerivateViewEditorInput_FAIL_INIT, DerivateViewEditorInput.class, Messages.DerivateViewEditorInput_NO_ROOT);
}
+
+
}
/* (non-Javadoc)
private String getEditorName() {
String name = null;
- for(UUID uuid:rootUUIDs){
- SpecimenOrObservationBase<?> specimen = CdmStore.getService(IOccurrenceService.class).load(uuid);
+ for( SpecimenOrObservationBase<?> specimen : rootEntities){
if(specimen!=null){
if(name==null){
name = DerivateLabelProvider.getDerivateText(specimen, conversationHolder);
return name;
}
- public Set<UUID> getRootUUIDs() {
- return rootUUIDs;
+ @Override
+ public Set<SpecimenOrObservationBase<?>> getRootEntities() {
+ return rootEntities;
}
- public Set<UUID> getDerivateUUIDs() {
- return derivateUUIDs;
+ public Set<SpecimenOrObservationBase<?>> getDerivateEntities() {
+ return derivateEntities;
}
- public void addRootUuid(UUID root){
- rootUUIDs.add(root);
+ public void addRootEntity(SpecimenOrObservationBase<?> root){
+ rootEntities.add(root);
}
return true;
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
+ */
+ @Override
+ public void merge() {
+ List<SpecimenOrObservationBase> mergedEntities = CdmApplicationState.getCurrentAppConfig().getOccurrenceService().merge(new ArrayList(getRootEntities()));
+
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
+ */
+ @Override
+ public Map<Object, List<String>> getPropertyPathsMap() {
+ List<String> specimenPropertyPaths = Arrays.asList(new String[] {
+ "descriptions",
+ "derivationEvents.derivates",
+ "annotations",
+ "markers",
+ "credits",
+ "extensions",
+ "rights",
+ "sources"
+ });
+ Map<Object, List<String>> specimenPropertyPathMap =
+ new HashMap<Object, List<String>>();
+ specimenPropertyPathMap.put(SpecimenOrObservationBase.class,specimenPropertyPaths);
+ return specimenPropertyPathMap;
+ }
+
}
import org.eclipse.core.commands.ExecutionException;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
return null;
}
FieldUnit fieldUnit = FieldUnit.NewInstance();
- CdmStore.getService(IOccurrenceService.class).save(fieldUnit);
+ fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
derivateView.getConversationHolder().commit();
DerivateViewEditorInput input = (DerivateViewEditorInput) derivateView.getEditorInput();
- input.addRootUuid(fieldUnit.getUuid());
+ input.addRootEntity(fieldUnit);
derivateView.refreshTree();
}
return null;
*/
public abstract class CdmEntitySessionInput implements ICdmEntitySessionEnabled {
- private final ICdmEntitySession cdmEntitySession;
+ private ICdmEntitySession cdmEntitySession;
- public CdmEntitySessionInput() {
+ public CdmEntitySessionInput(boolean init) {
+ if(init) {
+ initSession();
+ }
+ }
+
+ protected void initSession() {
cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
}
return languageString;
}
+ public LanguageString updateLanguageString(LanguageString ls) {
+ if(ls == null){
+ ls = LanguageString.NewInstance("", CdmStore.getDefaultLanguage());
+ }
+ ls.setText(text.getText());
+ return ls;
+ }
+
/** {@inheritDoc} */
@Override
public void modifyText(ModifyEvent e) {
} else if (eventSource == selection_country) {
getEntity().setCountry(selection_country.getSelection());
} else if (eventSource == languageText_locality) {
- LanguageString locality = languageText_locality.getLanguageString();
+ LanguageString locality = languageText_locality.updateLanguageString(getEntity().getLocality());
getEntity().setLocality(locality);
} else if (eventSource == element_point) {
getEntity().setExactLocation(element_point.getPoint());
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
-import java.util.UUID;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.Viewer;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.model.molecular.DnaSample;
import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.molecular.SingleRead;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
-import eu.etaxonomy.taxeditor.store.CdmStore;
public class DerivateContentProvider implements ITreeContentProvider {
rootNodes = new ArrayList<TreeNode>();
if(inputElement instanceof Set){
for (Object o: (Set)inputElement) {
- if(o instanceof UUID){
- UUID uuid = (UUID)o;
- SpecimenOrObservationBase<?> rootElement = CdmStore.getService(IOccurrenceService.class).load(uuid);
+ if(o instanceof SpecimenOrObservationBase){
+ SpecimenOrObservationBase<?> rootElement = (SpecimenOrObservationBase<?>)o;
if(rootElement!=null){
rootNodes.add(new TreeNode(rootElement));
}
import org.hibernate.LazyInitializationException;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.DefinedTerm;
FieldUnit fieldUnit = (FieldUnit)derivate;
if(fieldUnit.getGatheringEvent()!=null){
GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
- if(CdmStore.getService(IOccurrenceService.class).exists(fieldUnit.getUuid())){
- fieldUnit = (FieldUnit) CdmStore.getService(IOccurrenceService.class).load(fieldUnit.getUuid());
- gatheringEvent = fieldUnit.getGatheringEvent();
- }
label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+separator:emptyString;
label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+separator:emptyString;
label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+separator:emptyString;
else if(derivate instanceof DerivedUnit){
DerivedUnit derivedUnit = (DerivedUnit)derivate;
if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
- java.util.Collection<FieldUnit> fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid());
- if(fieldUnits!=null && !fieldUnits.isEmpty()){
- FieldUnit fieldUnit = fieldUnits.iterator().next();
- GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
-// gatheringEvent = HibernateProxyHelper.deproxy(gatheringEvent, GatheringEvent.class);
- if(gatheringEvent!=null){
- label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+separator:emptyString;
+ //java.util.Collection<FieldUnit> fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid());
+ //TODO : This is not generic anymore for performance reasons
+ Set<SpecimenOrObservationBase> originals = derivedUnit.getOriginals();
+ if(originals.size() ==1) {
+ SpecimenOrObservationBase specimen = originals.iterator().next();
+ if(specimen instanceof FieldUnit) {
+ FieldUnit fieldUnit = (FieldUnit)specimen;
+ GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
+ if(gatheringEvent!=null){
+ label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+separator:emptyString;
+ }
+ label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+separator:emptyString;
}
- label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+separator:emptyString;
}
+
eu.etaxonomy.cdm.model.occurrence.Collection collection = derivedUnit.getCollection();
if(collection!=null){
label += collection.getCode()!=null?"("+collection.getCode()+")"+separator:emptyString;