annotate dwtx/core/commands/CommandManager.d @ 90:7ffeace6c47f

Update 3.4M7 to 3.4
author Frank Benoit <benoit@tionex.de>
date Sun, 06 Jul 2008 23:30:07 +0200
parents 46a6e0e6ccd4
children 04b47443bb01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
2 * Copyright (c) 2004, 2008 IBM Corporation and others.
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.core.commands.CommandManager;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 // import java.util.ArrayList;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 // import java.util.Collections;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 // import java.util.HashMap;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 // import java.util.HashSet;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 // import java.util.Iterator;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 // import java.util.Map;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 // import java.util.Set;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 // import java.util.WeakHashMap;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import tango.util.collection.HashMap;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import tango.util.collection.HashSet;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import tango.util.collection.ArraySeq;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import tango.util.collection.model.Map;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import tango.util.collection.model.Set;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import tango.util.collection.model.SetView;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwtx.core.commands.common.HandleObjectManager;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwtx.core.commands.common.NotDefinedException;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.core.runtime.ListenerList;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwtx.core.commands.ICategoryListener;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwtx.core.commands.ICommandListener;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwtx.core.commands.IExecutionListener;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwtx.core.commands.IExecutionListenerWithChecks;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import dwtx.core.commands.IParameterTypeListener;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwtx.core.commands.ICommandManagerListener;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwtx.core.commands.CommandEvent;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 import dwtx.core.commands.CommandManagerEvent;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwtx.core.commands.Command;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 import dwtx.core.commands.Category;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 import dwtx.core.commands.CategoryEvent;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 import dwtx.core.commands.IHandler;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 import dwtx.core.commands.ParameterType;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 import dwtx.core.commands.IParameter;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 import dwtx.core.commands.Parameterization;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 import dwtx.core.commands.ParameterizedCommand;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 import dwtx.core.commands.ParameterTypeEvent;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 import dwtx.core.commands.SerializationException;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 import dwtx.core.commands.NotEnabledException;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 import dwtx.core.commands.NotHandledException;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 import dwtx.core.commands.ExecutionException;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 import dwtx.core.commands.ExecutionEvent;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 import dwt.dwthelper.utils;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 static import tango.text.Text;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 alias tango.text.Text.Text!(char) StringBuffer;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
62 import dwt.dwthelper.WeakHashMap;
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
63
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * <p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * A central repository for commands -- both in the defined and undefined
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * states. Commands can be created and retrieved using this manager. It is
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * possible to listen to changes in the collection of commands by attaching a
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * listener to the manager.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * </p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * @see CommandManager#getCommand(String)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * @since 3.1
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 public final class CommandManager : HandleObjectManager,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 ICategoryListener, ICommandListener, IParameterTypeListener {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * A listener that forwards incoming execution events to execution listeners
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * on this manager. The execution events will come from any command on this
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * manager.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * @since 3.1
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 private final class ExecutionListener :
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 IExecutionListenerWithChecks {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 public void notDefined(String commandId, NotDefinedException exception) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 if ( auto listener = cast(IExecutionListenerWithChecks)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 listener.notDefined(commandId, exception);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 public void notEnabled(String commandId, NotEnabledException exception) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 if ( auto listener = cast(IExecutionListenerWithChecks)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 listener.notEnabled(commandId, exception);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 public final void notHandled(String commandId,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 NotHandledException exception) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 if ( auto listener = cast(IExecutionListener)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 listener.notHandled(commandId, exception);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 public final void postExecuteFailure(String commandId,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 ExecutionException exception) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 if ( auto listener = cast(IExecutionListener)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 listener.postExecuteFailure(commandId, exception);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 public final void postExecuteSuccess(String commandId,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 Object returnValue) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 if ( auto listener = cast(IExecutionListener)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 listener.postExecuteSuccess(commandId, returnValue);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 public final void preExecute(String commandId,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 ExecutionEvent event) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 if (executionListeners !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 Object[] listeners = executionListeners.getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 Object object = listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 if ( auto listener = cast(IExecutionListener)object ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 listener.preExecute(commandId, event);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * The identifier of the category in which all auto-generated commands will
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * appear. This value must never be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 public static const String AUTOGENERATED_CATEGORY_ID = "dwtx.core.commands.categories.autogenerated"; //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * The escape character to use for serialization and deserialization of
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * parameterized commands.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 static const char ESCAPE_CHAR = '%';
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * The character that separates a parameter id from its value.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 static const char ID_VALUE_CHAR = '=';
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * The character that indicates the end of a list of parameters.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 static const char PARAMETER_END_CHAR = ')';
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 * The character that separators parameters from each other.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 static const char PARAMETER_SEPARATOR_CHAR = ',';
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 * The character that indicates the start of a list of parameters.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 static const char PARAMETER_START_CHAR = '(';
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 this(){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 categoriesById = new HashMap!(String,Category);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 definedCategoryIds = new HashSet!(String);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 definedParameterTypeIds = new HashSet!(String);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 parameterTypesById = new HashMap!(String,ParameterType);
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
204 helpContextIdsByHandler = new WeakHashMap();
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 * Unescapes special characters in the command id, parameter ids and
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
209 * parameter values for {@link #deserialize(String)}. The special characters
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 * {@link #PARAMETER_START_CHAR}, {@link #PARAMETER_END_CHAR},
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * {@link #ID_VALUE_CHAR}, {@link #PARAMETER_SEPARATOR_CHAR} and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * {@link #ESCAPE_CHAR} are escaped by prepending an {@link #ESCAPE_CHAR}
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * character.
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
214 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
215 * See also ParameterizedCommand.escape(String)
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
216 * </p>
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * @param escapedText
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * a <code>String</code> that may contain escaped special
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * characters for command serialization.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * @return a <code>String</code> representing <code>escapedText</code>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * with any escaped characters replaced by their literal values
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * @throws SerializationException
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * if <code>escapedText</code> contains an invalid escape
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * sequence
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 private static final String unescape(String escapedText) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 // defer initialization of a StringBuffer until we know we need one
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 StringBuffer buffer;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 for (int i = 0; i < escapedText.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 char c = escapedText.charAt(i);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 if (c !is ESCAPE_CHAR) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 // normal unescaped character
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 if (buffer !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 buffer.append(c);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 if (buffer is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 buffer = new StringBuffer(escapedText.substring(0, i));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 if (++i < escapedText.length) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 c = escapedText.charAt(i);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 switch (c) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 case PARAMETER_START_CHAR:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 case PARAMETER_END_CHAR:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 case ID_VALUE_CHAR:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 case PARAMETER_SEPARATOR_CHAR:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 case ESCAPE_CHAR:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 buffer.append(c);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 break;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 default:
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 throw new SerializationException(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 "Invalid character '" ~ c ~ "' in escape sequence"); //$NON-NLS-1$ //$NON-NLS-2$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 throw new SerializationException(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 "Unexpected termination of escape sequence"); //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 if (buffer is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 return escapedText;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 return buffer.toString();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * The map of category identifiers (<code>String</code>) to categories (
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * <code>Category</code>). This collection may be empty, but it is never
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 private const Map!(String,Category) categoriesById;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * The set of identifiers for those categories that are defined. This value
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * may be empty, but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 private const Set!(String) definedCategoryIds;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * The set of identifiers for those command parameter types that are
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * defined. This value may be empty, but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 private const Set!(String) definedParameterTypeIds;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * The execution listener for this command manager. This just forwards
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * events from commands controlled by this manager to listeners on this
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 * manager.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 */
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
301 private IExecutionListenerWithChecks executionListener = null;
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 * The collection of execution listeners. This collection is
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 * <code>null</code> if there are no listeners.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 private ListenerList executionListeners = null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * The help context identifiers ({@link String}) for a handler ({@link IHandler}).
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * This map may be empty, but it is never <code>null</code>. Entries are
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * removed if all strong references to the handler are removed.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 */
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
316 private const WeakHashMap helpContextIdsByHandler;
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * The map of parameter type identifiers (<code>String</code>) to
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * parameter types ( <code>ParameterType</code>). This collection may be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * empty, but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 private const Map!(String,ParameterType) parameterTypesById;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * Adds a listener to this command manager. The listener will be notified
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * when the set of defined commands changes. This can be used to track the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 * global appearance and disappearance of commands.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 * @param listener
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 * The listener to attach; must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 public final void addCommandManagerListener(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 ICommandManagerListener listener) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 addListenerObject(cast(Object)listener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * Adds an execution listener to this manager. This listener will be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * notified if any of the commands controlled by this manager execute. This
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * can be used to support macros and instrumentation of commands.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * @param listener
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * The listener to attach; must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 public final void addExecutionListener(IExecutionListener listener) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 if (listener is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 throw new NullPointerException(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 "Cannot add a null execution listener"); //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 if (executionListeners is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 executionListeners = new ListenerList(ListenerList.IDENTITY);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 // Add an execution listener to every command.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 executionListener = new ExecutionListener();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 foreach( k, v; handleObjectsById ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 Command command = cast(Command) v;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 command.addExecutionListener(executionListener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 executionListeners.add(cast(Object)listener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 /*
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * (non-Javadoc)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * @see dwtx.core.commands.ICategoryListener#categoryChanged(dwtx.core.commands.CategoryEvent)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 public final void categoryChanged(CategoryEvent categoryEvent) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 if (categoryEvent.isDefinedChanged()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 Category category = categoryEvent.getCategory();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 String categoryId = category.getId();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 bool categoryIdAdded = category.isDefined();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 if (categoryIdAdded) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 definedCategoryIds.add(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 definedCategoryIds.remove(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 if (isListenerAttached()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 fireCommandManagerChanged(new CommandManagerEvent(this, null,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 false, false, categoryId, categoryIdAdded, true));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 /*
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 * (non-Javadoc)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 * @see dwtx.commands.ICommandListener#commandChanged(dwtx.commands.CommandEvent)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 public final void commandChanged(CommandEvent commandEvent) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 if (commandEvent.isDefinedChanged()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 Command command = commandEvent.getCommand();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 String commandId = command.getId();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 bool commandIdAdded = command.isDefined();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 if (commandIdAdded) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 definedHandleObjects.add(command);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 definedHandleObjects.remove(command);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 if (isListenerAttached()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 fireCommandManagerChanged(new CommandManagerEvent(this,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 commandId, commandIdAdded, true, null, false, false));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 * Sets the name and description of the category for uncategorized commands.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 * This is the category that will be returned if
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 * {@link #getCategory(String)} is called with <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * @param name
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * The name of the category for uncategorized commands; must not
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 * be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * @param description
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 * The description of the category for uncategorized commands;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 * may be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 public final void defineUncategorizedCategory(String name,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 String description) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 Category category = getCategory(AUTOGENERATED_CATEGORY_ID);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 category.define(name, description);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 * <p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 * Returns a {@link ParameterizedCommand} with a command and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * parameterizations as specified in the provided
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * <code>serializedParameterizedCommand</code> string. The
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * <code>serializedParameterizedCommand</code> must use the format
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 * returned by {@link ParameterizedCommand#serialize()} and described in the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * Javadoc for that method.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * </p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * <p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 * If a parameter id encoded in the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * <code>serializedParameterizedCommand</code> does not exist in the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 * encoded command, that parameter id and value are ignored. A given
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * parameter id should not be used more than once in
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 * <code>serializedParameterizedCommand</code>. This will not result in
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 * an exception, but in this case the value of the parameter when the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * command is executed is unspecified.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * </p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 * <p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 * This method will never return <code>null</code>, however it may throw
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 * an exception if there is a problem processing the serialization string or
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 * the encoded command is undefined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 * </p>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 * @param serializedParameterizedCommand
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 * a string representing a command id and parameter ids and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 * values; must not be <code>null</code>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 * @return a {@link ParameterizedCommand} with the command and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 * parameterizations encoded in the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 * <code>serializedParameterizedCommand</code>; never
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * @throws NotDefinedException
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * if the command indicated in
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * <code>serializedParameterizedCommand</code> is not defined
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * @throws SerializationException
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * if there is an error deserializing
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 * <code>serializedParameterizedCommand</code>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * @see ParameterizedCommand#serialize()
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 public final ParameterizedCommand deserialize(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 String serializedParameterizedCommand) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 int lparenPosition = unescapedIndexOf(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 serializedParameterizedCommand, PARAMETER_START_CHAR);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 String commandIdEscaped;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 String serializedParameters;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 if (lparenPosition is -1) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 commandIdEscaped = serializedParameterizedCommand;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 serializedParameters = null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 commandIdEscaped = serializedParameterizedCommand.substring(0,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 lparenPosition);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 if (serializedParameterizedCommand
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 .charAt(serializedParameterizedCommand.length - 1) !is PARAMETER_END_CHAR) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 throw new SerializationException(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 "Parentheses must be balanced in serialized ParameterizedCommand"); //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 serializedParameters = serializedParameterizedCommand.substring(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 lparenPosition + 1, // skip PARAMETER_START_CHAR
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 serializedParameterizedCommand.length - 1); // skip
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 // PARAMETER_END_CHAR
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 String commandId = unescape(commandIdEscaped);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 Command command = getCommand(commandId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 IParameter[] parameters = command.getParameters();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 Parameterization[] parameterizations = getParameterizations(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 serializedParameters, parameters);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 return new ParameterizedCommand(command, parameterizations);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * Notifies all of the listeners to this manager that the set of defined
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 * command identifiers has changed.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 * @param event
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 * The event to send to all of the listeners; must not be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 private final void fireCommandManagerChanged(CommandManagerEvent event) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 if (event is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 throw new NullPointerException();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 Object[] listeners = getListeners();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 for (int i = 0; i < listeners.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 ICommandManagerListener listener = cast(ICommandManagerListener) listeners[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 listener.commandManagerChanged(event);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 * Returns all of the commands known by this manager -- defined and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 * undefined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * @return All of the commands; may be empty, but never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 public final Command[] getAllCommands() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 Command[] res;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 res.length = handleObjectsById.size();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 int idx;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 foreach( cmd; handleObjectsById.elements() ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 res[idx] = cast(Command)cmd;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 idx++;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 return res;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 * Gets the category with the given identifier. If no such category
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * currently exists, then the category will be created (but be undefined).
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * @param categoryId
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 * The identifier to find; must not be <code>null</code>. If
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 * the category is <code>null</code>, then a category suitable
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 * for uncategorized items is defined and returned.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 * @return The category with the given identifier; this value will never be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 * <code>null</code>, but it might be undefined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 * @see Category
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 public final Category getCategory(String categoryId) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 if (categoryId is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 return getCategory(AUTOGENERATED_CATEGORY_ID);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 checkId(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 Category category = cast(Category) categoriesById.get(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 if (category is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 category = new Category(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 categoriesById.add(categoryId, category);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 category.addCategoryListener(this);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 return category;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * Gets the command with the given identifier. If no such command currently
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * exists, then the command will be created (but will be undefined).
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 * @param commandId
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 * The identifier to find; must not be <code>null</code> and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 * must not be zero-length.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 * @return The command with the given identifier; this value will never be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 * <code>null</code>, but it might be undefined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 * @see Command
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 public final Command getCommand(String commandId) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 checkId(commandId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 Command command = cast(Command) handleObjectsById.get(commandId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 if (command is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 command = new Command(commandId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 handleObjectsById.add(commandId, command);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 command.addCommandListener(this);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 if (executionListener !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 command.addExecutionListener(executionListener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 return command;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 * Returns the categories that are defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 * @return The defined categories; this value may be empty, but it is never
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 public final Category[] getDefinedCategories() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 Category[] categories = new Category[definedCategoryIds.size()];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 // Iterator categoryIdItr = definedCategoryIds.iterator();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 int i = 0;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 foreach( categoryId; definedCategoryIds ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 // while (categoryIdItr.hasNext()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 // String categoryId = cast(String) categoryIdItr.next();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 categories[i++] = getCategory(categoryId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 return categories;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 * Returns the set of identifiers for those category that are defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 * @return The set of defined category identifiers; this value may be empty,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 * but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 public final SetView!(String) getDefinedCategoryIds() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 return definedCategoryIds;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 * Returns the set of identifiers for those commands that are defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 * @return The set of defined command identifiers; this value may be empty,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 * but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 public final SetView!(String) getDefinedCommandIds() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 return getDefinedHandleObjectIds();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 * Returns the commands that are defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 * @return The defined commands; this value may be empty, but it is never
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 public final Command[] getDefinedCommands() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 return cast(Command[]) definedHandleObjects
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 .toArray();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 * Returns the set of identifiers for those parameter types that are
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 * defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 * @return The set of defined command parameter type identifiers; this value
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 * may be empty, but it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 public final SetView!(String) getDefinedParameterTypeIds() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 return definedParameterTypeIds;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 * Returns the command parameter types that are defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 * @return The defined command parameter types; this value may be empty, but
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 * it is never <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 public final ParameterType[] getDefinedParameterTypes() {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 ParameterType[] parameterTypes = new ParameterType[definedParameterTypeIds
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 .size()];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 // Iterator iterator = definedParameterTypeIds.iterator();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 int i = 0;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 foreach( parameterTypeId; definedParameterTypeIds ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 // while (iterator.hasNext()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 // String parameterTypeId = cast(String) iterator.next();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 parameterTypes[i++] = getParameterType(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 return parameterTypes;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 * Gets the help context identifier for a particular command. The command's
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 * handler is first checked for a help context identifier. If the handler
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 * does not have a help context identifier, then the help context identifier
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 * for the command is returned. If neither has a help context identifier,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 * then <code>null</code> is returned.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 * @param command
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 * The command for which the help context should be retrieved;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 * must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 * @return The help context identifier to use for the given command; may be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 * @throws NotDefinedException
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 * If the given command is not defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 public final String getHelpContextId(Command command) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 // Check if the command is defined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 if (!command.isDefined()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 throw new NotDefinedException("The command is not defined. " //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 ~ command.getId());
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 // Check the handler.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 IHandler handler = command.getHandler();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 if (handler !is null) {
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
712 String helpContextId = stringcast( helpContextIdsByHandler.get( cast(Object) handler) );
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 if (helpContextId !is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 return helpContextId;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 // Simply return whatever the command has as a help context identifier.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 return command.getHelpContextId();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 * Returns an array of parameterizations for the provided command by
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 * deriving the parameter ids and values from the provided
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 * <code>serializedParameters</code> string.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 * @param serializedParameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 * a String encoding parameter ids and values; must not be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 * @param parameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 * array of parameters of the command being deserialized; may be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 * <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 * @return an array of parameterizations; may be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 * @throws SerializationException
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 * if there is an error deserializing the parameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 private final Parameterization[] getParameterizations(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 String serializedParameters, IParameter[] parameters) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 if (serializedParameters is null
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 || (serializedParameters.length is 0)) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 return null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 if ((parameters is null) || (parameters.length is 0)) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 return null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 auto paramList = new ArraySeq!(Parameterization);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 int commaPosition; // split off each param by looking for ','
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 do {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 commaPosition = unescapedIndexOf(serializedParameters, ',');
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 String idEqualsValue;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 if (commaPosition is -1) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 // no more parameters after this
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 idEqualsValue = serializedParameters;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 // take the first parameter...
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 idEqualsValue = serializedParameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 .substring(0, commaPosition);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 // ... and put the rest back into serializedParameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 serializedParameters = serializedParameters
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 .substring(commaPosition + 1);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 int equalsPosition = unescapedIndexOf(idEqualsValue, '=');
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 String parameterId;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 String parameterValue;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 if (equalsPosition is -1) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 // missing values are null
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 parameterId = unescape(idEqualsValue);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 parameterValue = null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 parameterId = unescape(idEqualsValue.substring(0,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 equalsPosition));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 parameterValue = unescape(idEqualsValue
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 .substring(equalsPosition + 1));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 for (int i = 0; i < parameters.length; i++) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 IParameter parameter = parameters[i];
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 if (parameter.getId().equals(parameterId)) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 paramList.append(new Parameterization(parameter,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 parameterValue));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 break;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 } while (commaPosition !is -1);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 return cast(Parameterization[]) paramList
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 .toArray();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * Gets the command {@link ParameterType} with the given identifier. If no
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * such command parameter type currently exists, then the command parameter
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * type will be created (but will be undefined).
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * @param parameterTypeId
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 * The identifier to find; must not be <code>null</code> and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * must not be zero-length.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * @return The {@link ParameterType} with the given identifier; this value
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 * will never be <code>null</code>, but it might be undefined.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 public final ParameterType getParameterType(String parameterTypeId) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 checkId(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 ParameterType parameterType = cast(ParameterType) parameterTypesById
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 .get(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 if (parameterType is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 parameterType = new ParameterType(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 parameterTypesById.add(parameterTypeId, parameterType);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 parameterType.addListener(this);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 return parameterType;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 * {@inheritDoc}
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 public final void parameterTypeChanged(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 ParameterTypeEvent parameterTypeEvent) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 if (parameterTypeEvent.isDefinedChanged()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 ParameterType parameterType = parameterTypeEvent
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 .getParameterType();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 String parameterTypeId = parameterType.getId();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 bool parameterTypeIdAdded = parameterType.isDefined();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 if (parameterTypeIdAdded) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 definedParameterTypeIds.add(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 definedParameterTypeIds.remove(parameterTypeId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 fireCommandManagerChanged(new CommandManagerEvent(this,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 parameterTypeId, parameterTypeIdAdded, true));
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 * Removes a listener from this command manager.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 * @param listener
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 * The listener to be removed; must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 public final void removeCommandManagerListener(
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856 ICommandManagerListener listener) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 removeListenerObject(cast(Object)listener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * Removes an execution listener from this command manager.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * @param listener
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * The listener to be removed; must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 public final void removeExecutionListener(IExecutionListener listener) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 if (listener is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 throw new NullPointerException("Cannot remove a null listener"); //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 if (executionListeners is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 return;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 executionListeners.remove(cast(Object)listener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 if (executionListeners.isEmpty()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 executionListeners = null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 // Remove the execution listener to every command.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 foreach( k, v; handleObjectsById ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 // Iterator commandItr = handleObjectsById.values().iterator();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 // while (commandItr.hasNext()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 Command command = cast(Command) v;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 command.removeExecutionListener(executionListener);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 executionListener = null;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 * Block updates all of the handlers for all of the commands. If the handler
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 * is <code>null</code> or the command id does not exist in the map, then
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895 * the command becomes unhandled. Otherwise, the handler is set to the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 * corresponding value in the map.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 * @param handlersByCommandId
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 * A map of command identifiers (<code>String</code>) to
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 * handlers (<code>IHandler</code>). This map may be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 * <code>null</code> if all handlers should be cleared.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 * Similarly, if the map is empty, then all commands will become
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 * unhandled.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 public final void setHandlersByCommandId(Map!(String,Object) handlersByCommandId) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 // Make that all the reference commands are created.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 foreach( k, v; handlersByCommandId ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 //Iterator commandIdItr = handlersByCommandId.keySet().iterator();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 //while (commandIdItr.hasNext()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 getCommand(k);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 // Now, set-up the handlers on all of the existing commands.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 // Iterator commandItr = handleObjectsById.values().iterator();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 foreach( k, v; handlersByCommandId ){
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 // while (commandItr.hasNext()) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 Command command = cast(Command) v;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 String commandId = command.getId();
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 Object value = handlersByCommandId.get(commandId);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 if ( auto handler = cast(IHandler) value ) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 command.setHandler(handler);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 } else {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 command.setHandler(null);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 * Sets the help context identifier to associate with a particular handler.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 * @param handler
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 * The handler with which to register a help context identifier;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 * must not be <code>null</code>.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 * @param helpContextId
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 * The help context identifier to register; may be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 * <code>null</code> if the help context identifier should be
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 * removed.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 * @since 3.2
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 public final void setHelpContextId(IHandler handler,
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 String helpContextId) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 if (handler is null) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 throw new NullPointerException("The handler cannot be null"); //$NON-NLS-1$
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 if (helpContextId is null) {
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
946 helpContextIdsByHandler.removeKey(cast(Object) handler);
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 } else {
40
da5ad8eedf5d debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents: 3
diff changeset
948 helpContextIdsByHandler.add(cast(Object) handler, stringcast(helpContextId));
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 /**
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 * Searches for the index of a <code>char</code> in a <code>String</code>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 * but disregards characters prefixed with the {@link #ESCAPE_CHAR} escape
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 * character. This is used by {@link #deserialize(String)} and
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 * {@link #getParameterizations(String, IParameter[])} to parse the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 * serialized parameterized command string.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 *
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 * @param escapedText
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 * the string to search for the index of <code>ch</code> in
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 * @param ch
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 * a character to search for in <code>escapedText</code>
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 * @return the index of the first unescaped occurrence of the character in
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 * <code>escapedText</code>, or <code>-1</code> if the
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 * character does not occur unescaped.
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 * @see String#indexOf(int)
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 */
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 private final int unescapedIndexOf(String escapedText, char ch) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 int pos = escapedText.indexOf(ch);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 // first char can't be escaped
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 if (pos is 0) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 return pos;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 while (pos !is -1) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 // look back for the escape character
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 if (escapedText.charAt(pos - 1) !is ESCAPE_CHAR) {
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 return pos;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 // scan for the next instance of ch
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 pos = escapedText.indexOf(ch, pos + 1);
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 }
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 return pos;
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989 }
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
990 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
991 * Fires the <code>notEnabled</code> event for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
992 * <code>executionListeners</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
993 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
994 * <b>Note:</b> This supports bridging actions to the command framework,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
995 * and should not be used outside the framework.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
996 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
997 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
998 * @param commandId
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
999 * The command id of the command about to execute, never
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1000 * <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1001 * @param exception
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1002 * The exception, never <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1003 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1004 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1005 public void fireNotEnabled(String commandId, NotEnabledException exception) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1006 if (executionListener !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1007 executionListener.notEnabled(commandId, exception);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1008 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1009 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1010
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1011 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1012 * Fires the <code>notDefined</code> event for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1013 * <code>executionListeners</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1014 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1015 * <b>Note:</b> This supports bridging actions to the command framework,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1016 * and should not be used outside the framework.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1017 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1018 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1019 * @param commandId
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1020 * The command id of the command about to execute, never
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1021 * <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1022 * @param exception
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1023 * The exception, never <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1024 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1025 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1026 public void fireNotDefined(String commandId, NotDefinedException exception) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1027 if (executionListener !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1028 executionListener.notDefined(commandId, exception);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1029 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1030 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1031
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1032 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1033 * Fires the <code>preExecute</code> event for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1034 * <code>executionListeners</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1035 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1036 * <b>Note:</b> This supports bridging actions to the command framework,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1037 * and should not be used outside the framework.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1038 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1039 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1040 * @param commandId
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1041 * The command id of the command about to execute, never
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1042 * <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1043 * @param event
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1044 * The event that triggered the command, may be <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1045 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1046 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1047 public void firePreExecute(String commandId, ExecutionEvent event) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1048 if (executionListener !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1049 executionListener.preExecute(commandId, event);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1050 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1051 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1052
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1053 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1054 * Fires the <code>postExecuteSuccess</code> event for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1055 * <code>executionListeners</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1056 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1057 * <b>Note:</b> This supports bridging actions to the command framework,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1058 * and should not be used outside the framework.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1059 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1060 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1061 * @param commandId
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1062 * The command id of the command executed, never
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1063 * <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1064 * @param returnValue
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1065 * The value returned from the command, may be <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1066 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1067 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1068 public void firePostExecuteSuccess(String commandId, Object returnValue) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1069 if (executionListener !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1070 executionListener.postExecuteSuccess(commandId, returnValue);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1071 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1072 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1073
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1074 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1075 * Fires the <code>postExecuteFailure</code> event for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1076 * <code>executionListeners</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1077 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1078 * <b>Note:</b> This supports bridging actions to the command framework,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1079 * and should not be used outside the framework.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1080 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1081 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1082 * @param commandId
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1083 * The command id of the command executed, never
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1084 * <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1085 * @param exception
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1086 * The exception, never <code>null</code>.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1087 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1088 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1089 public void firePostExecuteFailure(String commandId,
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1090 ExecutionException exception) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1091 if (executionListener !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1092 executionListener.postExecuteFailure(commandId, exception);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1093 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1094 }
3
6518c18a01f7 eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 }