TaxonNavigator, TaxonNavigatorDataChangeBehavior : added refreshing of specific objects
MoveFactualDataHandler : moved business logic to service call using uuids
AbstractPersistentPostOperation : refactoring
public MultiPageTaxonEditor() {
super();
undoContext = new UndoContext();
+
}
/** {@inheritDoc} */
input = (TaxonEditorInput) getEditorInput();
conversation = input.getConversationHolder();
conversation.registerForDataStoreChanges(this);
-
+ cdmEntitySession.registerForDataStoreChanges(this);
try {
addPage(Page.NAME.getIndex(), new TaxonNameEditor(this),
getEditorInput());
}
// commit the conversation and start a new transaction immediately
+
+ input.update();
conversation.commit(true);
monitor.worked(1);
editorPage.setDisabled();
}
}
+ cdmEntitySession.unregisterForDataStoreChanges(this);
conversation.unregisterForDataStoreChanges(this);
conversation.close();
setDirty(false);
}
this.input = (TaxonEditorInput) input;
+ cdmEntitySession = this.input.getCdmEntitySession();
// try {
// // Listen for name changes,
*/
@Override
public ICdmEntitySession getCdmEntitySession() {
- // TODO Auto-generated method stub
- return null;
+ return cdmEntitySession;
}
}
import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
import eu.etaxonomy.cdm.model.common.Annotation;
import eu.etaxonomy.cdm.model.common.DefinedTerm;
import eu.etaxonomy.cdm.model.common.ISourceable;
public DescriptionBase findWithoutFlush(UUID uuid) {
return defaultService.findWithoutFlush(uuid);
}
-
+
@Override
public <S extends DescriptionBase> Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
public UUID deleteDescription(DescriptionBase description) {
return defaultService.deleteDescription(description);
}
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Taxon)
+ */
+ @Override
+ public void moveTaxonDescriptions(Taxon sourceTaxon, Taxon targetTaxon) {
+ defaultService.moveTaxonDescriptions(sourceTaxon, targetTaxon);
+
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(java.util.UUID, java.util.UUID)
+ */
+ @Override
+ public void moveTaxonDescriptions(UUID sourceTaxonUuid, UUID targetTaxonUuid) {
+ defaultService.moveTaxonDescriptions(sourceTaxonUuid, targetTaxonUuid);
+
+ }
}
getConversationHolder().commit();
}
}
+ if (cdmEntitySession != null) {
+ cdmEntitySession.fireNotifications();
+ }
getCommonViewer().refresh();
}
+ /**
+ * Refresh this navigators viewer
+ */
+ public void refresh(Set objects) {
+
+ for(Object obj : objects) {
+ getCommonViewer().refresh(obj);
+ }
+ }
+
/**
* Removes all content
*/
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
EventType eventType = event.getEventType();
CdmBase eventEntity = event.getEntity();
+ Set<CdmBase> affectedObjects = event.getAffectedObjects();
+ if(affectedObjects != null) {
+ for(CdmBase cb : affectedObjects) {
+ staleObjects.add((CdmBase)HibernateProxyHelper.deproxy(cb));
+ }
+ }
+
// all tree node changes are relevant
if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
&& event.getEntity() instanceof ITaxonTreeNode){
return true;
}
+
+
if(eventType == EventType.UPDATE && event.getEntity() instanceof Taxon){
TaxonNameBase name = null;
if(eventEntity instanceof Taxon){
display.asyncExec(new Runnable() {
@Override
public void run() {
- source.refresh();
+ if(staleObjects != null && staleObjects.size() > 0) {
+ source.refresh(staleObjects);
+ } else {
+ source.refresh();
+ }
}
});
import java.util.List;
import java.util.UUID;
-import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
import eu.etaxonomy.cdm.api.service.ITaxonService;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
"changes in the target taxon. Please save first.");
return null;
}
- for(TaxonDescription description : taxon.getDescriptions()){
- //reload to avoid session conflicts
- description = HibernateProxyHelper.deproxy(CdmStore.getService(IDescriptionService.class).load(description.getUuid()), TaxonDescription.class);
+ CdmStore.getService(IDescriptionService.class).moveTaxonDescriptions(taxon.getUuid(),
+ targetTaxonNode.getTaxon().getUuid());
- String moveMessage = String.format("Description moved from %s", taxon);
- if(description.isProtectedTitleCache()){
- String separator = "";
- if(!StringUtils.isBlank(description.getTitleCache())){
- separator = " - ";
- }
- description.setTitleCache(description.getTitleCache() + separator + moveMessage, true);
- }
- Annotation annotation = Annotation.NewInstance(moveMessage, Language.getDefaultLanguage());
- annotation.setAnnotationType(AnnotationType.TECHNICAL());
- description.addAnnotation(annotation);
- targetTaxonNode.getTaxon().addDescription(description);
-
- }
- CdmStore.getService(ITaxonNodeService.class).merge(targetTaxonNode);
navigator.getConversationHolder().bind();
navigator.getConversationHolder().commit();
conversationEnabled.getConversationHolder().commit(true);
}
if(cdmEntitySessionEnabled != null) {
- cdmEntitySessionEnabled.getCdmEntitySession().commit();
+ cdmEntitySessionEnabled.getCdmEntitySession().fireNotifications();
}
IStatus status = super.postExecute(objectAffectedByOperation);