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 = new TStamp().toLong();
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 String[0][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        }
053        if (!OpenDreamsJobTemplateImpl.class.isInstance(o)) {
054          return false;
055        }
056        OpenDreamsJobTemplateImpl other = OpenDreamsJobTemplateImpl.class.cast(o);
057        return this.id == other.id;
058      }
059    
060      @Override
061      public int hashCode() {
062        return (int) id;
063      }
064    
065      @Override
066      public String[] attributeNames() {
067        List<String> allAttributes =
068          Arrays.asList(JobTemplateImpl.getAttributeNames());
069        allAttributes.add("job_parameters");
070        allAttributes.add("job_description");
071        allAttributes.add("job_priority");
072        return allAttributes.toArray(new String[0]);
073      }
074    }