308 lines
10 KiB
Java
Executable File
308 lines
10 KiB
Java
Executable File
package pyUML.views;
|
|
|
|
|
|
import org.eclipse.core.resources.IFile;
|
|
import org.eclipse.core.resources.IProject;
|
|
import org.eclipse.core.runtime.CoreException;
|
|
import org.eclipse.core.runtime.IPath;
|
|
import org.eclipse.jface.dialogs.Dialog;
|
|
import org.eclipse.jface.dialogs.MessageDialog;
|
|
import org.eclipse.swt.SWT;
|
|
import org.eclipse.swt.events.SelectionEvent;
|
|
import org.eclipse.swt.events.SelectionListener;
|
|
import org.eclipse.swt.layout.GridData;
|
|
import org.eclipse.swt.layout.GridLayout;
|
|
import org.eclipse.swt.widgets.Button;
|
|
import org.eclipse.swt.widgets.Composite;
|
|
import org.eclipse.swt.widgets.Control;
|
|
import org.eclipse.swt.widgets.Group;
|
|
import org.eclipse.swt.widgets.List;
|
|
import org.eclipse.swt.widgets.Shell;
|
|
import org.eclipse.ui.IEditorPart;
|
|
import org.eclipse.uml2.uml.Model;
|
|
|
|
import pyUML.actions.ManageViewsAction;
|
|
import pyUML.backend.GlobalConstants;
|
|
import pyUML.backend.JavaHelperMethods;
|
|
import pyUML.backend.UMLToolsHelperMethods;
|
|
import pyUML.listeners.ViewChangeListener;
|
|
|
|
|
|
/**
|
|
* This is the dialog for managing pyUML.views.
|
|
* Views can be selected, deleted, edited and created.
|
|
* A listener is implemented with this class, so here
|
|
* is defined what happens when you press buttons in the dialog.
|
|
*/
|
|
public class ManageViewsPage extends Dialog implements SelectionListener{
|
|
Composite composite = null;
|
|
Group viewsBoxGroup = null;
|
|
List viewsBox = null;
|
|
Button openButton = null;
|
|
Button editButton = null;
|
|
Button deleteButton = null;
|
|
Button createNewButton = null;
|
|
Model model;
|
|
IProject project;
|
|
|
|
Shell shell=null;
|
|
|
|
public ManageViewsPage(Shell parent, Model model, IProject project){
|
|
super(parent);
|
|
this.model= model;
|
|
this.project=project;
|
|
|
|
}
|
|
|
|
protected Control createDialogArea(Composite parent) {
|
|
this.composite = (Composite) super.createDialogArea(parent);
|
|
setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX);
|
|
createControls(composite);
|
|
initializeDialog();
|
|
//add controls to composite as necessary
|
|
return composite;
|
|
}
|
|
|
|
|
|
public void createControls (Composite composite) {
|
|
// create graphical components
|
|
shell = composite.getShell();
|
|
shell.setText("Manage UML Views");
|
|
|
|
viewsBoxGroup = new Group(composite, SWT.None);
|
|
viewsBoxGroup.setText("Available Views");
|
|
|
|
viewsBoxGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
viewsBoxGroup.setLayout(new GridLayout(1, true));
|
|
|
|
|
|
viewsBox = new List( viewsBoxGroup, SWT.BORDER|SWT.SINGLE|SWT.V_SCROLL|SWT.H_SCROLL );
|
|
viewsBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
Composite buttonGroup = new Composite(viewsBoxGroup, SWT.NONE);
|
|
buttonGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
buttonGroup.setLayout(new GridLayout(3, true));
|
|
|
|
viewsBox.setSize(300,300);
|
|
|
|
openButton = new Button(buttonGroup, SWT.PUSH);
|
|
openButton.setText("Open View");
|
|
openButton.addSelectionListener(this);
|
|
|
|
editButton = new Button(buttonGroup, SWT.PUSH);
|
|
editButton.setText("Edit View");
|
|
editButton.addSelectionListener(this);
|
|
|
|
deleteButton = new Button(buttonGroup, SWT.PUSH);
|
|
deleteButton.setText("Delete View");
|
|
deleteButton.addSelectionListener(this);
|
|
|
|
|
|
buttonGroup.pack();
|
|
viewsBoxGroup.pack();
|
|
setElementEnabled(false, viewsBoxGroup);
|
|
|
|
createNewButton = new Button(composite, SWT.PUSH);
|
|
createNewButton.setText("Create New View");
|
|
createNewButton.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
createNewButton.addSelectionListener(this);
|
|
|
|
composite.pack();
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Sets a composite element and all children enabled/disabled
|
|
* @param enabled
|
|
* @param element
|
|
*/
|
|
public static void setElementEnabled(boolean enabled, Control element) {
|
|
element.setEnabled(enabled);
|
|
if (element instanceof Composite) {
|
|
Composite comp = (Composite) element;
|
|
for (Control child : comp.getChildren()) {
|
|
setElementEnabled(enabled, child);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void widgetDefaultSelected(SelectionEvent e) {
|
|
// Auto-generated method stub
|
|
}
|
|
|
|
/**
|
|
* Handles pressed-button events and runs appropriate pyUML.actions
|
|
*/
|
|
public void widgetSelected(SelectionEvent e) {
|
|
// "CREATE NEW" BUTTON
|
|
if (e.getSource() == this.createNewButton) {
|
|
this.createDialog();
|
|
|
|
// re-open View management window
|
|
this.cancelPressed();
|
|
}
|
|
//DELETE BUTTON
|
|
else if (e.getSource() == this.deleteButton) {
|
|
|
|
// return if nothing was selected
|
|
if (this.viewsBox.getSelection().length <= 0)
|
|
return;
|
|
|
|
// warn before deletion
|
|
if (MessageDialog.openConfirm(null, "Confirm deletion of view",
|
|
"Do you really want to delete this view?") == false)
|
|
return;
|
|
|
|
// delete view configuration, UML model and diagram
|
|
String selectedElement = this.viewsBox.getSelection()[0];
|
|
IPath conFilePath = project.getFullPath().append(GlobalConstants.getPyUmlDir())
|
|
.append(selectedElement+GlobalConstants.getViewConfExtension());
|
|
IFile confFile = this.project.getWorkspace().getRoot().getFile(conFilePath);
|
|
IPath umlFilePath = project.getFullPath().append(GlobalConstants.getPyUmlDir())
|
|
.append(selectedElement+GlobalConstants.getViewUmlExtension());
|
|
IFile umlFile = this.project.getWorkspace().getRoot().getFile(umlFilePath);
|
|
IPath diagramFilePath = project.getFullPath().append(GlobalConstants.getPyUmlDir())
|
|
.append(selectedElement+GlobalConstants.getDiagramExtension());
|
|
IFile diagramFile = this.project.getWorkspace().getRoot().getFile(diagramFilePath);
|
|
|
|
try {
|
|
if (confFile.exists())
|
|
confFile.delete(false, null);
|
|
if (umlFile.exists())
|
|
umlFile.delete(false, null);
|
|
if (diagramFile.exists())
|
|
diagramFile.delete(false, null);
|
|
} catch (CoreException err) {
|
|
MessageDialog.openError(null, "Error deleting element",
|
|
"Could not delete view. Reason:\n"+err.getMessage());
|
|
}
|
|
this.cancelPressed();
|
|
ManageViewsAction.run(project);
|
|
|
|
// OPEN BUTTON
|
|
} else if (e.getSource() == this.openButton) {
|
|
if (this.viewsBox.getSelection().length <= 0)
|
|
return;
|
|
String ViewUmlFileName = this.viewsBox.getSelection()[0]+GlobalConstants.getViewUmlExtension();
|
|
String ViewConfFileName = this.viewsBox.getSelection()[0]+GlobalConstants.getViewConfExtension();
|
|
String selectedElement = this.viewsBox.getSelection()[0]+GlobalConstants.getDiagramExtension();
|
|
IFile viewDiagramFile = this.project.getWorkspace().getRoot().
|
|
getFile(project.getFullPath().append(GlobalConstants.getPyUmlDir()).
|
|
append(selectedElement));
|
|
IFile viewConfFile = this.project.getWorkspace().getRoot().
|
|
getFile(project.getFullPath().append(GlobalConstants.getPyUmlDir()).
|
|
append(ViewConfFileName));
|
|
|
|
if (! viewDiagramFile.exists()) {
|
|
MessageDialog.openError(null, "Error opening view", "The selected view could not be opened;\n" +
|
|
"The UML diagram does not seem to exist!");
|
|
} else {
|
|
UMLToolsHelperMethods.updateViewModel(project, viewConfFile);
|
|
IEditorPart newPage = null;
|
|
try {
|
|
newPage = UMLToolsHelperMethods.refreshDiagramEditor(this.project, viewDiagramFile, false);
|
|
} catch (Throwable t) {
|
|
t.printStackTrace();
|
|
}
|
|
if (newPage == null)
|
|
newPage = UMLToolsHelperMethods.openDiagram(this.project, viewDiagramFile, ViewUmlFileName, true);
|
|
|
|
|
|
if ( newPage == null) {
|
|
MessageDialog.openError(null, "Error opening view", "The selected view could not be opened!");
|
|
}
|
|
else {
|
|
newPage.addPropertyListener(new ViewChangeListener(this.project));
|
|
this.close();
|
|
}
|
|
}
|
|
} // EDIT BUTTON
|
|
else if (e.getSource() == this.editButton) {
|
|
|
|
String selectedViewName = this.viewsBox.getSelection()[0];
|
|
|
|
IFile confFile = this.project.getWorkspace().getRoot().getFile(project.getFullPath().append(GlobalConstants.getPyUmlDir()).append(selectedViewName + GlobalConstants.getViewConfExtension()));
|
|
IFile viewDiagramFile = this.project.getWorkspace().getRoot().getFile(project.getFullPath().append(GlobalConstants.getPyUmlDir()).append(selectedViewName + GlobalConstants.getDiagramExtension()));
|
|
|
|
|
|
// open view editor
|
|
new EditView(this.project, confFile, selectedViewName, true);
|
|
|
|
// reload View, if it is already opened
|
|
UMLToolsHelperMethods.refreshDiagramEditor(project, viewDiagramFile, true);
|
|
|
|
// re-open View management window
|
|
this.cancelPressed();
|
|
ManageViewsAction.run(project);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* creates a "new View" dialog
|
|
* creates an empty view config file and runs "edit" on this file
|
|
*/
|
|
public void createDialog() {
|
|
String viewName = "newView";
|
|
String newViewName = viewName;
|
|
IPath filePath=this.project.getLocation().append(GlobalConstants.getPyUmlDir());
|
|
|
|
// find initial filename that is not already used
|
|
int i=0;
|
|
java.io.File f;
|
|
do {
|
|
newViewName = viewName+(i==0?"":i);
|
|
String fileName=filePath.append(newViewName +GlobalConstants.getViewConfExtension()).toOSString();
|
|
f= new java.io.File(fileName);
|
|
i++;
|
|
} while (f.exists());
|
|
|
|
// create initial config file
|
|
try{
|
|
IFile confFile = this.project.getWorkspace().getRoot().getFile(project.getFullPath().append(GlobalConstants.getPyUmlDir()).append(newViewName + GlobalConstants.getViewConfExtension()));
|
|
confFile.create(JavaHelperMethods.stringToStream(""), false, null);
|
|
|
|
//open "edit view" editor
|
|
new EditView(this.project, confFile, newViewName, true);
|
|
this.close();
|
|
|
|
} catch (CoreException err) {
|
|
MessageDialog.openError(null, "Cannot create View", "View could not be created.\n" +
|
|
"Reason:\n"+err.getMessage());
|
|
return;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* re-reads available pyUML.views from hard disk
|
|
*/
|
|
protected void initializeDialog() {
|
|
boolean viewFound = false;
|
|
String pyUmlDir = project.getLocation().append(GlobalConstants.getPyUmlDir()).toOSString();
|
|
java.io.File umlDir = new java.io.File(pyUmlDir);
|
|
if (umlDir.list() == null) {
|
|
MessageDialog.openError(null, "Error Managing Views",
|
|
"No UML Model was found.\n" +
|
|
"Please create a Model before creating a View!");
|
|
this.close();
|
|
return;
|
|
}
|
|
|
|
for (String file : umlDir.list()) {
|
|
if (file.matches(".*.pyUmlView.uml$")) {
|
|
viewFound=true;
|
|
this.viewsBox.add(file.replace(".pyUmlView.uml", ""));
|
|
this.viewsBox.add("a");
|
|
this.viewsBox.remove(this.viewsBox.getItemCount()-1);
|
|
}
|
|
}
|
|
|
|
if (viewFound)
|
|
setElementEnabled(true, viewsBoxGroup);
|
|
else
|
|
setElementEnabled(false, viewsBoxGroup);
|
|
}
|
|
}
|