package org.dcm4chee.archive.conf;
import java.io.Serializable;
import org.dcm4che3.conf.core.api.ConfigurableClass;
import org.dcm4che3.conf.core.api.ConfigurableProperty;
import org.dcm4che3.conf.core.api.LDAP;
import org.dcm4che3.data.Code;
@LDAP(objectClasses = "dcmArchivingRule", distinguishingField = "cn")
@ConfigurableClass
public final class ArchivingRule implements Serializable {
private static final long serialVersionUID = -9026606766186878147L;
@ConfigurableProperty(name = "cn")
private String commonName;
@LDAP(noContainerNode = true)
@ConfigurableProperty
private Condition condition = new Condition();
@ConfigurableProperty(name = "dcmDelayAfterInstanceStored")
private int delayAfterInstanceStored;
@ConfigurableProperty(name = "dcmStorageSystemGroupID")
private String[] storageSystemGroupIDs;
@ConfigurableProperty(name = "dcmExternalSystemsDeviceName")
private String[] externalSystemsDeviceName;
@ConfigurableProperty(name = "dcmDelayReasonCode")
private Code delayReasonCode;
public String getCommonName() {
return commonName;
}
public void setCommonName(String commonName) {
this.commonName = commonName;
}
public String[] getStorageSystemGroupIDs() {
return storageSystemGroupIDs;
}
public void setStorageSystemGroupIDs(String ... storageSystemGroupIDs) {
this.storageSystemGroupIDs = storageSystemGroupIDs;
}
public String[] getExternalSystemsDeviceName() {
return externalSystemsDeviceName;
}
public void setExternalSystemsDeviceName(String[] externalSystemsDeviceName) {
this.externalSystemsDeviceName = externalSystemsDeviceName;
}
public int getDelayAfterInstanceStored() {
return delayAfterInstanceStored;
}
public void setDelayAfterInstanceStored(int delayAfterInstanceStored) {
this.delayAfterInstanceStored = delayAfterInstanceStored;
}
public Code getDelayReasonCode() {
return delayReasonCode;
}
public void setDelayReasonCode(Code delayReasonCode) {
this.delayReasonCode = delayReasonCode;
}
public Condition getCondition() {
return condition;
}
public void setCondition(Condition condition) {
this.condition = condition != null ? condition : new Condition();
}
public boolean matchesCondition(String deviceName, String aeTitle,
String institutionName, String institutionalDepartmentName,
String modality) {
return condition.matches(deviceName, aeTitle, institutionName,
institutionalDepartmentName, modality);
}
public String[] getDeviceNames() {
return condition.getDeviceNames();
}
public void setDeviceNames(String[] deviceNames) {
condition.setDeviceNames(deviceNames);
}
public String[] getAeTitles() {
return condition.getAeTitles();
}
public void setAeTitles(String[] aeTitles) {
condition.setAeTitles(aeTitles);
}
public String[] getInstitutionNames() {
return condition.getInstitutionNames();
}
public void setInstitutionNames(String[] institutionNames) {
condition.setInstitutionNames(institutionNames);
}
public String[] getInstitutionalDepartmentNames() {
return condition.getInstitutionalDepartmentNames();
}
public void setInstitutionalDepartmentNames(
String[] institutionalDepartmentNames) {
condition.setInstitutionalDepartmentNames(institutionalDepartmentNames);
}
public String[] getModalities() {
return condition.getModalities();
}
public void setModalities(String[] modalities) {
condition.setModalities(modalities);
}
@ConfigurableClass
public static class Condition implements Serializable {
private static final long serialVersionUID = 1986950374484515200L;
@ConfigurableProperty(name = "dcmDeviceName")
private String[] deviceNames;
@ConfigurableProperty(name = "dcmAETitle")
private String[] aeTitles;
@ConfigurableProperty(name = "dicomInstitutionName")
private String[] institutionNames;
@ConfigurableProperty(name = "dicomInstitutionalDepartmentName")
private String[] institutionalDepartmentNames;
@ConfigurableProperty(name = "dcmModality")
private String[] modalities;
public Condition() {
}
public String[] getDeviceNames() {
return deviceNames;
}
public void setDeviceNames(String[] deviceNames) {
this.deviceNames = deviceNames;
}
public String[] getAeTitles() {
return aeTitles;
}
public void setAeTitles(String[] aeTitles) {
this.aeTitles = aeTitles;
}
public String[] getInstitutionNames() {
return institutionNames;
}
public void setInstitutionNames(String[] institutionNames) {
this.institutionNames = institutionNames;
}
public String[] getInstitutionalDepartmentNames() {
return institutionalDepartmentNames;
}
public void setInstitutionalDepartmentNames(
String[] institutionalDepartmenNames) {
this.institutionalDepartmentNames = institutionalDepartmenNames;
}
public String[] getModalities() {
return modalities;
}
public void setModalities(String[] modalities) {
this.modalities = modalities;
}
public boolean matches(String deviceName, String aeTitle,
String institutionName, String institutionalDepartmenName,
String modality) {
return isEmptyOrContains(this.deviceNames, deviceName)
&& isEmptyOrContains(this.aeTitles, aeTitle)
&& isEmptyOrContains(this.institutionNames, institutionName)
&& isEmptyOrContains(this.institutionalDepartmentNames,
institutionalDepartmenName)
&& isEmptyOrContains(this.modalities, modality);
}
}
private static boolean isEmptyOrContains(Object[] a, Object o) {
if (o == null || a == null || a.length == 0)
return true;
for (int i = 0; i < a.length; i++)
if (o.equals(a[i]))
return true;
return false;
}
}