[cig-commits] r8019 - in cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal: portlets util

wei at geodynamics.org wei at geodynamics.org
Mon Sep 24 18:13:19 PDT 2007


Author: wei
Date: 2007-09-24 18:13:18 -0700 (Mon, 24 Sep 2007)
New Revision: 8019

Added:
   cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CreateMagjobPortlet.java
   cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TextEditorPortlet.java
   cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TgResourcesPortlet.java
Modified:
   cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CigMagPortlet.java
   cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/util/SimpleGridConstants.java
Log:
Add seperate page for creating mag job; a text editor page and a query for grid resources. 

Modified: cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CigMagPortlet.java
===================================================================
--- cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CigMagPortlet.java	2007-09-24 22:58:28 UTC (rev 8018)
+++ cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CigMagPortlet.java	2007-09-25 01:13:18 UTC (rev 8019)
@@ -218,7 +218,7 @@
 			mysession.setAttribute(SimpleGridConstants.MagJobList + uid, joblist, PortletSession.APPLICATION_SCOPE);
 			mysession.setAttribute(SimpleGridConstants.MagJobSid + uid, jid, PortletSession.APPLICATION_SCOPE);
 			mysession.setAttribute(SimpleGridConstants.MagPage + uid, "Main", PortletSession.APPLICATION_SCOPE);
-			mysession.setAttribute("cig_mag_status_info" + uid, job.getDataset() + "(jobId="+job.getId()+"): Job is created. Clieck \"Next\" to transfer dataset to remote site", PortletSession.APPLICATION_SCOPE);
+			mysession.setAttribute("cig_mag_status_info" + uid, job.getDataset() + "(jobId="+job.getId()+"): Job is created. Clieck \"Run\" to transfer dataset to remote site and start Run", PortletSession.APPLICATION_SCOPE);
     	}catch (Exception e) {
 			error += "CigPortalMagAction::doMag_create: error\n"+e.toString()+"\nBe sure to select required parameters\n";
 		}
@@ -340,6 +340,56 @@
 		}
     	this.fillTemplate(aContext, req, res, error);
     }
+    public void doMag_Refresh ( ActionRequest req, ActionResponse res, Context aContext ) throws PortletException {
+        //clear error info
+    	String error = "";
+    	MagjobBean job = null;
+    	try {  		
+    		PortletSession mysession = req.getPortletSession(true);
+			User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+			String uid = user.getUserID();
+			// get job id
+			String selectedjobid = req.getParameter("cig_mag_id");
+			if (selectedjobid != null) {
+				// find the job
+				ArrayList joblist = (ArrayList)mysession.getAttribute(SimpleGridConstants.MagJobList + uid, PortletSession.APPLICATION_SCOPE);
+				
+				int i;
+				for (i=0; i<joblist.size(); i++) {
+					job = (MagjobBean)joblist.get(i);
+					if (job.getId().equals(selectedjobid)) {
+						// this job exists, check if result is there
+						break;
+					}
+				}
+				if (i < joblist.size()) {
+					mysession.setAttribute(SimpleGridConstants.MagJobSid + uid, job.getId(), PortletSession.APPLICATION_SCOPE);
+					String opstatus = "";
+					String sprefix = job.getDataset() + "(jobId="+job.getId()+"): ";
+					if (job.getStatus().equals("cigportal:New")) {
+						goTransferDataset(mysession, uid, joblist, job);
+					} else if (job.getStatus().equals("cigportal:Dataset Transferred")) {
+					    goSubmit(mysession, uid, joblist, job);
+					} else if (job.getStatus().equals("cigportal:Job Submitted")) {
+						goRefresh(mysession, uid, joblist, job);
+					} else if (job.getStatus().equals("cigportal:Job Done")) {
+						goTransferResult(mysession, uid, joblist, job);
+					} else if (job.getStatus().equals("cigportal:Result Transferred")) { 
+						goViz(mysession, uid, joblist, job);
+					} else if (job.getStatus().equals("cigportal:Image Created")) {
+						goShowViz(mysession, uid, joblist, job);
+					}
+					mysession.setAttribute("cig_mag_status_info" + uid, sprefix+opstatus, PortletSession.APPLICATION_SCOPE);
+					//else throw new PortletException("Unknown job status for job " + selectedjobid + ": " +job.getStatus());
+				} else  throw new PortletException("Couldn't find this job: " + selectedjobid);
+			}
+    	}catch (Exception e) {
+			error += "CigPortalMagAction::doMag_submit: error\n"+e.toString() + "\n";
+			if (job != null) job.setStatus("Error");
+			//req.getPortletSession().setAttribute("cig_mag_status_info", e.toString(), PortletSession.APPLICATION_SCOPE);
+		}
+    	this.fillTemplate(aContext, req, res, error);
+    }
     public void doMag_submit ( ActionRequest req, ActionResponse res, Context aContext ) throws PortletException {
         //clear error info
     	String error = "";
@@ -367,17 +417,17 @@
 					String opstatus = "";
 					String sprefix = job.getDataset() + "(jobId="+job.getId()+"): ";
 					if (job.getStatus().equals("cigportal:New")) {
-						opstatus = this.goTransferDataset(mysession, uid, joblist, job);
+						goTransferDataset(mysession, uid, joblist, job);
 					} else if (job.getStatus().equals("cigportal:Dataset Transferred")) {
-						opstatus = goSubmit(mysession, uid, joblist, job);
+					    goSubmit(mysession, uid, joblist, job);
 					} else if (job.getStatus().equals("cigportal:Job Submitted")) {
-						opstatus = goRefresh(mysession, uid, joblist, job);
+						goRefresh(mysession, uid, joblist, job);
 					} else if (job.getStatus().equals("cigportal:Job Done")) {
-						opstatus = goTransferResult(mysession, uid, joblist, job);
+						goTransferResult(mysession, uid, joblist, job);
 					} else if (job.getStatus().equals("cigportal:Result Transferred")) { 
-						opstatus = goViz(mysession, uid, joblist, job);
+						goViz(mysession, uid, joblist, job);
 					} else if (job.getStatus().equals("cigportal:Image Created")) {
-						opstatus = goShowViz(mysession, uid, joblist, job);
+						goShowViz(mysession, uid, joblist, job);
 					}
 					mysession.setAttribute("cig_mag_status_info" + uid, sprefix+opstatus, PortletSession.APPLICATION_SCOPE);
 					//else throw new PortletException("Unknown job status for job " + selectedjobid + ": " +job.getStatus());
@@ -418,7 +468,7 @@
 				mysession.setAttribute("cig_mag_ft_thread" + uid, mytransfer, PortletSession.APPLICATION_SCOPE);
 				//job.setStatus("cigportal:Dataset Transferring");
 				mysession.setAttribute(SimpleGridConstants.MagJobList + uid, joblist, PortletSession.APPLICATION_SCOPE);
-				return "Dataset is being transferred to remote site. Click \"Next\" to refresh the transfer status";
+			    return "Dataset is being transferred to remote site. Click \"Next\" to refresh the transfer status";
 			} else {
 				String curid = mytransfer.getOwnerId();
 				if (!curid.equals(job.getId())) {
@@ -559,7 +609,7 @@
 					mysession.removeAttribute("cig_mag_ft_thread" + uid, PortletSession.APPLICATION_SCOPE);
 					throw new PortletException("Error in dataset transfer for job " + job.getId()+": "+mystatus);
 				}
-				return "results are being transferred from remote site. Click \"Next\" to refresh the transfer status";
+				return "results are being transferred from remote site. Click on the tar file to download the data";
 			}
 		} else throw new PortletException("Could not find selected site from site list for job "+job.getId());
 		

Added: cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CreateMagjobPortlet.java
===================================================================
--- cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CreateMagjobPortlet.java	2007-09-24 22:58:28 UTC (rev 8018)
+++ cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/CreateMagjobPortlet.java	2007-09-25 01:13:18 UTC (rev 8019)
@@ -0,0 +1,421 @@
+/**
+ *  Copyright (c) 2007 Computational Infrastructure for Geodynamics (CIG),
+ *  California Institute of Technology, All Rights Reserved.
+ */
+
+package org.cig.portal.portlets;
+
+//JSR-168
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.*;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletResponse;
+import javax.portlet.PortletSession;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.velocity.context.Context;
+import org.cig.portal.beans.MagjobBean;
+import org.cig.portal.grid.data.SimpleTransferThread;
+import org.cig.portal.grid.job.SimpleRSL;
+import org.cig.portal.grid.job.SimpleRunGT2;
+import org.cig.portal.grid.job.SimpleRunGT4;
+import org.cig.portal.grid.security.SimpleCred;
+import org.cig.portal.util.Config;
+import org.cig.portal.util.MAGPortletConfig;
+import org.cig.portal.util.SimpleGridConstants;
+import org.gisolve.demo.app.IDWVizThread;
+import org.gridsphere.portlet.impl.SportletProperties;
+import org.gridsphere.services.core.user.User;
+import org.ietf.jgss.GSSCredential;
+import org.ogce.portlets.VelocityPortlet;
+
+//apache commons FileUpload
+import org.apache.commons.fileupload.portlet.*;
+import org.apache.commons.fileupload.*;
+import org.apache.commons.fileupload.disk.*;
+
+public class CreateMagjobPortlet extends VelocityPortlet {
+    /* This method is called whenever porlet is loaded */
+    public void buildViewContext( RenderRequest req, RenderResponse res, Context aContext ) {
+    	try {
+        	this.fillTemplate(aContext, req, res, "");
+        	// debug
+    		this.getPortletContext().log("CigPortal: magAction::buildViewContext() called");
+    	} catch (Exception e) {
+    		this.getPortletContext().log("CigPortal: magAction::buildViewContext()\n" + e.toString());
+    	}
+    }
+	/* This method is called when user click "customizer" action */
+    public void buildEditContext( RenderRequest req, RenderResponse res, Context aContext ) {
+		buildViewContext(req, res, aContext);    	
+    }
+    /* This method is called when user click "help" action */
+    public void buildHelpContext( RenderRequest req, RenderResponse res, Context aContext ) {
+    	buildViewContext(req, res, aContext);    
+    }	
+    public void fillTemplate(Context aContext, PortletRequest req, PortletResponse res, String actionError) {
+		PortletSession mysession = req.getPortletSession(true);
+		User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+		String uid = user.getUserID();
+		String error = "";
+    	try {
+    		// get config info about grid security
+			Config myconfig = (Config)mysession.getAttribute(SimpleGridConstants.SESSION_ATTR_CONFIG + uid, PortletSession.APPLICATION_SCOPE);
+			String mywebappname = myconfig.get("portal.webappname");
+			if (!isValidWebapp(mywebappname))
+				throw new PortletException("CreateMagjobPortlet.fillTemplate(): "+mywebappname+" is not a valid name. Check your config file first.");
+			//TODO: object persistence
+			ArrayList joblist = (ArrayList)mysession.getAttribute(SimpleGridConstants.MagJobList + uid, PortletSession.APPLICATION_SCOPE);
+			// workflow 
+			String cursid = (String)mysession.getAttribute(SimpleGridConstants.MagJobSid + uid, PortletSession.APPLICATION_SCOPE);
+			String curPage = (String)mysession.getAttribute(SimpleGridConstants.MagPage + uid, PortletSession.APPLICATION_SCOPE);
+			if (curPage.equals("Upload")) {
+				MagjobBean item = null;
+				int i;
+				int numviz = 0, numReady = 0;
+				for (i=0; i<joblist.size(); i++) {
+					item = (MagjobBean)joblist.get(i);
+					if (item.getId().equals(cursid)) {
+						numviz = item.getKnum();
+						for (int v=0; v<numviz; v++) {
+							// this job exists, check if result is there
+							String rfile = this.getPortletContext().getRealPath("storage/"+uid+"/mag/images/" + cursid+"."+item.getK(v) + ".jpg");
+							File rF = new File(rfile);
+							if (rF.isFile()) 
+								numReady++;
+						}
+						if (numReady < numviz) {
+							error += "Visualization file not ready yet. Please wait for a while or click \"Next\" to refresh status\n";
+						}
+						break;
+					}
+				}
+				if (i<joblist.size() && numviz>0 && numReady==numviz) {
+					// set links
+					ArrayList<String> resultlink = new ArrayList<String>(numviz);
+					ArrayList<String> imagelink = new ArrayList<String>(numviz);
+					ArrayList<String> vizklist = new ArrayList<String>(numviz);
+					for (int v=0; v<numviz; v++) {
+						resultlink.add("/"+mywebappname+"/storage/"+uid+"/mag/results/" + cursid+"."+item.getK(v) + ".dat");
+						imagelink.add("/"+mywebappname+"/storage/"+uid+"/mag/images/" + cursid+"."+item.getK(v) + ".jpg");
+						vizklist.add(Integer.toString(item.getK(v)));
+					}
+					String rfile = this.getPortletContext().getRealPath("storage/"+uid+"/mag/results/" + cursid+"."+item.getK(0) + ".dat");
+					String str_zrange = this.getZRange(rfile);
+					String[] minmax = str_zrange.split(",");
+					int zmax=0, zmin=0;
+					if (minmax.length == 2) {
+						zmin=Integer.parseInt(minmax[0]);
+						zmax=Integer.parseInt(minmax[1]);
+					}
+					String legendlink = "/"+mywebappname+"/images/vizlegend.jpg";
+					aContext.put("cig_mag_viz_zmax", zmax);
+					aContext.put("cig_mag_viz_zmin", zmin);
+					aContext.put("cig_mag_viz_legendlink", legendlink);
+					aContext.put("cig_mag_viz_resultlink", resultlink);
+					aContext.put("cig_mag_viz_imagelink", imagelink);
+					aContext.put("cig_mag_viz_klist", vizklist);
+					aContext.put("cig_mag_viz_dataset", item.getDataset());
+					aContext.put("cig_mag_viz_jobid", item.getId());
+					
+					aContext.put(SimpleGridConstants.errorInfo, actionError + error);
+					setTemplate(req, "upload.vm");
+					return;
+				}
+			} 
+			aContext.put(SimpleGridConstants.MagJobList, joblist);
+			aContext.put(SimpleGridConstants.MagJobSid, cursid);
+			String statusinfo = (String)mysession.getAttribute("cig_mag_status_info" + uid, PortletSession.APPLICATION_SCOPE);
+			aContext.put("cig_mag_status_info", statusinfo);
+			ArrayList sites = this.getSiteList(myconfig);
+			aContext.put("cig_mag_site_list", sites);
+			String udir = this.getPortletContext().getRealPath("storage/"+uid+"/mag/datasets");
+			File userMagDir = new File(udir);
+			if (!userMagDir.isDirectory()) throw new PortletException(udir+": Mag portlet: user Mag dataset dir is not a directory.");
+			String[] flist = userMagDir.list();
+			ArrayList<String> filelist = new ArrayList<String>(flist.length);
+			for (int i=0; i<flist.length; i++) {
+				filelist.add(flist[i]);
+			}
+			aContext.put("cig_mag_parm_datalist", filelist);
+			// render dataset view
+			String viewdataset = (String)mysession.getAttribute("cig_mag_viz_vieworig" + uid, PortletSession.APPLICATION_SCOPE);
+			if (viewdataset != null) {
+				aContext.put("cig_mag_viz_vieworig", viewdataset);
+				aContext.put("cig_mag_viz_datasetlink", "/"+mywebappname+"/storage/"+uid+"/mag/datasets/"+viewdataset);
+				aContext.put("cig_mag_viz_datasetimagelink", "/"+mywebappname+"/storage/"+uid+"/mag/images/"+viewdataset+".jpg");
+				mysession.setAttribute("cig_mag_viz_vieworig" + uid, null, PortletSession.APPLICATION_SCOPE); // reset
+			} else {
+				aContext.put("cig_mag_viz_vieworig", null);
+			}
+			setTemplate(req, "createjob.vm");
+		} catch (Exception e) {
+			error += "User portlet::fillTemplate() error\n"+e.toString()+"\n";
+			setTemplate(req, "createjob.vm");
+		}
+		// fille error info
+		aContext.put(SimpleGridConstants.errorInfo, actionError + error);
+	}
+    private boolean isValidWebapp(String mywebappname) {
+    	if (mywebappname == null)
+    		return false;
+    	return this.getPortletContext().getRealPath("thisshouldnotexist").indexOf(mywebappname+"/thisshouldnotexist") >= 0;
+    }
+    private ArrayList getSiteList(Config myconfig) {
+    	String str_sites = myconfig.get("grid.sites");
+		String[] sitelist = null;
+		if (str_sites != null) { 
+			sitelist = str_sites.split("\\s*,\\s*");
+			ArrayList<String> sitearray = new ArrayList<String>(sitelist.length);
+			for (int i=0; i<sitelist.length; i++)
+				sitearray.add(sitelist[i]);
+			return sitearray;
+		}
+		return null;
+    }
+    public void doMag_create( ActionRequest req, ActionResponse res, Context aContext ) throws Exception 
+    {
+        //clear error info
+    	String error = "";
+    	try {  		
+    		PortletSession mysession = req.getPortletSession(true);
+			User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+			String uid = user.getUserID();
+			String str_klist = req.getParameter("cig_mag_parm_k");
+			if (str_klist == null || str_klist.equals(""))
+				throw new Exception("Please specify K-value");
+			String[] klist = str_klist.split("\\s*,\\s*");
+			int[] int_klist = new int[klist.length];
+			long timestamp = Calendar.getInstance().getTimeInMillis();
+			if (klist.length>11 || klist.length<=0)
+				throw new Exception ("Too many K values or K-value is not set");
+			else {
+				for (int i=0; i<klist.length; i++) 
+					int_klist[i] = Integer.parseInt(klist[i]);
+			}
+			// create a Mag job
+			ArrayList joblist = (ArrayList)mysession.getAttribute(SimpleGridConstants.MagJobList + uid, PortletSession.APPLICATION_SCOPE);
+			String jid = uid +".job."+ timestamp;
+			MagjobBean job = new MagjobBean(jid);
+			job.setDataset(req.getParameter("cig_mag_parm_dataset"));
+			job.setN(Integer.parseInt(req.getParameter("cig_mag_parm_r")));
+			job.setM(Integer.parseInt(req.getParameter("cig_mag_parm_k")));
+			job.setKList(int_klist);
+			job.setSite(req.getParameter("cig_mag_parm_site"));
+			job.setStatus("cigportal:New");
+			job.setGtVersion(req.getParameter("cigportal_mag_parm_globus"));
+			//job.setGtVersion("GT2");
+			joblist.add(job);
+
+			mysession.setAttribute(SimpleGridConstants.MagJobList + uid, joblist, PortletSession.APPLICATION_SCOPE);
+			mysession.setAttribute(SimpleGridConstants.MagJobSid + uid, jid, PortletSession.APPLICATION_SCOPE);
+			mysession.setAttribute(SimpleGridConstants.MagPage + uid, "Main", PortletSession.APPLICATION_SCOPE);
+			mysession.setAttribute("cig_mag_status_info" + uid, job.getDataset() + "(jobId="+job.getId()+"): Job is created. Clieck \"Run\" to transfer dataset to remote site and start Run", PortletSession.APPLICATION_SCOPE);
+    	}catch (Exception e) {
+			error += "CigPortalMagAction::doMag_create: error\n"+e.toString()+"\nBe sure to select required parameters\n";
+		}
+    	this.fillTemplate(aContext, req, res, error);
+    }
+    public void doMag_return ( ActionRequest req, ActionResponse res, Context aContext ) throws Exception 
+    {
+        //clear error info
+    	String error = "";
+    	try {  		
+    		PortletSession mysession = req.getPortletSession(true);
+			User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+			String uid = user.getUserID();
+			mysession.setAttribute(SimpleGridConstants.MagPage + uid, "Main", PortletSession.APPLICATION_SCOPE);
+    	}catch (Exception e) {
+			error += "CigPortalMagAction::doMag_return: error\n"+e.toString()+"\n";
+		}
+    	this.fillTemplate(aContext, req, res, error);
+    }
+    
+    //added file upload handling
+//     public void doMag_file_upload ( ActionRequest req, ActionResponse res, Context aContext ) throws Exception
+//    {
+//    	// clear error info
+//    	String error = "";
+//    	try {  		
+//    		PortletSession mysession = req.getPortletSession(true);
+//    		User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+//    		String uid = user.getUserID();
+//			String uploadfile = req.getParameter("cig_mag_parm_filename");
+//			if (uploadfile != null) 
+//			{
+//				 Check that we have a file upload request
+//	    		boolean isMultipart = PortletFileUpload.isMultipartContent(req);
+//	    		// Create a factory for disk-based file items
+//	    		DiskFileItemFactory factory = new DiskFileItemFactory();
+//	    		//Create a new file upload handler
+//	    		PortletFileUpload upload = new PortletFileUpload(factory);
+//	    		// Parse the request
+//	    		List items = upload.parseRequest(req);
+//	    		// Check validity of directory file(s) will be written to
+//	     		String udir = this.getPortletContext().getRealPath("storage/"+uid+"/mag/datasets");
+//	     		System.out.println(udir);
+//	     		File userdmsDir = new File(udir);
+//				if (!userdmsDir.isDirectory()) throw new PortletException(udir+": mag portlet: user mag dataset dir is not a directory.");
+//	    		// Process the uploaded items
+//	    		Iterator iter = items.iterator();
+//	    		while (iter.hasNext()) 
+//	    		{
+//	    		    FileItem item = (FileItem) iter.next();
+//	    		    if (item.isFormField()){
+//	    		    	System.out.println("\nField = " + item.getFieldName());
+//	    		    }
+//	    		    else{
+//	    		    	String fileName = item.getName();
+//	    		    	System.out.println("\nNAME: " + fileName);
+//	        		    File uploadedFile = new File(udir, fileName);
+//	        		    item.write(uploadedFile);
+//	    		    }
+//    		   }
+//			}
+//   	}catch (Exception e) {
+//			error += "CigPortalMagAction::doMag_file_upload: error\n"+e.toString() + "\n";
+//		}
+//    	this.fillTemplate(aContext, req, res, error);
+//    } */
+	 
+    public void doMag_view_dataset ( ActionRequest req, ActionResponse res, Context aContext ) throws Exception 
+    {
+        //clear error info
+    	String error = "";
+    	try {  		
+    		PortletSession mysession = req.getPortletSession(true);
+			User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+			String uid = user.getUserID();
+			String viewdataset = req.getParameter("cig_mag_parm_dataset");
+			if (viewdataset.equals(""))	viewdataset = null;
+			mysession.setAttribute("cig_mag_viz_vieworig" + uid, viewdataset, PortletSession.APPLICATION_SCOPE);
+    	}catch (Exception e) {
+			error += "CigPortalMagAction::doMag_view_dataset: error\n"+e.toString() + "\n";
+		}
+    	this.fillTemplate(aContext, req, res, error);
+    }
+    public void doMag_delete ( ActionRequest req, ActionResponse res, Context aContext ) throws PortletException {
+//    	clear error info
+    	String error = "";
+    	MagjobBean job = null;
+    	try {  		
+    		PortletSession mysession = req.getPortletSession(true);
+			User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+			String uid = user.getUserID();
+			// get job id
+			String selectedjobid = req.getParameter("cig_mag_id");
+			if (selectedjobid != null) {
+				// find the job
+				ArrayList joblist = (ArrayList)mysession.getAttribute(SimpleGridConstants.MagJobList + uid, PortletSession.APPLICATION_SCOPE);
+				
+				int i; int size = joblist.size();
+				for (i=0; i<size; i++) {
+					job = (MagjobBean)joblist.get(i);
+					if (job.getId().equals(selectedjobid)) {
+						// this job exists, just delete it
+						String nextId = "";
+						if (size>1) {
+							nextId = ((MagjobBean)joblist.get((i+1) % size)).getId();
+						}
+						mysession.setAttribute(SimpleGridConstants.MagJobSid + uid, nextId, PortletSession.APPLICATION_SCOPE);
+						// delete
+						joblist.remove(i);
+						mysession.setAttribute("cig_mag_status_info" + uid, "", PortletSession.APPLICATION_SCOPE);
+						break;
+					}
+				}
+			}
+    	} catch (Exception e) {
+			error += "CigPortalMagAction::doMag_delete: error\n"+e.toString() + "\n";
+			if (job != null) job.setStatus("Error");
+			//req.getPortletSession().setAttribute("cig_mag_status_info", e.toString(), PortletSession.APPLICATION_SCOPE);
+		}
+    	this.fillTemplate(aContext, req, res, error);
+    }
+    public String goViz( PortletSession mysession, String uid, ArrayList joblist, MagjobBean job ) throws Exception 
+    {
+    	IDWVizThread viz = (IDWVizThread)mysession.getAttribute("cig_mag_viz_thread" + uid, PortletSession.APPLICATION_SCOPE);
+    	if (viz == null) {
+    		int numviz = job.getKnum();
+    		String s1 =  this.getPortletContext().getRealPath("storage/bnd_poly.dat");
+    		String s2 =  this.getPortletContext().getRealPath("storage/bnd_uspolygon.dat");
+    		String[] s3 = new String[numviz];
+    		String[] s4 = new String[numviz];
+    		String[] s5 = new String[numviz];
+    		for (int i=0; i<numviz; i++) {
+	    		// set parameters
+	    		s3[i] =  this.getPortletContext().getRealPath("storage/"+uid+"/mag/results/" + job.getId()+"."+job.getK(i) + ".dat");
+	    		s4[i] =  this.getPortletContext().getRealPath("storage/"+uid+"/mag/results/" + job.getId()+"."+job.getK(i) + "_viz.dat");
+	    		s5[i] =  this.getPortletContext().getRealPath("storage/"+uid+"/mag/images/" + job.getId()+"."+job.getK(i) + ".jpg");
+    		}
+    		viz = new IDWVizThread(s1, s2, s3, s4, s5, job.getId());
+    		viz.start();
+    		mysession.setAttribute("cig_mag_viz_thread" + uid, viz, PortletSession.APPLICATION_SCOPE);
+    		return "visualization image is being created. Click \"Next\" to refresh the status of visualization";
+    	} else {
+    		String curid = viz.getOwnerId();
+    		if (!curid.equals(job.getId())) {
+				return "Visualization thread is busy serving another your job:"+curid;
+			}
+			String mystatus = viz.getStatus();
+			if (mystatus.equals("SUCCESS")) {
+				mysession.removeAttribute("cig_mag_viz_thread" + uid, PortletSession.APPLICATION_SCOPE);
+				job.setStatus("cigportal:Image Created");
+				mysession.setAttribute(SimpleGridConstants.MagJobList + uid, joblist, PortletSession.APPLICATION_SCOPE);
+				return "visualization image has been created. Click \"Next\" to go to visualization page";
+			} else if (mystatus.startsWith("error")) {
+				mysession.removeAttribute("cig_mag_viz_thread" + uid, PortletSession.APPLICATION_SCOPE);
+				throw new PortletException("Error in visualization for job " + job.getId()+": "+mystatus);
+			}
+			return "visualization image is being created. Click \"Next\" to refresh the status of visualization";
+		}
+    }
+    public String goShowViz( PortletSession mysession, String uid, ArrayList joblist, MagjobBean job ) throws Exception 
+    {
+    	mysession.setAttribute(SimpleGridConstants.MagPage + uid, "Viz", PortletSession.APPLICATION_SCOPE);
+    	return "";
+    }
+    private String getZRange(String inFile) throws IOException {
+	    File inf = new File(inFile);
+	    int zmin=0, zmax=0;
+	    if (inf.isFile() && inf.canRead()) {
+	    	java.io.BufferedReader fr = new java.io.BufferedReader(new java.io.FileReader(inFile));
+	    	String aline;
+	    	while ((aline = fr.readLine()) != null) {
+    			if (aline.startsWith("HEADER=")) {
+    				String[] h_params = aline.substring(7).split("\\s+");
+    				zmin = (int)(Double.parseDouble(h_params[6]));
+    				zmax = (int)(Double.parseDouble(h_params[7]));
+    				break;
+	    		}
+	    	}
+	    	fr.close();
+	    	return new String(zmin+","+zmax);
+	    }		
+	    return "";
+    }
+    /**
+     * This is where we initialize in-memory storage for cigportal
+     */
+    public void doView(RenderRequest req, RenderResponse res) throws PortletException, java.io.IOException {
+    	PortletSession mysession = req.getPortletSession(true);
+    	User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);
+		String uid = user.getUserID();
+		String storedSid = (String)mysession.getAttribute(SimpleGridConstants.SESSION_ATTR_ID + uid, PortletSession.APPLICATION_SCOPE);
+		if (storedSid == null || !storedSid.equals(mysession.getId())) {
+			storedSid = mysession.getId();
+			MAGPortletConfig.init(req, this);
+			mysession.setAttribute(SimpleGridConstants.SESSION_ATTR_ID + uid, storedSid, PortletSession.APPLICATION_SCOPE);
+		}
+    	super.doView(req, res);
+    }
+}
+

Added: cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TextEditorPortlet.java
===================================================================
--- cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TextEditorPortlet.java	2007-09-24 22:58:28 UTC (rev 8018)
+++ cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TextEditorPortlet.java	2007-09-25 01:13:18 UTC (rev 8019)
@@ -0,0 +1,40 @@
+/**
+ *  Copyright (c) 2007 Computational Infrastructure for Geodynamics (CIG),
+ *  California Institute of Technology, All Rights Reserved.
+ */
+
+package org.cig.portal.portlets;
+
+import org.gridsphere.provider.portlet.jsr.ActionPortlet;
+import org.gridsphere.provider.event.jsr.RenderFormEvent;
+import org.gridsphere.provider.event.jsr.ActionFormEvent;
+import org.gridsphere.provider.portletui.beans.TextEditorBean;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import java.io.IOException;
+
+/**
+ * A classic helloWorld portlet with some action
+ *
+ */
+public class TextEditorPortlet extends ActionPortlet {
+
+    public void init(PortletConfig config) throws PortletException {
+        super.init(config);
+        DEFAULT_VIEW_PAGE = "texteditor/view.jsp";
+    }
+
+    public void doView(RenderFormEvent event) throws PortletException, IOException {
+        RenderRequest request = event.getRenderRequest();
+        RenderResponse response = event.getRenderResponse();
+        getPortletConfig().getPortletContext().getRequestDispatcher("/jsp/texteditor/view.jsp").include(request, response);
+    }
+
+    public void saveText(ActionFormEvent event) throws PortletException, IOException {
+        TextEditorBean myTE = event.getTextEditorBean("myTE");
+        System.err.println(myTE.getValue());
+    }
+}

Added: cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TgResourcesPortlet.java
===================================================================
--- cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TgResourcesPortlet.java	2007-09-24 22:58:28 UTC (rev 8018)
+++ cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/portlets/TgResourcesPortlet.java	2007-09-25 01:13:18 UTC (rev 8019)
@@ -0,0 +1,25 @@
+/**
+ *  Copyright (c) 2007 Computational Infrastructure for Geodynamics (CIG),
+ *  California Institute of Technology, All Rights Reserved.
+ */
+
+package org.cig.portal.portlets;
+
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletException;
+import javax.portlet.RenderResponse;
+import javax.portlet.RenderRequest;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+
+public class TgResourcesPortlet extends GenericPortlet {
+
+    public void doView(RenderRequest request, RenderResponse response)
+            throws PortletException, IOException {
+        response.setContentType("text/html");
+        response.setProperty("JAVASCRIPT_SRC", "https://portal.teragrid.org/gridsphere/gridsphere?cid=systems-monitor&JavaScript=enabled");
+        getPortletContext().getRequestDispatcher("/html/tgresources.html").include(request, response);
+    }
+
+}

Modified: cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/util/SimpleGridConstants.java
===================================================================
--- cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/util/SimpleGridConstants.java	2007-09-24 22:58:28 UTC (rev 8018)
+++ cs/cigtg/trunk/cigtg-dev/CigPortal/cigportal/src/org/cig/portal/util/SimpleGridConstants.java	2007-09-25 01:13:18 UTC (rev 8019)
@@ -30,7 +30,7 @@
 	public static final String MagParamR = "cig_mag_parm_r";
 	public static final String MagParamSite = "cig_mag_parm_site";
     public static final String MagParamFileUpload = "cig_mag_parm_filename"; //added for file uploading
-  	
+  	public static final String MagParamResults = "cig_mag_parm_results";
 	public static final String MagId = "cig_mag_id";
 	
 	// service instance names



More information about the cig-commits mailing list