adapt setPublishFlagConfigurator constructor call
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / e4 / handler / SetPublishFlagForSubtreeHandlerE4.java
1 // $Id$
2 /**
3 * Copyright (C) 2017 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
11
12 import java.util.Collection;
13 import java.util.Iterator;
14
15 import javax.inject.Named;
16
17 import org.eclipse.core.commands.operations.AbstractOperation;
18 import org.eclipse.core.runtime.IStatus;
19 import org.eclipse.core.runtime.NullProgressMonitor;
20 import org.eclipse.core.runtime.Status;
21 import org.eclipse.e4.core.di.annotations.CanExecute;
22 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
23 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
24 import org.eclipse.e4.ui.services.IServiceConstants;
25 import org.eclipse.jface.dialogs.MessageDialog;
26 import org.eclipse.jface.viewers.IStructuredSelection;
27 import org.eclipse.jface.viewers.TreeSelection;
28 import org.eclipse.jface.window.Window;
29 import org.eclipse.jface.wizard.WizardDialog;
30 import org.eclipse.swt.widgets.Shell;
31
32 import eu.etaxonomy.cdm.api.service.config.PublishForSubtreeConfigurator;
33 import eu.etaxonomy.cdm.model.taxon.Classification;
34 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
35 import eu.etaxonomy.taxeditor.editor.EditorUtil;
36 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
37 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
38 import eu.etaxonomy.taxeditor.navigation.navigator.operation.SetPublishForSubtreeOperation;
39 import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
40 import eu.etaxonomy.taxeditor.ui.dialog.configurator.SetPublishForSubtreeWizard;
41 import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
42
43 /**
44 * @author k.luther
45 * @date 11.10.2017
46 *
47 */
48 public class SetPublishFlagForSubtreeHandlerE4 extends RemotingCdmHandlerE4 {
49
50 /**
51 * @param label
52 */
53 public SetPublishFlagForSubtreeHandlerE4() {
54 //FIXME add missing l10n property
55 // super(TaxonNavigatorLabels.CHANGE_PUBLISH_FOR_SUBTREE);
56 super(""); //$NON-NLS-1$
57 }
58
59
60 private TaxonNodeDto taxonNode;
61 private PublishForSubtreeConfigurator configurator;
62 private static final String NO = Messages.NO;
63 private static final String CANCEL = Messages.RemotingMoveTaxonNodeHandler_CANCEL;
64 private static final String YES = Messages.YES;
65
66 @Override
67 public IStatus allowOperations(IStructuredSelection selection, Shell shell, MPart activePart,
68 MHandledMenuItem menuItem) {
69 // check that only a single taxon tree node has been selected
70 if(selection.size() > 1) { }
71
72 // check for no taxon tree node selected
73 if(selection.size() == 0) {
74 return new Status(IStatus.ERROR,
75 "unknown", //$NON-NLS-1$
76 TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE);
77 }
78
79 // check that selected object is a taxon node
80 Object obj = selection.iterator().next();
81 if(obj instanceof TaxonNodeDto) {
82 taxonNode = (TaxonNodeDto)obj;
83 } else if(obj instanceof Classification){
84 taxonNode = new TaxonNodeDto(((Classification)obj).getRootNode());
85 }else{
86 return new Status(IStatus.ERROR,
87 "unknown", //$NON-NLS-1$
88 TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
89 }
90 Collection<IE4SavablePart> dirtyParts = EditorUtil.checkForTaxonChanges(null, partService);
91
92 if (dirtyParts != null && !dirtyParts.isEmpty()){
93 String[] buttonLables = {YES, NO,CANCEL};
94 MessageDialog dialog = new MessageDialog(null, Messages.SetPublishFlagForSubtreeHandlerE4_UnsavedChanges, null, Messages.SetPublishFlagForSubtreeHandlerE4_UnsavedChangesQuestion, MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
95 dialog.open();
96 int returnCode = dialog.getReturnCode();
97 boolean proceed = false;
98 if (returnCode == 0){
99 proceed = true;
100 }else if (returnCode == 2){
101 return Status.CANCEL_STATUS;
102 }
103
104 Iterator<IE4SavablePart> partIterator = dirtyParts.iterator();
105 while( partIterator.hasNext() ){
106 IE4SavablePart part = partIterator.next();
107 if (proceed) {
108 if (part != null){
109 part.save(new NullProgressMonitor());
110 }
111 }
112 }
113 }
114
115
116 configurator = new PublishForSubtreeConfigurator(taxonNode.getUuid(), false, null);
117 SetPublishForSubtreeWizard wizard = new SetPublishForSubtreeWizard(configurator);
118
119 WizardDialog dialog = new WizardDialog(shell, wizard);
120
121 if (dialog.open() == Window.OK) {
122 return Status.OK_STATUS;
123 }else{
124 return Status.CANCEL_STATUS;
125 }
126 }
127
128 @CanExecute
129 private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
130 boolean canExecute = false;
131 canExecute = selection.size()==1
132 && selection.getFirstElement() instanceof TaxonNodeDto;
133 menuItem.setVisible(canExecute);
134 return canExecute;
135 }
136
137
138 @Override
139 public AbstractOperation prepareOperation(IStructuredSelection selection, Shell shell, MPart activePart,
140 MHandledMenuItem menuItem) {
141 SetPublishForSubtreeOperation operation =
142 new SetPublishForSubtreeOperation(getTrigger(),
143 false,
144 taxonNode.getUuid(),
145 partService,
146 activePart,
147 application,
148 modelService,
149 configurator);
150
151 return operation;
152 }
153
154
155 @Override
156 public void onComplete() {
157
158 }
159
160
161 @Override
162 protected Object getTrigger() {
163 return this;
164 }
165
166 }