Lines 1-5
Link Here
|
1 |
/* |
1 |
/* |
2 |
* Copyright (c) 2007 Borland Software Corporation |
2 |
* Copyright (c) 2007, 2008 Borland Software Corporation |
3 |
* |
3 |
* |
4 |
* All rights reserved. This program and the accompanying materials are made |
4 |
* All rights reserved. This program and the accompanying materials are made |
5 |
* available under the terms of the Eclipse Public License v1.0 which |
5 |
* available under the terms of the Eclipse Public License v1.0 which |
Lines 20-31
Link Here
|
20 |
import org.eclipse.emf.ecore.EObject; |
20 |
import org.eclipse.emf.ecore.EObject; |
21 |
import org.eclipse.emf.ecore.EReference; |
21 |
import org.eclipse.emf.ecore.EReference; |
22 |
import org.eclipse.emf.ecore.EStructuralFeature; |
22 |
import org.eclipse.emf.ecore.EStructuralFeature; |
|
|
23 |
import org.eclipse.emf.ecore.EcorePackage; |
23 |
import org.eclipse.emf.ecore.util.EcoreUtil; |
24 |
import org.eclipse.emf.ecore.util.EcoreUtil; |
24 |
import org.eclipse.gmf.codegen.gmfgen.GMFGenFactory; |
25 |
import org.eclipse.gmf.codegen.gmfgen.GMFGenFactory; |
25 |
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage; |
26 |
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage; |
26 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer; |
27 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer; |
|
|
28 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditContext; |
27 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot; |
29 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot; |
28 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule; |
30 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule; |
|
|
31 |
import org.eclipse.gmf.codegen.gmfgen.GenAuditable; |
29 |
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator; |
32 |
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator; |
30 |
import org.eclipse.gmf.codegen.gmfgen.GenExpressionInterpreter; |
33 |
import org.eclipse.gmf.codegen.gmfgen.GenExpressionInterpreter; |
31 |
import org.eclipse.gmf.codegen.gmfgen.GenExpressionProviderContainer; |
34 |
import org.eclipse.gmf.codegen.gmfgen.GenExpressionProviderContainer; |
Lines 41-46
Link Here
|
41 |
private GenAuditContainer myRootContainer; |
44 |
private GenAuditContainer myRootContainer; |
42 |
private Map<GenExpressionInterpreter, Collection<String>> myRequiredPlugins; |
45 |
private Map<GenExpressionInterpreter, Collection<String>> myRequiredPlugins; |
43 |
private GenExpressionProviderContainer myProvidersContainer; |
46 |
private GenExpressionProviderContainer myProvidersContainer; |
|
|
47 |
private EAttribute myGenAuditRule_ContextSelectorLocalClassName; |
48 |
private Map<GenAuditRule, String> myAuditContexts; |
44 |
|
49 |
|
45 |
MigrationDelegate() { |
50 |
MigrationDelegate() { |
46 |
} |
51 |
} |
Lines 95-107
Link Here
|
95 |
registerRenamedAttributes(GMFGenPackage.eINSTANCE.getGenAuditRoot(), renamings); |
100 |
registerRenamedAttributes(GMFGenPackage.eINSTANCE.getGenAuditRoot(), renamings); |
96 |
} |
101 |
} |
97 |
|
102 |
|
98 |
//registerNarrowReferenceType(GMFGenPackage.eINSTANCE.getGenFeatureSeqInitializer_Initializers(), GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); |
103 |
myGenAuditRule_ContextSelectorLocalClassName = createNewAttribute("contextSelectorLocalClassName", EcorePackage.eINSTANCE.getEString(), false); |
|
|
104 |
registerRenamedAttribute(GMFGenPackage.eINSTANCE.getGenAuditRule(), myGenAuditRule_ContextSelectorLocalClassName.getName(), myGenAuditRule_ContextSelectorLocalClassName); |
99 |
// ---> |
105 |
// ---> |
100 |
registerNarrowedAbstractType("GenFeatureInitializer", GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); //$NON-NLS-1$ |
106 |
registerNarrowedAbstractType("GenFeatureInitializer", GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); //$NON-NLS-1$ |
101 |
|
107 |
|
102 |
myRootContainer = null; |
108 |
myRootContainer = null; |
103 |
myProvidersContainer = null; |
109 |
myProvidersContainer = null; |
104 |
myRequiredPlugins = null; |
110 |
myRequiredPlugins = null; |
|
|
111 |
myAuditContexts = null; |
105 |
} |
112 |
} |
106 |
|
113 |
|
107 |
@Override |
114 |
@Override |
Lines 110-116
Link Here
|
110 |
GenExpressionInterpreter expressionInterpreter = (GenExpressionInterpreter) object; |
117 |
GenExpressionInterpreter expressionInterpreter = (GenExpressionInterpreter) object; |
111 |
String requiredPlugin = (String) value; |
118 |
String requiredPlugin = (String) value; |
112 |
saveRequiredPlugin(expressionInterpreter, requiredPlugin); |
119 |
saveRequiredPlugin(expressionInterpreter, requiredPlugin); |
113 |
} else if (myGenAuditRoot_Id.equals(feature)) { |
120 |
} else if (myGenAuditRoot_Id.equals(feature)) { |
114 |
GenAuditRoot root = (GenAuditRoot) object; |
121 |
GenAuditRoot root = (GenAuditRoot) object; |
115 |
String id = (String) value; |
122 |
String id = (String) value; |
116 |
GenAuditContainer rootContainer = getOrCreateRootContainerOnce(root); |
123 |
GenAuditContainer rootContainer = getOrCreateRootContainerOnce(root); |
Lines 156-168
Link Here
|
156 |
GenAuditRule rule = (GenAuditRule)value; |
163 |
GenAuditRule rule = (GenAuditRule)value; |
157 |
rule.setCategory(container); |
164 |
rule.setCategory(container); |
158 |
getOrCreateRoot(container).getRules().add(rule); |
165 |
getOrCreateRoot(container).getRules().add(rule); |
159 |
} else { |
166 |
} else if (myGenAuditRule_ContextSelectorLocalClassName.equals(feature)) { |
|
|
167 |
GenAuditRule rule = (GenAuditRule) object; |
168 |
String className = (String) value; |
169 |
saveAuditContext(rule, className); |
170 |
} else { |
160 |
// other cases are would be processed as defaults |
171 |
// other cases are would be processed as defaults |
161 |
return super.setValue(object, feature, value, position); |
172 |
return super.setValue(object, feature, value, position); |
162 |
} |
173 |
} |
163 |
return true; |
174 |
return true; |
164 |
} |
175 |
} |
165 |
|
176 |
|
|
|
177 |
private void saveAuditContext(GenAuditRule rule, String className) { |
178 |
if (myAuditContexts == null) { |
179 |
myAuditContexts = new LinkedHashMap<GenAuditRule, String>(); |
180 |
} |
181 |
myAuditContexts.put(rule, className); |
182 |
} |
183 |
|
184 |
private Map<GenAuditRule, String> getSavedAuditContexts() { |
185 |
return myAuditContexts; |
186 |
} |
187 |
|
166 |
private void saveRequiredPlugin(GenExpressionInterpreter expressionProvider, String requiredPlugin) { |
188 |
private void saveRequiredPlugin(GenExpressionInterpreter expressionProvider, String requiredPlugin) { |
167 |
if (myRequiredPlugins == null) { |
189 |
if (myRequiredPlugins == null) { |
168 |
myRequiredPlugins = new LinkedHashMap<GenExpressionInterpreter, Collection<String>>(); |
190 |
myRequiredPlugins = new LinkedHashMap<GenExpressionInterpreter, Collection<String>>(); |
Lines 181-210
Link Here
|
181 |
|
203 |
|
182 |
@Override |
204 |
@Override |
183 |
public void preResolve() { |
205 |
public void preResolve() { |
184 |
if (getSavedRequiredPlugins() == null) { |
206 |
if (getSavedRequiredPlugins() != null) { |
185 |
return; |
207 |
for (GenExpressionInterpreter expressionProvider : getSavedRequiredPlugins().keySet()) { |
|
|
208 |
GenExpressionProviderContainer container = expressionProvider.getContainer(); |
209 |
if (container == null) { |
210 |
container = getOrCreateParenlessProvidersContainerOnce(expressionProvider); |
211 |
container.getProviders().add(expressionProvider); |
212 |
} |
213 |
GenEditorGenerator editor = container.getEditorGen(); |
214 |
if (editor == null) { |
215 |
editor = GMFGenFactory.eINSTANCE.createGenEditorGenerator(); |
216 |
container.eResource().getContents().add(editor); |
217 |
editor.setExpressionProviders(container); |
218 |
} |
219 |
GenPlugin plugin = editor.getPlugin(); |
220 |
if (plugin == null) { |
221 |
plugin = GMFGenFactory.eINSTANCE.createGenPlugin(); |
222 |
editor.setPlugin(plugin); |
223 |
} |
224 |
plugin.getRequiredPlugins().addAll(getSavedRequiredPlugins().get(expressionProvider)); |
225 |
fireMigrationApplied(true); |
226 |
} |
227 |
getSavedRequiredPlugins().clear(); |
186 |
} |
228 |
} |
187 |
for (GenExpressionInterpreter expressionProvider : getSavedRequiredPlugins().keySet()) { |
229 |
if (getSavedAuditContexts() != null) { |
188 |
GenExpressionProviderContainer container = expressionProvider.getContainer(); |
230 |
for (GenAuditRule rule : getSavedAuditContexts().keySet()) { |
189 |
if (container == null) { |
231 |
GenAuditRoot root = getOrCreateRoot(rule); |
190 |
container = getOrCreateParenlessProvidersContainerOnce(expressionProvider); |
232 |
String className = getSavedAuditContexts().get(rule); |
191 |
container.getProviders().add(expressionProvider); |
233 |
GenAuditContext context = getOrCreateContext(root, className); |
192 |
} |
234 |
GenAuditable target = rule.getTarget(); |
193 |
GenEditorGenerator editor = container.getEditorGen(); |
235 |
if (target != null) { |
194 |
if (editor == null) { |
236 |
target.setContextSelector(context); |
195 |
editor = GMFGenFactory.eINSTANCE.createGenEditorGenerator(); |
237 |
fireMigrationApplied(true); |
196 |
container.eResource().getContents().add(editor); |
238 |
} |
197 |
editor.setExpressionProviders(container); |
|
|
198 |
} |
199 |
GenPlugin plugin = editor.getPlugin(); |
200 |
if (plugin == null) { |
201 |
plugin = GMFGenFactory.eINSTANCE.createGenPlugin(); |
202 |
editor.setPlugin(plugin); |
203 |
} |
239 |
} |
204 |
plugin.getRequiredPlugins().addAll(getSavedRequiredPlugins().get(expressionProvider)); |
240 |
getSavedAuditContexts().clear(); |
205 |
fireMigrationApplied(true); |
|
|
206 |
} |
241 |
} |
207 |
getSavedRequiredPlugins().clear(); |
242 |
} |
|
|
243 |
|
244 |
private GenAuditContext getOrCreateContext(GenAuditRoot root, String className) { |
245 |
GenAuditContext context = null; |
246 |
for (GenAuditContext next : root.getClientContexts()) { |
247 |
String explicit = next.getClassName(); |
248 |
if (className.equals(explicit) || (explicit == null && className.equals(next.getId()))) { |
249 |
context = next; |
250 |
break; |
251 |
} |
252 |
} |
253 |
if (context == null) { |
254 |
context = GMFGenFactory.eINSTANCE.createGenAuditContext(); |
255 |
String id = generateUnique(root, className); |
256 |
context.setId(id); |
257 |
if (!id.equals(className)) { |
258 |
context.setClassName(className); |
259 |
} |
260 |
root.getClientContexts().add(context); |
261 |
} |
262 |
return context; |
263 |
} |
264 |
|
265 |
private String generateUnique(GenAuditRoot root, String defaultId) { |
266 |
String id = defaultId; |
267 |
int i = 0; |
268 |
boolean haveSuchId = false; |
269 |
do { |
270 |
haveSuchId = false; |
271 |
for (GenAuditContext next : root.getClientContexts()) { |
272 |
if (id.equals(next.getId())) { |
273 |
haveSuchId = true; |
274 |
id = defaultId + (++i); |
275 |
break; |
276 |
} |
277 |
} |
278 |
} while (haveSuchId); |
279 |
return id; |
208 |
} |
280 |
} |
209 |
|
281 |
|
210 |
private GenExpressionProviderContainer getOrCreateParenlessProvidersContainerOnce(GenExpressionInterpreter expressionProvider) { |
282 |
private GenExpressionProviderContainer getOrCreateParenlessProvidersContainerOnce(GenExpressionInterpreter expressionProvider) { |
Lines 226-238
Link Here
|
226 |
private GenAuditRoot getOrCreateRoot(GenAuditContainer auditContainer) { |
298 |
private GenAuditRoot getOrCreateRoot(GenAuditContainer auditContainer) { |
227 |
GenAuditRoot result = auditContainer.getRoot(); |
299 |
GenAuditRoot result = auditContainer.getRoot(); |
228 |
if (result == null) { |
300 |
if (result == null) { |
229 |
result = GMFGenFactory.eINSTANCE.createGenAuditRoot(); |
301 |
result = createRoot(auditContainer); |
230 |
if (auditContainer.eContainer() == null) { |
|
|
231 |
auditContainer.eResource().getContents().add(result); |
232 |
fireMigrationApplied(true); |
233 |
} |
234 |
result.getCategories().add(auditContainer); |
302 |
result.getCategories().add(auditContainer); |
235 |
} |
303 |
} |
236 |
return result; |
304 |
return result; |
237 |
} |
305 |
} |
|
|
306 |
|
307 |
private GenAuditRoot getOrCreateRoot(GenAuditRule auditRule) { |
308 |
GenAuditRoot result = auditRule.getRoot(); |
309 |
if (result == null) { |
310 |
result = createRoot(auditRule); |
311 |
result.getRules().add(auditRule); |
312 |
} |
313 |
return result; |
314 |
} |
315 |
|
316 |
private GenAuditRoot createRoot(EObject child) { |
317 |
GenAuditRoot result = GMFGenFactory.eINSTANCE.createGenAuditRoot(); |
318 |
if (child.eContainer() == null) { |
319 |
child.eResource().getContents().add(result); |
320 |
fireMigrationApplied(true); |
321 |
} |
322 |
return result; |
323 |
} |
238 |
} |
324 |
} |