001/* 002 * Copyright (c) 2010-2011 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: barseghian $' 006 * '$Date: 2013-01-29 22:20:22 +0000 (Tue, 29 Jan 2013) $' 007 * '$Revision: 31385 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.kepler.util; 031 032import java.util.Date; 033import java.util.HashMap; 034import java.util.Map; 035 036import org.apache.commons.logging.Log; 037import org.apache.commons.logging.LogFactory; 038import org.kepler.objectmanager.lsid.KeplerLSID; 039import org.kepler.sms.NamedOntClass; 040import org.kepler.util.WorkflowRun.RunAttribute; 041 042/** 043 * A class for building a WorkflowRun piecemeal from property Strings. 044 * 045 * @author 046 * @version $Id: WorkflowRunBuilder.java 31385 2013-01-29 22:20:22Z barseghian $ 047 */ 048public class WorkflowRunBuilder{ 049 050 private static final Log log = LogFactory.getLog(WorkflowRunBuilder.class 051 .getName()); 052 053 private KeplerLSID _execLSID = null; 054 private String _referralList = null; 055 private String _user = null; 056 private String _workflowName = null; 057 private KeplerLSID _workflowLSID = null; 058 private Date _startDate = null; 059 private Long _duration = null; 060 private Integer _execId = null; 061 private Map<Integer, String> _errorMsgs = new HashMap<Integer, String>(); 062 private String _hostId = null; 063 private String _annotation = null; 064 private String _moduleDependencies = null; 065 private String _type = null; 066 private Map<NamedOntClass, String> _tagsList = new HashMap<NamedOntClass, String>(); 067 068 //not required to create run, but used for KAR download: 069 private KeplerLSID _karLSID = null; 070 private String _karFileName = null; 071 private Long _karFileSize = null; 072 073 private boolean _malformed = false; 074 075 public WorkflowRunBuilder(){ 076 } 077 078 public void addRunProperty(String name, String value, boolean subproperty){ 079 try{ 080 081 if (RunAttribute.isValid(name)){ 082 if (name.equals(RunAttribute.ANNOTATION.toString())){ 083 setAnnotation(value); 084 } 085 else if(name.equals(RunAttribute.DURATION.toString())){ 086 setDuration(value); 087 } 088 else if (name.matches(RunAttribute.ERROR.toString()+"\\d*")){ 089 addError(name, value); 090 } 091 else if (name.equals(RunAttribute.EXECID.toString())){ 092 setExecId(value); 093 } 094 else if (name.equals(RunAttribute.EXECLSID.toString())){ 095 setExecLSID(value); 096 } 097 else if (name.equals(RunAttribute.HOSTID.toString())){ 098 setHostId(value); 099 } 100 else if (name.equals(RunAttribute.MODULEDEPENDENCIES.toString())){ 101 setModuleDependencies(value); 102 } 103 else if (name.equals(RunAttribute.REFERRALLIST.toString())){ 104 setReferralList(value); 105 } 106 else if (name.matches(RunAttribute.SEMANTICTYPE.toString()+"\\d*")){ 107 if (subproperty){ 108 addTag(value, WorkflowRun.TAG_TYPE_WORKFLOW.toString()); 109 } 110 else{ 111 addTag(value, WorkflowRun.TAG_TYPE_RUN.toString()); 112 } 113 } 114 else if (name.equals(RunAttribute.STARTTIME.toString())){ 115 setStartDate(value); 116 } 117 else if (name.equals(RunAttribute.TYPE.toString())){ 118 setType(value); 119 } 120 else if (name.equals(RunAttribute.USER.toString())){ 121 setUser(value); 122 } 123 else if (name.equals(RunAttribute.WORKFLOWLSID.toString())){ 124 setWorkflowLSID(value); 125 } 126 else if (name.equals(RunAttribute.WORKFLOWNAME.toString())){ 127 setWorkflowName(value); 128 } 129 } 130 else{ 131 setMalformed(true); 132 log.error("ERROR WorkflowRunBuilder.addRunProperty " + 133 "invalid WorkflowRun attribute:" + name); 134 } 135 }catch (Exception e){ 136 setMalformed(true); 137 log.error("ERROR WorkflowRunBuilder.addRunProperty " + 138 "error trying to deal with :" + name + " value:" + value); 139 } 140 } 141 142 public void setExecLSID(String execLSIDString) { 143 try { 144 KeplerLSID execLSID = new KeplerLSID(execLSIDString); 145 _execLSID = execLSID; 146 } catch (Exception e) { 147 setMalformed(true); 148 log.error("Couldn't create LSID from execLSIDString:" + execLSIDString); 149 } 150 } 151 152 public void setKARLSID(String karLSIDString) throws Exception { 153 try { 154 KeplerLSID karLSID = new KeplerLSID(karLSIDString); 155 _karLSID = karLSID; 156 } catch (Exception e) { 157 log.error("Couldn't create LSID from karLSIDString:" + karLSIDString); 158 throw new Exception(e); 159 } 160 } 161 162 public KeplerLSID getKARLSID(){ 163 return _karLSID; 164 } 165 166 public void setKARFileName(String karFileName) { 167 _karFileName = karFileName; 168 } 169 170 public String getKARFileName() { 171 return _karFileName; 172 } 173 174 public void setKARFileSize(String karFileSize) 175 throws Exception{ 176 try{ 177 _karFileSize = new Long(karFileSize); 178 } 179 catch(NumberFormatException nfe){ 180 log.error("NumberFormatException. Couldn't " + 181 "create Long karFileSize from String:" + karFileSize); 182 throw new Exception(nfe); 183 } 184 } 185 186 public Long getKARFileSize() { 187 return _karFileSize; 188 } 189 190 /** 191 * @param referralList (i.e. derivedFrom) 192 */ 193 public void setReferralList(String referralList) { 194 _referralList = referralList; 195 } 196 197 public void setUser(String user) { 198 _user = user; 199 } 200 201 public void setWorkflowName(String workflowName) { 202 _workflowName = workflowName; 203 } 204 205 public void setWorkflowLSID(String workflowLSIDString) { 206 try{ 207 KeplerLSID workflowLSID = new KeplerLSID(workflowLSIDString); 208 _workflowLSID = workflowLSID; 209 } 210 catch(Exception e){ 211 setMalformed(true); 212 log.error("Couldn't create LSID from workflowLSIDString:" + workflowLSIDString); 213 } 214 } 215 216 public void setStartDate(String startDateString) { 217 try { 218 Date startDate = WorkflowRunUtil.formatStringFromISO8601(startDateString); 219 _startDate = startDate; 220 } catch (Exception e) { 221 setMalformed(true); 222 log.error("Couldn't create Date from startDateString:" + startDateString); 223 } 224 } 225 226 public void setDuration(String durationString) { 227 try{ 228 Long duration = new Long(durationString); 229 _duration = duration; 230 } catch (NumberFormatException nfe){ 231 setMalformed(true); 232 log.error("Couldn't create Long from durationString:" + durationString); 233 } 234 } 235 236 public void setExecId(String execIdString) { 237 try{ 238 Integer execId = Integer.parseInt(execIdString); 239 _execId = execId; 240 } 241 catch (NumberFormatException nfe){ 242 setMalformed(true); 243 log.error("Couldn't create Integer from execIdString:" + execIdString); 244 } 245 } 246 247 public void addError(String errorName, String errorString){ 248 String errNumStr = errorName.substring(5); 249 try { 250 Integer errNum = new Integer(errNumStr); 251 _errorMsgs.put(errNum, errorString); 252 } catch (NumberFormatException nfe) { 253 setMalformed(true); 254 log.error("Couldn't get Integer off end of errorName:" + errorName); 255 } 256 } 257 258 public void setHostId(String hostId) { 259 _hostId = hostId; 260 } 261 262 public void setAnnotation(String annotation) { 263 _annotation = annotation; 264 } 265 266 public void setModuleDependencies(String moduleDependencies) { 267 _moduleDependencies = moduleDependencies; 268 } 269 270 public void setType(String type) { 271 _type = type; 272 } 273 274 public void addTag(String tagURI, String type){ 275 boolean isRemovable = (WorkflowRun.TAG_TYPE_RUN).equals(type); 276 NamedOntClass cls = NamedOntClass.createNamedOntClassFromURI(tagURI); 277 cls.setRemovable(isRemovable); 278 if (!_tagsList.containsKey(cls)) { 279 _tagsList.put(cls, type); 280 } 281 } 282 283 public void setMalformed(boolean malformed){ 284 log.error("set malformed:" + malformed); 285 _malformed = malformed; 286 } 287 288 public boolean getMalformed(){ 289 return _malformed; 290 } 291 292 public KeplerLSID getExecLSID() { 293 return _execLSID; 294 } 295 296 /** 297 * Attempt to create a WorkflowRun from this WorkflowRunBuilder 298 * @return WorkflowRun, or null if error. 299 */ 300 public WorkflowRun createWorkflowRun(){ 301 302 if (getMalformed()){ 303 log.error("was marked malformed, unable to create WorkflowRun"); 304 return null; 305 } 306 307 try { 308 WorkflowRun run = new WorkflowRun(_execLSID, _referralList, _user, _workflowName, 309 _workflowLSID, _startDate, _duration, _execId, _errorMsgs, _hostId, _annotation, 310 _moduleDependencies, _type, _tagsList); 311 return run; 312 } catch (Exception e) { 313 log.error("Error constructing run: " + e.getMessage()); 314 return null; 315 } 316 } 317 318}