001 package tecgraf.openbus.opendreams;
002
003 import java.util.Arrays;
004 import java.util.HashMap;
005 import java.util.List;
006
007 import tecgraf.openbus.DRMAA.FileTransferMode;
008 import tecgraf.openbus.DRMAA.JobSubmissionState;
009 import tecgraf.openbus.DRMAA.JobTemplateImpl;
010
011 /**
012 * A classe <code>OpenDreamsJobTemplateImpl</code> implementa um
013 * <code>OpenDreamsJobTemplate</code>.
014 *
015 * Um job template do OpenDreams possui, além dos atributos default do job
016 * template, outros atributos que são específicos para execução de algoritmos ou
017 * fluxo de algoritmos no OpenDreams. Esses atributos adicionais são:
018 * <ul>
019 * <li>jobParameters: o conjunto de chave-valor que define os parâmetros dos
020 * algoritmos.
021 * </ul>
022 *
023 * @author Tecgraf PUC-Rio
024 *
025 */
026 public class OpenDreamsJobTemplateImpl extends OpenDreamsJobTemplate {
027
028 /** Mapa com os parâmetros para execução do job */
029 protected HashMap<String, String> jobParametersMap;
030
031 /**
032 * Construtor.
033 */
034 public OpenDreamsJobTemplateImpl() {
035 this.id = System.currentTimeMillis();
036 this.remoteCommand = "";
037 this.args = new String[0];
038 this.jobSubmissionState = JobSubmissionState.ACTIVE_STATE;
039 this.jobEnvironment = new String[0][0];
040 this.email = new String[0];
041 this.blockEmail = false;
042 this.transferFiles = new FileTransferMode(false,false,false);
043 this.jobParameters = new JobParameter[0];
044 this.jobParametersMap = new HashMap<String, String>();
045 this.jobCategory = "CSBase";
046 }
047
048 @Override
049 public boolean equals(Object o) {
050 if (o == null)
051 return false;
052 if (!OpenDreamsJobTemplateImpl.class.isInstance(o))
053 return false;
054 OpenDreamsJobTemplateImpl other = OpenDreamsJobTemplateImpl.class.cast(o);
055 return this.id == other.id;
056 }
057
058 @Override
059 public int hashCode() {
060 return (int) id;
061 }
062
063 @Override
064 public void _write(org.omg.CORBA.portable.OutputStream os) {
065 /* Passa os parâmetros que estão no mapa para a sequence */
066 this.jobParameters = new JobParameter[jobParametersMap.size()];
067 int i = 0;
068 for (String key : jobParametersMap.keySet()) {
069 this.jobParameters[i++] =
070 new JobParameterImpl(key, jobParametersMap.get(key));
071 }
072 /* Escreve os outros atributos da idl */
073 super._write(os);
074 }
075
076 @Override
077 public void _read(org.omg.CORBA.portable.InputStream is) {
078 /* Lê os outros atributos da idl */
079 super._read(is);
080 /* Coloca no mapa os parâmetros do job que estão na sequence*/
081 this.jobParametersMap = new HashMap<String, String>();
082 for (JobParameter jp : jobParameters) {
083 if (jp != null && jp.name != null)
084 this.jobParametersMap.put(jp.name, jp.value);
085 }
086 }
087
088 @Override
089 public void addJobParameter(String key, String value) {
090 this.jobParametersMap.put(key, value);
091 }
092
093 @Override
094 public String getJobParameter(String key) {
095 return this.jobParametersMap.get(key);
096 }
097
098 @Override
099 public JobParameter[] getJobParameters() {
100 return this.jobParameters;
101 }
102
103 @Override
104 public void setRemoteCommand(String remoteCommand) {
105 this.remoteCommand = remoteCommand;
106 }
107
108 @Override
109 public String getRemoteCommand() {
110 return this.remoteCommand;
111 }
112
113 @Override
114 public void setArgs(String[] args) {
115 this.args = args;
116 }
117
118 @Override
119 public String[] getArgs() {
120 return this.args;
121 }
122
123 @Override
124 public JobSubmissionState getJobSubmissionState() {
125 return this.jobSubmissionState;
126 }
127
128 @Override
129 public void setJobSubmissionState(JobSubmissionState state) {
130 this.jobSubmissionState = state;
131 }
132
133 @Override
134 public String getJobCategory() {
135 return this.jobCategory;
136 }
137
138 @Override
139 public void setJobCategory(String jobCategory) {
140 this.jobCategory = jobCategory;
141 }
142
143 @Override
144 public String[] getEmail() {
145 return this.email;
146 }
147
148 @Override
149 public void setEmail(String[] email) {
150 this.email = email;
151 }
152
153 @Override
154 public boolean getBlockEmail() {
155 return this.blockEmail;
156 }
157
158 @Override
159 public void setBlockEmail(boolean blockEmail) {
160 this.blockEmail = blockEmail;
161 }
162
163 @Override
164 public String getErrorPath() {
165 return this.errorPath;
166 }
167
168 @Override
169 public boolean getJoinFiles() {
170 return this.joinFiles;
171 }
172
173 @Override
174 public String getOutputPath() {
175 return this.outputPath;
176 }
177
178 @Override
179 public FileTransferMode getTransferFiles() {
180 return this.transferFiles;
181 }
182
183 @Override
184 public void setErrorPath(String errorPath) {
185 this.errorPath = errorPath;
186 }
187
188 @Override
189 public void setJoinFiles(boolean joinFiles) {
190 this.joinFiles = joinFiles;
191 }
192
193 @Override
194 public void setOutputPath(String outputPath) {
195 this.outputPath = outputPath;
196 }
197
198 @Override
199 public void setTransferFiles(FileTransferMode transferFiles) {
200 this.transferFiles = transferFiles;
201 }
202
203 @Override
204 public String[] attributeNames() {
205 List<String> allAttributes = Arrays.asList(JobTemplateImpl.getAttributeNames());
206 allAttributes.add("job_parameters");
207 allAttributes.add("job_description");
208 allAttributes.add("job_priority");
209 return allAttributes.toArray(new String[0]);
210 }
211
212 @Override
213 public String getJobDescription() {
214 return this.jobDescription;
215 }
216
217 @Override
218 public short getJobPriority() {
219 return this.jobPriority;
220 }
221
222 @Override
223 public void setJobDescription(String jobDescription) {
224 this.jobDescription = jobDescription;
225 }
226
227 @Override
228 public void setJobPriority(short jobPriority) {
229 this.jobPriority = jobPriority;
230 }
231
232 @Override
233 public int getNumberOfProcesses() {
234 return this.numberOfProcesses;
235 }
236
237 @Override
238 public void setNumberOfProcesses(int numberOfProcesses) {
239 this.numberOfProcesses = numberOfProcesses;
240 }
241 }
242
243