import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
import eu.etaxonomy.cdm.api.service.IClassificationService;
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.taxon.Classification;
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
import eu.etaxonomy.cdm.model.taxon.Taxon;
getConversationHolder().bind();
ITaxonTreeNode parent = getParentTreeNode();
Taxon taxon = taxonNodePage.getTaxon();
+ Reference sec = taxon.getSec();
+ taxon.setSec(null);
try{
- TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
- taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
- generatedTaxonNodeUuid = taxonNode.getUuid();
+ UUID parentNodeUuid;
+ if(parent instanceof Classification){
+ parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
+ }
+ else{
+ parentNodeUuid = parent.getUuid();
+ }
+ UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
+
+ //TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
+
+ /* if(CdmStore.getCurrentSessionManager().isRemoting()) {
+ taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
+ } else {
+ taxonNode = CdmStore.getService(ITaxonNodeService.class).save(taxonNode);
+ }*/
+ generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
+ TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
+ taxonNode.getTaxon().setSec(sec);
+ CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
- //FIXME:Remoting Hack for now - need to generalise this
- // by making the affected objects a set of ICdmBase
- // Also, this needs to be moved to the new operations
- // architecture.
-
- TaxonNode parentNode = taxonNode.getParent();
- if(parentNode.getParent() == null) {
- affectedObjects.add(taxonNode.getClassification());
+ if (result.getUpdatedObjects().iterator().hasNext()){
+ TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
+ if(parentNode.getParent() == null) {
+ affectedObjects.add(taxonNode.getClassification());
+ }
+ if(parentNode instanceof TaxonNode) {
+ affectedObjects.add(parentNode);
+ }
}
- if(parentNode instanceof TaxonNode) {
- affectedObjects.add(parentNode);
- }
- CdmApplicationState.getCurrentDataChangeService()
- .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
+
+ if(CdmStore.getCurrentSessionManager().isRemoting()) {
+ CdmApplicationState.getCurrentDataChangeService()
+ .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
+ }
}catch(IllegalArgumentException e){
MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
}