Bug 529357: Expose the build kind constant values
Adding a new "Build"-Module which exposes the build kind constants and a
method "build" which triggers a build on a project.
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=529357
Change-Id: I887fb25b0fc6ad9ba40e278d7fa855796dc2633e
Signed-off-by: Martin SCHREIBER <m.schreiber@bachmann.info>
diff --git a/plugins/org.eclipse.ease.modules.platform/plugin.xml b/plugins/org.eclipse.ease.modules.platform/plugin.xml
index d083d6e..df86009 100644
--- a/plugins/org.eclipse.ease.modules.platform/plugin.xml
+++ b/plugins/org.eclipse.ease.modules.platform/plugin.xml
@@ -23,6 +23,13 @@
name="OSGI"
visible="true">
</module>
+ <module
+ category="org.eclipse.ease.category.system"
+ class="org.eclipse.ease.modules.platform.build.BuildModule"
+ id="org.eclipse.ease.modules.platform.build"
+ name="Build"
+ visible="true">
+ </module>
</extension>
<extension
point="org.eclipse.ease.ui.shell">
diff --git a/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/build/BuildModule.java b/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/build/BuildModule.java
new file mode 100644
index 0000000..4e61283
--- /dev/null
+++ b/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/build/BuildModule.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Bachmann electronic GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Bachmann electronic GmbH - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ease.modules.platform.build;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.ease.modules.AbstractScriptModule;
+import org.eclipse.ease.modules.ScriptParameter;
+import org.eclipse.ease.modules.WrapToScript;
+
+/**
+ * Provides capabilities to build workspace projects.
+ *
+ * <p>
+ * A simple example of its use is:
+ *
+ * <pre>
+ * loadModule("/System/Build");
+ * build("MyProject", FULL_BUILD);
+ * </pre>
+ *
+ * to trigger a full build of the project "MyProject".
+ * </p>
+ */
+public class BuildModule extends AbstractScriptModule {
+
+ /** Build kind constant indicating a full build request (6) */
+ @WrapToScript
+ public static final int FULL_BUILD = IncrementalProjectBuilder.FULL_BUILD;
+
+ /** Build kind constant indicating a clean build request (15) */
+ @WrapToScript
+ public static final int CLEAN_BUILD = IncrementalProjectBuilder.CLEAN_BUILD;
+
+ /** Build kind constant indicating an incremental build request (10). */
+ @WrapToScript
+ public static final int INCREMENTAL_BUILD = IncrementalProjectBuilder.INCREMENTAL_BUILD;
+
+ private final IWorkspaceRoot fRoot;
+
+ public BuildModule() {
+ this(ResourcesPlugin.getWorkspace().getRoot());
+ }
+
+ protected BuildModule(IWorkspaceRoot root) {
+ fRoot = root;
+ }
+
+ /**
+ * Builds a project with the given name and build kind.
+ *
+ * @scriptExample buildProject("myproject", CLEAN_BUILD); to make a clean build on the project "myproject"
+ * @param projectName
+ * the project name
+ * @param buildKind
+ * one of {@link #FULL_BUILD}, {@link #CLEAN_BUILD}, {@link #INCREMENTAL_BUILD}
+ * @throws CoreException
+ * if the build fails
+ */
+ @WrapToScript
+ public void build(String projectName, @ScriptParameter(defaultValue = "6") int buildKind) throws CoreException {
+ final IProject project = fRoot.getProject(projectName);
+ if (project.isAccessible()) {
+ project.build(buildKind, new NullProgressMonitor());
+ }
+ }
+
+}
diff --git a/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/build/BuildModuleTest.java b/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/build/BuildModuleTest.java
new file mode 100644
index 0000000..4ece183
--- /dev/null
+++ b/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/build/BuildModuleTest.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Bachmann electronic GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Bachmann electronic GmbH - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ease.modules.platform.build;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test Class for the {@link BuildModule}
+ */
+public class BuildModuleTest {
+
+ private BuildModule fModule;
+ private IWorkspaceRoot fRoot;
+ private IProject fProject;
+
+ @Before
+ public void setup() {
+ fProject = mock(IProject.class);
+ fRoot = mock(IWorkspaceRoot.class);
+ fModule = new BuildModule(fRoot);
+ when(fRoot.getProject("MyProject")).thenReturn(fProject);
+ }
+
+ @Test
+ public void buildDoesCallProjectsBuildMethodIfProjectExists() throws CoreException {
+ when(fProject.isAccessible()).thenReturn(true);
+ fModule.build("MyProject", BuildModule.CLEAN_BUILD);
+ verify(fProject, times(1)).build(eq(IncrementalProjectBuilder.CLEAN_BUILD), any(NullProgressMonitor.class));
+ }
+
+ @Test
+ public void buildDoesNotCallProjectsBuildMethodIfProjectNotExists() throws CoreException {
+ when(fProject.isAccessible()).thenReturn(false);
+ fModule.build("MyProject", BuildModule.CLEAN_BUILD);
+ verify(fProject, never()).build(eq(IncrementalProjectBuilder.CLEAN_BUILD), any(NullProgressMonitor.class));
+ }
+
+}