]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ProcessThread.java
Do not use path anymore in as-flow
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / ProcessThread.java
index 678e6f679ae809322e81125b79fece1074489a50..c119127ad20b71f1ab269321db7df1f08deb33fc 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.argeo.slc.core.execution;
 
 import java.util.ArrayList;
@@ -16,9 +32,11 @@ public class ProcessThread extends Thread {
 
        private final AbstractExecutionModulesManager executionModulesManager;
        private final SlcExecution slcProcess;
-       private final ThreadGroup processThreadGroup;
+       private final ProcessThreadGroup processThreadGroup;
        private final List<RealizedFlow> flowsToProcess = new ArrayList<RealizedFlow>();
 
+       private Boolean hadAnError = false;
+
        public ProcessThread(
                        AbstractExecutionModulesManager executionModulesManager,
                        SlcExecution slcExecution) {
@@ -26,8 +44,7 @@ public class ProcessThread extends Thread {
                                "SLC Process #" + slcExecution.getUuid());
                this.executionModulesManager = executionModulesManager;
                this.slcProcess = slcExecution;
-               processThreadGroup = new ThreadGroup("SLC Process #"
-                               + slcExecution.getUuid() + " thread group");
+               processThreadGroup = new ProcessThreadGroup(this);
        }
 
        public void run() {
@@ -53,9 +70,12 @@ public class ProcessThread extends Thread {
                        }
                }
 
-               slcProcess.setStatus(SlcExecution.STATUS_FINISHED);
+               if (hadAnError)
+                       slcProcess.setStatus(SlcExecution.STATUS_ERROR);
+               else
+                       slcProcess.setStatus(SlcExecution.STATUS_FINISHED);
                dispatchUpdateStatus(slcProcess, SlcExecution.STATUS_RUNNING,
-                               SlcExecution.STATUS_FINISHED);
+                               slcProcess.getStatus());
        }
 
        protected void dispatchUpdateStatus(SlcExecution slcExecution,
@@ -66,6 +86,10 @@ public class ProcessThread extends Thread {
                }
        }
 
+       public void notifyError() {
+               hadAnError = true;
+       }
+
        public synchronized void flowCompleted() {
                notifyAll();
        }
@@ -74,7 +98,7 @@ public class ProcessThread extends Thread {
                return slcProcess;
        }
 
-       public ThreadGroup getProcessThreadGroup() {
+       public ProcessThreadGroup getProcessThreadGroup() {
                return processThreadGroup;
        }