/**
*
*/
package org.feature.multi.perspective.measure.performance;
import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
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.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.feature.model.utilities.WorkbenchUtil;
import org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage;
/**
* @author <a href=mailto:julia.schroeter@tu-dresden.de>Julia Schroeter</a>
*
*/
public abstract class AbstractCheckHandler extends AbstractHandler {
protected Job job;
private static String[] genProjects = new String[] { "graph"
// "vp100nc_cnf10000", "vp100nc_cnf10000", "vp100nc_cnf10000",
// "vp100nc_cnf2000","vp100nc_cnf2000","vp100nc_cnf2000"
};
protected static String generatedProject = "generatedProject";
protected static String mappingFolder = ViewmappingPackage.eNS_PREFIX;
//protected static String classificationFolder = ClassificationPackage.eNS_PREFIX;
abstract String getMeasureName();
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
createJob();
return null;
}
private void createJob() {
final Job job = new Job(getMeasureName()) {
protected IStatus run(IProgressMonitor monitor) {
try {
measure();
printPerformanceMeasure();
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
return Status.OK_STATUS;
}
finally {
// schedule(60000); // start again in an hour
}
}
};
job.addJobChangeListener(new JobChangeAdapter() {
public void done(IJobChangeEvent event) {
if (event.getResult().isOK())
postMessage("Performance Measurement completed successfully");
else
postError("Performance Measurement did not complete successfully");
}
private void postError(String msg) {
Shell shell = WorkbenchUtil.getShell();
if (shell != null) {
MessageBox msgBox = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
msgBox.setMessage(msg);
msgBox.open();
}
}
private void postMessage(String msg) {
Shell shell = WorkbenchUtil.getShell();
if (shell != null) {
MessageBox msgBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION);
msgBox.setMessage(msg);
msgBox.open();
}
}
});
job.setSystem(true);
job.schedule(); // start as soon as possible
}
private void measure() {
clearLists();
for (int i = 0; i < genProjects.length; i++) {
String projectPart = genProjects[i];
String projectName = generatedProject + "_" + projectPart;
measurePerformance(projectName);
}
}
abstract void clearLists();
abstract Logger getLogger();
abstract void measurePerformance(String projectName);
abstract void printPerformanceMeasure();
protected void checkModelsInProject(String projectName, String modelFolder) throws CoreException {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProject project = workspace.getRoot().getProject(projectName);
if (project.exists()) {
IFolder projectFolder = project.getFolder(modelFolder);
if (projectFolder.exists()) {
IResource[] members;
members = projectFolder.members();
for (IResource iResource : members) {
if (iResource instanceof IFile) {
IFile file = (IFile) iResource;
check(file);
}
}
}
}
}
abstract void check(IFile file);
@Override
public void dispose() {
if (job != null) {
job.cancel();
}
super.dispose();
}
protected StringBuffer initStringBuffer(String description) {
StringBuffer s = new StringBuffer();
s.append(description);
s.append("{");
return s;
}
protected void finalizeStringBuffer(StringBuffer s) {
s.append("}");
getLogger().debug(s);
}
protected void printDoubleCollection(String description, List<Double> bruteForceConsistentVPRatio2) {
StringBuffer s = initStringBuffer(description);
for (Double ratio : bruteForceConsistentVPRatio2) {
// DecimalFormat df = new DecimalFormat("0.00");
// String ratioStr = df.format(ratio);
s.append(ratio);
s.append(", ");
}
finalizeStringBuffer(s);
}
protected void printStringCollection(String description, List<String> list) {
StringBuffer s = initStringBuffer(description);
for (String l : list) {
s.append(l);
s.append(", ");
}
finalizeStringBuffer(s);
}
protected void printCollection(String description, Collection<Integer> list) {
StringBuffer s = initStringBuffer(description);
for (Integer l : list) {
s.append(l);
s.append(", ");
}
finalizeStringBuffer(s);
}
protected void printCollection(String description, List<Long> list) {
StringBuffer s = initStringBuffer(description);
for (Long l : list) {
s.append(l);
s.append(", ");
}
finalizeStringBuffer(s);
}
}