extract BuildProcessBase, introduce more interfaces for CompositeBuildProcess
authorEugene.Petrenko <eugene.petrenko@gmail.com>
Thu, 7 Jul 2011 13:56:51 +0000 (17:56 +0400)
committerEugene.Petrenko <eugene.petrenko@gmail.com>
Thu, 7 Jul 2011 13:56:51 +0000 (17:56 +0400)
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessBase.java [new file with mode: 0644]
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessContinuation.java [new file with mode: 0644]
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/CompositeBuildProcess.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/impl/CompositeBuildProcessImpl.java

diff --git a/nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessBase.java b/nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessBase.java
new file mode 100644 (file)
index 0000000..c22bcd4
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.agent.util;\r
+\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.agent.BuildProcess;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.util.concurrent.atomic.AtomicBoolean;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 07.07.11 16:03\r
+ */\r
+public abstract class BuildProcessBase implements BuildProcess {\r
+  private final AtomicBoolean myIsInterrupted = new AtomicBoolean();\r
+  private final AtomicBoolean myIsFinished = new AtomicBoolean();\r
+\r
+  public final boolean isInterrupted() {\r
+    return myIsInterrupted.get();\r
+  }\r
+\r
+  public final boolean isFinished() {\r
+    return myIsFinished.get();\r
+  }\r
+\r
+  public final void interrupt() {\r
+    myIsInterrupted.set(true);\r
+    interruptImpl();\r
+  }\r
+\r
+  @NotNull\r
+  public final BuildFinishedStatus waitFor() throws RunBuildException {\r
+    if (isInterrupted()) return BuildFinishedStatus.INTERRUPTED;\r
+\r
+    try {\r
+      BuildFinishedStatus status = waitForImpl();\r
+      if (isInterrupted()) return BuildFinishedStatus.INTERRUPTED;\r
+\r
+      return status;\r
+    } finally {\r
+      myIsFinished.set(true);\r
+    }\r
+  }\r
+\r
+\r
+  protected abstract BuildFinishedStatus waitForImpl() throws RunBuildException;\r
+\r
+  protected void interruptImpl() {\r
+  }\r
+\r
+  public void start() throws RunBuildException {\r
+  }\r
+}\r
diff --git a/nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessContinuation.java b/nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessContinuation.java
new file mode 100644 (file)
index 0000000..693ecf8
--- /dev/null
@@ -0,0 +1,28 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.agent.util;\r
+\r
+import jetbrains.buildServer.agent.BuildProcess;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 07.07.11 16:09\r
+ */\r
+public interface BuildProcessContinuation {\r
+  void pushBuildProcess(@NotNull BuildProcess process);\r
+}\r
index ff4e1c31d20db65a77bf5bac82cd443c4d611551..f4614503a8b21cfaae222a6384d9d629012f00cb 100644 (file)
@@ -1,12 +1,27 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
 package jetbrains.buildServer.nuget.agent.util;\r
 \r
 import jetbrains.buildServer.agent.BuildProcess;\r
-import org.jetbrains.annotations.NotNull;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
  * Date: 07.07.11 15:37\r
  */\r
-public interface CompositeBuildProcess extends BuildProcess {\r
-  void pushBuildProcess(@NotNull BuildProcess process);\r
+public interface CompositeBuildProcess extends BuildProcess, BuildProcessContinuation {\r
+\r
 }\r
index 9dda19c3c01f6cf00721a0debb38f4422e3eeeb4..198633307126e9fb06c761aece1d47c241a8b71b 100644 (file)
@@ -19,63 +19,52 @@ package jetbrains.buildServer.nuget.agent.util.impl;
 import jetbrains.buildServer.RunBuildException;\r
 import jetbrains.buildServer.agent.BuildFinishedStatus;\r
 import jetbrains.buildServer.agent.BuildProcess;\r
+import jetbrains.buildServer.nuget.agent.util.BuildProcessBase;\r
 import jetbrains.buildServer.nuget.agent.util.CompositeBuildProcess;\r
 import org.jetbrains.annotations.NotNull;\r
 \r
 import java.util.concurrent.BlockingQueue;\r
 import java.util.concurrent.LinkedBlockingQueue;\r
-import java.util.concurrent.atomic.AtomicBoolean;\r
 import java.util.concurrent.atomic.AtomicReference;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
  * Date: 07.07.11 14:04\r
  */\r
-public class CompositeBuildProcessImpl implements CompositeBuildProcess {\r
+public class CompositeBuildProcessImpl extends BuildProcessBase implements CompositeBuildProcess {\r
   private final BlockingQueue<BuildProcess> myProcessList = new LinkedBlockingQueue<BuildProcess>();\r
-  private final AtomicBoolean myIsInterrupted = new AtomicBoolean();\r
-  private final AtomicBoolean myIsFinished = new AtomicBoolean();\r
   private final AtomicReference<BuildProcess> myCurrentProcess = new AtomicReference<BuildProcess>();\r
 \r
   public void pushBuildProcess(@NotNull final BuildProcess process) {\r
     myProcessList.add(process);\r
   }\r
 \r
-  public void start() throws RunBuildException {\r
-  }\r
-\r
-  public boolean isInterrupted() {\r
-    return myIsInterrupted.get();\r
-  }\r
-\r
-  public boolean isFinished() {\r
-    return myIsFinished.get();\r
-  }\r
-\r
-  public void interrupt() {\r
-    myIsInterrupted.set(true);\r
+  @Override\r
+  protected void interruptImpl() {\r
     BuildProcess process = myCurrentProcess.get();\r
     if (process != null) {\r
       process.interrupt();\r
     }\r
   }\r
 \r
+  public void start() throws RunBuildException {\r
+  }\r
+\r
   @NotNull\r
-  public BuildFinishedStatus waitFor() throws RunBuildException {\r
-    for(BuildProcess proc = myProcessList.poll(); proc != null; proc = myProcessList.poll()) {\r
+  protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
+    if (isInterrupted()) return BuildFinishedStatus.INTERRUPTED;\r
+    for (BuildProcess proc = myProcessList.poll(); proc != null; proc = myProcessList.poll()) {\r
       myCurrentProcess.set(proc);\r
       try {\r
         proc.start();\r
         BuildFinishedStatus status = proc.waitFor();\r
-        if (status == BuildFinishedStatus.FINISHED_FAILED ) return BuildFinishedStatus.FINISHED_FAILED;\r
+        if (status == BuildFinishedStatus.FINISHED_FAILED) return BuildFinishedStatus.FINISHED_FAILED;\r
       } finally {\r
         myCurrentProcess.set(null);\r
       }\r
       if (isInterrupted()) return BuildFinishedStatus.INTERRUPTED;\r
     }\r
-    myIsFinished.set(true);\r
     if (isInterrupted()) return BuildFinishedStatus.INTERRUPTED;\r
-\r
     return BuildFinishedStatus.FINISHED_SUCCESS;\r
   }\r
 }\r