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;	
+	}
+}