1 16 17 package org.pentaho.plugin.shark; 18 19 import java.util.HashMap ; 20 import java.util.Iterator ; 21 import java.util.Set ; 22 23 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 import org.pentaho.core.system.PentahoSystem; 26 import org.pentaho.messages.Messages; 27 import org.pentaho.plugin.ComponentBase; 28 import org.pentaho.repository.HibernateUtil; 29 30 36 public class SharkWorkflowComponent extends ComponentBase { 37 38 41 42 private static final String PACKAGE_NAME = "package-name"; 44 private static final String PROCESS_NAME = "process-name"; 46 private static final String NEW_INSTANCE = "new-instance"; 48 private static final long serialVersionUID = -4522797650756773831L; 49 50 public Log getLogger() { 51 return LogFactory.getLog(SharkWorkflowComponent.class); 52 } 53 54 protected boolean validateSystemSettings() { 55 return true; 57 } 58 59 public boolean validateAction() { 60 61 if (!isDefinedInput(PACKAGE_NAME)) { 62 error(Messages.getErrorString("SharkWorkflow.ERROR_0001_PACKAGE_NOT_DEFINED")); return false; 64 } 65 if (!isDefinedInput(PROCESS_NAME)) { 66 error(Messages.getErrorString("SharkWorkflow.ERROR_0002_PROCESS_NOT_DEFINED")); return false; 68 } 69 70 return true; 71 } 72 73 public boolean executeAction() { 74 75 String packageName = getInputStringValue(PACKAGE_NAME); 76 String processName = getInputStringValue(PROCESS_NAME); 77 78 if (debug) 79 debug(Messages.getString("SharkWorkflow.DEBUG_PACKAGE_AND_PROCESS", packageName, processName)); 82 84 SharkManager shark = SharkManager.getInstance(getSession()); 85 86 boolean running = false; 87 int latestVersion = -1; 88 String processId = null; 89 90 String availableProcessNames[] = shark.processesToStart(); 91 for (int i = 0; i < availableProcessNames.length; i++) { 92 if (debug) 93 debug(Messages.getString("SharkWorkflow.DEBUG_AVAILABLE_PROCESS", availableProcessNames[i])); if ((availableProcessNames[i].indexOf(packageName) == 0) && (availableProcessNames[i].endsWith(processName))) { 95 try { 96 int idx1 = availableProcessNames[i].indexOf("#"); int idx2 = availableProcessNames[i].indexOf("#", idx1 + 1); if (debug) 99 debug(Messages.getString("SharkWorkflow.DEBUG_AVAILABLE_PROCESS_VERSION", availableProcessNames[i].substring(idx1 + 1, idx2))); int thisVersion = new Integer (availableProcessNames[i].substring(idx1 + 1, idx2)).intValue(); 101 if (thisVersion > latestVersion) { 102 latestVersion = thisVersion; 103 } 104 processId = availableProcessNames[i]; 105 running = true; 106 } catch (Exception e) { 107 } 108 } 109 } 110 111 if (!running || latestVersion == -1 || processId == null) { 112 if (!running) 113 error(Messages.getErrorString("SharkWorkflow.ERROR_0003_PROCESS_NOT_RUNNING", packageName, processName)); if (processId == null) 115 error(Messages.getErrorString("SharkWorkflow.ERROR_0004_INVALID_PROCESS_ID", packageName, processName)); if (latestVersion == -1) 117 error(Messages.getErrorString("SharkWorkflow.ERROR_0005_INVALID_VERSION_NUMBER", packageName, processName)); return false; 119 } 120 121 HashMap processParams = new HashMap (); 122 boolean newInstance = getInputBooleanValue(NEW_INSTANCE, false); 123 String instanceId; 124 if (newInstance) { 125 HashMap parameters = new HashMap (); 126 127 Set parameterNames = getInputNames(); 128 Iterator parameterNamesIterator = parameterNames.iterator(); 129 String parameterName; 130 Object parameterValue; 131 while (parameterNamesIterator.hasNext()) { 132 parameterName = (String ) parameterNamesIterator.next(); 133 if (!parameterName.equals(PACKAGE_NAME) && !parameterName.equals(PROCESS_NAME)) { 134 parameterValue = getInputValue(parameterName); 135 parameters.put(parameterName, parameterValue); 136 } 137 } 138 139 instanceId = createNewInstance(true, parameters, true); 141 } else { 143 instanceId = getInstanceId(); 144 } 145 processParams.put("Pentaho_Solution_Id_Param", getSolutionName()); processParams.put("Pentaho_Instance_Id_Param", instanceId); Set parameterNames = getInputNames(); 148 Iterator parameterNamesIterator = parameterNames.iterator(); 149 String parameterName; 150 Object parameterValue; 151 while (parameterNamesIterator.hasNext()) { 152 parameterName = (String ) parameterNamesIterator.next(); 153 if (!parameterName.equals(PACKAGE_NAME) && !parameterName.equals(PROCESS_NAME)) { 154 parameterValue = getInputValue(parameterName); 155 if (debug) 156 debug(Messages.getString("SharkWorkflow.DEBUG_ADDING_PARAMETER", parameterName, parameterValue.toString())); processParams.put(parameterName, parameterValue); 158 } 159 } 160 161 try { 162 String userId = PentahoSystem.getSystemSetting("shark/shark.xml", "workflow-shark/workflow-shark-user-id", null); String password = PentahoSystem.getSystemSetting("shark/shark.xml", "workflow-shark/workflow-shark-password", null); if (debug) 165 debug(Messages.getString("SharkWorkflow.DEBUG_STARTING_PROCESS", processId)); try { 167 HibernateUtil.commitTransaction(); 168 shark.startProcess(processId, userId, password, processParams); 169 } finally { 170 HibernateUtil.beginTransaction(); 171 } 172 } catch (Exception e) { 173 error(Messages.getErrorString("SharkWorkflow.ERROR_0006_ERROR_STARTING_PROCESS", processId), e); return false; 175 } 176 177 return true; 178 179 } 180 181 186 public void done() { 187 189 } 190 191 196 public boolean init() { 197 return true; 199 } 200 201 } 202 | Popular Tags |