ui classes added
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/NewMetricWizardOCL.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/NewMetricWizardOCL.java
new file mode 100644
index 0000000..e5a23c7
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/NewMetricWizardOCL.java
@@ -0,0 +1,193 @@
+package org.eclipse.emf.refactor.metrics.ocl.ui;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.refactor.metrics.generator.interfaces.INewMetricWizard;
+import org.eclipse.emf.refactor.metrics.generator.ui.MetricBasicDataWizardPage;
+import org.eclipse.emf.refactor.metrics.managers.MetricManager;
+import org.eclipse.emf.refactor.metrics.ocl.core.OCLMetricInfo;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLGenerationManager;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+public class NewMetricWizardOCL extends Wizard implements INewWizard, INewMetricWizard {
+
+ protected static final String TRANSFORMATIONS_DIR = "/transformations/";
+ private final String WINDOW_TITLE = "New Metric";
+ private MetricBasicDataWizardPage basicDataPage;
+ private OCLDataWizardPage oclPage;
+ private String name, id, description, metamodel, context, jar;
+ private LinkedList<IProject> projects;
+ private IProject targetProject;
+ private String importPackage;
+
+ public NewMetricWizardOCL() { }
+
+ public NewMetricWizardOCL(String metaModel, String contextType) {
+ metamodel = metaModel;
+ context = contextType;
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ initProjects();
+ }
+
+ @Override
+ public void addPages() {
+ setWindowTitle(WINDOW_TITLE);
+ basicDataPage = new MetricBasicDataWizardPage();
+ if (metamodel != null && ! metamodel.isEmpty()
+ && context != null && ! context.isEmpty()) {
+ setMetamodelAndContext(metamodel, context);
+ }
+ addPage(basicDataPage);
+ oclPage = new OCLDataWizardPage();
+ addPage(oclPage);
+ }
+
+ @Override
+ public boolean canFinish() {
+ return (basicDataPage.isPageComplete() && oclPage.isPageComplete());
+ }
+
+ @Override
+ public boolean performFinish() {
+ try{
+ getContainer().run(true, true, new IRunnableWithProgress(){
+ public void run(IProgressMonitor monitor)throws InvocationTargetException, InterruptedException{
+ OCLGenerationManager.getInstance();
+ OCLGenerationManager.createNewMetric(monitor, getMetricInfo(), targetProject);
+ }
+ });
+ }
+ catch(InvocationTargetException e){
+ e.printStackTrace();
+ return false;
+ }
+ catch(InterruptedException e){
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private void initProjects(){
+ this.projects = new LinkedList<IProject>();
+ IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ for (IProject project : allProjects) {
+ if (project.isOpen()) {
+ IProjectNature nature = null;
+ try {
+ nature = project.getNature("org.eclipse.pde.PluginNature");
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ if (null != nature)
+ this.projects.add(project);
+ }
+ }
+ }
+
+ private OCLMetricInfo getMetricInfo() {
+ MetricManager.getInstance();
+ String proj = this.targetProject.getLocation().toString();
+ String expression = oclPage.getOCLExpression();
+ OCLMetricInfo info = new OCLMetricInfo(name, id, description,
+ metamodel, context, proj, getJar(), importPackage, expression);
+ return info;
+ }
+
+ private String getJar() {
+ return jar;
+ }
+
+ public MetricBasicDataWizardPage getDataPage() {
+ return basicDataPage;
+ }
+
+ public LinkedList<IProject> getProjects() {
+ return projects;
+ }
+
+ public IProject getTargetProject() {
+ return targetProject;
+ }
+
+ public String getMetamodel() {
+ return metamodel;
+ }
+
+ public String getContext() {
+ return context;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setMetamodel(String metamodel) {
+ this.metamodel = metamodel;
+ }
+
+ public void setContext(String context) {
+ this.context = context;
+ }
+
+ public void setTargetProject(String projectName){
+ for (IProject project : projects)
+ if (project.getName().equals(projectName))
+ this.targetProject = project;
+ }
+
+ public void setJar(String jar) {
+ this.jar = jar;
+ }
+
+ public OCLDataWizardPage getOCLPage() {
+ return oclPage;
+ }
+
+ @Override
+ public int getPageNumbers() {
+ return 2;
+ }
+
+ @Override
+ public WizardPage getSecondPage() {
+ return this.oclPage;
+ }
+
+ @Override
+ public void setImportPackage(String importPackage) {
+ this.importPackage = importPackage;
+ }
+
+ @Override
+ public void updateSecondPage() { }
+
+ @Override
+ public void setMetamodelAndContext(String metamodel, String contextType) {
+ basicDataPage.setMetamodel(metamodel);
+ basicDataPage.setContextType(contextType);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/OCLDataWizardPage.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/OCLDataWizardPage.java
new file mode 100644
index 0000000..459300a
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/ui/OCLDataWizardPage.java
@@ -0,0 +1,90 @@
+package org.eclipse.emf.refactor.metrics.ocl.ui;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+public class OCLDataWizardPage extends WizardPage implements Listener{
+
+ private static final String PAGE_NAME = "org.eclipse.emf.refactor.metrics.OCLDataWizardPage";
+ private static final String PAGE_TITLE = "New Metric: OCL Expression";
+ private static final String PAGE_DESCRIPTION =
+ "Please enter an OCL expression specifying the calculation of the new metric.";
+
+ private String oclExpression;
+ private StyledText oclExpressionTextField;
+
+ public OCLDataWizardPage(){
+ super(PAGE_NAME);
+ setTitle(PAGE_TITLE);
+ setDescription(PAGE_DESCRIPTION);
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ final GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ container.setLayout(layout);
+ createTextFields(container);
+// initContents();
+ setControl(container);
+ this.setPageComplete(false);
+
+ }
+
+ public String getOCLExpression(){
+ return oclExpression;
+ }
+
+ private void createTextFields(Composite container) {
+ Label label;
+ GridData gridData;
+ Group group;
+ GridLayout layout;
+ // - Metric Data -
+ group = new Group(container, SWT.NONE);
+ group.setText("OCL");
+ layout = new GridLayout();
+ layout.numColumns = 2;
+ group.setLayout(layout);
+ gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+ group.setLayoutData(gridData);
+ // - Name -
+ // col:1
+ label = new Label(group, SWT.NONE);
+ label.setText("OCL Expression:");
+ label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_BEGINNING));
+ // col:2
+ oclExpressionTextField = new StyledText(group, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
+ //new Text(group, SWT.BORDER);
+// oclExpressionTextField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ oclExpressionTextField.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+ oclExpressionTextField.addListener(SWT.Modify, this);
+ oclExpressionTextField.setText("self.");
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ updatePageComplete();
+ }
+
+ private void updatePageComplete() {
+ setPageComplete(! this.oclExpressionTextField.getText().isEmpty());
+ saveTextFieldValues();
+ }
+
+ private void saveTextFieldValues() {
+ String ocl = this.oclExpressionTextField.getText();
+ ocl = ocl.replaceAll("\r", " ");
+ ocl = ocl.replaceAll("\n", " ");
+ oclExpression = ocl;
+ }
+}