package com.intuit.tank.project;
/*
* #%L
* Intuit Tank data model
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.hibernate.envers.Audited;
import com.intuit.tank.vm.settings.TankConfig;
import com.intuit.tank.vm.settings.VmInstanceType;
import com.intuit.tank.vm.vmManager.JobUtil;
@Entity
@Audited
@Table(name = "job_configuration")
public class JobConfiguration extends BaseJob {
private static final long serialVersionUID = 1L;
@OneToOne
private Workload workload;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_configuration_to_job_notification", joinColumns = @JoinColumn(name = "job_configuration_id"),
inverseJoinColumns = @JoinColumn(name = "notification_id"))
private Set<JobNotification> notifications = new HashSet<JobNotification>();
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "job_configuration_to_data_file", joinColumns = @JoinColumn(name = "job_configuration_id"))
@Column(name = "data_file_id")
private Set<Integer> dataFileIds = new HashSet<Integer>();
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_configuration_to_job_regions", joinColumns = @JoinColumn(name = "job_configuration_id"),
inverseJoinColumns = @JoinColumn(name = "region_id"))
private Set<JobRegion> jobRegions = new HashSet<JobRegion>();
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name = "name")
@Column(name = "value")
@CollectionTable(name = "job_config_varibles", joinColumns = @JoinColumn(name = "job_configuration_id"))
Map<String, String> variables = new HashMap<String, String>(); // maps from attribute name to value
/**
*
*/
public JobConfiguration() {
super();
}
public void readConfig() {
List<VmInstanceType> types = new TankConfig().getVmManagerConfig().getInstanceTypes();
for (VmInstanceType type : types) {
if (type.isDefault()) {
setVmInstanceType( type.getName());
setNumUsersPerAgent(type.getUsers());
}
}
}
/**
* @return the workload
*/
public Workload getWorkload() {
return workload;
}
/**
* @param workload
* the workload to set
*/
protected void setWorkload(Workload workload) {
this.workload = workload;
}
/**
* @param workload
* the workload to set
*/
public void setParent(Workload workload) {
this.workload = workload;
}
/**
* @return the notifications
*/
public Set<JobNotification> getNotifications() {
return notifications;
}
/**
* @param notifications
* the notifications to set
*/
public void setNotifications(Set<JobNotification> notifications) {
this.notifications = notifications;
}
/**
* @return the jobRegions
*/
public Set<JobRegion> getJobRegions() {
return jobRegions;
}
/**
* @param jobRegions
* the jobRegions to set
*/
public void setJobRegions(Set<JobRegion> jobRegions) {
this.jobRegions = jobRegions;
}
/**
* @return the dataFileIds
*/
public Set<Integer> getDataFileIds() {
return dataFileIds;
}
/**
* @param dataFileIds
* the dataFileIds to set
*/
public void setDataFileIds(Set<Integer> dataFileIds) {
this.dataFileIds = dataFileIds;
}
/**
* calculates total number of virtual users by summing the regions.
*
* @return
*/
public int getTotalVirtualUsers() {
return JobUtil.calculateTotalVirtualUsers(jobRegions);
}
/**
* @return the variables
*/
public Map<String, String> getVariables() {
if (variables == null) {
variables = new HashMap<String, String>();
}
return variables;
}
/**
* @param variables
* the variables to set
*/
public void setVariables(Map<String, String> variables) {
this.variables = variables;
}
/**
* @{inheritDoc
*/
@Override
public String toString() {
return new ToStringBuilder(this).append("id", getId())
.toString();
}
/**
* @{inheritDoc
*/
@Override
public boolean equals(Object obj) {
if (!(obj instanceof JobConfiguration)) {
return false;
}
JobConfiguration o = (JobConfiguration) obj;
return new EqualsBuilder().append(o.getId(), getId()).isEquals();
}
/**
* @{inheritDoc
*/
@Override
public int hashCode() {
return new HashCodeBuilder(29, 45).append(getId()).toHashCode();
}
}