package eu.etaxonomy.taxeditor.featuretree.e4;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Named;
import eu.etaxonomy.cdm.model.description.FeatureNode;
import eu.etaxonomy.cdm.model.description.FeatureTree;
import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
* @date 06.06.2017
*
*/
-public class FeatureTreeEditor implements
+public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
ModifyListener, ISelectionChangedListener {
private ConversationHolder conversation;
+ private ICdmEntitySession cdmEntitySession;
+
@Inject
private ESelectionService selService;
if(conversation==null){
conversation = CdmStore.createConversation();
}
+ if (CdmStore.isActive()) {
+ cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+ }
}
/** {@inheritDoc} */
if(conversation!=null && !conversation.isBound()){
conversation.bind();
}
+ if(cdmEntitySession != null) {
+ cdmEntitySession.bind();
+ }
}
@Persist
public void save(){
- CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(featureTree);
- setDirty(false);
+ if (!conversation.isBound()) {
+ conversation.bind();
+ }
+
+ // commit the conversation and start a new transaction immediately
+ conversation.commit(true);
+
+ CdmStore.getService(IFeatureTreeService.class).merge(featureTree);
+
+ this.setDirty(false);
+ }
+
+ @PreDestroy
+ public void dispose(){
+ if(conversation!=null){
+ conversation.close();
+ }
+ if(cdmEntitySession != null) {
+ cdmEntitySession.dispose();
+ }
}
+ @Override
+ public ICdmEntitySession getCdmEntitySession() {
+ return cdmEntitySession;
+ }
+
+ @Override
+ public Map<Object, List<String>> getPropertyPathsMap() {
+ List<String> propertyPaths = Arrays.asList(new String[] {
+ "children", //$NON-NLS-1$
+ "feature", //$NON-NLS-1$
+ "featureTree", //$NON-NLS-1$
+ });
+ Map<Object, List<String>> propertyPathMap =
+ new HashMap<Object, List<String>>();
+ propertyPathMap.put(FeatureNode.class,propertyPaths);
+ return propertyPathMap;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<FeatureTree> getRootEntities() {
+ List<FeatureTree> root = new ArrayList<>();
+ root.add(featureTree);
+ return root;
+ }
+
private class AddButtonListener extends SelectionAdapter {
@Override
public void widgetSelected(SelectionEvent e) {