/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.babel17.netbeans; // org.openide.loaders.DataObject // <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/> /* <attr name="delegate" methodvalue="org.openide.awt.Actions.inject"/> <attr name="displayName" bundlevalue="com.babel17.netbeans.Bundle#CTL_Run91Babel17"/> <attr name="iconBase" stringvalue="com/babel17/netbeans/Babel17RunIcon.png"/> <attr name="injectable" stringvalue="com.babel17.netbeans.Run91Babel17"/> <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/> <attr name="noIconInMenu" boolvalue="false"/> <attr name="selectionType" stringvalue="EXACTLY_ONE"/> <attr name="type" stringvalue="com.babel17.netbeans.Babel17DataObject"/> </file> * */ import com.babel17.naive.*; import javax.swing.ImageIcon; import org.openide.LifecycleManager; import org.openide.filesystems.FileObject; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JMenuItem; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; import org.openide.filesystems.FileUtil; import org.openide.util.*; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; import java.io.*; import java.util.*; import org.openide.util.actions.Presenter; public final class UnittestBabel17 extends AbstractAction implements ContextAwareAction, Presenter.Menu, Presenter.Toolbar, LookupListener { /* public @Override Action createContextAwareInstance(Lookup context) { return this; }*/ //private final Babel17DataObject context; JButton button = null; JMenuItem menuitem = null; private Lookup.Result<FileObject> result; public UnittestBabel17() { this(Utilities.actionsGlobalContext()); } public UnittestBabel17(Lookup context) { super("Run Babel-17 unit test(s)"); //putValue(NAME, "Run Babel-17 unit test(s)"); String iconfile = "com/babel17/netbeans/Babel17UnittestIcon.png"; putValue(SMALL_ICON, new ImageIcon(ImageUtilities.loadImage(iconfile, true))); //this.context = context; //putValue(DynamicMenuContent.HIDE_WHEN_DISABLED, true); result = context.lookupResult(FileObject.class); result.addLookupListener(this); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (button != null) { button.setEnabled(enabled); button.setVisible(enabled); } if (menuitem != null) { menuitem.setEnabled(enabled); menuitem.setVisible(enabled); } } public void actionPerformed(ActionEvent e) { LifecycleManager.getDefault().saveAll(); final ArrayList<FileObject> fs = getSelectedFileObjects(); if (fs.isEmpty()) return; final WriteNetbeansOutput o = WriteNetbeansOutput.get(); final Runnable runnable = new Runnable() { public void run() { try { Project project = FileOwnerQuery.getOwner(fs.get(0)); if (project instanceof Babel17Project) { Babel17Project p = (Babel17Project) project; String[] sources = p.getSourceFiles(); FileCentral fc = new FileCentral(); for (FileObject fo : fs) { Babel17Project.collectFiles(fc, fo); } EvaluationOptions options = new EvaluationOptions(true, p.getPreferences().get("JAVALIBS", "")); Interpreter.runUnittests(options, fc.getFileNames(), sources, o); } } finally { o.done(); } } }; RequestProcessor.getDefault().post(runnable); } public ArrayList<FileObject> getSelectedFileObjects() { java.util.Collection<? extends FileObject> coll = result.allInstances(); ArrayList<FileObject> fos = new ArrayList<FileObject>(); Project P = null; boolean P_clash = false; for (FileObject f : coll) { Project project = FileOwnerQuery.getOwner(f); if (project instanceof Babel17Project) { if (Babel17Project.isBabel17File(f) || f.isFolder()) { if (P == null || P == project) { P = project; } else { P_clash = true; break; } fos.add(f); break; } } } if (P_clash) { return new ArrayList<FileObject>(); } return fos; } public void resultChanged(LookupEvent e) { this.setEnabled(!getSelectedFileObjects().isEmpty()); } public JMenuItem getMenuPresenter() { menuitem = new JMenuItem(this); menuitem.setEnabled(false); menuitem.setVisible(false); return menuitem; } public JButton getToolbarPresenter() { button = new JButton(this); button.setText(""); button.setEnabled(false); button.setVisible(false); return button; } public Action createContextAwareInstance(Lookup context) { return new UnittestBabel17(context); } }