You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2019/08/15 14:44:36 UTC

svn commit: r1865229 [2/2] - in /uima/uima-ducc/trunk/uima-ducc-web/src/main: java/org/apache/uima/ducc/ws/ java/org/apache/uima/ducc/ws/handlers/ java/org/apache/uima/ducc/ws/handlers/experiments/ java/org/apache/uima/ducc/ws/handlers/utilities/ java/...

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentException.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentException.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentException.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentException.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+public class ExperimentException extends Exception {
+	
+	private static final long serialVersionUID = 1L;
+	
+	public ExperimentException(String text) {
+		super(text);
+	}
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,337 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+import java.io.StringReader;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.common.utils.id.DuccId;
+import org.apache.uima.ducc.transport.event.common.IDuccStandardInfo;
+import org.apache.uima.ducc.transport.event.common.IDuccWork;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkMap;
+import org.apache.uima.ducc.ws.log.WsLog;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonParseException;
+import com.google.gson.reflect.TypeToken;
+
+public class ExperimentsRegistryManager {
+
+  // NOTE - this variable used to hold the class name before WsLog was simplified
+	private static DuccLogger cName = DuccLogger.getLogger(ExperimentsRegistryManager.class);
+	
+	private static Gson gson = new Gson();
+	private static ExperimentsRegistryManager instance = new ExperimentsRegistryManager();
+	
+	private int MAX_CACHE_SIZE = 4096;
+	
+	private TreeMap<String,IExperiment> map = new TreeMap<String,IExperiment>();
+	
+	private AtomicLong updateCounter = new AtomicLong(0);
+	
+	public static ExperimentsRegistryManager getInstance() {
+		return instance;
+	}
+	
+	public TreeMap<IExperiment,String> getMapByStatus() {
+		TreeMap<IExperiment,String> mapInverse = new TreeMap<IExperiment,String>();
+		synchronized(map) {
+			for(Entry<String, IExperiment> entry : map.entrySet()) {
+				mapInverse.put(entry.getValue(), entry.getKey());
+			}
+		}
+		return mapInverse;
+	}
+	
+	private TreeMap<Long, String> getMapByDate() {
+		TreeMap<Long, String> mapByDate = new TreeMap<Long, String>();
+		synchronized(map) {
+			for(Entry<String, IExperiment> entry : map.entrySet()) {
+				IExperiment experiment = entry.getValue();
+				Long key = new Long(experiment.getStartTime());
+				String value = experiment.getId();
+				mapByDate.put(key, value);
+			}
+		}
+		return mapByDate;
+	}
+	
+	public IExperiment getById(String id) {
+		IExperiment retVal = null;
+		if(id != null) {
+			synchronized(map) {
+				for(Entry<String, IExperiment> entry : map.entrySet()) {
+					IExperiment experiment = entry.getValue();
+					if(id.equals(experiment.getId())) {
+						retVal = experiment;
+						break;
+					}
+				}
+			}
+		}
+		return retVal;
+	}
+	
+	private void replace(String directory, Experiment experiment) {
+		String mName = "replace";
+		String id = map.get(directory).getId();
+		experiment.setId(id);
+		map.put(directory, experiment);
+		WsLog.debug(cName, mName, directory);
+	}
+	
+	private void add(String directory, Experiment experiment) {
+		String mName = "add";
+		map.put(directory, experiment);
+		WsLog.debug(cName, mName, directory);
+	}
+	
+	private void put(String directory, Experiment experiment) {
+		synchronized(map) {
+			if(map.containsKey(directory)) {
+				replace(directory, experiment);
+			}
+			else {
+				add(directory, experiment);
+			}
+		}
+	}
+	
+	private void remove(String directory) {
+		String mName = "remove";
+		synchronized(map) {
+			map.remove(directory);
+			
+		}
+		WsLog.debug(cName, mName, directory);
+	}
+	
+	private boolean containsKey(String directory) {
+		synchronized(map) {
+			return map.containsKey(directory);
+		}
+	}
+	
+	public void initialize(String user, String directory) {
+		String mName = "initialize";
+		if(user == null) {
+			WsLog.warn(cName, mName, "missing user");
+		}
+		else if(directory == null) {
+			WsLog.warn(cName, mName, "missing directory");
+		}
+		else {
+			String parent = ExperimentsRegistryUtilities.upOne(directory);
+			update(user, parent, false);
+		}
+	}
+	
+	private void update(String user, String directory) {
+		String mName = "update";
+		try {
+			String fileName = ExperimentsRegistryUtilities.getStateFilePath(directory);
+			long date = ExperimentsRegistryUtilities.getFileDate(user, fileName);
+			WsLog.info(cName, mName, "Reading " + fileName + " date: " + date);
+			String contents = ExperimentsRegistryUtilities.getFileContents(user, fileName);
+			if(contents != null) {
+                // Version may precede the initial '[' and may be on a separate line
+			    int version = 0;
+			    int offset = contents.indexOf('[');
+			    if (offset > 0) {
+			        String s = contents.substring(0, offset).trim();
+			        try {
+			            version = Integer.parseInt(s);
+			        } catch (NumberFormatException e) {
+			            WsLog.warn(cName, mName, "Invalid version '" + s + "' in state file : " + fileName);
+			            return;
+			        }
+			        contents = contents.substring(offset);
+			    }
+			    if (offset < 0) {
+		             WsLog.warn(cName, mName, "Invalid syntax (missing '[') in state file : " + fileName);
+		             return;
+			    }
+				StringReader sr = new StringReader(contents);
+				Type tasksType = new TypeToken<ArrayList<Task>>(){}.getType();
+				try {
+				    ArrayList<Task> taskArray = gson.fromJson(sr, tasksType);
+	                Experiment experiment = new Experiment(user, directory, date, version, taskArray);
+	                put(directory, experiment);
+                } catch (JsonParseException e) {
+                    WsLog.warn(cName, mName,"Ignoring " + fileName + " as has Json syntax error " + e.getMessage());
+                }
+			}
+			else {
+				WsLog.trace(cName, mName,"state file missing or inaccessible in "+directory);
+				remove(directory);
+			}
+		}
+		catch(Exception e) {
+			WsLog.error(cName, mName, e);
+		}
+	}
+	
+	private void update(String user, String directory, boolean overwrite) {
+		String mName = "update";
+		WsLog.enter(cName, mName);
+		try {
+			if(overwrite) {
+				update(user, directory);
+			}
+			else {
+				if(!containsKey(directory)) {
+					update(user, directory);
+				}
+				else {
+					WsLog.trace(cName, mName, "duplicate directory: "+directory);
+				}
+			}
+			
+		}
+		catch(Exception e) {
+			WsLog.error(cName, mName, e);
+		}
+		//WsLog.exit(cName, mName);
+	}
+	
+	private void check() {
+		String mName = "check";
+		try {
+			ArrayList<IExperiment> list = new ArrayList<IExperiment>();
+			synchronized(map) {
+				for(Entry<String, IExperiment> entry : map.entrySet()) {
+					IExperiment experiment = entry.getValue();
+					if(experiment.isActive()) {
+						list.add(experiment);
+					}
+				}
+			}
+			for(IExperiment experiment : list) {
+				String user = experiment.getUser();
+				String directory = experiment.getDirectory();
+				WsLog.debug(cName, mName, "user: "+user+" "+"dirextory: "+directory);
+				update(experiment.getUser(), experiment.getDirectory(), true);
+			}
+		}
+		catch(Exception e) {
+			WsLog.error(cName, mName, e);
+		}
+	}
+	
+	private boolean timeToPrune() {
+		boolean retVal = false;
+		TreeMap<Long, String> mapByDate = getMapByDate();
+		int size = mapByDate.size();
+		if(size > MAX_CACHE_SIZE) {
+			retVal = true;
+		}
+		if((updateCounter.get() % 3) == 0) {
+			retVal = true;
+		}
+		return retVal;
+	}
+	
+	private void prune() {
+		String mName = "prune";
+		WsLog.enter(cName, mName);
+		try {
+			TreeMap<Long, String> mapByDate = getMapByDate();
+			if(timeToPrune()) {
+				int cacheCount = 0;
+				for(Entry<Long, String> entry : mapByDate.entrySet()) {
+					String key = entry.getValue();
+					IExperiment experiment = getById(key);
+					if(experiment != null) {
+						if(experiment.isActive()) {
+							cacheCount++;
+						}
+						else {
+							if(cacheCount < MAX_CACHE_SIZE) {
+								cacheCount++;
+							}
+							else {
+								String directory = experiment.getDirectory();
+								remove(directory);
+							}
+						}
+					}
+				}
+			}
+		}
+		catch(Exception e) {
+			WsLog.error(cName, mName, e);
+		}
+		//WsLog.exit(cName, mName);
+	}
+	
+	public void update(IDuccWorkMap dwm) {
+		String mName = "update";
+		WsLog.enter(cName, mName);
+		try {
+			if(dwm == null) {
+				WsLog.warn(cName, mName, "missing map");
+			}
+			else {
+				updateCounter.incrementAndGet();
+				Iterator<DuccId> iterator = dwm.getJobKeySet().iterator();
+				while(iterator.hasNext()) {
+					DuccId duccId = iterator.next();
+					IDuccWork job = dwm.findDuccWork(duccId);
+					if(job != null) {
+						IDuccStandardInfo stdInfo = job.getStandardInfo();
+						if(stdInfo != null) {
+							String user = stdInfo.getUser();
+							String directory = stdInfo.getLogDirectory();
+							String parent = ExperimentsRegistryUtilities.upOne(directory);
+							update(user, parent, true);
+						}
+					}
+				}
+
+				// Also process managed reservations in case the experiment has only these.
+                iterator = dwm.getManagedReservationKeySet().iterator();
+                while(iterator.hasNext()) {
+                    DuccId duccId = iterator.next();
+                    IDuccWork job = dwm.findDuccWork(duccId);
+                    if(job != null) {
+                        IDuccStandardInfo stdInfo = job.getStandardInfo();
+                        if(stdInfo != null) {
+                            String user = stdInfo.getUser();
+                            String directory = stdInfo.getLogDirectory();
+                            String parent = ExperimentsRegistryUtilities.upOne(directory);
+                            update(user, parent, true);
+                        }
+                    }
+                }
+			}
+			check();
+			prune();
+		}
+		catch(Exception e) {
+			WsLog.error(cName, mName, e);
+		}
+		//WsLog.exit(cName, mName);
+	}
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileReader;
+import java.io.StringReader;
+
+import org.apache.uima.ducc.common.utils.AlienFile;
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.ws.log.WsLog;
+
+public class ExperimentsRegistryUtilities {
+	
+  // NOTE - this variable used to hold the class name before WsLog was simplified
+	private static DuccLogger cName = DuccLogger.getLogger(ExperimentsRegistryUtilities.class);
+	
+	private static String stateFileName = "Experiment.state";
+	
+	public static String upOne(String directory) {
+		String retVal = directory;
+		if(directory != null) {
+		  retVal = new File(directory).getParent();
+		}
+		return retVal;
+	}
+	
+	public static String getStateFilePath(String directory) {
+		String retVal = new File(directory, stateFileName).getAbsolutePath();
+		return retVal;
+	}
+	
+	private static void closer(Closeable object) {
+		String mName = "closer";
+		try {
+			object.close();
+		}
+		catch(Exception e) {
+			WsLog.debug(cName, mName, e);
+		}
+	}
+	
+	public static long getFileDate(IExperiment experiment) {
+		String mName = "getFileDate";
+		WsLog.enter(cName, mName);
+		String user = experiment.getUser();
+		String filename = getStateFilePath(experiment.getDirectory());
+		long retVal = getFileDate(user, filename);
+		return retVal;
+	}
+	
+	public static long getFileDate(String user, String filename) {
+		String mName = "getFileDate";
+		WsLog.enter(cName, mName);
+		long retVal = getDomesticFileDate(user, filename);
+		if(retVal == 0) {
+			retVal = getAlienFileDate(user, filename);
+		}
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+	
+	private static long getAlienFileDate(String user, String filename) {
+		String mName = "getAlienFileDate";
+		WsLog.enter(cName, mName);
+		long retVal = 0;
+		AlienFile alienFile = new AlienFile(user, filename);
+		// NOTE - should not need the "--" ... or this could be moved to AlienFile
+        String[] lines = alienFile.getResult(false, "--", "/bin/ls", "-l", "--time-style=+%s", filename );
+        // Should have 1 line with secs-since-epoch in 6th token
+        if (lines.length == 1) {
+            String[] toks = lines[0].split("\\s+");
+            if (toks.length >= 6) {
+                retVal = Long.valueOf(toks[5]) * 1000;
+            }
+        }
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+	
+	private static long getDomesticFileDate(String user, String filename) {
+		String mName = "getDomesticFileDate";
+		WsLog.enter(cName, mName);
+		long retVal =0;
+		try {
+			File file = new File(filename);
+			retVal = file.lastModified();
+		}
+		catch(Exception e) {
+			WsLog.trace(cName, mName, e);
+		}
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+	
+	/*
+	 * Returns null if file is missing or can't be read
+	 */
+	public static String getFileContents(String user, String filename) {
+		String mName = "getFileContents";
+		WsLog.enter(cName, mName);
+		boolean canRead = ((new File(filename)).canRead());
+		String retVal = canRead ? getDomesticFileContents(user, filename) : getAlienFileContents(user, filename);
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+	
+	private static String getAlienFileContents(String user, String filename) {
+		String mName = "getAlienFileContents";
+		WsLog.enter(cName, mName);
+		String retVal = null;
+		try {
+			AlienFile alienFile = new AlienFile(user, filename);
+			retVal = alienFile.getString();
+		}
+		catch(Throwable t) {
+			WsLog.trace(cName, mName, t);
+		}
+		
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+	
+	private static String getDomesticFileContents(String user, String filename) {
+		String mName = "getDomesticFileContents";
+		WsLog.enter(cName, mName);
+		String retVal = null;
+		FileReader fr = null;
+		BufferedReader br = null;
+		StringReader sr = null;
+		try {
+			fr = new FileReader(filename);
+			br = new BufferedReader(fr);
+			StringBuffer sb = new StringBuffer();
+			String line = br.readLine();
+			while(line != null) {
+				sb.append(line);
+				line = br.readLine();
+			}
+			retVal = sb.toString();
+		}
+		catch(Exception e) {
+			WsLog.debug(cName, mName, e);
+		}
+		finally {
+			if(br != null) {
+				closer(br);
+			}
+			if(fr != null) {
+				closer(fr);
+			}
+			if(sr != null) {
+				closer(sr);
+			}
+		}
+		WsLog.exit(cName, mName);
+		return retVal;
+	}
+
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+import java.util.ArrayList;
+
+public interface IExperiment extends Comparable<Object> {
+	public void setId(String value);
+	public String getId();
+	public String getUser();
+	public String getDirectory();
+	public ArrayList<Task> getTasks();
+	public ArrayList<String> getJobIds();
+	public String getStartDate();
+	public long getStartTime();
+	public boolean isActive();
+	public Jed.Status getStatus();
+	public void setFileDate(long value);
+	public long getFileDate();
+    public int getVersion();
+    public boolean isStale();
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Jed.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Jed.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Jed.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Jed.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+public class Jed {
+
+	public enum Type {
+
+		DuccJob, Java, File, Exec, Trainer, Sequential, Parallel, ParallelData, SetPhase, Other;
+
+		private static String DUCC_JOB = "DUCC_JOB";
+		private static String PARALLEL_DATA = "PARALLEL_DATA";
+		private static String SET_PHASE = "SET_PHASE";
+		
+	    public static Type getEnum(String value) {
+	    	Type retVal = Other;
+	    	if(value == null) {
+	    	}
+	    	else if(DUCC_JOB.equalsIgnoreCase(value)) {
+	            retVal = DuccJob;
+	        }
+	        else if(PARALLEL_DATA.equalsIgnoreCase(value)) {
+	            retVal = ParallelData;
+	        }
+	        else if(SET_PHASE.equalsIgnoreCase(value)) {
+	            retVal = SetPhase;
+	        }
+	        else if(DuccJob.name().equalsIgnoreCase(value)) {
+	            retVal = DuccJob;
+	        }
+	        else if(Java.name().equalsIgnoreCase(value)) {
+	            retVal = Java;
+	        }
+	        else if(File.name().equalsIgnoreCase(value)) {
+	            retVal = File;
+	        }
+	        else if(Exec.name().equalsIgnoreCase(value)) {
+	            retVal = Exec;
+	        }
+	        else if(Trainer.name().equalsIgnoreCase(value)) {
+	            retVal =  Trainer;
+	        }
+	        else if(Sequential.name().equalsIgnoreCase(value)) {
+	            retVal = Sequential;
+	        }
+	        else if(ParallelData.name().equalsIgnoreCase(value)) {
+	            retVal = ParallelData;
+	        }
+	        else if(Parallel.name().equalsIgnoreCase(value)) {
+	            retVal = Parallel;
+	        }
+	        else if(SetPhase.name().equalsIgnoreCase(value)) {
+	            retVal = SetPhase;
+	        }
+	        return retVal;
+	    }
+	    
+	    public static boolean isLeaf(Type value) {
+	    	boolean retVal = true;
+	    	if(value != null) {
+	    		switch(value) {
+		    	case Parallel:
+		    	case ParallelData:
+		    	case Sequential:
+		    		retVal = false;
+		    		break;
+		    	default:
+		    		break;
+		    	}
+	    	}
+	    	return retVal;
+	    }
+	    
+	    public static boolean isLeaf(String value){
+	    	boolean retVal = isLeaf(getEnum(value));
+	    	return retVal;
+	    }
+	}
+	
+	public enum Status {
+
+		Running, Completed, Done, Canceled, Failed, DependencyFailed, Ignored, Unknown, Other;
+
+		private static String Dependency_Failed = "Dependency-Failed";
+		private static String Cancelled = "Cancelled";
+		
+	    public static Status getEnum(String value) {
+	    	Status retVal = Other;
+	    	if(value == null) {
+	    	}
+	    	else if(Cancelled.equalsIgnoreCase(value)) {
+	            retVal = Canceled;
+	        }
+	    	else if(Dependency_Failed.equalsIgnoreCase(value)) {
+	            retVal = DependencyFailed;
+	        }
+	        else if(Running.name().equalsIgnoreCase(value)) {
+	            retVal = Running;
+	        }
+	        else if(Completed.name().equalsIgnoreCase(value)) {
+	            retVal = Completed;
+	        }
+	        else if(Done.name().equalsIgnoreCase(value)) {
+	            retVal = Done;
+	        }
+	        else if(Canceled.name().equalsIgnoreCase(value)) {
+	            retVal = Canceled;
+	        }
+	        else if(Failed.name().equalsIgnoreCase(value)) {
+	            retVal = Failed;
+	        }
+	        else if(DependencyFailed.name().equalsIgnoreCase(value)) {
+	            retVal = DependencyFailed;
+	        }
+	        else if(Ignored.name().equalsIgnoreCase(value)) {
+	            retVal = Ignored;
+	        }
+	        else if(Unknown.name().equalsIgnoreCase(value)) {
+	            retVal = Unknown;
+	        }
+	        return retVal;
+	    }
+	}
+
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Jed.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Task.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Task.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Task.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Task.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+/*
+ * This represents the "Expose"d fields written by JED in the Experiment.state file
+ * See com.ibm.bluej.system.driver/src/com/ibm/bluej/system/driver/TaskState.java 
+ */
+public class Task {
+	  public int taskId = 0;
+    public int parentId = 0;
+    public String name = null;
+    public String type = null;
+    public String status = null;
+    public String startTime = null;
+    public long runTime = 0;
+    public int[] subTasks = new int[0];
+    public long[] duccId = new long[0];
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Task.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/TaskArray.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/TaskArray.java?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/TaskArray.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/TaskArray.java Thu Aug 15 14:44:35 2019
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.uima.ducc.ws.xd;
+
+import java.util.ArrayList;
+
+public class TaskArray {
+	public ArrayList<Task> tasks = new ArrayList<Task>();
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/TaskArray.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiment-details.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c1-refresh-experiment-details.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiment-details.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiment-details.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,44 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<table>
+<tr>
+<td>
+<span id="refreshbutton">
+<input type="image" onclick="ducc_refresh('experiment-details');" title="Refresh" alt="Refresh" src="opensources/images/refresh.png">
+</span>
+<span id="loading" style="display:none;">
+<img title="loading" src="opensources/images/indicator.gif" style="border:1px solid #000000" alt="Loading...">
+</span>
+<td>
+<table>
+<tr>
+<td align="left">
+<form name="duccform" style="margin-bottom:0;">
+<fieldset>
+<legend>Refresh</legend>
+<input type="radio" name="refresh" value="manual"            onclick="ducc_put_cookie('ducc:refreshmode','manual'   )" /> Manual
+<br>
+<input type="radio" name="refresh" value="automatic" checked onclick="ducc_put_cookie('ducc:refreshmode','automatic')" /> Automatic
+</fieldset>
+</form>
+</table>
+</tr>
+</table>
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiment-details.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiments.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c1-refresh-experiments.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiments.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiments.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,44 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<table>
+<tr>
+<td>
+<span id="refreshbutton">
+<input type="image" onclick="ducc_refresh('experiments');" title="Refresh" alt="Refresh" src="opensources/images/refresh.png">
+</span>
+<span id="loading" style="display:none;">
+<img title="loading" src="opensources/images/indicator.gif" style="border:1px solid #000000" alt="Loading...">
+</span>
+<td>
+<table>
+<tr>
+<td align="left">
+<form name="duccform" style="margin-bottom:0;">
+<fieldset>
+<legend>Refresh</legend>
+<input type="radio" name="refresh" value="manual"            onclick="ducc_put_cookie('ducc:refreshmode','manual'   )" /> Manual
+<br>
+<input type="radio" name="refresh" value="automatic" checked onclick="ducc_put_cookie('ducc:refreshmode','automatic')" /> Automatic
+</fieldset>
+</form>
+</table>
+</tr>
+</table>
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c1-refresh-experiments.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiment-details.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c2-status-experiment-details.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiment-details.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiment-details.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<b><big><span class="idtitle" id="identity"></span></big></b>
+<form name="form_selectors" style="margin-bottom:0;">
+<table>
+<tr>
+<td valign="top" align="right" title="The time of last Orchestrator publication">Updated:&nbsp
+<td valign="top"><span class="timestamptitle" id="timestamp_area"></span>
+</tr>
+<tr>
+<td valign="top" align="right" title="The percentage of shares inuse">Utilization:&nbsp
+<td valign="top"><span class="utilizationtitle" id="utilization_area">?</span>
+</tr>
+</table>
+</form>
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiment-details.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiments.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c2-status-experiments.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiments.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiments.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,39 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<b><big><span class="idtitle" id="identity"></span></big></b>
+<form name="form_selectors" style="margin-bottom:0;">
+<table>
+<tr>
+<td valign="top" align="right" title="The time of last Orchestrator publication">Updated:&nbsp
+<td valign="top"><span class="timestamptitle" id="timestamp_area"></span>
+</tr>
+<tr>
+<td valign="top" align="right" title="The percentage of shares inuse">Utilization:&nbsp
+<td valign="top"><span class="utilizationtitle" id="utilization_area">?</span>
+</tr>
+<tr>
+<%@ include file="$users.jsp" %>
+</tr>
+<tr>
+<%@ include file="$max-records.jsp" %>
+</tr>
+</table>
+</form>
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c2-status-experiments.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiment-details.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c3-image-experiment-details.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiment-details.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiment-details.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<b><big><span class="subtitle">Experiment Details</span></big></b>
+<br>
+<img src="opensources/images/120px-Brno-Stary_Liskovec_vlajka.svg.png" height="64" style="border:3px solid #ffff7a" alt="logo">
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiment-details.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiments.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/%24banner/c3-image-experiments.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiments.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiments.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<div>
+<b><big><span class="subtitle">Experiments</span></big></b>
+<br>
+<img src="opensources/images/120px-Arkadenbrucke.png" height="64" style="border:3px solid #ffff7a" alt="logo">
+</div> 
\ No newline at end of file

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/$banner/c3-image-experiments.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.html
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.html?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.html (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.html Thu Aug 15 14:44:35 2019
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<html>
+<head>
+<script language="javascript">
+<!--
+location.replace("experiment.details.jsp"+location.search)
+//-->
+</script>
+</head>
+<body>
+</body>
+</html>

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,162 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<%@ page language="java" %>
+<html>
+<head>
+  <link rel="shortcut icon" href="uima.ico" />
+  <title>ducc-mon</title>
+  <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
+  <%@ include file="$imports.jsp" %>
+<%
+if (table_style.equals("scroll")) {
+%>  
+  <script type="text/javascript" charset="utf-8">
+	var oTable;
+	$(document).ready(function() {
+		oTable = $('#experiment-details-table').dataTable( {
+			"bProcessing": true,
+			"bPaginate": false,
+			"bFilter": true,
+			"sScrollX": "100%",
+			"sScrollY": "600px",
+       		"bInfo": false,
+			"sAjaxSource": "ducc-servlet/json-format-aaData-experiment-details",
+			"aaSorting": [],
+			"aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] } ],
+			"fnRowCallback"  : function(nRow,aData,iDisplayIndex) {
+                             		return nRow;
+			},
+		} );
+	} );
+  </script>
+<%
+}
+%>	
+</head>
+<body onload="ducc_init('experiment-details');" onResize="ducc_resize();">
+
+<!-- ####################### common ######################## -->
+<div class="flex-page">
+<!-- *********************** table ************************* -->
+<table class="flex-heading">
+<!-- *********************** row *************************** -->
+<tr class="heading">
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c0-menu.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<%@ include file="$banner/$runmode.jsp" %>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c1-refresh-experiment-details.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c2-status-experiment-details.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c3-image-experiment-details.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c4-ducc-mon.jsp" %>
+</td>
+</table>
+<!-- *********************** /table ************************ -->
+<!-- ####################### /common ####################### -->
+<div id=identify_experiment_details_area>
+</div>
+<!-- @@@@@@@@@@@@@@@@@@@@@@@ unique @@@@@@@@@@@@@@@@@@@@@@@@ -->
+<%
+if (table_style.equals("scroll")) {
+%>
+	<div id=loading_experiment_details_area>
+	</div>
+	<table id="experiment-details-table" width="100%">
+	<caption title="Hint: use Preferences -> Table Style to alter format"><b>Experiment Details</b><br><i><small>click column heading to sort</small></i></caption>
+	<thead>
+	<tr class="ducc-header">
+	<th title="The id for this experiment subtask" class="sorttable_numeric">Id</th>
+	<th title="The name for this experiment subtask">Name</th>
+	<th title="The parent id for this experiment subtask" class="sorttable_numeric">Parent</th>
+	<th title="The state of this experiment subtask">State</th>
+	<th title="The type for this experiment subtask">Type</th>
+	<th title="The start time of this experiment subtask">Step<br>Start</th>
+	<th title="The duration time of this experiment subtask">Step<br>Duration</th>
+	<th title="The DUCC Id(s) for this experiment subtask, if any">DUCC Id</th>
+	<th title="The duration time of this DUCC subtask">DUCC<br>Duration</th>
+	<th title="The total number of work items for this job">Total</th>
+	<th title="The number of work items that completed successfully">Done</th>
+	<th title="The number of work items that failed to complete successfully">Error</th>
+	<th title="The number of work items currently dispatched (queued+operating)">Dis-<br>patch</th>
+	<th title="The number of work items that were retried, excluding preemptions">Retry</th>
+	<th title="The number of work items that were preempted">Pre-<br>empt</th>
+	</tr>
+	</thead>
+	<tbody id="experiment_details_area">
+	</tbody>
+	</table>
+<%
+}
+%>	
+<%
+if (table_style.equals("classic")) {
+%>
+	<div id=loading_experiment_details_area>
+	</div>
+	<table width="100%">
+   	<caption title="Hint: use Preferences -> Table Style to alter format"><b>Experiment Details</b><br><i><small>click column heading to sort</small></i></caption>
+   	<tr>
+    <td>
+      <table class="sortable">
+		<thead>
+		<tr class="ducc-head">
+		<th title="The id for this experiment subtask" class="sorttable_numeric">Id</th>
+        <th title="The name for this experiment subtask">Name</th>
+        <th title="The parent id for this experiment subtask" class="sorttable_numeric">Parent</th>
+        <th title="The state of this experiment subtask">State</th>
+        <th title="The type for this experiment subtask">Type</th>
+        <th title="The start time of this experiment subtask">Step<br>Start</th>
+        <th class="sorttable_numeric" title="The duration time of this experiment subtask">Step<br>Duration</th>
+		<th title="The DUCC Id(s) for this experiment subtask, if any">DUCC Id</th>
+		 <th class="sorttable_numeric" title="The duration time of this DUCC subtask">DUCC<br>Duration</th>
+		<th title="The total number of work items for this job">Total</th>
+		<th title="The number of work items that completed successfully">Done</th>
+		<th title="The number of work items that failed to complete successfully">Error</th>
+		<th title="The number of work items currently dispatched (queued+operating)">Dis-<br>patch</th>
+		<th title="The number of work items that were retried, excluding preemptions">Retry</th>
+		<th title="The number of work items that were preempted">Pre-<br>empt</th>
+		</tr>
+		</thead>
+		<tbody id="experiment_details_area">
+   		</tbody>
+	  </table>
+   	</table>
+<%
+}
+%>	    
+<!-- @@@@@@@@@@@@@@@@@@@@@@@ /unique @@@@@@@@@@@@@@@@@@@@@@@@ -->
+<!-- ####################### common ######################### -->
+</div>
+		
+<script src="opensources/navigation/menu.js"></script>
+</body>
+</html>

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiment.details.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.html
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.html?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.html (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.html Thu Aug 15 14:44:35 2019
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<html>
+<head>
+<script language="javascript">
+<!--
+location.replace("experiments.jsp"+location.search)
+//-->
+</script>
+</head>
+<body>
+</body>
+</html>

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.jsp?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.jsp (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.jsp Thu Aug 15 14:44:35 2019
@@ -0,0 +1,141 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<%@ page language="java" %>
+<html>
+<head>
+  <link rel="shortcut icon" href="uima.ico" />
+  <title>ducc-mon</title>
+  <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
+  <%@ include file="$imports.jsp" %>
+  <script src="js/ducc.experiments.js"></script>
+<%
+if (table_style.equals("scroll")) {
+%>  
+  <script type="text/javascript" charset="utf-8">
+	var oTable;
+	$(document).ready(function() {
+		oTable = $('#experiments-table').dataTable( {
+			"bProcessing": true,
+			"bPaginate": false,
+			"bFilter": true,
+			"sScrollX": "100%",
+			"sScrollY": "600px",
+       		"bInfo": false,
+			"sAjaxSource": "ducc-servlet/json-format-aaData-experiments",
+			"aaSorting": [],
+			"aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] } ],
+			"fnRowCallback"  : function(nRow,aData,iDisplayIndex) {
+                             		return nRow;
+			},
+		} );
+	} );
+  </script>
+<%
+}
+%>	
+</head>
+<body onload="ducc_init('experiments');" onResize="ducc_resize();">
+
+<!-- ####################### common ######################## -->
+<div class="flex-page">
+<!-- *********************** table ************************* -->
+<table class="flex-heading">
+<!-- *********************** row *************************** -->
+<tr class="heading">
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c0-menu.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<%@ include file="$banner/$runmode.jsp" %>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c1-refresh-experiments.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c2-status-experiments.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c3-image-experiments.jsp" %>
+</td>
+<!-- *********************** column ************************ -->
+<td valign="middle" align="center">
+<%@ include file="$banner/c4-ducc-mon.jsp" %>
+</td>
+</table>
+<!-- *********************** /table ************************ -->
+<!-- ####################### /common ####################### -->
+<!-- @@@@@@@@@@@@@@@@@@@@@@@ unique @@@@@@@@@@@@@@@@@@@@@@@@ -->
+<%
+if (table_style.equals("scroll")) {
+%>
+	<table id="experiments-table" width="100%">
+	<caption title="Hint: use Preferences -> Table Style to alter format"><b>Experiments List</b><br><i><small>click column heading to sort</small></i></caption>
+	<thead>
+	<tr class="ducc-header">
+	<th class="ducc-col-terminate"></th>
+	<th title="The time this experiment was first launched">Start</th>
+	<th title="The duration time of this experiment">Duration</th>
+	<th title="The directory owner for this experiment">User</th>
+	<th title="The number of tasks for this experiment">Tasks</th>
+	<th title="The state of this experiment">State</th>
+	<th title="The directory for this experiment">Directory</th>
+	</tr>
+	</thead>
+	<tbody id="experiments_list_area">
+	</tbody>
+	</table>
+<%
+}
+%>	
+<%
+if (table_style.equals("classic")) {
+%>
+	<table width="100%">
+   	<caption title="Hint: use Preferences -> Table Style to alter format"><b>Experiments List</b><br><i><small>click column heading to sort</small></i></caption>
+   	<tr>
+    <td>
+      <table class="sortable">
+		<thead>
+		<tr class="ducc-head">
+		<th class="ducc-col-terminate"></th>
+		<th title="The time this experiment was first launched">Start</th>
+		<th title="The duration time of this experiment">Duration</th>
+		<th title="The directory owner for this experiment">User</th>
+		<th title="The number of tasks for this experiment">Tasks</th>
+		<th title="The state of this experiment">State</th>
+		<th title="The directory for this experiment">Directory</th>
+		</tr>
+		</thead>
+		<tbody id="experiments_list_area">
+   		</tbody>
+	  </table>
+   	</table>
+<%
+}
+%>	    
+<!-- @@@@@@@@@@@@@@@@@@@@@@@ /unique @@@@@@@@@@@@@@@@@@@@@@@@ -->
+<!-- ####################### common ######################### -->
+</div>
+		
+<script src="opensources/navigation/menu.js"></script>
+</body>
+</html>

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/experiments.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.experiments.js
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.experiments.js?rev=1865229&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.experiments.js (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.experiments.js Thu Aug 15 14:44:35 2019
@@ -0,0 +1,35 @@
+
+function ducc_terminate_experiment(id)
+{	
+	try {
+		$.jGrowl(" Pending termination...");
+		$.ajax(
+		{
+			type: 'POST',
+			url : "/ducc-servlet/experiment-cancel-request"+"?id="+id,
+			success : function (data) 
+			{
+			$.jGrowl(data, { life: 6000 });
+			setTimeout(function(){window.close();}, 5000);
+			}
+		});
+		setTimeout(function(){window.close();}, 5000);
+	}
+	catch(err) {
+		ducc_error("ducc_terminate_experiment",err);
+	}	
+	return false;
+}
+
+function ducc_confirm_terminate_experiment(id,directory)
+{
+	try {
+		var result=confirm("Terminate experiment "+directory+"?");
+		if (result==true) {
+  			ducc_terminate_experiment(id);
+  		}
+  	}
+	catch(err) {
+		ducc_error("ducc_confirm_terminate_experiment",err);
+	}
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.experiments.js
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.local.js
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.local.js?rev=1865229&r1=1865228&r2=1865229&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.local.js (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/js/ducc.local.js Thu Aug 15 14:44:35 2019
@@ -1,28 +1,298 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you 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.
-*/
-/*!
- * ducc.local.js
- */
+
+function ducc_load_experiments_head()
+{
+	ducc_experiments_max_records();
+	ducc_experiments_users();
+}
+
+var ms_load_experiments_data = +new Date() - ms_reload_min;
+
+function ducc_load_experiments_data()
+{
+	var ms_now = +new Date();
+	if(ms_now < ms_load_experiments_data + ms_reload_min) {
+		return;
+	}
+	ms_load_experiments_data = ms_now;
+	var table_style = ducc_preferences_get("table_style");
+	if(table_style == "scroll") {
+		ducc_load_scroll_experiments_data()
+	}
+	else {
+		ducc_load_classic_experiments_data()
+	}
+}
+
+function ducc_load_classic_experiments_data()
+{
+	try {
+		$.ajax(
+		{
+			url : "/ducc-servlet/experiments-data",
+			success : function (data) 
+			{
+				$("#experiments_list_area").html(data);
+				ducc_timestamp();
+				ducc_authentication();
+				ducc_utilization();
+				ducc_cluetips();
+			}
+		});
+	}
+	catch(err) {
+		ducc_error("ducc_load_classic_experiments_data",err);
+	}	
+}
+
+function ducc_load_scroll_experiments_data()
+{
+	try {
+		oTable.fnReloadAjax("/ducc-servlet/json-format-aaData-experiments",ducc_load_scroll_experiments_callback);
+	}
+	catch(err) {
+		ducc_error("ducc_load_scroll_experiments_data",err);
+	}	
+}
+
+function ducc_load_scroll_experiments_callback() 
+{
+	try {
+		ducc_timestamp();
+		ducc_authentication();
+		ducc_utilization();
+		ducc_cluetips();
+		oTable.fnAdjustColumnSizing();
+	}
+	catch(err) {
+		ducc_error("ducc_load_scroll_experiments_callback",err);
+	}	
+}
+
+function ducc_init_experiments_data()
+{
+	try {
+		data = "<img src=\"opensources/images/indicator.gif\" alt=\"waiting...\">"
+		$("#experiments_list_area").html(data);
+		data = "...?"
+		$("#timestamp_area").html(data);
+		data = "...?"
+		$("#authentication_area").html(data);
+	}
+	catch(err) {
+		ducc_error("ducc_init_experiments_data",err);
+	}	
+}
+
+function ducc_experiments_max_records() 
+{
+	try {
+		var d_value = "16";
+		var x_value = "1";
+		var y_value = "4096";
+		var experimentsmax = ducc_appl("experimentsmax");
+		//
+		var c_value = ducc_get_cookie(experimentsmax);
+		var r_value = document.form_selectors.maxrecs_input.value;
+		if(c_value == null) {
+			c_value = d_value;
+			ducc_put_cookie(experimentsmax,c_value);
+			document.form_selectors.maxrecs_input.value = c_value;
+			return;
+		}
+		if(r_value == "default") {
+			document.form_selectors.maxrecs_input.value = c_value;
+			//$.jGrowl(" max records: "+c_value);
+			return;
+		}
+		//
+		n_value = 1*r_value;
+		if(isNaN(n_value)) {
+			document.form_selectors.maxrecs_input.value = c_value;
+			$.jGrowl(" max records, invalid: "+r_value);
+			return;
+		}
+		r_value = 1*r_value;
+		x_value = 1*x_value;
+		y_value = 1*y_value;
+		if(r_value < x_value) {
+			$.jGrowl(" max records, too small: "+r_value+" < "+x_value);
+			document.form_selectors.maxrecs_input.value = c_value;
+			return;
+		}
+		if(r_value > y_value) {
+			$.jGrowl(" max records, too large: "+r_value+" > "+y_value);
+			document.form_selectors.maxrecs_input.value = c_value;
+			return;
+		}
+		//
+		if(c_value != r_value) {
+			c_value = r_value;
+			ducc_put_cookie(experimentsmax,c_value);
+			document.form_selectors.maxrecs_input.value = c_value;
+			$.jGrowl(" max records: "+c_value);
+			return;
+		}
+	}
+	catch(err) {
+		throw err;
+		//ducc_error("ducc_experiments_max_records",err);
+	}		
+}
+
+function ducc_experiments_users() 
+{
+	try {
+		var experimentsusers = ducc_appl("experimentsusers");
+		var d_value = "";
+		var c_value = ducc_get_cookie(experimentsusers);
+		var r_value = document.form_selectors.users_input.value;
+		if(c_value == null) {
+			c_value = d_value;
+			ducc_put_cookie(experimentsusers,c_value);
+			document.form_selectors.users_input.value = c_value;
+			return;
+		}
+		if(r_value == "default") {
+			document.form_selectors.users_input.value = c_value;
+			return;
+		}
+		if(c_value != r_value) {
+			c_value = r_value;
+			ducc_put_cookie(experimentsusers,c_value);
+			document.form_selectors.users_input.value = c_value;
+			$.jGrowl(" users: "+c_value);
+			return;
+		}
+		return;
+	}
+	catch(err) {
+		throw err;
+		//ducc_error("ducc_experiments_users",err);
+	}	
+}
+
+var ms_load_experiment_details_data = +new Date() - ms_reload_min;
+
+function ducc_load_experiment_details_data()
+{
+	var ms_now = +new Date();
+	if(ms_now < ms_load_experiment_details_data + ms_reload_min) {
+		return;
+	}
+	ms_load_experiment_details_data = ms_now;
+	try {
+		data = "<img src=\"opensources/images/indicator.gif\" alt=\"waiting...\">";
+		$("#loading_experiment_details_area").html(data);
+		ducc_load_experiment_details_jobs_data();
+		server_url= "/ducc-servlet/experiment-details-data"+location.search;
+		$.ajax(
+		{
+			url : server_url,
+			success : function (data) 
+			{
+				$("#experiment_details_area").html(data);
+				ducc_cluetips();
+				hide_show();
+				data = "";
+				$("#loading_experiment_details_area").html(data);
+     			ducc_timestamp();
+				ducc_authentication();
+				ducc_utilization();
+			}
+		});
+	}
+	catch(err) {
+		data = "";
+		$("#loading_experiment_details_area").html(data);
+		ducc_error("ducc_load_experiment_details_data",err);
+	}
+}
+
+function ducc_load_experiment_details_jobs_data()
+{
+	try {
+		server_url= "/ducc-servlet/experiment-details-jobs-data"+location.search;
+		$.ajax(
+		{
+			url : server_url,
+			success : function (data) 
+			{
+				$("#jobs_list_area").html(data);
+			}
+		});
+	}
+	catch(err) {
+		ducc_error("ducc_load_experiments_jobs_data",err);
+	}	
+}
+
+function ducc_init_experiment_details_data()
+{
+	try {
+		data = "<img src=\"opensources/images/indicator.gif\" alt=\"waiting...\">"
+		$("#experiment_details_area").html(data);
+		data = "...?"
+		$("#jobs_list_area").html(data);
+		data = "...?"
+		$("#timestamp_area").html(data);
+		data = "...?"
+		$("#authentication_area").html(data);
+	}
+	catch(err) {
+		ducc_error("ducc_init_experiment_details_data",err);
+	}
+}
+
+function ducc_init_identify_experiment_details()
+{
+	try {
+		data = "<img src=\"opensources/images/indicator.gif\" alt=\"waiting...\">"
+		$("#identify_experiment_details_area").html(data);
+	}
+	catch(err) {
+		ducc_error("ducc_init_identify_experiment_details",err);
+	}
+}
+
+function ducc_load_identify_experiment_details()
+{
+	try {
+		server_url= "/ducc-servlet/experiment-details-directory"+location.search;
+		$.ajax(
+		{
+			url : server_url,
+			success : function (data) 
+			{
+				$("#identify_experiment_details_area").html(data);
+				hide_show();
+			}
+		});
+	}
+	catch(err) {
+		ducc_error("ducc_load_identify_experiment_details",err);
+	}	
+}
+
 function ducc_init_local(type)
 {
 	try {
-		//local mods here
+		if(type == "experiments") {
+			$(document).keypress(function(e) {
+  			if(e.which == 13) {
+  				ducc_load_experiments_head();
+  				ducc_load_experiments_data();
+  			}
+			});
+			ducc_init_experiments_data();
+			ducc_load_experiments_head();
+			ducc_load_experiments_data();
+		}
+		if(type == "experiment-details") {
+			ducc_init_identify_experiment_details();
+			ducc_init_experiment_details_data();
+			ducc_load_identify_experiment_details();
+			ducc_load_experiment_details_data();
+		}
 	}
 	catch(err) {
 		ducc_error("ducc_init_local",err);
@@ -32,7 +302,19 @@ function ducc_init_local(type)
 function ducc_update_page_local(type)
 {
 	try {
-		//local mods here
+		if(type == "experiments") {
+			ducc_load_experiments_head();
+			ducc_load_experiments_data();
+			for (var i=0; i < document.duccform.refresh.length; i++) {
+				ducc_load_experiments_data();
+			}
+		}
+		if(type == "experiment-details") {
+			for (var i=0; i < document.duccform.refresh.length; i++) {
+				ducc_load_identify_experiment_details();
+				ducc_load_experiment_details_data();
+			}
+		}
 	}
 	catch(err) {
 		ducc_error("ducc_update_page_local",err);

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Arkadenbrucke.png
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Arkadenbrucke.png?rev=1865229&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Arkadenbrucke.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Brno-Stary_Liskovec_vlajka.svg.png
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Brno-Stary_Liskovec_vlajka.svg.png?rev=1865229&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/opensources/images/120px-Brno-Stary_Liskovec_vlajka.svg.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/site.jsp
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/site.jsp?rev=1865229&r1=1865228&r2=1865229&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/site.jsp (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/site.jsp Thu Aug 15 14:44:35 2019
@@ -16,7 +16,12 @@ KIND, either express or implied.  See th
 specific language governing permissions and limitations
 under the License.
 -->
+<!--
+Insert Experiments button -- could be made optional
+Imported by $banner/c0-menu.jsp
+-->
 <HTML>
 <BODY>
+<li><a href="experiments.html">Experiments</a></li>
 </BODY>
-</HTML>
\ No newline at end of file
+</HTML>