You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/02/22 21:21:46 UTC

svn commit: r1449197 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main: java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java webapp/root/reservations.jsp

Author: degenaro
Date: Fri Feb 22 20:21:46 2013
New Revision: 1449197

URL: http://svn.apache.org/r1449197
Log:
UIMA-2691 DUCC webserver (WS) support for "managed reservations"

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Fri Feb 22 20:21:46 2013
@@ -59,8 +59,9 @@ import org.apache.uima.ducc.transport.ev
 import org.apache.uima.ducc.transport.event.common.IDuccReservationMap;
 import org.apache.uima.ducc.transport.event.common.IDuccState.ReservationState;
 import org.apache.uima.ducc.transport.event.common.IDuccUnits.MemoryUnits;
+import org.apache.uima.ducc.transport.event.common.IDuccWork;
 import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
-import org.apache.uima.ducc.transport.event.common.IDuccWorkReservation;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkService.ServiceDeploymentType;
 import org.apache.uima.ducc.transport.event.common.IRationale;
 import org.apache.uima.ducc.ws.DuccDaemonsData;
 import org.apache.uima.ducc.ws.DuccData;
@@ -503,19 +504,19 @@ public class DuccHandlerJsonFormat exten
 	}
 	
 	
-	private JsonArray buildReservationRow(HttpServletRequest request, IDuccWorkReservation reservation, DuccData duccData) {
+	private JsonArray buildReservationRow(HttpServletRequest request, IDuccWork duccwork, DuccData duccData) {
 		String type="Reservation";
 		JsonArray row = new JsonArray();
 		StringBuffer sb;
-		DuccId duccId = reservation.getDuccId();
+		DuccId duccId = duccwork.getDuccId();
 		// Terminate
 		sb = new StringBuffer();
 		String id = normalize(duccId);
 		sb.append("<span class=\"ducc-col-terminate\">");
 		if(terminateEnabled) {
-			if(!reservation.isCompleted()) {
-				String disabled = getDisabled(request,reservation);
-				String user = reservation.getStandardInfo().getUser();
+			if(!duccwork.isCompleted()) {
+				String disabled = getDisabled(request,duccwork);
+				String user = duccwork.getStandardInfo().getUser();
 				if(user != null) {
 					if(user.equals(JdConstants.reserveUser)) {
 						disabled = "disabled=\"disabled\"";
@@ -533,39 +534,60 @@ public class DuccHandlerJsonFormat exten
 		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
 		// Start
-		row.add(new JsonPrimitive(getTimeStamp(request,reservation.getDuccId(), reservation.getStandardInfo().getDateOfSubmission())));
+		row.add(new JsonPrimitive(getTimeStamp(request,duccwork.getDuccId(), duccwork.getStandardInfo().getDateOfSubmission())));
 		// End
 		sb = new StringBuffer();
 		sb.append("<span>");
-		switch(reservation.getReservationState()) {
-		case Completed:
-			sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfCompletion()));
-			break;
-		default:
-			break;
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			switch(reservation.getReservationState()) {
+			case Completed:
+				sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+				break;
+			default:
+				break;
+			}
+		}
+		else if(duccwork instanceof DuccWorkJob) {
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			switch(job.getJobState()) {
+			case Completed:
+				sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+				break;
+			default:
+				break;
+			}
 		}
 		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
 		// User
 		sb = new StringBuffer();
 		String title = "";
-		String submitter = reservation.getStandardInfo().getSubmitter();
+		String submitter = duccwork.getStandardInfo().getSubmitter();
 		if(submitter != null) {
-			title = " title=\"reservation submitter PID@host: "+submitter+"\"";
+			title = " title=\"submitter PID@host: "+submitter+"\"";
 		}
 		sb.append("<span"+title+">");
-		UserId userId = new UserId(reservation.getStandardInfo().getUser());
+		UserId userId = new UserId(duccwork.getStandardInfo().getUser());
 		sb.append(userId.toString());
 		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
 		// Class
-		row.add(new JsonPrimitive(stringNormalize(reservation.getSchedulingInfo().getSchedulingClass(),messages.fetch("default"))));
+		row.add(new JsonPrimitive(stringNormalize(duccwork.getSchedulingInfo().getSchedulingClass(),messages.fetch("default"))));
+		// Type
+		sb = new StringBuffer();
+		String reservationType = "Unmanaged";
+		if(duccwork instanceof DuccWorkJob) {
+			reservationType = "Managed";
+		}
+		sb.append(reservationType);
+		row.add(new JsonPrimitive(sb.toString()));
 		// State
 		sb = new StringBuffer();
-		String state = reservation.getStateObject().toString();
+		String state = duccwork.getStateObject().toString();
 		sb.append("<span>");
 		if(duccData.isLive(duccId)) {
-			if(reservation.isOperational()) {
+			if(duccwork.isOperational()) {
 				sb.append("<span class=\"active_state\">");
 			}
 			else {
@@ -583,121 +605,186 @@ public class DuccHandlerJsonFormat exten
 		row.add(new JsonPrimitive(sb.toString()));
 		// Reason
 		sb = new StringBuffer();
-		switch(reservation.getCompletionType()) {
-		case Undefined:
-			break;
-		case CanceledByUser:
-		case CanceledByAdmin:
-			try {
-				String cancelUser = reservation.getStandardInfo().getCancelUser();
-				if(cancelUser != null) {
-					sb.append("<span title=\"canceled by "+cancelUser+"\">");
-					sb.append(reservation.getCompletionTypeObject().toString());
-					sb.append("</span>");
-				}
-				else {							
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			switch(reservation.getCompletionType()) {
+			case Undefined:
+				break;
+			case CanceledByUser:
+			case CanceledByAdmin:
+				try {
+					String cancelUser = duccwork.getStandardInfo().getCancelUser();
+					if(cancelUser != null) {
+						sb.append("<span title=\"canceled by "+cancelUser+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {							
+						IRationale rationale = reservation.getCompletionRationale();
+						if(rationale != null) {
+							sb.append("<span title=\""+rationale+"\">");
+							sb.append(duccwork.getCompletionTypeObject().toString());
+							sb.append("</span>");
+						}
+						else {
+							sb.append(duccwork.getCompletionTypeObject().toString());
+						}
+						
+					}
+				} 
+				catch(Exception e) {
 					IRationale rationale = reservation.getCompletionRationale();
 					if(rationale != null) {
 						sb.append("<span title=\""+rationale+"\">");
-						sb.append(reservation.getCompletionTypeObject().toString());
+						sb.append(duccwork.getCompletionTypeObject().toString());
 						sb.append("</span>");
 					}
 					else {
-						sb.append(reservation.getCompletionTypeObject().toString());
+						sb.append(duccwork.getCompletionTypeObject().toString());
 					}
-					
 				}
-			} 
-			catch(Exception e) {
+				break;
+			default:
 				IRationale rationale = reservation.getCompletionRationale();
 				if(rationale != null) {
 					sb.append("<span title=\""+rationale+"\">");
-					sb.append(reservation.getCompletionTypeObject().toString());
+					sb.append(duccwork.getCompletionTypeObject().toString());
 					sb.append("</span>");
 				}
 				else {
-					sb.append(reservation.getCompletionTypeObject().toString());
+					sb.append(duccwork.getCompletionTypeObject().toString());
 				}
+				break;
 			}
-			break;
-		default:
-			IRationale rationale = reservation.getCompletionRationale();
-			if(rationale != null) {
-				sb.append("<span title=\""+rationale+"\">");
-				sb.append(reservation.getCompletionTypeObject().toString());
-				sb.append("</span>");
-			}
-			else {
-				sb.append(reservation.getCompletionTypeObject().toString());
+		}
+		else if(duccwork instanceof DuccWorkJob) {
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			switch(job.getCompletionType()) {
+			case Undefined:
+				break;
+			case CanceledByUser:
+			case CanceledByAdministrator:
+				try {
+					String cancelUser = duccwork.getStandardInfo().getCancelUser();
+					if(cancelUser != null) {
+						sb.append("<span title=\"canceled by "+cancelUser+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {							
+						IRationale rationale = job.getCompletionRationale();
+						if(rationale != null) {
+							sb.append("<span title=\""+rationale+"\">");
+							sb.append(duccwork.getCompletionTypeObject().toString());
+							sb.append("</span>");
+						}
+						else {
+							sb.append(duccwork.getCompletionTypeObject().toString());
+						}
+						
+					}
+				} 
+				catch(Exception e) {
+					IRationale rationale = job.getCompletionRationale();
+					if(rationale != null) {
+						sb.append("<span title=\""+rationale+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {
+						sb.append(duccwork.getCompletionTypeObject().toString());
+					}
+				}
+				break;
+			default:
+				IRationale rationale = job.getCompletionRationale();
+				if(rationale != null) {
+					sb.append("<span title=\""+rationale+"\">");
+					sb.append(duccwork.getCompletionTypeObject().toString());
+					sb.append("</span>");
+				}
+				else {
+					sb.append(duccwork.getCompletionTypeObject().toString());
+				}
+				break;
 			}
-			break;
 		}
 		row.add(new JsonPrimitive(sb.toString()));
 		// Allocation
 		sb = new StringBuffer();
 		sb.append("<span>");
-		sb.append(reservation.getSchedulingInfo().getInstancesCount());
-		sb.append("</sppn>");
+		sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
-		//
-		TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>(); 
-		if(!reservation.getReservationMap().isEmpty()) {
-			IDuccReservationMap map = reservation.getReservationMap();
-			for (DuccId key : map.keySet()) { 
-				IDuccReservation value = reservation.getReservationMap().get(key);
-				String node = value.getNodeIdentity().getName();
-				if(!nodeMap.containsKey(node)) {
-					nodeMap.put(node,new Integer(0));
-				}
-				Integer count = nodeMap.get(node);
-				count++;
-				nodeMap.put(node,count);
-			}
-		}
 		// User Processes
 		sb = new StringBuffer();
-		boolean qualify = false;
-		if(!nodeMap.isEmpty()) {
-			if(nodeMap.keySet().size() > 1) {
-				qualify = true;
+		TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			if(!reservation.getReservationMap().isEmpty()) {
+				IDuccReservationMap map = reservation.getReservationMap();
+				for (DuccId key : map.keySet()) { 
+					IDuccReservation value = reservation.getReservationMap().get(key);
+					String node = value.getNodeIdentity().getName();
+					if(!nodeMap.containsKey(node)) {
+						nodeMap.put(node,new Integer(0));
+					}
+					Integer count = nodeMap.get(node);
+					count++;
+					nodeMap.put(node,count);
+				}
 			}
-		}
-		sb.append("<span>");
-		ArrayList<String> qualifiedPids = new ArrayList<String>();
-		if(reservation.isOperational()) {
-			DuccMachinesData machinesData = DuccMachinesData.getInstance();
-			for (String node: nodeMap.keySet()) { 
-				NodeId nodeId = new NodeId(node);
-				List<String> nodePids = machinesData.getPids(nodeId, userId);
-				for( String pid : nodePids ) {
-					if(qualify) {
-						qualifiedPids.add(node+":"+pid);
-					}
-					else {
-						qualifiedPids.add(pid);
+			
+			boolean qualify = false;
+			if(!nodeMap.isEmpty()) {
+				if(nodeMap.keySet().size() > 1) {
+					qualify = true;
+				}
+			}
+			ArrayList<String> qualifiedPids = new ArrayList<String>();
+			if(duccwork.isOperational()) {
+				DuccMachinesData machinesData = DuccMachinesData.getInstance();
+				for (String node: nodeMap.keySet()) { 
+					NodeId nodeId = new NodeId(node);
+					List<String> nodePids = machinesData.getPids(nodeId, userId);
+					for( String pid : nodePids ) {
+						if(qualify) {
+							qualifiedPids.add(node+":"+pid);
+						}
+						else {
+							qualifiedPids.add(pid);
+						}
 					}
 				}
 			}
-		}
-		if(qualifiedPids.size() > 0) {
-			String list = "";
-			for( String entry : qualifiedPids ) {
-				list += entry+" ";
+			if(qualifiedPids.size() > 0) {
+				String list = "";
+				for( String entry : qualifiedPids ) {
+					list += entry+" ";
+				}
+				sb.append("<span title=\""+list.trim()+"\">");
+				sb.append(""+qualifiedPids.size());
+				sb.append("</span>");
+			}
+			else {
+				sb.append(""+qualifiedPids.size());
 			}
-			sb.append("<span title=\""+list.trim()+"\">");
-			sb.append(""+qualifiedPids.size());
-			sb.append("</span>");
 		}
 		else {
-			sb.append(""+qualifiedPids.size());
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			if(job.isOperational()) {
+				sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+			}
+			else {
+				sb.append("0");
+			}
 		}
-		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
 		// Size
 		sb = new StringBuffer();
 		sb.append("<span>");
-		String size = reservation.getSchedulingInfo().getShareMemorySize();
-		MemoryUnits units = reservation.getSchedulingInfo().getShareMemoryUnits();
+		String size = duccwork.getSchedulingInfo().getShareMemorySize();
+		MemoryUnits units = duccwork.getSchedulingInfo().getShareMemoryUnits();
 		sb.append(getProcessMemorySize(duccId,type,size,units));
 		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
@@ -718,12 +805,54 @@ public class DuccHandlerJsonFormat exten
 		// Description
 		sb = new StringBuffer();
 		sb.append("<span>");
-		sb.append(stringNormalize(reservation.getStandardInfo().getDescription(),messages.fetch("none")));
+		sb.append(stringNormalize(duccwork.getStandardInfo().getDescription(),messages.fetch("none")));
 		sb.append("</span>");
 		row.add(new JsonPrimitive(sb.toString()));
 		
 		return row;
 	}
+	
+	private boolean isListEligible(ArrayList<String> users, FilterUsersStyle filterUsersStyle, String user, boolean completed) {
+		boolean list = false;
+		if(!users.isEmpty()) {
+			switch(filterUsersStyle) {
+			case IncludePlusActive:
+				if(!completed) {
+					list = true;
+				}
+				else if(users.contains(user)) {
+						list = true;
+				}
+				break;
+			case ExcludePlusActive:
+				if(!completed) {
+					list = true;
+				}
+				else if(!users.contains(user)) {
+						list = true;
+				}
+				break;
+			case Include:
+				if(users.contains(user)) {
+						list = true;
+				}
+				break;
+			case Exclude:
+				if(!users.contains(user)) {
+						list = true;
+				}
+				break;
+			}	
+		}
+		else {
+			if(!completed) {
+				list = true;
+			}
+			else 
+				list = true;
+		}
+		return list;
+	}
 		
 	private void handleServletJsonFormatReservationsAaData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) 
 	throws IOException, ServletException
@@ -735,79 +864,104 @@ public class DuccHandlerJsonFormat exten
 		JsonArray data = new JsonArray();
 
 		int maxRecords = getReservationsMax(request);
-		ArrayList<String> users = getReservationsUsers(request);
+		
 		DuccData duccData = DuccData.getInstance();
+		
 		ConcurrentSkipListMap<ReservationInfo,ReservationInfo> sortedReservations = duccData.getSortedReservations();
+		ConcurrentSkipListMap<JobInfo, JobInfo> sortedServices = duccData.getSortedServices();
+		ConcurrentSkipListMap<Long, Object> sortedCombined = new ConcurrentSkipListMap<Long, Object>();
+		
+		ArrayList<String> users = getReservationsUsers(request);
 		FilterUsersStyle filterUsersStyle = getFilterUsersStyle(request);
-		if(sortedReservations.size()> 0) {
-			Iterator<Entry<ReservationInfo, ReservationInfo>> iterator = sortedReservations.entrySet().iterator();
-			int counter = 0;
-			while(iterator.hasNext()) {
-				ReservationInfo reservationInfo = iterator.next().getValue();
+		
+		if((sortedReservations.size() > 0) || (sortedServices.size() > 0)) {
+			Iterator<Entry<ReservationInfo, ReservationInfo>> iR = sortedReservations.entrySet().iterator();
+			while(iR.hasNext()) {
+				ReservationInfo reservationInfo = iR.next().getValue();
 				DuccWorkReservation reservation = reservationInfo.getReservation();
-				boolean list = false;
-				if(!users.isEmpty()) {
-					String reservationUser =reservation.getStandardInfo().getUser().trim();
-					switch(filterUsersStyle) {
-					case IncludePlusActive:
-						if(!reservation.isCompleted()) {
-							list = true;
-						}
-						else if(users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case ExcludePlusActive:
-						if(!reservation.isCompleted()) {
-							list = true;
-						}
-						else if(!users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case Include:
-						if(users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case Exclude:
-						if(!users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					}	
+				String user = reservation.getStandardInfo().getUser().trim();
+				boolean completed = reservation.isCompleted();
+				if(isListEligible(users, filterUsersStyle, user, completed)) {
+					Long key = new Long(reservation.getDuccId().getFriendly());
+					sortedCombined.put(key, reservation);
 				}
-				else {
-					if(!reservation.isCompleted()) {
-						list = true;
-					}
-					else if(maxRecords > 0) {
-						if (counter++ < maxRecords) {
-							list = true;
-						}
+			}
+			Iterator<Entry<JobInfo, JobInfo>> iS = sortedServices.entrySet().iterator();
+			while(iS.hasNext()) {
+				JobInfo jobInfo = iS.next().getValue();
+				DuccWorkJob job = jobInfo.getJob();
+				ServiceDeploymentType sdt = job.getServiceDeploymentType();
+				switch(sdt) {
+				case uima:
+				case custom:
+				default:
+					break;
+				case other:
+					String user = job.getStandardInfo().getUser().trim();
+					boolean completed = job.isCompleted();
+					if(isListEligible(users, filterUsersStyle, user, completed)) {
+						Long key = new Long(job.getDuccId().getFriendly());
+						sortedCombined.put(key, job);
 					}
+					break;
 				}
-				if(list) {
-					JsonArray row = buildReservationRow(request, reservation, duccData);
-					data.add(row);
+			}
+			if(sortedCombined.size() > 0) {
+				int counter = 0;
+				Iterator<Long> keys = sortedCombined.descendingKeySet().iterator();
+				while(keys.hasNext()) {
+					Long key = keys.next();
+					Object object = sortedCombined.get(key);
+					if(object instanceof DuccWorkReservation) {
+						DuccWorkReservation reservation = (DuccWorkReservation) object;
+						JsonArray row = buildReservationRow(request, reservation, duccData);
+						data.add(row);
+					}
+					else if(object instanceof DuccWorkJob) {
+						DuccWorkJob job = (DuccWorkJob) object;
+						JsonArray row = buildReservationRow(request, job, duccData);
+						data.add(row);
+					}
+					else {
+						// huh?
+					}
+					if(counter++ > maxRecords) {
+						break;
+					}
 				}
 			}
+			else {
+				JsonArray row = new JsonArray();
+				// Terminate
+				row.add(new JsonPrimitive("no reservations meet criteria"));
+				// Id
+				row.add(new JsonPrimitive(""));
+				// Start
+				row.add(new JsonPrimitive(""));
+				// End
+				row.add(new JsonPrimitive(""));
+				// User
+				row.add(new JsonPrimitive(""));
+				// Class
+				row.add(new JsonPrimitive(""));
+				// Type
+				row.add(new JsonPrimitive(""));
+				// State
+				row.add(new JsonPrimitive(""));
+				// Reason
+				row.add(new JsonPrimitive(""));
+				// Allocation
+				row.add(new JsonPrimitive(""));
+				// User Processes
+				row.add(new JsonPrimitive(""));
+				// Size
+				row.add(new JsonPrimitive(""));
+				// List
+				row.add(new JsonPrimitive(""));
+				// Description
+				row.add(new JsonPrimitive(""));
+				data.add(row);
+			}
 		}
 		else {
 			JsonArray row = new JsonArray();
@@ -829,6 +983,8 @@ public class DuccHandlerJsonFormat exten
 			row.add(new JsonPrimitive(""));
 			// Class
 			row.add(new JsonPrimitive(""));
+			// Type
+			row.add(new JsonPrimitive(""));
 			// State
 			row.add(new JsonPrimitive(""));
 			// Reason

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java Fri Feb 22 20:21:46 2013
@@ -50,8 +50,9 @@ import org.apache.uima.ducc.transport.ev
 import org.apache.uima.ducc.transport.event.common.IDuccReservation;
 import org.apache.uima.ducc.transport.event.common.IDuccReservationMap;
 import org.apache.uima.ducc.transport.event.common.IDuccUnits.MemoryUnits;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkService.ServiceDeploymentType;
+import org.apache.uima.ducc.transport.event.common.IDuccWork;
 import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
-import org.apache.uima.ducc.transport.event.common.IDuccWorkReservation;
 import org.apache.uima.ducc.transport.event.common.IRationale;
 import org.apache.uima.ducc.ws.DuccDaemonsData;
 import org.apache.uima.ducc.ws.DuccData;
@@ -419,20 +420,28 @@ public class DuccHandlerLegacy extends D
 		duccLogger.trace(methodName, jobid, messages.fetch("exit"));
 	}	
 	
-	private void buildReservationsListEntry(HttpServletRequest request, StringBuffer sb, DuccId duccId, IDuccWorkReservation reservation, DuccData duccData) {
+	private void buildReservationsListEntry(HttpServletRequest request, StringBuffer sb, DuccId duccId, IDuccWork duccwork, DuccData duccData) {
 		String type="Reservation";
 		String id = normalize(duccId);
 		sb.append("<td class=\"ducc-col-terminate\">");
 		if(terminateEnabled) {
-			if(!reservation.isCompleted()) {
-				String disabled = getDisabled(request,reservation);
-				String user = reservation.getStandardInfo().getUser();
+			if(!duccwork.isCompleted()) {
+				String disabled = getDisabled(request,duccwork);
+				String user = duccwork.getStandardInfo().getUser();
 				if(user != null) {
 					if(user.equals(JdConstants.reserveUser)) {
 						disabled = "disabled=\"disabled\"";
 					}
 				}
-				sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_reservation("+id+")\" value=\"Terminate\" "+disabled+"/>");
+				if(duccwork instanceof DuccWorkReservation) {
+					sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_reservation("+id+")\" value=\"Terminate\" "+disabled+"/>");
+				}
+				else if(duccwork instanceof DuccWorkJob) {
+					sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_service("+id+")\" value=\"Terminate\" "+disabled+"/>");
+				}
+				else {
+					//huh?
+				}
 			}
 		}
 		sb.append("</td>");
@@ -442,36 +451,57 @@ public class DuccHandlerLegacy extends D
 		sb.append("</td>");
 		// Start
 		sb.append("<td>");
-		sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfSubmission()));
+		sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfSubmission()));
 		sb.append("</td>");
 		// End
 		sb.append("<td>");
-		switch(reservation.getReservationState()) {
-		case Completed:
-			sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfCompletion()));
-			break;
-		default:
-			break;
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			switch(reservation.getReservationState()) {
+			case Completed:
+				sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+				break;
+			default:
+				break;
+			}
+		}
+		else if(duccwork instanceof DuccWorkJob) {
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			switch(job.getJobState()) {
+			case Completed:
+				sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+				break;
+			default:
+				break;
+			}
 		}
 		sb.append("</td>");
 		// User
 		String title = "";
-		String submitter = reservation.getStandardInfo().getSubmitter();
+		String submitter = duccwork.getStandardInfo().getSubmitter();
 		if(submitter != null) {
-			title = " title=\"reservation submitter PID@host: "+submitter+"\"";
+			title = " title=\"submitter PID@host: "+submitter+"\"";
 		}
 		sb.append("<td"+title+">");
-		UserId userId = new UserId(reservation.getStandardInfo().getUser());
+		UserId userId = new UserId(duccwork.getStandardInfo().getUser());
 		sb.append(userId.toString());
 		sb.append("</td>");
 		// Class
 		sb.append("<td>");
-		sb.append(stringNormalize(reservation.getSchedulingInfo().getSchedulingClass(),messages.fetch("default")));
+		sb.append(stringNormalize(duccwork.getSchedulingInfo().getSchedulingClass(),messages.fetch("default")));
+		sb.append("</td>");
+		// Type
+		String reservationType = "Unmanaged";
+		if(duccwork instanceof DuccWorkJob) {
+			reservationType = "Managed";
+		}
+		sb.append("<td>");
+		sb.append(reservationType);
 		sb.append("</td>");
 		// State
 		sb.append("<td>");
 		if(duccData.isLive(duccId)) {
-			if(reservation.isOperational()) {
+			if(duccwork.isOperational()) {
 				sb.append("<span class=\"active_state\">");
 			}
 			else {
@@ -481,144 +511,258 @@ public class DuccHandlerLegacy extends D
 		else {
 			sb.append("<span class=\"historic_state\">");
 		}
-		sb.append(reservation.getStateObject().toString());
+		sb.append(duccwork.getStateObject().toString());
 		if(duccData.isLive(duccId)) {
 			sb.append("</span>");
 		}
 		sb.append("</td>");
 		// Reason
 		sb.append("<td>");
-		switch(reservation.getCompletionType()) {
-		case Undefined:
-			break;
-		case CanceledByUser:
-		case CanceledByAdmin:
-			try {
-				String cancelUser = reservation.getStandardInfo().getCancelUser();
-				if(cancelUser != null) {
-					sb.append("<span title=\"canceled by "+cancelUser+"\">");
-					sb.append(reservation.getCompletionTypeObject().toString());
-					sb.append("</span>");
-				}
-				else {							
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			switch(reservation.getCompletionType()) {
+			case Undefined:
+				break;
+			case CanceledByUser:
+			case CanceledByAdmin:
+				try {
+					String cancelUser = duccwork.getStandardInfo().getCancelUser();
+					if(cancelUser != null) {
+						sb.append("<span title=\"canceled by "+cancelUser+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {							
+						IRationale rationale = reservation.getCompletionRationale();
+						if(rationale != null) {
+							sb.append("<span title=\""+rationale+"\">");
+							sb.append(duccwork.getCompletionTypeObject().toString());
+							sb.append("</span>");
+						}
+						else {
+							sb.append(duccwork.getCompletionTypeObject().toString());
+						}
+						
+					}
+				} 
+				catch(Exception e) {
 					IRationale rationale = reservation.getCompletionRationale();
 					if(rationale != null) {
 						sb.append("<span title=\""+rationale+"\">");
-						sb.append(reservation.getCompletionTypeObject().toString());
+						sb.append(duccwork.getCompletionTypeObject().toString());
 						sb.append("</span>");
 					}
 					else {
-						sb.append(reservation.getCompletionTypeObject().toString());
+						sb.append(duccwork.getCompletionTypeObject().toString());
 					}
-					
 				}
-			} 
-			catch(Exception e) {
+				break;
+			default:
 				IRationale rationale = reservation.getCompletionRationale();
 				if(rationale != null) {
 					sb.append("<span title=\""+rationale+"\">");
-					sb.append(reservation.getCompletionTypeObject().toString());
+					sb.append(duccwork.getCompletionTypeObject().toString());
 					sb.append("</span>");
 				}
 				else {
-					sb.append(reservation.getCompletionTypeObject().toString());
+					sb.append(duccwork.getCompletionTypeObject().toString());
 				}
+				break;
 			}
-			break;
-		default:
-			IRationale rationale = reservation.getCompletionRationale();
-			if(rationale != null) {
-				sb.append("<span title=\""+rationale+"\">");
-				sb.append(reservation.getCompletionTypeObject().toString());
-				sb.append("</span>");
-			}
-			else {
-				sb.append(reservation.getCompletionTypeObject().toString());
+		}
+		else if(duccwork instanceof DuccWorkJob) {
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			switch(job.getCompletionType()) {
+			case Undefined:
+				break;
+			case CanceledByUser:
+			case CanceledByAdministrator:
+				try {
+					String cancelUser = duccwork.getStandardInfo().getCancelUser();
+					if(cancelUser != null) {
+						sb.append("<span title=\"canceled by "+cancelUser+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {							
+						IRationale rationale = job.getCompletionRationale();
+						if(rationale != null) {
+							sb.append("<span title=\""+rationale+"\">");
+							sb.append(duccwork.getCompletionTypeObject().toString());
+							sb.append("</span>");
+						}
+						else {
+							sb.append(duccwork.getCompletionTypeObject().toString());
+						}
+						
+					}
+				} 
+				catch(Exception e) {
+					IRationale rationale = job.getCompletionRationale();
+					if(rationale != null) {
+						sb.append("<span title=\""+rationale+"\">");
+						sb.append(duccwork.getCompletionTypeObject().toString());
+						sb.append("</span>");
+					}
+					else {
+						sb.append(duccwork.getCompletionTypeObject().toString());
+					}
+				}
+				break;
+			default:
+				IRationale rationale = job.getCompletionRationale();
+				if(rationale != null) {
+					sb.append("<span title=\""+rationale+"\">");
+					sb.append(duccwork.getCompletionTypeObject().toString());
+					sb.append("</span>");
+				}
+				else {
+					sb.append(duccwork.getCompletionTypeObject().toString());
+				}
+				break;
 			}
-			break;
 		}
 		sb.append("</td>");
 		// Allocation
 		sb.append("<td align=\"right\">");
-		sb.append(reservation.getSchedulingInfo().getInstancesCount());
+		sb.append(duccwork.getSchedulingInfo().getInstancesCount());
 		sb.append("</td>");
-		// 
-		TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>(); 
-		if(!reservation.getReservationMap().isEmpty()) {
-			IDuccReservationMap map = reservation.getReservationMap();
-			for (DuccId key : map.keySet()) { 
-				IDuccReservation value = reservation.getReservationMap().get(key);
-				String node = value.getNodeIdentity().getName();
-				if(!nodeMap.containsKey(node)) {
-					nodeMap.put(node,new Integer(0));
-				}
-				Integer count = nodeMap.get(node);
-				count++;
-				nodeMap.put(node,count);
-			}
-		}
 		// User Processes
-		boolean qualify = false;
-		if(!nodeMap.isEmpty()) {
-			if(nodeMap.keySet().size() > 1) {
-				qualify = true;
-			}
-		}
 		sb.append("<td align=\"right\">");
-		ArrayList<String> qualifiedPids = new ArrayList<String>();
-		if(reservation.isOperational()) {
-			DuccMachinesData machinesData = DuccMachinesData.getInstance();
-			for (String node: nodeMap.keySet()) { 
-				NodeId nodeId = new NodeId(node);
-				List<String> nodePids = machinesData.getPids(nodeId, userId);
-				for( String pid : nodePids ) {
-					if(qualify) {
-						qualifiedPids.add(node+":"+pid);
-					}
-					else {
-						qualifiedPids.add(pid);
+		TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
+		if(duccwork instanceof DuccWorkReservation) {
+			DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+			if(!reservation.getReservationMap().isEmpty()) {
+				IDuccReservationMap map = reservation.getReservationMap();
+				for (DuccId key : map.keySet()) { 
+					IDuccReservation value = reservation.getReservationMap().get(key);
+					String node = value.getNodeIdentity().getName();
+					if(!nodeMap.containsKey(node)) {
+						nodeMap.put(node,new Integer(0));
+					}
+					Integer count = nodeMap.get(node);
+					count++;
+					nodeMap.put(node,count);
+				}
+			}
+			
+			boolean qualify = false;
+			if(!nodeMap.isEmpty()) {
+				if(nodeMap.keySet().size() > 1) {
+					qualify = true;
+				}
+			}
+			ArrayList<String> qualifiedPids = new ArrayList<String>();
+			if(duccwork.isOperational()) {
+				DuccMachinesData machinesData = DuccMachinesData.getInstance();
+				for (String node: nodeMap.keySet()) { 
+					NodeId nodeId = new NodeId(node);
+					List<String> nodePids = machinesData.getPids(nodeId, userId);
+					for( String pid : nodePids ) {
+						if(qualify) {
+							qualifiedPids.add(node+":"+pid);
+						}
+						else {
+							qualifiedPids.add(pid);
+						}
 					}
 				}
 			}
-		}
-		if(qualifiedPids.size() > 0) {
-			String list = "";
-			for( String entry : qualifiedPids ) {
-				list += entry+" ";
+			if(qualifiedPids.size() > 0) {
+				String list = "";
+				for( String entry : qualifiedPids ) {
+					list += entry+" ";
+				}
+				sb.append("<span title=\""+list.trim()+"\">");
+				sb.append(""+qualifiedPids.size());
+				sb.append("</span>");
+			}
+			else {
+				sb.append(""+qualifiedPids.size());
 			}
-			sb.append("<span title=\""+list.trim()+"\">");
-			sb.append(""+qualifiedPids.size());
-			sb.append("</span>");
 		}
 		else {
-			sb.append(""+qualifiedPids.size());
+			DuccWorkJob job = (DuccWorkJob) duccwork;
+			if(job.isOperational()) {
+				sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+			}
+			else {
+				sb.append("0");
+			}
 		}
 		sb.append("</td>");
 		// Size
 		sb.append("<td align=\"right\">");
-		String size = reservation.getSchedulingInfo().getShareMemorySize();
-		MemoryUnits units = reservation.getSchedulingInfo().getShareMemoryUnits();
+		String size = duccwork.getSchedulingInfo().getShareMemorySize();
+		MemoryUnits units = duccwork.getSchedulingInfo().getShareMemoryUnits();
 		sb.append(getProcessMemorySize(duccId,type,size,units));
 		sb.append("</td>");
 		// List
 		sb.append("<td>");
-		if(!nodeMap.isEmpty()) {
-			sb.append("<select>");
-			for (String node: nodeMap.keySet()) {
-				Integer count = nodeMap.get(node);
-				String option = node+" "+"["+count+"]";
-				sb.append("<option>"+option+"</option>");
+		if(duccwork instanceof DuccWorkReservation) {
+			if(!nodeMap.isEmpty()) {
+				sb.append("<select>");
+				for (String node: nodeMap.keySet()) {
+					Integer count = nodeMap.get(node);
+					String option = node+" "+"["+count+"]";
+					sb.append("<option>"+option+"</option>");
+				}
+				sb.append("</select>");
 			}
-			sb.append("</select>");
+		}
+		else {
+			//TODO
 		}
 		sb.append("</td>");
 		// Description
 		sb.append("<td>");
-		sb.append(stringNormalize(reservation.getStandardInfo().getDescription(),messages.fetch("none")));
+		sb.append(stringNormalize(duccwork.getStandardInfo().getDescription(),messages.fetch("none")));
 		sb.append("</td>");
 		sb.append("</tr>");
 	}
 	
+	private boolean isListEligible(ArrayList<String> users, FilterUsersStyle filterUsersStyle, String user, boolean completed) {
+		boolean list = false;
+		if(!users.isEmpty()) {
+			switch(filterUsersStyle) {
+			case IncludePlusActive:
+				if(!completed) {
+					list = true;
+				}
+				else if(users.contains(user)) {
+						list = true;
+				}
+				break;
+			case ExcludePlusActive:
+				if(!completed) {
+					list = true;
+				}
+				else if(!users.contains(user)) {
+						list = true;
+				}
+				break;
+			case Include:
+				if(users.contains(user)) {
+						list = true;
+				}
+				break;
+			case Exclude:
+				if(!users.contains(user)) {
+						list = true;
+				}
+				break;
+			}	
+		}
+		else {
+			if(!completed) {
+				list = true;
+			}
+			else 
+				list = true;
+		}
+		return list;
+	}
+	
 	private void handleServletLegacyReservations(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) 
 	throws IOException, ServletException
 	{
@@ -627,78 +771,76 @@ public class DuccHandlerLegacy extends D
 		StringBuffer sb = new StringBuffer();
 		
 		int maxRecords = getReservationsMax(request);
-		ArrayList<String> users = getReservationsUsers(request);
+		
 		DuccData duccData = DuccData.getInstance();
+		
 		ConcurrentSkipListMap<ReservationInfo,ReservationInfo> sortedReservations = duccData.getSortedReservations();
+		ConcurrentSkipListMap<JobInfo, JobInfo> sortedServices = duccData.getSortedServices();
+		ConcurrentSkipListMap<Long, Object> sortedCombined = new ConcurrentSkipListMap<Long, Object>();
+		
+		ArrayList<String> users = getReservationsUsers(request);
 		FilterUsersStyle filterUsersStyle = getFilterUsersStyle(request);
-		if(sortedReservations.size()> 0) {
-			Iterator<Entry<ReservationInfo, ReservationInfo>> iterator = sortedReservations.entrySet().iterator();
-			int counter = 0;
-			while(iterator.hasNext()) {
-				ReservationInfo reservationInfo = iterator.next().getValue();
+		
+		if((sortedReservations.size() > 0) || (sortedServices.size() > 0)) {
+			Iterator<Entry<ReservationInfo, ReservationInfo>> iR = sortedReservations.entrySet().iterator();
+			while(iR.hasNext()) {
+				ReservationInfo reservationInfo = iR.next().getValue();
 				DuccWorkReservation reservation = reservationInfo.getReservation();
-				boolean list = false;
-				if(!users.isEmpty()) {
-					String reservationUser = reservation.getStandardInfo().getUser().trim();
-					switch(filterUsersStyle) {
-					case IncludePlusActive:
-						if(!reservation.isCompleted()) {
-							list = true;
-						}
-						else if(users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case ExcludePlusActive:
-						if(!reservation.isCompleted()) {
-							list = true;
-						}
-						else if(!users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case Include:
-						if(users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					case Exclude:
-						if(!users.contains(reservationUser)) {
-							if(maxRecords > 0) {
-								if (counter++ < maxRecords) {
-									list = true;
-								}
-							}
-						}
-						break;
-					}	
+				String user = reservation.getStandardInfo().getUser().trim();
+				boolean completed = reservation.isCompleted();
+				if(isListEligible(users, filterUsersStyle, user, completed)) {
+					Long key = new Long(reservation.getDuccId().getFriendly());
+					sortedCombined.put(key, reservation);
 				}
-				else {
-					if(!reservation.isCompleted()) {
-						list = true;
+			}
+			Iterator<Entry<JobInfo, JobInfo>> iS = sortedServices.entrySet().iterator();
+			while(iS.hasNext()) {
+				JobInfo jobInfo = iS.next().getValue();
+				DuccWorkJob job = jobInfo.getJob();
+				ServiceDeploymentType sdt = job.getServiceDeploymentType();
+				switch(sdt) {
+				case uima:
+				case custom:
+				default:
+					break;
+				case other:
+					String user = job.getStandardInfo().getUser().trim();
+					boolean completed = job.isCompleted();
+					if(isListEligible(users, filterUsersStyle, user, completed)) {
+						Long key = new Long(job.getDuccId().getFriendly());
+						sortedCombined.put(key, job);
+					}
+					break;
+				}
+			}
+			if(sortedCombined.size() > 0) {
+				int counter = 0;
+				Iterator<Long> keys = sortedCombined.descendingKeySet().iterator();
+				while(keys.hasNext()) {
+					Long key = keys.next();
+					Object object = sortedCombined.get(key);
+					if(object instanceof DuccWorkReservation) {
+						DuccWorkReservation reservation = (DuccWorkReservation) object;
+						sb.append(trGet(counter));
+						buildReservationsListEntry(request, sb, reservation.getDuccId(), reservation, duccData);
+					}
+					else if(object instanceof DuccWorkJob) {
+						DuccWorkJob job = (DuccWorkJob) object;
+						sb.append(trGet(counter));
+						buildReservationsListEntry(request, sb, job.getDuccId(), job, duccData);
 					}
-					else if(maxRecords > 0) {
-						if (counter++ < maxRecords) {
-							list = true;
-						}
+					else {
+						// huh?
+					}
+					if(counter++ > maxRecords) {
+						break;
 					}
 				}
-				if(list) {
-					sb.append(trGet(counter));
-					buildReservationsListEntry(request, sb, reservation.getDuccId(), reservation, duccData);
-				}
+			}
+			else {
+				sb.append("<tr>");
+				sb.append("<td>");
+				sb.append(messages.fetch("no reservations meet criteria"));
 			}
 		}
 		else {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp Fri Feb 22 20:21:46 2013
@@ -17,49 +17,12 @@ specific language governing permissions 
 under the License.
 -->
 <%@ page language="java" %>
-<%
-String table_style = "scroll";
-String cookieName = "ducc:table_style";
-String cookieValue = null;
-Cookie cookie = null;
-Cookie cookies [] = request.getCookies ();
-if (cookies != null)
-{
-  for (int i = 0; i < cookies.length; i++) 
-  {
-    if (cookies [i].getName().equals (cookieName))
-    {
-      cookie = cookies[i];
-      cookieValue = cookie.getValue();
-      if(cookieValue != null) {
-        table_style = cookieValue;
-      }
-      break;
-    }
-  }
-}
-%>
 <html>
 <head>
   <link rel="shortcut icon" href="uima.ico" />
   <title>ducc-mon</title>
   <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
-  <script src="opensources/jquery-1.4.2.js" type="text/javascript"></script>
-<%
-if (table_style.equals("scroll")) {
-%>
-  <script type="text/javascript" language="javascript" src="opensources/DataTables-1.9.1/media/js/jquery.dataTables.min.js"></script>
-  <script type="text/javascript" language="javascript" src="opensources/DataTables-plugins/fnReloadAjax.js"></script>
-<%
-}
-%>
-  <script src="opensources/jgrowl/jquery.jgrowl.js" type="text/javascript"></script>
-  <link rel="stylesheet" href="opensources/jgrowl/jquery.jgrowl.css" type="text/css"/>
-  <link href="opensources/jquery-ui-1.8.4/gallery/jquery-ui-themes-1.8.4/themes/redmond/jquery-ui.css" rel="stylesheet" type="text/css"/>
-  <script src="opensources/jquery-ui-1.8.4/ui/minified/jquery-ui.min.js"></script>
-  <link href="opensources/navigation/menu.css" rel="stylesheet" type="text/css">
-  <script src="js/ducc.js"></script>
-  <link href="ducc.css" rel="stylesheet" type="text/css">
+  <%@ include file="$imports.jsp" %>
 <%
 if (table_style.equals("scroll")) {
 %>  
@@ -79,9 +42,9 @@ if (table_style.equals("scroll")) {
 			"fnRowCallback"  : function(nRow,aData,iDisplayIndex) {
 									$('td:eq(0)', nRow).css( "text-align", "right" );
                              		$('td:eq(1)', nRow).css( "text-align", "right" );
-                             		$('td:eq(8)', nRow).css( "text-align", "right" );
                              		$('td:eq(9)', nRow).css( "text-align", "right" );
                              		$('td:eq(10)', nRow).css( "text-align", "right" );
+                             		$('td:eq(11)', nRow).css( "text-align", "right" );
                              		return nRow;
 			},
 		} );
@@ -90,13 +53,6 @@ if (table_style.equals("scroll")) {
 <%
 }
 %>	
-<%
-if (table_style.equals("classic")) {
-%>
-<script type="text/javascript" src="opensources/sorttable.js"></script>
-<%
-}
-%>
 </head>
 <body onload="ducc_init('reservations');" onResize="window.location.href = window.location.href;">
 
@@ -141,30 +97,6 @@ if (table_style.equals("classic")) {
 <%
 if (table_style.equals("scroll")) {
 %>
-<!--
-	<table id="reservations-table" width="100%">
-   	    <caption><b>Reservations 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 system assigned id for this reservation">Id</th>
-			<th title="The time this reservation was submitted">Start</th>
-			<th title="The time this reservation was finished">End</th>
-			<th class="ducc-no-filter" id="user_column_heading" title="The user who submitted this reservation">User</th>
-			<th title="The user specified class of this reservation">Class</th>
-			<th title="The current state of this reservation">State</th>
-			<th title="The reason for the final state of this reservation, normally CanceledByUser">Reason</th>
-			<th title="The number of resources (machines or shares, depending on class) assigned to this reservation">Allocation</th>
-			<th title="The combined number of PIDs on the assigned resource(s) for user">User<br>Processes</th>
-			<th title="The memory allocation per resource for this reservation, in GB">Size</th>
-			<th title="The list of of machines assigned to this reservation">List</th>
-			<th title="The user specified description of this reservation">Description</th>
-			</tr>
-			</thead>
-			<tbody id="reservations_list_area">
-   	  		</tbody>
-   	</table>
--->   	
 	<table id="reservations-table" width="100%">
 	<caption><b>Reservations List</b><br><i><small>click column heading to sort</small></i></caption>
 	<thead>
@@ -175,6 +107,7 @@ if (table_style.equals("scroll")) {
 			<th title="The time this reservation was finished">End</th>
 			<th class="ducc-no-filter" id="user_column_heading" title="The user who submitted this reservation">User</th>
 			<th title="The user specified class of this reservation">Class</th>
+			<th title="The type of this reservation">Type</th>
 			<th title="The current state of this reservation">State</th>
 			<th title="The reason for the final state of this reservation, normally CanceledByUser">Reason</th>
 			<th title="The number of resources (machines or shares, depending on class) assigned to this reservation">Allocation</th>