Changes for page Graphical Modeling with Graphiti
Last modified by msp on 2025/01/30 12:03
To version 13.1
edited by msp
on 2012/11/07 11:42
on 2012/11/07 11:42
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 2 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Parent
-
... ... @@ -1,1 +1,0 @@ 1 -Tutorials
- CreationWizardPage.java
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -5.6 KB - Content
-
... ... @@ -1,177 +1,0 @@ 1 -/* 2 - * KIELER - Kiel Integrated Environment for Layout Eclipse RichClient 3 - * 4 - * http://www.informatik.uni-kiel.de/rtsys/kieler/ 5 - * 6 - * Copyright 2010 by 7 - * + Christian-Albrechts-University of Kiel 8 - * + Department of Computer Science 9 - * + Real-Time and Embedded Systems Group 10 - * 11 - * This code is provided under the terms of the Eclipse Public License (EPL). 12 - * See the file epl-v10.html for the license text. 13 - */ 14 -package de.cau.cs.rtprak.turing.graphiti; 15 - 16 -import org.eclipse.core.resources.IWorkspaceRoot; 17 -import org.eclipse.core.resources.ResourcesPlugin; 18 -import org.eclipse.core.runtime.IPath; 19 -import org.eclipse.core.runtime.Path; 20 -import org.eclipse.emf.common.util.URI; 21 -import org.eclipse.jface.viewers.IStructuredSelection; 22 -import org.eclipse.jface.wizard.IWizardPage; 23 -import org.eclipse.swt.widgets.Composite; 24 -import org.eclipse.ui.dialogs.WizardNewFileCreationPage; 25 - 26 -/** 27 - * Wizard page to create diagram or model files. 28 - * 29 - * @author msp 30 - */ 31 -public class CreationWizardPage extends WizardNewFileCreationPage { 32 - 33 - /** the file extension to use for this wizard page. */ 34 - private String extension; 35 - 36 - /** 37 - * Creates a page with given settings. 38 - * 39 - * @param pageName the name of the page 40 - * @param selection the current resource selection 41 - * @param theextension the file extension 42 - */ 43 - public CreationWizardPage(final String pageName, final IStructuredSelection selection, 44 - final String theextension) { 45 - super(pageName, selection); 46 - this.extension = theextension; 47 - } 48 - 49 - /** 50 - * {@inheritDoc} 51 - */ 52 - @Override 53 - public void createControl(final Composite parent) { 54 - super.createControl(parent); 55 - setPageComplete(true); 56 - } 57 - 58 - /** 59 - * Creates a URI for the selected file path. 60 - * 61 - * @return a URI for the file 62 - */ 63 - public URI getURI() { 64 - IPath path = getContainerFullPath(); 65 - if (path == null) { 66 - path = new Path(""); 67 - } 68 - String fileName = getFileName(); 69 - if (fileName == null || fileName.length() == 0) { 70 - fileName = copyFileName(); 71 - } 72 - path = path.append(getUniqueFileName(path, fileName, extension)); 73 - return URI.createPlatformResourceURI(path.toString(), false); 74 - } 75 - 76 - /** 77 - * {@inheritDoc} 78 - */ 79 - @Override 80 - public void setVisible(final boolean visible) { 81 - if (visible && (getFileName() == null || getFileName().length() == 0)) { 82 - setFileName(getUniqueFileName(getContainerFullPath(), copyFileName(), extension)); 83 - } 84 - super.setVisible(visible); 85 - } 86 - 87 - private String copyFileName() { 88 - String fileName = null; 89 - IWizardPage previousPage = getPreviousPage(); 90 - if (previousPage instanceof CreationWizardPage) { 91 - CreationWizardPage copyPage = (CreationWizardPage) previousPage; 92 - fileName = copyPage.getFileName(); 93 - if (fileName.endsWith(copyPage.extension)) { 94 - fileName = fileName.substring(0, fileName.length() 95 - - (copyPage.extension.length() + 1)); 96 - } 97 - } 98 - return fileName; 99 - } 100 - 101 - /** 102 - * Creates a unique file name. 103 - * 104 - * @param containerFullPath the container full path, or {@code null} 105 - * @param fileName the initial file name, or {@code null} 106 - * @param extension the required file extension 107 - * @return a unique file name 108 - */ 109 - private static String getUniqueFileName(final IPath containerFullPath, final String fileName, 110 - final String extension) { 111 - IPath contPath = containerFullPath == null ? new Path("") : containerFullPath; 112 - String name = (fileName == null || fileName.trim().length() == 0) ? "default" : fileName; 113 - IPath filePath = contPath.append(name); 114 - if (extension.equals(filePath.getFileExtension())) { 115 - name = name.substring(0, name.length() - (extension.length() + 1)); 116 - } else { 117 - filePath = filePath.addFileExtension(extension); 118 - } 119 - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); 120 - if (workspaceRoot.exists(filePath)) { 121 - int x = getNumber(name); 122 - if (x >= 0) { 123 - name = name.substring(0, name.length() - digits(x)); 124 - } else { 125 - x = 0; 126 - } 127 - do { 128 - x++; 129 - String newName = name + x + "." + extension; 130 - filePath = filePath.append(newName); 131 - } while (workspaceRoot.exists(filePath)); 132 - } 133 - return filePath.lastSegment(); 134 - } 135 - 136 - /** 137 - * Returns the greatest number that is a suffix of the given string. 138 - * 139 - * @param string a string 140 - * @return a suffix number, of -1 if the string has no such suffix 141 - */ 142 - private static int getNumber(final String string) { 143 - int index = string.length(); 144 - while (index > 0 && Character.isDigit(string.charAt(index - 1))) { 145 - index--; 146 - } 147 - if (index < string.length()) { 148 - try { 149 - return Integer.parseInt(string.substring(index)); 150 - } catch (NumberFormatException exception) { 151 - // ignore exception and return 0 152 - } 153 - } 154 - return -1; 155 - } 156 - 157 - /** the base for integer numbers. */ 158 - private static final int BASE = 10; 159 - 160 - /** 161 - * Returns the number of digits of a number. 162 - * 163 - * @param x an integer number 164 - * @return the number of digits of x 165 - */ 166 - private static int digits(final int x) { 167 - int digits = 1; 168 - int a = x; 169 - while (a >= BASE) { 170 - a /= BASE; 171 - digits++; 172 - } 173 - return digits; 174 - } 175 - 176 -} 177 -
- GraphitiNewWizard.java
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Size
-
... ... @@ -1,1 +1,0 @@ 1 -13.8 KB - Content
-
... ... @@ -1,362 +1,0 @@ 1 -/* 2 - * KIELER - Kiel Integrated Environment for Layout Eclipse RichClient 3 - * 4 - * http://www.informatik.uni-kiel.de/rtsys/kieler/ 5 - * 6 - * Copyright 2010 by 7 - * + Christian-Albrechts-University of Kiel 8 - * + Department of Computer Science 9 - * + Real-Time and Embedded Systems Group 10 - * 11 - * This code is provided under the terms of the Eclipse Public License (EPL). 12 - * See the file epl-v10.html for the license text. 13 - */ 14 -package de.cau.cs.rtprak.turing.graphiti; 15 - 16 -import java.io.IOException; 17 -import java.lang.reflect.InvocationTargetException; 18 -import java.util.HashMap; 19 -import java.util.Map; 20 - 21 -import org.eclipse.core.resources.IFile; 22 -import org.eclipse.core.resources.IResource; 23 -import org.eclipse.core.resources.ResourcesPlugin; 24 -import org.eclipse.core.runtime.CoreException; 25 -import org.eclipse.core.runtime.IProgressMonitor; 26 -import org.eclipse.core.runtime.IStatus; 27 -import org.eclipse.core.runtime.NullProgressMonitor; 28 -import org.eclipse.core.runtime.Path; 29 -import org.eclipse.core.runtime.Status; 30 -import org.eclipse.emf.common.command.CommandStack; 31 -import org.eclipse.emf.common.util.URI; 32 -import org.eclipse.emf.ecore.EObject; 33 -import org.eclipse.emf.ecore.resource.Resource; 34 -import org.eclipse.emf.ecore.resource.ResourceSet; 35 -import org.eclipse.emf.ecore.xmi.XMLResource; 36 -import org.eclipse.emf.transaction.RecordingCommand; 37 -import org.eclipse.emf.transaction.TransactionalEditingDomain; 38 -import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; 39 -import org.eclipse.graphiti.mm.pictograms.Diagram; 40 -import org.eclipse.graphiti.mm.pictograms.PictogramLink; 41 -import org.eclipse.graphiti.mm.pictograms.PictogramsFactory; 42 -import org.eclipse.graphiti.services.Graphiti; 43 -import org.eclipse.graphiti.ui.services.GraphitiUi; 44 -import org.eclipse.jface.operation.IRunnableWithProgress; 45 -import org.eclipse.jface.viewers.IStructuredSelection; 46 -import org.eclipse.jface.wizard.Wizard; 47 -import org.eclipse.ui.INewWizard; 48 -import org.eclipse.ui.IWorkbench; 49 -import org.eclipse.ui.IWorkbenchPage; 50 -import org.eclipse.ui.PartInitException; 51 -import org.eclipse.ui.actions.WorkspaceModifyOperation; 52 -import org.eclipse.ui.part.FileEditorInput; 53 -import org.eclipse.ui.statushandlers.StatusManager; 54 - 55 -/** 56 - * A generic wizard for creation of new Graphiti diagrams. 57 - * 58 - * @author msp 59 - */ 60 -public abstract class GraphitiNewWizard extends Wizard implements INewWizard { 61 - 62 - /** the workbench. */ 63 - private IWorkbench workbench; 64 - /** the current selection. */ 65 - private IStructuredSelection selection; 66 - /** the diagram model wizard page. */ 67 - private CreationWizardPage diagramModelFilePage; 68 - /** the domain model wizard page. */ 69 - private CreationWizardPage domainModelFilePage; 70 - /** the name of the wizard. */ 71 - private String wizardName; 72 - /** the diagram file extension. */ 73 - private String diagramFileExtension; 74 - /** the domain model file extension. */ 75 - private String domainFileExtension; 76 - /** the diagram type name of the graphiti diagram. */ 77 - private String diagramTypeName; 78 - /** the identifier of the diagram editor. */ 79 - private String editorId; 80 - /** the grid size (0 means no grid). */ 81 - private int gridSize = 0; 82 - /** the setting for snapping to grid. */ 83 - private boolean snapToGrid = false; 84 - 85 - /** 86 - * Creates a new-wizard for Graphiti, with no grid. 87 - * 88 - * @param name 89 - * the name of the wizard 90 - * @param diagExt 91 - * the diagram file extension 92 - * @param domainExt 93 - * the domain model file extension 94 - * @param thediagramTypeName 95 - * the diagram type name of the graphiti diagram 96 - */ 97 - public GraphitiNewWizard(final String name, final String diagExt, final String domainExt, 98 - final String thediagramTypeName) { 99 - this.wizardName = name; 100 - this.diagramFileExtension = diagExt; 101 - this.domainFileExtension = domainExt; 102 - this.diagramTypeName = thediagramTypeName; 103 - } 104 - 105 - /** 106 - * Creates a new-wizard for Graphiti, with no grid. 107 - * 108 - * @param name 109 - * the name of the wizard 110 - * @param diagExt 111 - * the diagram file extension 112 - * @param domainExt 113 - * the domain model file extension 114 - * @param thediagramTypeName 115 - * the diagram type of the graphiti diagram 116 - * @param theeditorId 117 - * identifier of the diagram editor, or {@code null} if no editor shall be opened 118 - * after model creation 119 - */ 120 - public GraphitiNewWizard(final String name, final String diagExt, final String domainExt, 121 - final String thediagramTypeName, final String theeditorId) { 122 - this(name, diagExt, domainExt, thediagramTypeName); 123 - this.editorId = theeditorId; 124 - } 125 - 126 - /** 127 - * Creates a new-wizard for Graphiti, with customizable grid. 128 - * 129 - * @param name 130 - * the name of the wizard 131 - * @param diagExt 132 - * the diagram file extension 133 - * @param domainExt 134 - * the domain model file extension 135 - * @param thediagramTypeName 136 - * the diagram type name of the graphiti diagram 137 - * @param theeditorId 138 - * identifier of the diagram editor, or {@code null} if no editor shall be opened 139 - * after model creation 140 - * @param thegridSize 141 - * the grid size (0 means no grid) 142 - * @param thesnapToGrid 143 - * the setting for snapping to grid 144 - */ 145 - public GraphitiNewWizard(final String name, final String diagExt, final String domainExt, 146 - final String thediagramTypeName, final String theeditorId, final int thegridSize, 147 - final boolean thesnapToGrid) { 148 - this(name, diagExt, domainExt, thediagramTypeName, theeditorId); 149 - this.gridSize = thegridSize; 150 - this.snapToGrid = thesnapToGrid; 151 - } 152 - 153 - /** 154 - * {@inheritDoc} 155 - */ 156 - public final void init(final IWorkbench theworkbench, final IStructuredSelection theselection) { 157 - this.workbench = theworkbench; 158 - this.selection = theselection; 159 - setWindowTitle("New " + wizardName + " Diagram"); 160 - setNeedsProgressMonitor(true); 161 - } 162 - 163 - /** 164 - * {@inheritDoc} 165 - */ 166 - @Override 167 - public final void addPages() { 168 - diagramModelFilePage = new CreationWizardPage("DiagramModelFile", selection, 169 - diagramFileExtension); 170 - diagramModelFilePage.setTitle("Create " + wizardName + " Diagram"); 171 - diagramModelFilePage.setDescription("Select file that will contain diagram model."); 172 - addPage(diagramModelFilePage); 173 - 174 - domainModelFilePage = new CreationWizardPage("DomainModelFile", selection, 175 - domainFileExtension); 176 - domainModelFilePage.setTitle("Create " + wizardName + " Domain Model"); 177 - domainModelFilePage.setDescription("Select file that will contain domain model."); 178 - addPage(domainModelFilePage); 179 - } 180 - 181 - /** 182 - * {@inheritDoc} 183 - */ 184 - @Override 185 - public final boolean performFinish() { 186 - IRunnableWithProgress op = new WorkspaceModifyOperation(null) { 187 - @Override 188 - protected void execute(final IProgressMonitor monitor) throws CoreException, 189 - InterruptedException { 190 - Resource diagramResource = createDiagram(diagramModelFilePage.getURI(), 191 - domainModelFilePage.getURI(), monitor); 192 - if (diagramResource != null && editorId != null) { 193 - try { 194 - openDiagram(diagramResource); 195 - } catch (PartInitException exception) { 196 - throw new CoreException(new Status(IStatus.ERROR, 197 - "de.cau.cs.rtprak.turing.graphiti", 198 - "Error opening diagram", exception)); 199 - } 200 - } 201 - } 202 - }; 203 - try { 204 - getContainer().run(false, true, op); 205 - } catch (InterruptedException exception) { 206 - return false; 207 - } catch (InvocationTargetException exception) { 208 - if (exception.getTargetException() instanceof CoreException) { 209 - StatusManager.getManager().handle(((CoreException) exception.getTargetException()), 210 - "de.cau.cs.rtprak.turing.graphiti"); 211 - } else { 212 - IStatus status = new Status(IStatus.ERROR, "de.cau.cs.rtprak.turing.graphiti", 213 - "Error creating diagram", exception.getTargetException()); 214 - StatusManager.getManager().handle(status, StatusManager.LOG); 215 - } 216 - return false; 217 - } 218 - return true; 219 - } 220 - 221 - /** 222 - * Create a diagram with given URIs. 223 - * 224 - * @param diagramURI 225 - * URI for the diagram file 226 - * @param modelURI 227 - * URI for the model file 228 - * @param progressMonitor 229 - * progress monitor 230 - * @return a resource for the new diagram file 231 - */ 232 - private Resource createDiagram(final URI diagramURI, final URI modelURI, 233 - final IProgressMonitor progressMonitor) { 234 - progressMonitor.beginTask("Creating diagram and model files", 2); 235 - // create a resource set and editing domain 236 - TransactionalEditingDomain editingDomain = GraphitiUi.getEmfService() 237 - .createResourceSetAndEditingDomain(); 238 - ResourceSet resourceSet = editingDomain.getResourceSet(); 239 - CommandStack commandStack = editingDomain.getCommandStack(); 240 - // create resources for the diagram and domain model files 241 - final Resource diagramResource = resourceSet.createResource(diagramURI); 242 - final Resource modelResource = resourceSet.createResource(modelURI); 243 - if (diagramResource != null && modelResource != null) { 244 - commandStack.execute(new RecordingCommand(editingDomain) { 245 - @Override 246 - protected void doExecute() { 247 - createModel(diagramResource, diagramURI.lastSegment(), modelResource, 248 - modelURI.lastSegment()); 249 - } 250 - }); 251 - progressMonitor.worked(1); 252 - 253 - try { 254 - modelResource.save(createSaveOptions()); 255 - diagramResource.save(createSaveOptions()); 256 - } catch (IOException exception) { 257 - IStatus status = new Status(IStatus.ERROR, "de.cau.cs.rtprak.turing.graphiti", 258 - "Unable to store model and diagram resources", exception); 259 - StatusManager.getManager().handle(status); 260 - } 261 - setCharset(WorkspaceSynchronizer.getFile(modelResource)); 262 - setCharset(WorkspaceSynchronizer.getFile(diagramResource)); 263 - } 264 - progressMonitor.done(); 265 - return diagramResource; 266 - } 267 - 268 - /** 269 - * Creates save options for the resources. 270 - * 271 - * @return new save options 272 - */ 273 - public static Map<?, ?> createSaveOptions() { 274 - HashMap<String, Object> saveOptions = new HashMap<String, Object>(); 275 - saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$ 276 - saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, 277 - Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); 278 - return saveOptions; 279 - } 280 - 281 - /** 282 - * Set the character set for the given file to UTF-8. 283 - * 284 - * @param file 285 - * a file 286 - */ 287 - public static void setCharset(final IFile file) { 288 - try { 289 - if (file != null) { 290 - file.setCharset("UTF-8", new NullProgressMonitor()); 291 - } 292 - } catch (CoreException e) { 293 - StatusManager.getManager().handle(e, "de.cau.cs.rtprak.turing.graphiti"); 294 - } 295 - } 296 - 297 - /** 298 - * Open the diagram from the given resource. 299 - * 300 - * @param diagramResource 301 - * a resource for a diagram file 302 - * @throws PartInitException 303 - * if the diagram could not be opened 304 - */ 305 - private void openDiagram(final Resource diagramResource) throws PartInitException { 306 - String path = diagramResource.getURI().toPlatformString(true); 307 - IResource workspaceResource = ResourcesPlugin.getWorkspace().getRoot() 308 - .findMember(new Path(path)); 309 - if (workspaceResource instanceof IFile) { 310 - IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); 311 - page.openEditor(new FileEditorInput((IFile) workspaceResource), editorId); 312 - } 313 - } 314 - 315 - /** 316 - * Create a model in the given resources. 317 - * 318 - * @param diagramResource 319 - * resource for the diagram model 320 - * @param diagramName 321 - * name of the diagram model 322 - * @param modelResource 323 - * resource for the domain model 324 - * @param modelName 325 - * name of the domain model 326 - */ 327 - private void createModel(final Resource diagramResource, final String diagramName, 328 - final Resource modelResource, final String modelName) { 329 - modelResource.setTrackingModification(true); 330 - EObject domainModel = createModel(modelName); 331 - modelResource.getContents().add(domainModel); 332 - diagramResource.setTrackingModification(true); 333 - Diagram diagram = Graphiti.getPeCreateService().createDiagram(diagramTypeName, diagramName, 334 - gridSize, snapToGrid); 335 - PictogramLink link = PictogramsFactory.eINSTANCE.createPictogramLink(); 336 - link.setPictogramElement(diagram); 337 - link.getBusinessObjects().add(domainModel); 338 - configureDiagram(diagram); 339 - diagramResource.getContents().add(diagram); 340 - } 341 - 342 - /** 343 - * Configure the diagram. May be overridden by subclasses. 344 - * 345 - * @param diagram 346 - * the top-level element of the pictogram model 347 - */ 348 - protected void configureDiagram(final Diagram diagram) { 349 - // the default implementation does nothing 350 - } 351 - 352 - /** 353 - * Create an instance of the top-level object for the domain model. 354 - * 355 - * @param name 356 - * name of the model 357 - * @return an instance of the domain model object 358 - */ 359 - protected abstract EObject createModel(final String name); 360 - 361 -} 362 -
- Confluence.Code.ConfluencePageClass[0]
-
- Id
-
... ... @@ -1,1 +1,1 @@ 1 - 36045651 +8650915 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/WS12EclPract/pages/ 3604565/Graphical Modeling with Graphiti1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/WS12EclPract/pages/8650915/Graphical Modeling with Graphiti