package org.epics.archiverappliance.config;
import java.io.Serializable;
import java.util.HashSet;
import org.epics.archiverappliance.mgmt.policy.PolicyConfig;
import org.epics.archiverappliance.mgmt.policy.PolicyConfig.SamplingMethod;
/**
* Various options that the user can specify for archiving a PV.
* @author mshankar
*
*/
public class UserSpecifiedSamplingParams implements Comparable<UserSpecifiedSamplingParams>, Serializable {
private static final long serialVersionUID = -3909878263344947887L;
public SamplingMethod userSpecifedsamplingMethod = SamplingMethod.MONITOR;
public float userSpecifedSamplingPeriod = PolicyConfig.DEFAULT_MONITOR_SAMPLING_PERIOD;
private boolean userOverrideParams = false;
private String controllingPV = null;
private String policyName = null;
private String[] archiveFields = new String[0];
private String[] aliases = new String[0];
private boolean skipAliasCheck = false;
private boolean usePVAccess = false;
private boolean skipCapacityPlanning = false;
public String getPolicyName() {
return policyName;
}
public void setPolicyName(String policyName) {
this.policyName = policyName;
}
public UserSpecifiedSamplingParams() {
userOverrideParams = false;
}
public void setUserSpecifedsamplingMethod(
SamplingMethod userSpecifedsamplingMethod) {
this.userSpecifedsamplingMethod = userSpecifedsamplingMethod;
}
public void setUserSpecifedSamplingPeriod(float userSpecifedSamplingPeriod) {
this.userSpecifedSamplingPeriod = userSpecifedSamplingPeriod;
}
public void setUserOverrideParams(boolean userOverrideParams) {
this.userOverrideParams = userOverrideParams;
}
public void setControllingPV(String controllingPV) {
this.controllingPV = controllingPV;
}
public UserSpecifiedSamplingParams(SamplingMethod userSpecifedsamplingMethod, float userSpecifedSamplingPeriod, String controllingPV, String policyName, boolean skipCapacityPlanning, boolean usePVAccess) {
this.userSpecifedsamplingMethod = userSpecifedsamplingMethod;
this.userSpecifedSamplingPeriod = userSpecifedSamplingPeriod;
this.controllingPV = controllingPV;
this.policyName = policyName;
userOverrideParams = true;
this.skipCapacityPlanning = skipCapacityPlanning;
this.usePVAccess = usePVAccess;
}
@Override
public int compareTo(UserSpecifiedSamplingParams other) {
if(this.userSpecifedsamplingMethod == other.userSpecifedsamplingMethod) {
if(this.userSpecifedSamplingPeriod < other.userSpecifedSamplingPeriod) {
return -1;
} else if(this.userSpecifedSamplingPeriod > other.userSpecifedSamplingPeriod) {
return 1;
} else {
return 0;
}
} else {
return this.userSpecifedsamplingMethod.compareTo(other.userSpecifedsamplingMethod);
}
}
public SamplingMethod getUserSpecifedsamplingMethod() {
return userSpecifedsamplingMethod;
}
public float getUserSpecifedSamplingPeriod() {
return userSpecifedSamplingPeriod;
}
public boolean isUserOverrideParams() {
return userOverrideParams;
}
public String getControllingPV() {
return controllingPV;
}
public String[] getArchiveFields() {
return archiveFields;
}
public void setArchiveFields(String[] archiveFields) {
if(archiveFields == null || archiveFields.length == 0) {
this.archiveFields = new String[0];
return;
}
HashSet<String> newFields = new HashSet<String>();
for(String fieldName : archiveFields) {
if(fieldName == null || fieldName.equals("")) continue;
if(fieldName.equals("VAL")) continue;
newFields.add(fieldName);
}
this.archiveFields = newFields.toArray(new String[0]);
}
public void addArchiveField(String fieldName) {
if(fieldName == null || fieldName.equals("")) return;
if(fieldName.equals("VAL")) return;
HashSet<String> newFields = new HashSet<String>();
if(this.archiveFields != null) {
for(String fieldBeingArchived : this.archiveFields) {
newFields.add(fieldBeingArchived);
}
}
newFields.add(fieldName);
this.archiveFields = newFields.toArray(new String[0]);
}
public boolean checkIfFieldAlreadySepcified(String fieldName) {
if(fieldName == null || fieldName.equals("")) return false;
if(fieldName.equals("VAL")) return true;
if(this.archiveFields != null) {
for(String fieldBeingArchived : this.archiveFields) {
if(fieldBeingArchived.equals(fieldName)) {
return true;
}
}
}
return false;
}
public boolean wereAnyFieldsSpecified() {
return this.archiveFields != null && this.archiveFields.length > 0;
}
public void addAlias(String aliasName) {
if(aliasName == null || aliasName.equals("")) return;
HashSet<String> newAliases = new HashSet<String>();
if(this.aliases != null) {
for(String alias : this.aliases) {
newAliases.add(alias);
}
}
newAliases.add(aliasName);
this.aliases = newAliases.toArray(new String[0]);
}
public String[] getAliases() {
return aliases;
}
public void setAliases(String[] aliases) {
this.aliases = aliases;
}
/**
* @return Should we skip checking .NAME to see if this PV is an alias
* Useful if you have a pCAS server that overloads the .NAME field for something else.
*/
public boolean isSkipAliasCheck() {
return skipAliasCheck;
}
/**
* @param skipAliasCheck the skipAliasCheck to set
*/
public void setSkipAliasCheck(boolean skipAliasCheck) {
this.skipAliasCheck = skipAliasCheck;
}
public boolean isUsePVAccess() {
return usePVAccess;
}
public void setUsePVAccess(boolean usePVAccess) {
this.usePVAccess = usePVAccess;
}
public boolean isSkipCapacityPlanning() {
return skipCapacityPlanning;
}
public void setSkipCapacityPlanning(boolean skipCapacityPlanning) {
this.skipCapacityPlanning = skipCapacityPlanning;
}
}