org.openide.explorer
diff -r a458e198e2b4 php.project/src/org/netbeans/modules/php/project/PhpActionProvider.java
--- a/php.project/src/org/netbeans/modules/php/project/PhpActionProvider.java Fri Feb 12 09:11:20 2010 +0100
+++ b/php.project/src/org/netbeans/modules/php/project/PhpActionProvider.java Mon Feb 21 09:47:41 2011 -0500
@@ -60,6 +60,8 @@
import org.netbeans.modules.php.project.ui.actions.RunTestCommand;
import org.netbeans.modules.php.project.ui.actions.TestProjectCommand;
import org.netbeans.modules.php.project.ui.actions.UploadCommand;
+import org.netbeans.modules.php.project.ui.actions.BuildProjectCommand;
+import org.netbeans.modules.php.project.ui.actions.RebuildProjectCommand;
import org.netbeans.spi.project.ActionProvider;
import org.netbeans.spi.project.ui.support.FileSensitiveActions;
import org.netbeans.spi.project.ui.support.ProjectSensitiveActions;
@@ -87,6 +89,8 @@
new CopyCommand(project),
new MoveCommand(project),
new RenameCommand(project),
+ new BuildProjectCommand(project),
+ new RebuildProjectCommand(project),
// file sensitive actions
new DownloadCommand(project),
diff -r a458e198e2b4 php.project/src/org/netbeans/modules/php/project/ui/actions/Bundle.properties
--- a/php.project/src/org/netbeans/modules/php/project/ui/actions/Bundle.properties Fri Feb 12 09:11:20 2010 +0100
+++ b/php.project/src/org/netbeans/modules/php/project/ui/actions/Bundle.properties Mon Feb 21 09:47:41 2011 -0500
@@ -40,6 +40,8 @@
#DefaultAntProjectOperations:
LBL_RunProject=Run
LBL_DebugProject=Debug
+LBL_BuildProject=Build
+LBL_RebuildProject=Rebuild
LBL_TestProject=Test
LBL_TestFile=Test
LBL_UploadCommand=Upload
diff -r a458e198e2b4 php.project/src/org/netbeans/modules/php/project/ui/actions/support/ConfigAction.java
--- a/php.project/src/org/netbeans/modules/php/project/ui/actions/support/ConfigAction.java Fri Feb 12 09:11:20 2010 +0100
+++ b/php.project/src/org/netbeans/modules/php/project/ui/actions/support/ConfigAction.java Mon Feb 21 09:47:41 2011 -0500
@@ -39,20 +39,31 @@
package org.netbeans.modules.php.project.ui.actions.support;
+import java.io.IOException;
import java.util.logging.Logger;
+import org.apache.tools.ant.module.api.AntProjectCookie;
+import org.apache.tools.ant.module.api.AntTargetExecutor;
+import org.apache.tools.ant.module.api.AntTargetExecutor.Env;
import org.netbeans.modules.php.project.PhpProject;
import org.netbeans.modules.php.project.ProjectPropertiesSupport;
import org.netbeans.modules.php.project.ui.customizer.CompositePanelProviderImpl;
import org.netbeans.modules.php.project.ui.customizer.CustomizerProviderImpl;
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties;
+import org.netbeans.spi.project.ui.support.BuildExecutionSupport;
+import org.openide.execution.ExecutorTask;
import org.openide.filesystems.FileObject;
+import org.openide.loaders.DataObject;
+import org.openide.loaders.DataObjectNotFoundException;
+import org.openide.util.Exceptions;
import org.openide.util.Lookup;
+import org.openide.util.Task;
+import org.openide.util.TaskListener;
/**
* Common action for all the possible Run Configurations of a PHP project.
*
* Meant to be stateless, so thread safe.
- * @author Tomas Mysik
+ * @author Tomas Mysik, Phil Lello
*/
public abstract class ConfigAction {
public static enum Type {
@@ -123,6 +134,49 @@
return XDebugStarterFactory.getInstance() != null;
}
+ // TODO: Decide how much effort these should put into detecting targets.
+ // Testing for build.xml is cheap and easy, probing build.xml via XPath
+ // to detect targets would be better, but then opens up a can of worms over
+ // includes, etc.
+ // It would probably be good to support Maven too.
+ private DataObject getBuildXmlDataObject() {
+ FileObject buildXml = project.getHelper().getProjectDirectory().getFileObject("build.xml");
+ DataObject buildXmlDO = null;
+ try {
+ if (buildXml != null) buildXmlDO = DataObject.find(buildXml);
+ } catch (DataObjectNotFoundException ex) {
+ }
+ return buildXmlDO;
+ }
+
+ private boolean isBuildXmlPresent() {
+ return getBuildXmlDataObject() != null;
+ }
+
+ public boolean isBuildProjectEnabled() {
+ return isBuildXmlPresent();
+ }
+
+ public boolean isRebuildProjectEnabled() {
+ return isBuildXmlPresent();
+ }
+
+ public void buildProject() {
+ try {
+ new AntBuildExecutionSupportItem(getBuildXmlDataObject(), new String[]{"build"}).startRunning();
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+
+ public void rebuildProject() {
+ try {
+ new AntBuildExecutionSupportItem(getBuildXmlDataObject(), new String[]{"rebuild"}).startRunning();
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+
public abstract boolean isValid(boolean indexFileNeeded);
public abstract boolean isRunFileEnabled(Lookup context);
@@ -146,4 +200,56 @@
}
return true;
}
+
+ private class AntBuildExecutionSupportItem implements BuildExecutionSupport.Item, TaskListener {
+ private final AntTargetExecutor mTargetExecutor;
+ private final String[] mTargets;
+ private final AntProjectCookie mProjectCookie;
+ private ExecutorTask mExecutorTask;
+
+ AntBuildExecutionSupportItem(DataObject buildFileObject, String[] targets) {
+ mProjectCookie = buildFileObject.getCookie(AntProjectCookie.class);
+ mTargets = targets;
+ mTargetExecutor = AntTargetExecutor.createTargetExecutor(new Env());
+ }
+
+ @Override
+ public String getDisplayName() {
+ return "Running Ant Build";
+ }
+
+ @Override
+ public void repeatExecution() {
+ stopRunning();
+ try {
+ startRunning();
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ return (mExecutorTask == null)?false:true;
+ }
+
+ @Override
+ public void stopRunning() {
+ if (mExecutorTask != null) mExecutorTask.stop();
+ mExecutorTask.waitFinished();
+ taskFinished(mExecutorTask);
+ }
+
+ public void startRunning() throws IOException {
+ mExecutorTask = mTargetExecutor.execute(mProjectCookie, mTargets);
+ mExecutorTask.addTaskListener(this);
+ BuildExecutionSupport.registerRunningItem(this);
+ }
+
+ @Override
+ public void taskFinished(Task task) {
+ mExecutorTask = null;
+ BuildExecutionSupport.registerFinishedItem(this);
+ }
+ }
}