/* | |
* | |
*/ | |
package comrel.diagram.part; | |
import java.io.IOException; | |
import java.util.LinkedList; | |
import org.eclipse.core.commands.ExecutionException; | |
import org.eclipse.core.commands.operations.OperationHistoryFactory; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.runtime.IAdaptable; | |
import org.eclipse.core.runtime.IPath; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.NullProgressMonitor; | |
import org.eclipse.core.runtime.Path; | |
import org.eclipse.emf.common.util.URI; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.emf.ecore.resource.Resource; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.emf.transaction.TransactionalEditingDomain; | |
import org.eclipse.gmf.runtime.common.core.command.CommandResult; | |
import org.eclipse.gmf.runtime.diagram.core.services.ViewService; | |
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateDiagramViewOperation; | |
import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand; | |
import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; | |
import org.eclipse.gmf.runtime.notation.Diagram; | |
import org.eclipse.jface.viewers.StructuredSelection; | |
import org.eclipse.jface.wizard.Wizard; | |
import org.eclipse.osgi.util.NLS; | |
import org.eclipse.ui.PartInitException; | |
import org.eclipse.ui.dialogs.WizardNewFileCreationPage; | |
import comrel.diagram.edit.parts.CompositeRefactoringEditPart; | |
/** | |
* @generated | |
*/ | |
public class ComrelNewDiagramFileWizard extends Wizard { | |
/** | |
* @generated | |
*/ | |
private WizardNewFileCreationPage myFileCreationPage; | |
/** | |
* @generated | |
*/ | |
private ModelElementSelectionPage diagramRootElementSelectionPage; | |
/** | |
* @generated | |
*/ | |
private TransactionalEditingDomain myEditingDomain; | |
/** | |
* @generated | |
*/ | |
public ComrelNewDiagramFileWizard(URI domainModelURI, EObject diagramRoot, | |
TransactionalEditingDomain editingDomain) { | |
assert domainModelURI != null : "Domain model uri must be specified"; //$NON-NLS-1$ | |
assert diagramRoot != null : "Doagram root element must be specified"; //$NON-NLS-1$ | |
assert editingDomain != null : "Editing domain must be specified"; //$NON-NLS-1$ | |
myFileCreationPage = new WizardNewFileCreationPage( | |
Messages.ComrelNewDiagramFileWizard_CreationPageName, | |
StructuredSelection.EMPTY); | |
myFileCreationPage | |
.setTitle(Messages.ComrelNewDiagramFileWizard_CreationPageTitle); | |
myFileCreationPage.setDescription(NLS.bind( | |
Messages.ComrelNewDiagramFileWizard_CreationPageDescription, | |
CompositeRefactoringEditPart.MODEL_ID)); | |
IPath filePath; | |
String fileName = URI.decode(domainModelURI.trimFileExtension() | |
.lastSegment()); | |
if (domainModelURI.isPlatformResource()) { | |
filePath = new Path(domainModelURI.trimSegments(1) | |
.toPlatformString(true)); | |
} else if (domainModelURI.isFile()) { | |
filePath = new Path(domainModelURI.trimSegments(1).toFileString()); | |
} else { | |
// TODO : use some default path | |
throw new IllegalArgumentException( | |
"Unsupported URI: " + domainModelURI); //$NON-NLS-1$ | |
} | |
myFileCreationPage.setContainerFullPath(filePath); | |
myFileCreationPage.setFileName(ComrelDiagramEditorUtil | |
.getUniqueFileName(filePath, fileName, "comrel_diagram")); //$NON-NLS-1$ | |
diagramRootElementSelectionPage = new DiagramRootElementSelectionPage( | |
Messages.ComrelNewDiagramFileWizard_RootSelectionPageName); | |
diagramRootElementSelectionPage | |
.setTitle(Messages.ComrelNewDiagramFileWizard_RootSelectionPageTitle); | |
diagramRootElementSelectionPage | |
.setDescription(Messages.ComrelNewDiagramFileWizard_RootSelectionPageDescription); | |
diagramRootElementSelectionPage.setModelElement(diagramRoot); | |
myEditingDomain = editingDomain; | |
} | |
/** | |
* @generated | |
*/ | |
public void addPages() { | |
addPage(myFileCreationPage); | |
addPage(diagramRootElementSelectionPage); | |
} | |
/** | |
* @generated | |
*/ | |
public boolean performFinish() { | |
LinkedList<IFile> affectedFiles = new LinkedList<IFile>(); | |
IFile diagramFile = myFileCreationPage.createNewFile(); | |
ComrelDiagramEditorUtil.setCharset(diagramFile); | |
affectedFiles.add(diagramFile); | |
URI diagramModelURI = URI.createPlatformResourceURI(diagramFile | |
.getFullPath().toString(), true); | |
ResourceSet resourceSet = myEditingDomain.getResourceSet(); | |
final Resource diagramResource = resourceSet | |
.createResource(diagramModelURI); | |
AbstractTransactionalCommand command = new AbstractTransactionalCommand( | |
myEditingDomain, | |
Messages.ComrelNewDiagramFileWizard_InitDiagramCommand, | |
affectedFiles) { | |
protected CommandResult doExecuteWithResult( | |
IProgressMonitor monitor, IAdaptable info) | |
throws ExecutionException { | |
int diagramVID = ComrelVisualIDRegistry | |
.getDiagramVisualID(diagramRootElementSelectionPage | |
.getModelElement()); | |
if (diagramVID != CompositeRefactoringEditPart.VISUAL_ID) { | |
return CommandResult | |
.newErrorCommandResult(Messages.ComrelNewDiagramFileWizard_IncorrectRootError); | |
} | |
Diagram diagram = ViewService.createDiagram( | |
diagramRootElementSelectionPage.getModelElement(), | |
CompositeRefactoringEditPart.MODEL_ID, | |
ComrelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT); | |
diagramResource.getContents().add(diagram); | |
return CommandResult.newOKCommandResult(); | |
} | |
}; | |
try { | |
OperationHistoryFactory.getOperationHistory().execute(command, | |
new NullProgressMonitor(), null); | |
diagramResource.save(ComrelDiagramEditorUtil.getSaveOptions()); | |
ComrelDiagramEditorUtil.openDiagram(diagramResource); | |
} catch (ExecutionException e) { | |
ComrelDiagramEditorPlugin.getInstance().logError( | |
"Unable to create model and diagram", e); //$NON-NLS-1$ | |
} catch (IOException ex) { | |
ComrelDiagramEditorPlugin.getInstance().logError( | |
"Save operation failed for: " + diagramModelURI, ex); //$NON-NLS-1$ | |
} catch (PartInitException ex) { | |
ComrelDiagramEditorPlugin.getInstance().logError( | |
"Unable to open editor", ex); //$NON-NLS-1$ | |
} | |
return true; | |
} | |
/** | |
* @generated | |
*/ | |
private static class DiagramRootElementSelectionPage extends | |
ModelElementSelectionPage { | |
/** | |
* @generated | |
*/ | |
protected DiagramRootElementSelectionPage(String pageName) { | |
super(pageName); | |
} | |
/** | |
* @generated | |
*/ | |
protected String getSelectionTitle() { | |
return Messages.ComrelNewDiagramFileWizard_RootSelectionPageSelectionTitle; | |
} | |
/** | |
* @generated | |
*/ | |
protected boolean validatePage() { | |
if (selectedModelElement == null) { | |
setErrorMessage(Messages.ComrelNewDiagramFileWizard_RootSelectionPageNoSelectionMessage); | |
return false; | |
} | |
boolean result = ViewService | |
.getInstance() | |
.provides( | |
new CreateDiagramViewOperation( | |
new EObjectAdapter(selectedModelElement), | |
CompositeRefactoringEditPart.MODEL_ID, | |
ComrelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT)); | |
setErrorMessage(result ? null | |
: Messages.ComrelNewDiagramFileWizard_RootSelectionPageInvalidSelectionMessage); | |
return result; | |
} | |
} | |
} |