*/
package eu.etaxonomy.taxeditor.newWizard;
+import java.util.HashSet;
+import java.util.Set;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
+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;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
/**
*/
public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
- private TaxonNodeWizardPage taxonNodePage;
- private boolean openEmptyEditor;
- private UUID generatedTaxonNodeUuid;
-
- @Override
- public void addPages() {
- taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity());
- addPage(taxonNodePage);
- }
-
- @Override
- protected void saveEntity() {
- if(taxonNodePage.getTaxon() == null || StringUtils.isEmpty(taxonNodePage.getTaxon().getName().getFullTitleCache())){
- openEmptyEditor = true;
- }else{
- getConversationHolder().bind();
- ITaxonTreeNode parent = getParentTreeNode();
- Taxon taxon = taxonNodePage.getTaxon();
- try{
- TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
- generatedTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).saveOrUpdate(taxonNode);
- }catch(IllegalArgumentException e){
- StoreUtil.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
- }
- }
- }
-
- @Override
- protected ITaxonTreeNode createNewEntity() {
- if(getSelection() != null){
- Object selectedObject = getSelection().getFirstElement();
- if(selectedObject instanceof ITaxonTreeNode){
- ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
-
- if(treeNode instanceof Classification){
- return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
- }
- else if(treeNode instanceof TaxonNode){
- return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
- }
- }
- }
-
- return null;
- }
-
- /**
- * <p>openInEditor</p>
- *
- * @return a boolean.
- */
- public boolean openInEditor(){
- return taxonNodePage.openInEditor();
- }
-
- /**
- * <p>openEmpty</p>
- *
- * @return a boolean.
- */
- public boolean openEmpty(){
- return openInEditor() && openEmptyEditor;
- }
-
- /**
- * <p>getTaxonNode</p>
- *
- * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
- */
- public TaxonNode getTaxonNode(){
- if(generatedTaxonNodeUuid != null){
- return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
- }
- return null;
- }
-
- public ITaxonTreeNode getParentTreeNode(){
- return taxonNodePage.getParentTreeNode();
- }
-
- @Override
- protected String getEntityName() {
- return "Taxon";
- }
+ private TaxonNodeWizardPage taxonNodePage;
+ private boolean openEmptyEditor;
+ private UUID generatedTaxonNodeUuid;
+ private IWizardPageListener wizardPageListener;
+
+ @Override
+ public void addPages() {
+ taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener);
+ addPage(taxonNodePage);
+ }
+
+ @Override
+ protected void saveEntity() {
+ if(taxonNodePage.getTaxon() == null || StringUtils.isEmpty(taxonNodePage.getTaxon().getName().getFullTitleCache())){
+ openEmptyEditor = true;
+ }else{
+ getConversationHolder().bind();
+ ITaxonTreeNode parent = getParentTreeNode();
+ Taxon taxon = taxonNodePage.getTaxon();
+ Reference sec = taxon.getSec();
+ taxon.setSec(null);
+ try{
+ 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>();
+ 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(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());
+ }
+ }
+ }
+
+ @Override
+ protected ITaxonTreeNode createNewEntity() {
+ if(getSelection() != null){
+ Object selectedObject = getSelection().getFirstElement();
+ if(selectedObject instanceof ITaxonTreeNode){
+ ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
+
+ if(treeNode instanceof Classification){
+ return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
+ }
+ else if(treeNode instanceof TaxonNode){
+ return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <p>openInEditor</p>
+ *
+ * @return a boolean.
+ */
+ public boolean openInEditor(){
+ return taxonNodePage.openInEditor();
+ }
+
+ /**
+ * <p>openEmpty</p>
+ *
+ * @return a boolean.
+ */
+ public boolean openEmpty(){
+ return openInEditor() && openEmptyEditor;
+ }
+
+ /**
+ * <p>getTaxonNode</p>
+ *
+ * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
+ */
+ public TaxonNode getTaxonNode(){
+ if(generatedTaxonNodeUuid != null){
+ return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
+ }
+ return null;
+ }
+
+ public ITaxonTreeNode getParentTreeNode(){
+ return taxonNodePage.getParentTreeNode();
+ }
+
+ @Override
+ protected String getEntityName() {
+ return "Taxon";
+ }
+
+ public void addWizardPageListener(IWizardPageListener wizardPageListener){
+ this.wizardPageListener = wizardPageListener;
+ }
}
\ No newline at end of file