package org.eclipse.uml2.diagram.common.async; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.uml2.diagram.common.Messages; public abstract class NewDiagramSynchronizationWizardPage extends WizardPage { private final TransactionalEditingDomain myDomain; private final ILabelProvider myDiagramSpecificLabelProvider; private NewDiagramSyncHelper myNewDiagramSyncHelper; private SyncModelUI mySyncUI; private boolean myWasVisible; protected abstract void addViewerFilters(SyncModelUI syncModelUI); protected abstract NewDiagramSyncHelper createNewDiagramSyncHelper(TransactionalEditingDomain domain); protected abstract EObject getWizardSemanticRoot(); public NewDiagramSynchronizationWizardPage(String pageName, TransactionalEditingDomain domain, ILabelProvider diagramSpecificLabelProvider) { super(pageName); myDomain = domain; myDiagramSpecificLabelProvider = diagramSpecificLabelProvider; } public void createControl(Composite parent) { initializeDialogUnits(parent); Composite plate = new Composite(parent, SWT.NONE); plate.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); layout.marginWidth = 0; plate.setLayout(layout); setControl(plate); Label label = new Label(plate, SWT.NONE); label.setText(getSelectionTitle()); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); mySyncUI = new SyncModelUI(plate, new SyncModelLabelProvider(myDiagramSpecificLabelProvider)); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.heightHint = 300; layoutData.widthHint = 300; mySyncUI.getUI().getControl().setLayoutData(layoutData); addViewerFilters(mySyncUI); setPageComplete(true); } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { myWasVisible = true; EObject newRoot = getWizardSemanticRoot(); myDomain.getResourceSet().getResource(newRoot.eResource().getURI(), true); if (myNewDiagramSyncHelper == null) { myNewDiagramSyncHelper = createNewDiagramSyncHelper(myDomain); } myNewDiagramSyncHelper.setSemanticRoot(newRoot); mySyncUI.setRootNode(myNewDiagramSyncHelper.getSyncRoot()); mySyncUI.revealRootChildren(); } } public boolean wasVisible() { return myWasVisible; } public Diagram getDiagram() { return myNewDiagramSyncHelper == null ? null : myNewDiagramSyncHelper.getNewDiagram(); } public SyncModelNode getSyncRoot() { return myNewDiagramSyncHelper == null ? null : myNewDiagramSyncHelper.getSyncRoot(); } @Override public void dispose() { if (myNewDiagramSyncHelper != null) { myNewDiagramSyncHelper.dispose(); myNewDiagramSyncHelper = null; } super.dispose(); } private String getSelectionTitle() { return Messages.NewDiagramSynchronizationWizardPage_selection_title; } }