package de.ovgu.cide.mining.autoeval;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.texteditor.ITextEditor;
import de.ovgu.cide.features.FeatureModelManager;
import de.ovgu.cide.features.IFeature;
import de.ovgu.cide.mining.database.ApplicationController;
import de.ovgu.cide.mining.database.model.AElement;
import de.ovgu.cide.mining.events.AElementPreviewEvent;
public class MissingAnnotationView extends ViewPart {
private TreeViewer tree;
public MissingAnnotationView() {
}
@Override
public void createPartControl(Composite parent) {
tree = new TreeViewer(parent);
IActionBars bars = getViewSite().getActionBars();
fillLocalToolBar(bars.getToolBarManager());
tree.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
TreeItem[] sel = tree.getTree().getSelection();
assert sel.length == 1;
assert sel[0].getData() instanceof AElement;
AElement element = (AElement) sel[0].getData();
int cuHash, start, len;
ApplicationController AC = ApplicationController.getInstance();
cuHash = element.getCompelationUnitHash();
ICompilationUnit cu = AC.getICompilationUnit(cuHash);
start = element.getStartPosition();
len = element.getLength();
try {
AC.fireEvent(new AElementPreviewEvent(
MissingAnnotationView.this));
IEditorPart javaEditor;
javaEditor = JavaUI.openInEditor(cu);
if ((start >= 0) && (javaEditor instanceof ITextEditor)) {
((ITextEditor) javaEditor).selectAndReveal(start, len);
}
} catch (PartInitException e) {
e.printStackTrace();
} catch (JavaModelException e) {
e.printStackTrace();
}
}
});
}
private void fillLocalToolBar(IToolBarManager toolBarManager) {
toolBarManager.add(new Action("load") {
public void run() {
try {
init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
protected void init() throws Exception {
String projectName = "MobileMedia_Eval";
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
projectName);
project.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
Set<IFeature> features = FeatureModelManager.getInstance()
.getFeatureModel(project).getFeatures();
for (IFeature f : features) {
TreeItem featureNode = new TreeItem(tree.getTree(), SWT.DEFAULT);
featureNode.setText(f.getName());
featureNode.setData(f);
String targetAnnotationFile = "target_" + f.getName() + ".log";
Set<String> targetNodes = AutoEval.readElements(project
.getFile(targetAnnotationFile));
ApplicationController lDB = ApplicationController.getInstance();
for (AElement element : lDB.getAllElements())
if (targetNodes.contains(element.getId()))
if (!lDB.getElementColors(element).contains(f)) {
TreeItem elementNode = new TreeItem(featureNode,
SWT.DEFAULT);
elementNode.setText(element.getDisplayName());
elementNode.setData(element);
}
}
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
}