// Path: src/coffeescript/nb/CoffeeScriptCompiler.java
// public static class CompilerResult {
//         
//     private String js;
//     private Error error;
//         
//     public CompilerResult(String js) {
//         this.js = js;
//     }
//         
//     public CompilerResult(Error error) {
//         this.error = error;
//     }
//         
//     public String getJs() {
//         return js;
//     }
//         
//     public Error getError() {
//         return error;
//     }
// }
// 
// Path: src/coffeescript/nb/options/CoffeeScriptSettings.java
// public class CoffeeScriptSettings {
// 
//     private static CoffeeScriptSettings INSTANCE;
// 
//     private CoffeeScriptSettings() {
//     }
// 
//     public static synchronized CoffeeScriptSettings get() {
//         if (INSTANCE == null) {
//             INSTANCE = new CoffeeScriptSettings();
//         }
//         return INSTANCE;
//     }
// 
//     private Preferences getPreferences() {
//         return NbPreferences.forModule(CoffeeScriptSettings.class).node("settings");
//     }
// 
//     public boolean isBare() {
//         return getPreferences().getBoolean("bare", true);
//     }
// 
//     public void setBare(boolean bare) {
//         getPreferences().put("bare", Boolean.toString(bare));
//     }
// 
//     public CompilerType getCompilerType() {
//         return CompilerType.valueOf(getPreferences().get("compilerType", CompilerType.RHINO.name()));
//     }
// 
//     public void setCompilerType(CompilerType compilerType) {
//         getPreferences().put("compilerType", compilerType.name());
//     }
// 
//     public String getCompilerExec() {
//         return getPreferences().get("compilerExec", "");
//     }
// 
//     public void setCompilerExec(String compilerExec) {
//         getPreferences().put("compilerExec", compilerExec);
//     }
//     
//     public String getOutputFolder() {
//         return getPreferences().get("outputFolder", "");
//     }
// 
//     public void setOutputFolder(String outputFolder) {
//         getPreferences().put("outputFolder", outputFolder);
//     }
//     
//     public boolean isUseUTF8Encoding() {
//         return getPreferences().getBoolean("useUTF8", false);
//     }
// 
//     public void setUseUTF8Encoding(boolean useUTF8) {
//         getPreferences().putBoolean("useUTF8", useUTF8);
//     }
// 
//     public static CoffeeScriptCompiler getCompiler() {
//         switch (CoffeeScriptSettings.get().getCompilerType()) {
//             case NODEJS:
//                 return CoffeeScriptNodeJSCompiler.get();
//             case RHINO:
//                 return CoffeeScriptRhinoCompiler.get();
//         }
//         return null;
//     }
// 
//     public enum CompilerType {
// 
//         RHINO("Rhino (JavaScript for Java)"),
//         NODEJS("CoffeeScript (Node.js)");
//         private final String label;
// 
//         private CompilerType(String label) {
//             this.label = label;
//         }
// 
//         public String getLabel() {
//             return label;
//         }
// 
//         @Override
//         public String toString() {
//             return label;
//         }
//     }
// }


import coffeescript.nb.CoffeeScriptCompiler.CompilerResult;
import coffeescript.nb.options.CoffeeScriptSettings;
import java.awt.event.ActionEvent;
import java.util.Collection;
import java.util.concurrent.Future;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.LifecycleManager;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.execution.ExecutionEngine;
import org.openide.execution.ExecutorTask;
import org.openide.util.Cancellable;
import org.openide.util.ContextAwareAction;
import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
import org.openide.util.actions.Presenter.Popup;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;
        private boolean bare;

        public CompilerTask(Collection<? extends CoffeeScriptDataObject> data, boolean bare) {
            this.data = data;
            this.bare = bare;
            taskName = data.size() > 1 ? "Compiling CoffeeScript files" : "Compiling " + data.iterator().next().getPrimaryFile().getNameExt();
        }

        public void compile() throws Exception {
            LifecycleManager.getDefault().saveAll();
            for (CoffeeScriptDataObject coffeeFile : data) {
                boolean literate;
                ProgressHandle handle = ProgressHandleFactory.createHandle("Compiling " + coffeeFile.getPrimaryFile().getNameExt(), this);
                try {
                    handle.start();
                    literate = coffeeFile.getPrimaryFile().getExt().equals(CoffeeScriptLanguage.LITERATE_EXTENSION);
                    CoffeeScriptCompiler.CompilerResult result = CoffeeScriptSettings.getCompiler().compile(coffeeFile.getPrimaryFile().asText(), bare, literate);
                    if (result == null) {
                        return; // Canceled
                    }
                    if (result.getJs() != null) {
                        CoffeeScriptUtils.writeJSForCoffeeScriptFile(result.getJs(), coffeeFile.getPrimaryFile());
                    }
                    handleResult(result);
                } finally {
                    handle.finish();
                }
            }
        }

// Path: src/coffeescript/nb/CoffeeScriptCompiler.java
// public static class CompilerResult {
//         
//     private String js;
//     private Error error;
//         
//     public CompilerResult(String js) {
//         this.js = js;
//     }
//         
//     public CompilerResult(Error error) {
//         this.error = error;
//     }
//         
//     public String getJs() {
//         return js;
//     }
//         
//     public Error getError() {
//         return error;
//     }
// }
// 
// Path: src/coffeescript/nb/options/CoffeeScriptSettings.java
// public class CoffeeScriptSettings {
// 
//     private static CoffeeScriptSettings INSTANCE;
// 
//     private CoffeeScriptSettings() {
//     }
// 
//     public static synchronized CoffeeScriptSettings get() {
//         if (INSTANCE == null) {
//             INSTANCE = new CoffeeScriptSettings();
//         }
//         return INSTANCE;
//     }
// 
//     private Preferences getPreferences() {
//         return NbPreferences.forModule(CoffeeScriptSettings.class).node("settings");
//     }
// 
//     public boolean isBare() {
//         return getPreferences().getBoolean("bare", true);
//     }
// 
//     public void setBare(boolean bare) {
//         getPreferences().put("bare", Boolean.toString(bare));
//     }
// 
//     public CompilerType getCompilerType() {
//         return CompilerType.valueOf(getPreferences().get("compilerType", CompilerType.RHINO.name()));
//     }
// 
//     public void setCompilerType(CompilerType compilerType) {
//         getPreferences().put("compilerType", compilerType.name());
//     }
// 
//     public String getCompilerExec() {
//         return getPreferences().get("compilerExec", "");
//     }
// 
//     public void setCompilerExec(String compilerExec) {
//         getPreferences().put("compilerExec", compilerExec);
//     }
//     
//     public String getOutputFolder() {
//         return getPreferences().get("outputFolder", "");
//     }
// 
//     public void setOutputFolder(String outputFolder) {
//         getPreferences().put("outputFolder", outputFolder);
//     }
//     
//     public boolean isUseUTF8Encoding() {
//         return getPreferences().getBoolean("useUTF8", false);
//     }
// 
//     public void setUseUTF8Encoding(boolean useUTF8) {
//         getPreferences().putBoolean("useUTF8", useUTF8);
//     }
// 
//     public static CoffeeScriptCompiler getCompiler() {
//         switch (CoffeeScriptSettings.get().getCompilerType()) {
//             case NODEJS:
//                 return CoffeeScriptNodeJSCompiler.get();
//             case RHINO:
//                 return CoffeeScriptRhinoCompiler.get();
//         }
//         return null;
//     }
// 
//     public enum CompilerType {
// 
//         RHINO("Rhino (JavaScript for Java)"),
//         NODEJS("CoffeeScript (Node.js)");
//         private final String label;
// 
//         private CompilerType(String label) {
//             this.label = label;
//         }
// 
//         public String getLabel() {
//             return label;
//         }
// 
//         @Override
//         public String toString() {
//             return label;
//         }
//     }
// }


// Path: src/coffeescript/nb/CoffeeScriptAction.java
import coffeescript.nb.CoffeeScriptCompiler.CompilerResult;
import coffeescript.nb.options.CoffeeScriptSettings;
import java.awt.event.ActionEvent;
import java.util.Collection;
import java.util.concurrent.Future;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.LifecycleManager;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.execution.ExecutionEngine;
import org.openide.execution.ExecutorTask;
import org.openide.util.Cancellable;
import org.openide.util.ContextAwareAction;
import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
import org.openide.util.actions.Presenter.Popup;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;

        private boolean bare;

        public CompilerTask(Collection<? extends CoffeeScriptDataObject> data, boolean bare) {
            this.data = data;
            this.bare = bare;
            taskName = data.size() > 1 ? "Compiling CoffeeScript files" : "Compiling " + data.iterator().next().getPrimaryFile().getNameExt();
        }

        public void compile() throws Exception {
            LifecycleManager.getDefault().saveAll();
            for (CoffeeScriptDataObject coffeeFile : data) {
                boolean literate;
                ProgressHandle handle = ProgressHandleFactory.createHandle("Compiling " + coffeeFile.getPrimaryFile().getNameExt(), this);
                try {
                    handle.start();
                    literate = coffeeFile.getPrimaryFile().getExt().equals(CoffeeScriptLanguage.LITERATE_EXTENSION);
                    CoffeeScriptCompiler.CompilerResult result = CoffeeScriptSettings.getCompiler().compile(coffeeFile.getPrimaryFile().asText(), bare, literate);
                    if (result == null) {
                        return; // Canceled
                    }
                    if (result.getJs() != null) {
                        CoffeeScriptUtils.writeJSForCoffeeScriptFile(result.getJs(), coffeeFile.getPrimaryFile());
                    }
                    handleResult(result);
                } finally {
                    handle.finish();
                }
            }
        }

        protected void handleResult(CoffeeScriptRhinoCompiler.CompilerResult result) {