Project

General

Profile

« Previous | Next » 

Revision ebfb13c6

Added by Katja Luther almost 6 years ago

move taxon is a longRunning task now

View differences:

eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/TreeNodeDropAdapterE4.java
25 25
import org.eclipse.swt.dnd.DND;
26 26
import org.eclipse.swt.dnd.DropTargetEvent;
27 27
import org.eclipse.swt.dnd.TransferData;
28
import org.eclipse.swt.widgets.Display;
28 29

  
30
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
29 31
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
30 32
import eu.etaxonomy.cdm.api.service.UpdateResult;
33
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
31 34
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
32 35
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
33 36
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
37
import eu.etaxonomy.taxeditor.model.AbstractUtility;
34 38
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
39
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
35 40
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
36 41
import eu.etaxonomy.taxeditor.store.CdmStore;
37 42

  
......
39 44
 * @author k.luther
40 45
 * @date 02.06.2015
41 46
 */
42
public class TreeNodeDropAdapterE4 extends ViewerDropAdapter {
47
public class TreeNodeDropAdapterE4 extends ViewerDropAdapter implements IPostMoniteredOperationEnabled{
43 48

  
44 49
    protected static final String TREE_NODE_DROP_ADAPTER_UNSAVED_PARENT_MESSAGE = Messages.TreeNodeDropAdapter_UNSAVED_PARENT_MESSAGE;
45 50
    protected static final String TREE_NODE_DROP_ADAPTER_UNSAVED_PARENT = Messages.TreeNodeDropAdapter_UNSAVED_PARENT;
......
186 191
            uuids.add(node.getUuid());
187 192
        }
188 193
        IUndoContext workspaceUndoContext = taxonNavigator.getUndoContext();
194
         int movingTypeInt = 0;
189 195
		if (!PreferencesUtil.getSortNodesNaturally()){
190
			if (workspaceUndoContext == null) {
191
				logger.error("Workspace undo context is null. DND operation cancelled"); //$NON-NLS-1$
192
				return false;
193
			}
194
			result =CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 0);
195

  
196
			logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
197
			return true;
196
//			if (workspaceUndoContext == null) {
197
//				logger.error("Workspace undo context is null. DND operation cancelled"); //$NON-NLS-1$
198
//				return false;
199
//			}
200
//			result =CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 0);
201
//
202
//			logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
203
//			return true;
198 204
		}else{
199 205
			String[] buttonLables = {TREE_NODE_DROP_ADAPTER_CHILD, TREE_NODE_DROP_ADAPTER_BEHIND,TREE_NODE_DROP_ADAPTER_CANCEL};
200 206
			MessageDialog dialog = new MessageDialog(null, TARGET_NODE, null, DO_YOU_WANT_TO_MOVE_THE_TAXONNODE_AS_CHILD_OR_BEHIND_THE_TARGET_NODE, MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
......
207 213
					return false;
208 214
				}
209 215

  
210
				result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 0);
211

  
212
				logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
213
				return true;
216
//				result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 0);
217
//
218
//				logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
219
//				return true;
214 220
			}else if (returnCode == 1){
215 221
				if (workspaceUndoContext == null) {
216 222
					logger.error("Workspace undo context is null. DND operation cancelled"); //$NON-NLS-1$
217 223
					return false;
218 224
				}
219 225

  
220

  
221
				CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 2);
222
				logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
223
				return true;
226
				movingTypeInt = 2;
227
//				CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(uuids,targetITaxonTreeNode.getUuid(), 2);
228
//				logger.info("Moved taxa to new parent " + targetITaxonTreeNode); //$NON-NLS-1$
229
//				return true;
224 230
			}
225 231
//			} else if (returnCode == 2){
226 232
//                IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();
......
243 249

  
244 250

  
245 251
		}
252
		moveNodes(uuids, targetITaxonTreeNode.getUuid(), movingTypeInt);
253
        return true;
246 254
	}
247 255

  
256
	private void moveNodes(Set<UUID> taxonNodesToMoveUuid, UUID newParentTreeNodeUuid, int movingTypeInt){
257
	    UUID uuid = CdmApplicationState.getLongRunningTasksService().monitLongRunningTask(taxonNodesToMoveUuid,
258
                newParentTreeNodeUuid, movingTypeInt);
259

  
260
                Display.getDefault().asyncExec(new Runnable() {
261
                    @Override
262
                    public void run() {
263
                        AbstractUtility.executeMoniteredOperation("Move Taxon to new parent: ",
264
                                uuid,
265
                                1000,
266
                                false,
267
                                TreeNodeDropAdapterE4.this,
268
                                null);
269
                    }
270
                });
271
	}
272

  
273

  
248 274
	@Override
249 275
	public void dragOver(DropTargetEvent event) {
250 276
		super.dragOver(event);
251 277
		event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_INSERT_AFTER;
252 278
	}
253 279

  
280
    /**
281
     * {@inheritDoc}
282
     */
283
    @Override
284
    public void postOperation(IRemotingProgressMonitor monitor) {
285
        taxonNavigator.refresh();
286
    }
287

  
254 288
}
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/RemotingMoveTaxonNodeHandlerE4.java
32 32
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
33 33
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
34 34
import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
35
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
35 36
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TreeNodeDropAdapterE4.MovingType;
36 37
import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation;
37 38
import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
......
46 47
public class RemotingMoveTaxonNodeHandlerE4 extends RemotingCdmHandlerE4 {
47 48

  
48 49
    private Set<UUID> oldTaxonNodeUUIDs = new HashSet<>();
50
    private TaxonNavigatorE4 navigator;
49 51

  
50 52
    public RemotingMoveTaxonNodeHandlerE4() {
51 53
        super(TaxonNavigatorLabels.MOVE_TAXON_LABEL);
......
72 74
        // check that selected object is a taxon node
73 75
        Object obj ;
74 76
        Iterator iter = selection.iterator();
77
        oldTaxonNodeUUIDs = new HashSet<>();
75 78
        while (iter.hasNext()){
76 79
            obj = iter.next();
77 80
            if(obj instanceof TaxonNodeDto) {
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveTaxonOperation.java
13 13

  
14 14
import org.eclipse.core.runtime.IAdaptable;
15 15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.swt.widgets.Display;
16 17

  
17 18
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
18 19
import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
19 20
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
20 21
import eu.etaxonomy.cdm.api.service.UpdateResult;
22
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
23
import eu.etaxonomy.taxeditor.event.EventUtility;
24
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
25
import eu.etaxonomy.taxeditor.model.AbstractUtility;
21 26
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
27
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
22 28
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TreeNodeDropAdapterE4.MovingType;
29
import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
23 30
import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation;
24 31

  
25 32
/**
......
27 34
 * @date 19 Jun 2015
28 35
 *
29 36
 */
30
public class RemotingMoveTaxonOperation extends RemotingCdmUpdateOperation {
37
public class RemotingMoveTaxonOperation extends RemotingCdmUpdateOperation implements IPostMoniteredOperationEnabled {
31 38

  
32 39
    private final static String LABEL = Messages.RemotingMoveTaxonOperation_MOVE_OP;
33 40

  
34 41
    private Set<UUID> taxonNodesToMoveUuid;
35 42
    private final UUID newParentTreeNodeUuid;
36 43
    private final MovingType moveToParentNode;
44
    private TaxonNavigatorE4 taxonNavigator;
37 45

  
38 46
    public RemotingMoveTaxonOperation(Object source,
39 47
            boolean async,
......
44 52
        taxonNodesToMoveUuid = taxonNodeToMoveUuid;
45 53
        this.newParentTreeNodeUuid = newParentTreeNodeUuid;
46 54
        this.moveToParentNode = moveToParentNode;
55

  
47 56
    }
48 57

  
49 58
//    public RemotingMoveTaxonOperation(Object source,
......
79 88
     */
80 89
    @Override
81 90
    protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception {
91
//        switch (this.moveToParentNode) {
92
//            case CHILD:
93
//                return CdmApplicationState.getService(ITaxonNodeService.class).moveTaxonNodes(taxonNodesToMoveUuid,
94
//                        newParentTreeNodeUuid, 0);
95
//            case BEHIND:
96
//                runMoniteredOperation();
97
//                return updateResult;
98
//             default:
99
//                    UpdateResult result = new UpdateResult();
100
//                    result.setAbort();
101
//                    result.addException(new Exception("The moving type is invalid.")); //$NON-NLS-1$
102
//                    return result;
103
//        }
104
        runMoniteredOperation();
105
//        taxonNavigator.refresh();
106
        return updateResult;
107
    }
108

  
109
    public void runMoniteredOperation() {
110
        ITaxonNodeService nodeService;
111
        final UUID uuid;
112
        int movingTypeInt = -1;
82 113
        switch (this.moveToParentNode) {
83
            case CHILD:
84
                return CdmApplicationState.getService(ITaxonNodeService.class).moveTaxonNodes(taxonNodesToMoveUuid,
85
                        newParentTreeNodeUuid, 0);
86
            case BEHIND:
87
                return CdmApplicationState.getService(ITaxonNodeService.class).moveTaxonNodes(taxonNodesToMoveUuid,
88
                newParentTreeNodeUuid, 2);
89
             default:
90
                    UpdateResult result = new UpdateResult();
91
                    result.setAbort();
92
                    result.addException(new Exception("The moving type is invalid.")); //$NON-NLS-1$
93
                    return result;
114
        case CHILD:
115
            movingTypeInt = 0;
116
            break;
117
        case BEHIND:
118
            movingTypeInt = 2;
119
            break;
120

  
121
         default:
122
                updateResult = new UpdateResult();
123
                updateResult.setAbort();
124
                updateResult.addException(new Exception("The moving type is invalid.")); //$NON-NLS-1$
125

  
126
         }
127
        if (movingTypeInt >-1){
128
            uuid = CdmApplicationState.getLongRunningTasksService().monitLongRunningTask(taxonNodesToMoveUuid,
129
                newParentTreeNodeUuid, movingTypeInt);
130

  
131
                Display.getDefault().asyncExec(new Runnable() {
132
                    @Override
133
                    public void run() {
134
                        AbstractUtility.executeMoniteredOperation("Move Taxon to new parent: ",
135
                                uuid,
136
                                1000,
137
                                false,
138
                                RemotingMoveTaxonOperation.this,
139
                                null);
140
                    }
141
                });
94 142
        }
143
//        monitor.done();
144

  
145
    }
146

  
147
    /**
148
     * {@inheritDoc}
149
     */
150
    @Override
151
    public void postOperation(IRemotingProgressMonitor monitor) {
152
        monitor.done();
153
        EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAVIGATOR, true);
154

  
95 155
    }
96 156

  
97 157
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperation.java
62 62
     */
63 63
    @Override
64 64
    protected boolean doExecute(IProgressMonitor monitor, IAdaptable info) {
65
        updateResult = new UpdateResult();
65 66
        try {
66 67
            updateResult = doUpdateExecute(monitor, info);
67 68
        } catch (Exception e) {
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/util/ProgressMonitorClientManager.java
143 143
                serverTotalWorkDone = (int) remotingMonitor.getWorkDone();
144 144
                logger.info("Work done from start: " + serverTotalWorkDone);
145 145
                String percentage = new DecimalFormat("#.##").format(remotingMonitor.getPercentage());
146

  
146 147
                // set dialog text
147 148
                monitor.setTaskName(label + " " + percentage + "% done ");
148 149
                monitor.subTask(remotingMonitor.getSubTask());

Also available in: Unified diff