1 16 17 package org.pentaho.ui.component; 18 19 import java.text.SimpleDateFormat ; 20 import java.util.ArrayList ; 21 import java.util.Date ; 22 import java.util.List ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.dom4j.Document; 30 import org.dom4j.DocumentHelper; 31 import org.dom4j.Element; 32 import org.pentaho.messages.Messages; 33 import org.pentaho.core.runtime.IBackgroundExecution; 34 import org.pentaho.plugin.quartz.QuartzSystemListener; 35 import org.pentaho.core.repository.IContentItem; 36 import org.pentaho.core.session.IPentahoSession; 37 import org.pentaho.core.system.PentahoSystem; 38 import org.pentaho.core.ui.IPentahoUrlFactory; 39 import org.pentaho.ui.XmlComponent; 40 import org.quartz.JobDataMap; 41 import org.quartz.JobDetail; 42 import org.quartz.Scheduler; 43 44 public class UserFilesComponent extends XmlComponent { 45 46 49 private static final long serialVersionUID = -7404173000559758744L; 50 51 protected final static String FILE = "file"; 53 protected final static String NAME = "name"; protected final static String TIMESTAMP = "timestamp"; protected final static String ACTIONS = "actions"; protected final static String ACTION = "action"; protected final static String TITLE = "title"; protected final static String PARAMS = "params"; protected final static String PARAM = "param"; protected final static String PARAM_NAME = "param-name"; protected final static String PARAM_VALUE = "param-value"; protected final static String USER_FILES = "user-files"; protected final static String MIMETYPE = "mimetype"; protected final static String SIZE = "size"; 66 protected HttpServletRequest request; 67 protected HttpServletResponse response; 68 private static final Log logger = LogFactory.getLog(UserFilesComponent.class); 69 70 public Log getLogger() { 71 return logger; 72 } 73 74 public UserFilesComponent( ) { 75 super(null, null, null); 76 setXsl( "text/html", "UserFiles.xsl" ); } 78 79 public UserFilesComponent( IPentahoUrlFactory urlFactory, HttpServletRequest request, 80 HttpServletResponse response, List messages) { 81 super(urlFactory, messages, null); 82 this.request = request; 83 this.response = response; 84 setXsl( "text/html", "UserFiles.xsl" ); } 86 87 public void setRequest( HttpServletRequest request ) { 88 this.request = request; 89 } 90 91 public void setResponse( HttpServletResponse response ) { 92 this.response = response; 93 } 94 95 public boolean validate() { 96 return true; 97 } 98 99 public Document getXmlContent() { 100 101 Document result = DocumentHelper.createDocument(); 102 Element root = result.addElement( USER_FILES ); 103 104 addFiles( root ); 105 return result; 106 } 107 108 protected void addFiles( Element root ) { 109 110 addScheduledAndExecuting( root ); 111 112 addExecutedlist( root ); 113 114 } 115 116 protected void addScheduledAndExecuting( Element root ) { 117 Element jobs = root.addElement( "scheduled" ); IPentahoSession session = getSession(); 119 IBackgroundExecution backgroundExecution = PentahoSystem.getBackgroundExecutionHandler(session); 120 List jobsList = null; 121 if (backgroundExecution != null) { 122 jobsList = backgroundExecution.getScheduledAndExecutingBackgroundJobs( session ); 123 } else { 124 jobsList = new ArrayList (); 125 Element errorRoot = root.addElement("error"); errorRoot.addElement("error-message").setText(Messages.getErrorString("UI.USER_ERROR_0003_NO_BACKGROUND_EXECUTION")); } 128 if( jobsList != null && jobsList.size() > 0) { 129 for (int i=0; i<jobsList.size(); i++) { 130 131 Element job = jobs.addElement( FILE ); 132 133 JobDetail jobDetail = (JobDetail) jobsList.get(i); 134 JobDataMap jobDataMap = jobDetail.getJobDataMap(); 135 136 job.addElement( NAME ).setText( jobDataMap.getString( IBackgroundExecution.BACKGROUND_ACTION_NAME_STR ) ); 137 job.addElement( TIMESTAMP ).setText( jobDataMap.getString( IBackgroundExecution.BACKGROUND_SUBMITTED ) ); 138 Element actions = job.addElement( ACTIONS ); 139 Element action = actions.addElement( ACTION ); 140 action.addElement( TITLE ).setText( Messages.getString( "UI.USER_CANCEL" ) ); Element params = action.addElement( PARAMS ); 142 Element param = params.addElement( PARAM ); 143 param.addElement( PARAM_NAME ).setText( "del-job-name" ); param.addElement( PARAM_VALUE ).setText( jobDetail.getName() ); 145 param = params.addElement( PARAM ); 146 param.addElement( PARAM_NAME ).setText( "del-job-group" ); param.addElement( PARAM_VALUE ).setText( jobDetail.getGroup() ); 148 param = params.addElement( PARAM ); 149 param.addElement( PARAM_NAME ).setText( "action" ); param.addElement( PARAM_VALUE ).setText( "cancel-job" ); } 152 } 153 } 154 155 protected void addExecutedlist( Element root ) { 156 Element jobs = root.addElement( "executed" ); IPentahoSession session = getSession(); 158 IBackgroundExecution backgroundExecution = PentahoSystem.getBackgroundExecutionHandler(session); 159 160 List pastExecutionList = null; 161 if (backgroundExecution != null) { 162 pastExecutionList = backgroundExecution.getBackgroundExecutedContentList(session); 163 } else { 164 pastExecutionList = new ArrayList (); 165 } 166 SimpleDateFormat fmt = new SimpleDateFormat (); 167 168 for (int i=0; i<pastExecutionList.size(); i++) { 169 IContentItem item = (IContentItem) pastExecutionList.get(i); 170 Element job = jobs.addElement( FILE ); 171 172 job.addElement( NAME ).setText( item.getTitle() ); 173 String dateStr = ""; Date time = item.getFileDateTime(); 175 if( time != null ) { 176 dateStr = fmt.format( time ); 177 } 178 job.addElement( TIMESTAMP ).setText( dateStr ); 179 job.addElement( MIMETYPE ).setText( item.getMimeType() ); 180 job.addElement( SIZE ).setText( Long.toString( item.getFileSize() ) ); 181 182 Element actions = job.addElement( ACTIONS ); 183 Element action = actions.addElement( ACTION ); 184 action.addElement( TITLE ).setText( Messages.getString( "UI.USER_VIEW" ) ); Element params = action.addElement( PARAMS ); 186 Element param = params.addElement( PARAM ); 187 param.addElement( PARAM_NAME ).setText( "action" ); param.addElement( PARAM_VALUE ).setText( "view" ); 190 param = params.addElement( PARAM ); 191 param.addElement( PARAM_NAME ).setText( "id" ); param.addElement( PARAM_VALUE ).setText( item.getId() ); 193 194 action = actions.addElement( ACTION ); 195 action.addElement( TITLE ).setText( Messages.getString( "UI.USER_DELETE" ) ); params = action.addElement( PARAMS ); 197 param = params.addElement( PARAM ); 198 param.addElement( PARAM_NAME ).setText( "action" ); param.addElement( PARAM_VALUE ).setText( "delete" ); 201 param = params.addElement( PARAM ); 202 param.addElement( PARAM_NAME ).setText( "content-id" ); param.addElement( PARAM_VALUE ).setText( item.getId() ); 204 205 } 206 } 207 208 public boolean cancelJob( String jobName, String jobGroup ) { 209 210 try { 211 Scheduler sched = QuartzSystemListener.getSchedulerInstance(); 212 sched.deleteJob(jobName, jobGroup); 213 return true; 214 } catch (Throwable t) { 215 error( Messages.getErrorString( "Scheduler.ERROR_0001_SCHEDULER_CANNOT_CANCEL", t.getMessage() ), t ); } 217 return false; 218 } 219 220 public boolean deleteContent( String contentId ) { 221 try { 222 IPentahoSession session = getSession(); 223 IBackgroundExecution backgroundExecution = PentahoSystem.getBackgroundExecutionHandler(session); 224 if (backgroundExecution != null) { 225 backgroundExecution.removeBackgroundExecutedContentForID( contentId, session ); 226 return true; 227 } else { 228 return false; 229 } 230 } catch (Throwable t) { 231 error( Messages.getErrorString( "Scheduler.ERROR_0001_SCHEDULER_CANNOT_CANCEL", t.getMessage() ), t ); } 233 return false; 234 } 235 236 237 } 238 | Popular Tags |