From: Cherian Mathew Date: Fri, 17 Jul 2015 13:05:35 +0000 (+0200) Subject: #5010 : Initial commit to fix duplicate entry issue when creating new key node X-Git-Tag: remoting-3.9.0~92 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/eec494003b9eef5c80255ccc7dbcfe62a686a865 #5010 : Initial commit to fix duplicate entry issue when creating new key node --- diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java index 33f120345..1d1e878ea 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java @@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor; import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager; import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; /** @@ -208,4 +209,8 @@ public class CdmApplicationRemoteController extends CdmApplicationController { public ITestService getTestService(){ return (ITestService) getBean("testService"); } + + public ICachedCommonService getCachedCommonService(){ + return (ICachedCommonService) getBean("cachedCommonService"); + } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java index cf47b3cfc..551f5fafe 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java @@ -16,6 +16,7 @@ import java.lang.reflect.Type; import eu.etaxonomy.cdm.api.service.ICommonService; import eu.etaxonomy.cdm.api.service.IService; import eu.etaxonomy.cdm.api.service.ITestService; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; /** * @author cmathew @@ -135,4 +136,11 @@ public class CdmApplicationState { } + public static ICachedCommonService getCachedCommonService() { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + return ((CdmApplicationRemoteController)configuration).getCachedCommonService(); + + } + } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java index c1a951777..ceca3e97e 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import java.util.UUID; import org.hibernate.collection.internal.PersistentBag; import org.hibernate.collection.internal.PersistentList; @@ -30,6 +31,8 @@ import org.hibernate.proxy.HibernateProxy; import org.hibernate.proxy.LazyInitializer; import org.springframework.util.ReflectionUtils; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.PersistentMultiLanguageText; import eu.etaxonomy.taxeditor.remoting.CdmRemotingException; @@ -168,6 +171,28 @@ public class ProxyUtils { return false; } + public static Object remoteLoadPersistentCollectionIfProxy(Object o, UUID ownerUuid, String fieldName) throws ClassNotFoundException { + if(o != null && o instanceof HibernateProxy) { + LazyInitializer hli = ((HibernateProxy)o).getHibernateLazyInitializer(); + if(hli.isUninitialized()) { + return CdmApplicationState.getCachedCommonService().find((Class)Class.forName(hli.getEntityName()), + ((Integer)hli.getIdentifier()).intValue()); + } + } + + if(o != null && o instanceof PersistentCollection) { + PersistentCollection pc = ((PersistentCollection)o); + if(!pc.wasInitialized()) { + return CdmApplicationState.getCachedCommonService().initializeCollection(ownerUuid, fieldName); + } + } + + return o; + } + + + + public static void setRoleValueInOwner(Object owner, String role, Object value) { if(role == null || role.isEmpty()) { throw new CdmRemotingException("Role cannot be null or an empty string"); diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java index 3b302659c..e36138e69 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java @@ -54,15 +54,16 @@ public class CachedCommonServiceImpl implements ICachedCommonService { */ @Override public CdmBase find(Class clazz, int id) { - if(cacheEnabled) { - CdmBase cdmEntity = CdmBase.deproxy(commonService.find(clazz, id, getPropertyPaths(clazz)),clazz); +// if(cacheEnabled) { + CdmBase cdmEntity = commonService.find(clazz, id, getPropertyPaths(clazz)); if(cdmEntity == null) { throw new NullPointerException("CDM Entity of type " + clazz.getName() + " with id " + id + " is null."); } - return cdmEntitySessionManager.load(cdmEntity, false); - } else { - return CdmBase.deproxy(commonService.find(clazz, id),clazz); - } + return cdmEntity; + //return cdmEntitySessionManager.load(cdmEntity, false); +// } else { +// return CdmBase.deproxy(commonService.find(clazz, id),clazz); +// } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorInput.java index 31eecc36a..a6555ce7d 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorInput.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorInput.java @@ -21,7 +21,7 @@ public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput< private final String name; private final UUID keyUuid; - private final PolytomousKey key; + private PolytomousKey key; protected PolytomousKeyEditorInput(ConversationHolder conversation, @@ -89,7 +89,7 @@ public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput< */ @Override public void merge() { - CdmStore.getService(IPolytomousKeyService.class).merge(key); + key = CdmStore.getService(IPolytomousKeyService.class).merge(key); } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java index a17c56a0a..90ed20b2b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT - * European Distributed Institute of Taxonomy + * 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. */ @@ -16,7 +16,6 @@ import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; -import eu.etaxonomy.cdm.model.description.PolytomousKey; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; /** @@ -29,7 +28,7 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override @@ -38,7 +37,7 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface * .viewers.Viewer, java.lang.Object, java.lang.Object) @@ -49,17 +48,17 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see * org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java * .lang.Object) */ @Override public Object[] getElements(Object inputElement) { - if (inputElement instanceof PolytomousKey) { + if (inputElement instanceof PolytomousKeyEditorInput) { List result = new ArrayList(); - PolytomousKeyNode root = ((PolytomousKey) inputElement).getRoot(); + PolytomousKeyNode root = ((PolytomousKeyEditorInput) inputElement).getKey().getRoot(); getChildrenBreadthFirst(result, root); return result.toArray(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java index ceae45d69..cbbeb8b8b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java @@ -250,7 +250,7 @@ public class PolytomousKeyListEditor extends EditorPart implements setPartName(key.getTitleCache()); - viewer.setInput(key); + viewer.setInput(getEditorInput()); } public int getTableItemCount() { @@ -320,11 +320,14 @@ public class PolytomousKeyListEditor extends EditorPart implements if (element instanceof PolytomousKeyNode) { List children = ((PolytomousKeyNode) element) .getParent().getChildren(); + viewer.update(((PolytomousKeyNode) element) + .getParent(), null); for (PolytomousKeyNode child : children) { viewer.update(child, null); } } + } /* (non-Javadoc) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java index f45ce48b0..fcf5b9171 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.editor.key.polytomous.operation; @@ -9,6 +9,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; @@ -21,7 +22,7 @@ public class CreateNodeOperation extends AbstractPostTaxonOperation { PolytomousKeyNode parentNode; private PolytomousKeyNode childNode; - + public CreateNodeOperation(String label, IUndoContext undoContext, PolytomousKeyNode parentNode, IPostOperationEnabled postOperationEnabled) { super(label, undoContext, postOperationEnabled); @@ -36,9 +37,9 @@ public class CreateNodeOperation extends AbstractPostTaxonOperation { throws ExecutionException { childNode = PolytomousKeyNode.NewInstance(); - - parentNode.addChild(childNode); + parentNode.addChild(childNode); + childNode = CdmApplicationState.getCurrentAppConfig().getPolytomousKeyNodeService().merge(childNode); return postExecute(childNode); }