Skip to content

Package: LoadEcoreAction$TargetPlatformPackageDialog$1

LoadEcoreAction$TargetPlatformPackageDialog$1

nameinstructionbranchcomplexitylinemethod
getImage(Object)
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
{...}
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Clemens Elflein - initial API and implementation
13: ******************************************************************************/
14:
15: package org.eclipse.emfforms.internal.editor.toolbaractions;
16:
17: import java.util.ArrayList;
18: import java.util.Arrays;
19: import java.util.Collection;
20: import java.util.Collections;
21: import java.util.Iterator;
22: import java.util.LinkedHashSet;
23: import java.util.List;
24: import java.util.Map;
25: import java.util.Set;
26:
27: import org.eclipse.emf.common.util.EList;
28: import org.eclipse.emf.common.util.TreeIterator;
29: import org.eclipse.emf.common.util.URI;
30: import org.eclipse.emf.ecore.EObject;
31: import org.eclipse.emf.ecore.EPackage;
32: import org.eclipse.emf.ecore.EPackage.Registry;
33: import org.eclipse.emf.ecore.plugin.EcorePlugin;
34: import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
35: import org.eclipse.emf.ecore.resource.Resource;
36: import org.eclipse.emf.ecore.resource.ResourceSet;
37: import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
38: import org.eclipse.emf.ecore.util.EcoreUtil;
39: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
40: import org.eclipse.emf.edit.domain.EditingDomain;
41: import org.eclipse.emf.edit.ui.action.LoadResourceAction.LoadResourceDialog;
42: import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
43: import org.eclipse.emfforms.spi.editor.messages.Messages;
44: import org.eclipse.jface.action.Action;
45: import org.eclipse.jface.resource.ImageDescriptor;
46: import org.eclipse.jface.viewers.LabelProvider;
47: import org.eclipse.swt.SWT;
48: import org.eclipse.swt.events.SelectionAdapter;
49: import org.eclipse.swt.events.SelectionEvent;
50: import org.eclipse.swt.graphics.Image;
51: import org.eclipse.swt.layout.FormAttachment;
52: import org.eclipse.swt.layout.FormData;
53: import org.eclipse.swt.layout.GridLayout;
54: import org.eclipse.swt.widgets.Button;
55: import org.eclipse.swt.widgets.Composite;
56: import org.eclipse.swt.widgets.Control;
57: import org.eclipse.swt.widgets.Display;
58: import org.eclipse.swt.widgets.Shell;
59: import org.eclipse.ui.dialogs.ElementListSelectionDialog;
60: import org.osgi.framework.FrameworkUtil;
61:
62: /**
63: * The Class LoadEcoreAction.
64: * It displays the "Load Ecore" action in the editor's toolbar, if appropriate.
65: *
66: * @author Clemens Elflein
67: */
68: public class LoadEcoreAction extends Action {
69:
70:         private final Object currentObject;
71:
72:         /**
73:          * Creates a new LoadEcoreAction.
74:          *
75:          * @param currentObject the currently loaded object in the Editor (should be ResourceSet)
76:          */
77:         public LoadEcoreAction(Object currentObject) {
78:                 this(currentObject, Messages.LoadEcoreAction_ActionName);
79:         }
80:
81:         /**
82:          * Creates a new LoadEcoreAction.
83:          *
84:          * @param currentObject the currently loaded object in the Editor (should be ResourceSet)
85:          * @param actionName The name of the action
86:          */
87:         public LoadEcoreAction(Object currentObject, String actionName) {
88:                 super(actionName);
89:                 setImageDescriptor(ImageDescriptor.createFromURL(FrameworkUtil.getBundle(this.getClass())
90:                         .getResource("icons/chart_organisation_add.png"))); //$NON-NLS-1$
91:                 this.currentObject = currentObject;
92:         }
93:
94:         /**
95:          * {@inheritDoc}
96:          *
97:          * @see org.eclipse.jface.action.Action#run()
98:          */
99:         @Override
100:         public void run() {
101:                 new ExtendedLoadResourceDialog(Display.getDefault().getActiveShell(),
102:                         AdapterFactoryEditingDomain.getEditingDomainFor(currentObject)).open();
103:         }
104:
105:         /**
106:          * The Load Resource dialog for selecting other Resources.
107:          * It was reused from the Sample Ecore Model Editor.
108:          */
109:         private static class ExtendedLoadResourceDialog extends LoadResourceDialog {
110:                 /**
111:                  * @author cleme_000
112:                  *
113:                  */
114:                 private final class RegisteredPackageSelectionAdapter extends SelectionAdapter {
115:                         @Override
116:                         public void widgetSelected(SelectionEvent event) {
117:                                 final RegisteredPackageDialog registeredPackageDialog = new RegisteredPackageDialog(getShell());
118:                                 registeredPackageDialog.open();
119:                                 final Object[] result = registeredPackageDialog.getResult();
120:                                 if (result != null) {
121:                                         final List<?> nsURIs = Arrays.asList(result);
122:                                         if (registeredPackageDialog.isDevelopmentTimeVersion()) {
123:                                                 final ResourceSet resourceSet = new ResourceSetImpl();
124:                                                 resourceSet.getURIConverter().getURIMap()
125:                                                         .putAll(EcorePlugin.computePlatformURIMap(false));
126:
127:                                                 // To support Xcore resources, we need a resource with a URI that helps determine the
128:                                                 // containing project
129:                                                 //
130:                                                 final Resource dummyResource = domain == null ? null
131:                                                         : resourceSet
132:                                                                 .createResource(domain.getResourceSet().getResources().get(0).getURI());
133:
134:                                                 final StringBuffer uris = new StringBuffer();
135:                                                 final Map<String, URI> ePackageNsURItoGenModelLocationMap = EcorePlugin
136:                                                         .getEPackageNsURIToGenModelLocationMap(false);
137:                                                 for (int i = 0, length = result.length; i < length; i++) {
138:                                                         final URI location = ePackageNsURItoGenModelLocationMap.get(result[i]);
139:                                                         final Resource resource = resourceSet.getResource(location, true);
140:                                                         EcoreUtil.resolveAll(resource);
141:                                                 }
142:
143:                                                 final EList<Resource> resources = resourceSet.getResources();
144:                                                 resources.remove(dummyResource);
145:
146:                                                 for (final Resource resource : resources) {
147:                                                         for (final EPackage ePackage : getAllPackages(resource)) {
148:                                                                 if (nsURIs.contains(ePackage.getNsURI())) {
149:                                                                         uris.append(resource.getURI());
150:                                                                         uris.append(" "); //$NON-NLS-1$
151:                                                                         break;
152:                                                                 }
153:                                                         }
154:                                                 }
155:                                                 uriField.setText((uriField.getText() + " " + uris.toString()).trim()); //$NON-NLS-1$
156:                                         } else {
157:                                                 final StringBuffer uris = new StringBuffer();
158:                                                 for (int i = 0, length = result.length; i < length; i++) {
159:                                                         uris.append(result[i]);
160:                                                         uris.append(" "); //$NON-NLS-1$
161:                                                 }
162:                                                 uriField.setText((uriField.getText() + " " + uris.toString()).trim()); //$NON-NLS-1$
163:                                         }
164:                                 }
165:                         }
166:                 }
167:
168:                 /**
169:                  * @author cleme_000
170:                  *
171:                  */
172:                 private final class TargetPlatformSelectionAdapter extends SelectionAdapter {
173:                         @Override
174:                         public void widgetSelected(SelectionEvent event) {
175:                                 final TargetPlatformPackageDialog classpathPackageDialog = new TargetPlatformPackageDialog(
176:                                         getShell());
177:                                 classpathPackageDialog.open();
178:                                 final Object[] result = classpathPackageDialog.getResult();
179:                                 if (result != null) {
180:                                         final List<?> nsURIs = Arrays.asList(result);
181:                                         final ResourceSet resourceSet = new ResourceSetImpl();
182:                                         resourceSet.getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap(true));
183:
184:                                         // To support Xcore resources, we need a resource with a URI that helps determine the
185:                                         // containing project
186:                                         //
187:                                         final Resource dummyResource = domain == null ? null
188:                                                 : resourceSet.createResource(domain
189:                                                         .getResourceSet().getResources().get(0).getURI());
190:
191:                                         final StringBuffer uris = new StringBuffer();
192:                                         final Map<String, URI> ePackageNsURItoGenModelLocationMap = EcorePlugin
193:                                                 .getEPackageNsURIToGenModelLocationMap(true);
194:                                         for (int i = 0, length = result.length; i < length; i++) {
195:                                                 final URI location = ePackageNsURItoGenModelLocationMap.get(result[i]);
196:                                                 final Resource resource = resourceSet.getResource(location, true);
197:                                                 EcoreUtil.resolveAll(resource);
198:                                         }
199:
200:                                         final EList<Resource> resources = resourceSet.getResources();
201:                                         resources.remove(dummyResource);
202:
203:                                         for (final Resource resource : resources) {
204:                                                 for (final EPackage ePackage : getAllPackages(resource)) {
205:                                                         if (nsURIs.contains(ePackage.getNsURI())) {
206:                                                                 uris.append(resource.getURI());
207:                                                                 uris.append(" "); //$NON-NLS-1$
208:                                                                 break;
209:                                                         }
210:                                                 }
211:                                         }
212:                                         uriField.setText((uriField.getText() + " " + uris.toString()).trim()); //$NON-NLS-1$
213:                                 }
214:                         }
215:                 }
216:
217:                 private final Set<EPackage> registeredPackages = new LinkedHashSet<EPackage>();
218:
219:                 ExtendedLoadResourceDialog(Shell parent, EditingDomain domain) {
220:                         super(parent, domain);
221:                 }
222:
223:                 @Override
224:                 protected boolean processResource(Resource resource) {
225:                         // Put all static package in the package registry.
226:                         //
227:                         final ResourceSet resourceSet = domain.getResourceSet();
228:                         if (!resourceSet.getResources().contains(resource)) {
229:                                 final Registry packageRegistry = resourceSet.getPackageRegistry();
230:                                 for (final EPackage ePackage : getAllPackages(resource)) {
231:                                         packageRegistry.put(ePackage.getNsURI(), ePackage);
232:                                         registeredPackages.add(ePackage);
233:                                 }
234:                         }
235:                         return true;
236:                 }
237:
238:                 protected Collection<EPackage> getAllPackages(Resource resource) {
239:                         final List<EPackage> result = new ArrayList<EPackage>();
240:                         for (final TreeIterator<?> j = new EcoreUtil.ContentTreeIterator<Object>(resource.getContents()) {
241:                                 private static final long serialVersionUID = 1L;
242:
243:                                 @Override
244:                                 protected Iterator<? extends EObject> getEObjectChildren(EObject eObject) {
245:                                         return eObject instanceof EPackage ? ((EPackage) eObject).getESubpackages().iterator()
246:                                                 : Collections.<EObject> emptyList().iterator();
247:                                 }
248:                         };j.hasNext();) {
249:                                 final Object content = j.next();
250:                                 if (content instanceof EPackage) {
251:                                         result.add((EPackage) content);
252:                                 }
253:                         }
254:                         return result;
255:                 }
256:
257:                 @Override
258:                 protected Control createDialogArea(Composite parent) {
259:                         final Composite composite = (Composite) super.createDialogArea(parent);
260:                         final Composite buttonComposite = (Composite) composite.getChildren()[0];
261:
262:                         final Button browseRegisteredPackagesButton = new Button(buttonComposite, SWT.PUSH);
263:                         browseRegisteredPackagesButton.setText(Messages.LoadEcoreAction_BrowseRegPackagesButton);
264:                         prepareBrowseRegisteredPackagesButton(browseRegisteredPackagesButton);
265:                         {
266:                                 final FormData data = new FormData();
267:                                 final Control[] children = buttonComposite.getChildren();
268:                                 data.right = new FormAttachment(children[0], -CONTROL_OFFSET);
269:                                 browseRegisteredPackagesButton.setLayoutData(data);
270:                         }
271:
272:                         final Button browseTargetPlatformPackagesButton = new Button(buttonComposite, SWT.PUSH);
273:                         browseTargetPlatformPackagesButton.setText(Messages.LoadEcoreAction_BrowseTargetPackagesButton);
274:                         prepareBrowseTargetPlatformPackagesButton(browseTargetPlatformPackagesButton);
275:                         {
276:                                 final FormData data = new FormData();
277:                                 data.right = new FormAttachment(browseRegisteredPackagesButton, -CONTROL_OFFSET);
278:                                 browseTargetPlatformPackagesButton.setLayoutData(data);
279:                         }
280:
281:                         return composite;
282:                 }
283:
284:                 /**
285:                  * @since 2.9
286:                  */
287:                 protected void prepareBrowseTargetPlatformPackagesButton(Button browseTargetPlatformPackagesButton) {
288:                         browseTargetPlatformPackagesButton.addSelectionListener(new TargetPlatformSelectionAdapter());
289:                 }
290:
291:                 protected void prepareBrowseRegisteredPackagesButton(Button browseRegisteredPackagesButton) {
292:                         browseRegisteredPackagesButton.addSelectionListener(new RegisteredPackageSelectionAdapter());
293:                 }
294:         }
295:
296:         /**
297:          * @since 2.9
298:          */
299:         private static class TargetPlatformPackageDialog extends ElementListSelectionDialog {
300:                 TargetPlatformPackageDialog(Shell parent) {
301:                         super(parent,
302:                                 new LabelProvider() {
303:                                         @Override
304:                                         public Image getImage(Object element) {
305:                                                 return ExtendedImageRegistry.getInstance().getImage(
306:                                                         EcoreEditPlugin.INSTANCE.getImage("full/obj16/EPackage")); //$NON-NLS-1$
307:                                         }
308:                                 });
309:
310:                         setMultipleSelection(true);
311:                         setMessage(Messages.LoadEcoreAction_TargetPlatformDialogDescription);
312:                         setFilter("*"); //$NON-NLS-1$
313:                         setTitle(Messages.LoadEcoreAction_TargetPlatformDialogTitle);
314:                 }
315:
316:                 protected void updateElements() {
317:                         final Map<String, URI> ePackageNsURItoGenModelLocationMap = EcorePlugin
318:                                 .getEPackageNsURIToGenModelLocationMap(true);
319:                         final Object[] result = ePackageNsURItoGenModelLocationMap.keySet().toArray(
320:                                 new Object[ePackageNsURItoGenModelLocationMap.size()]);
321:                         Arrays.sort(result);
322:                         setListElements(result);
323:                 }
324:
325:                 @Override
326:                 protected Control createDialogArea(Composite parent) {
327:                         final Composite result = (Composite) super.createDialogArea(parent);
328:                         updateElements();
329:                         return result;
330:                 }
331:         }
332:
333:         /**
334:          *
335:          * Dialog to select registered packages.
336:          * It was reused from the Sample Ecore Model Editor.
337:          *
338:          */
339:         private static class RegisteredPackageDialog extends ElementListSelectionDialog {
340:                 private boolean isDevelopmentTimeVersion = true;
341:
342:                 RegisteredPackageDialog(Shell parent) {
343:                         super(parent,
344:                                 new LabelProvider() {
345:                                         @Override
346:                                         public Image getImage(Object element) {
347:                                                 return ExtendedImageRegistry.getInstance().getImage(
348:                                                         EcoreEditPlugin.INSTANCE.getImage("full/obj16/EPackage")); //$NON-NLS-1$
349:                                         }
350:                                 });
351:
352:                         setMultipleSelection(true);
353:                         setMessage(Messages.LoadEcoreAction_RegisteredPackageDialogDescription);
354:                         setFilter("*"); //$NON-NLS-1$
355:                         setTitle(Messages.LoadEcoreAction_RegisteredPackageDialogTitle);
356:                 }
357:
358:                 public boolean isDevelopmentTimeVersion() {
359:                         return isDevelopmentTimeVersion;
360:                 }
361:
362:                 protected void updateElements() {
363:                         if (isDevelopmentTimeVersion) {
364:                                 final Map<String, URI> ePackageNsURItoGenModelLocationMap = EcorePlugin
365:                                         .getEPackageNsURIToGenModelLocationMap(false);
366:                                 final Object[] result = ePackageNsURItoGenModelLocationMap.keySet().toArray(
367:                                         new Object[ePackageNsURItoGenModelLocationMap.size()]);
368:                                 Arrays.sort(result);
369:                                 setListElements(result);
370:                         } else {
371:                                 final Object[] result = EPackage.Registry.INSTANCE.keySet().toArray(
372:                                         new Object[EPackage.Registry.INSTANCE.size()]);
373:                                 Arrays.sort(result);
374:                                 setListElements(result);
375:                         }
376:                 }
377:
378:                 @Override
379:                 protected Control createDialogArea(Composite parent) {
380:                         final Composite result = (Composite) super.createDialogArea(parent);
381:                         final Composite buttonGroup = new Composite(result, SWT.NONE);
382:                         final GridLayout layout = new GridLayout();
383:                         layout.numColumns = 2;
384:                         buttonGroup.setLayout(layout);
385:                         final Button developmentTimeVersionButton = new Button(buttonGroup, SWT.RADIO);
386:                         developmentTimeVersionButton.addSelectionListener(new SelectionAdapter() {
387:                                 @Override
388:                                 public void widgetSelected(SelectionEvent event) {
389:                                         isDevelopmentTimeVersion = developmentTimeVersionButton.getSelection();
390:                                         updateElements();
391:                                 }
392:                         });
393:                         developmentTimeVersionButton.setText(Messages.LoadEcoreAction_DevelopmentTimeVersionButton);
394:                         final Button runtimeTimeVersionButton = new Button(buttonGroup, SWT.RADIO);
395:                         runtimeTimeVersionButton.setText(Messages.LoadEcoreAction_RuntimeTimeVersionButton);
396:                         developmentTimeVersionButton.setSelection(true);
397:
398:                         updateElements();
399:
400:                         return result;
401:                 }
402:         }
403: }