/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.domain.operation;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
/**
* Simple object that encapsulates the individual pieces of data that make up an operation job ID.
*
* <p>This class has some JPA annotations to allow it to be an entity ID specified via @IdClass.</p>
*
* @author John Mazzitelli
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@MappedSuperclass
public class JobId implements Serializable {
private static final long serialVersionUID = 1L;
private static final String JOB_ID_SEPARATOR = "_=_";
@Column(name = "JOB_NAME", nullable = false)
private String jobName;
@Column(name = "JOB_GROUP", nullable = false)
private String jobGroup;
public JobId(String jobName, String jobGroup) {
this.jobName = jobName;
this.jobGroup = jobGroup;
}
public JobId(String jobIdString) {
this(splitJobIdStringIntoParts(jobIdString));
}
protected JobId(String[] jobIdParts) {
this(jobIdParts[0], jobIdParts[1]);
}
//no args constructor for JAXB marshalling/unmarshalling
private JobId() {
}
/**
* The job name makes the job unique among all other jobs in the system.
*
* @return job name string
*/
public String getJobName() {
return jobName;
}
/**
* This class is designed as a read-only immutable, however, this protected method will allow you to subclass it to
* make it mutable.
*
* @param jobName
*/
protected void setJobName(String jobName) {
this.jobName = jobName;
}
/**
* The job group allows jobs to be grouped across an individual resource of group. The job group string is unique to
* a resource or group.
*
* @return the job's group string
*/
public String getJobGroup() {
return jobGroup;
}
/**
* This class is designed as a read-only immutable, however, this protected method will allow you to subclass it to
* make it mutable.
*
* @param jobGroup
*/
protected void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
}
/**
* Returns the single string that identifies the unique job ID.
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return joinPartsIntoJobIdString(jobName, jobGroup);
}
/**
* Returns the hash code of the string that is returned by {@link #toString()}.
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return toString().hashCode();
}
/**
* Compares the strings returned by {@link #toString()}, assuming <code>obj</code> is another {@link JobId}.
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if ((obj == null) || !(obj instanceof JobId)) {
return false;
}
return this.toString().equals(obj.toString());
}
protected static String[] splitJobIdStringIntoParts(String jobId) {
return jobId.split(JOB_ID_SEPARATOR);
}
protected static String joinPartsIntoJobIdString(String... parts) {
String jobIdString = parts[0];
for (int i = 1; i < parts.length; i++) {
jobIdString += JOB_ID_SEPARATOR + parts[i];
}
return jobIdString;
}
}