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