Newer
Older
package org.etsi.mts.tdl.execution.java.eclipse.commands;
import java.io.IOException;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.execution.java.codegen.JUnitTestGenerator;
import org.etsi.mts.tdl.execution.java.codegen.Settings;
import org.etsi.mts.tdl.execution.java.eclipse.ui.PropertyPage;
import org.osgi.service.prefs.Preferences;
public class RenderHandler extends AbstractHandler implements IHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IFile tdl = null;
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof IFile) {
String ext = ((IFile) element).getFileExtension();
if (ext.toLowerCase().contains("tdl")) {
tdl = (IFile) element;
}
}
}
if (tdl == null)
return null;
ResourceSet rs = new ResourceSetImpl();
URI uri = URI.createPlatformResourceURI(tdl.getFullPath().toString(), true);
Resource resource = rs.getResource(uri, true);
// ((org.eclipse.xtext.linking.lazy.LazyLinkingResource)resource).
EcoreUtil.resolveAll(resource);
Package model = (Package) resource.getContents().get(0);
ProjectScope ps = new ProjectScope(tdl.getProject());
Preferences preferences = ps.getNode(PropertyPage.PREFERENCE_SCOPE);
IContainer root = ResourcesPlugin.getWorkspace().getRoot();
final IFolder generationDir = root.getFolder(new Path(preferences.get(Settings.OUTPUT_DIR, "")));
Settings settings = new Settings(preferences.get(Settings.OUTPUT_DIR, ""),
generationDir.getLocation().toFile(),
preferences.get(Settings.PACKAGE, ""),
preferences.get(Settings.INJECTOR, ""),
preferences.get(Settings.DATE_FORMAT, ""),
preferences.get(Settings.USE_MAPPING, ""),
preferences.getBoolean(Settings.UNMAPPED_DATA, false));
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
JUnitTestGenerator generator = new JUnitTestGenerator(model, settings);
final String taskName = "Render JUnit";
final Job j = new Job(taskName) {
@Override
public IStatus run(final IProgressMonitor monitor) {
try {
generator.generate();
} catch (IOException e) {
return new Status(IStatus.ERROR, getClass(), taskName + " failed", e);
}
try {
generationDir.refreshLocal(IResource.DEPTH_INFINITE, monitor);
} catch (CoreException e) {
return e.getStatus();
}
return Status.OK_STATUS;
}
};
j.setUser(true);
j.setPriority(Job.INTERACTIVE);
j.schedule();
return null;
}
}