de.invation.code.toval.misc.soabase.SOABaseProperties Maven / Gradle / Ivy
package de.invation.code.toval.misc.soabase;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
import de.invation.code.toval.misc.ArrayUtils;
import de.invation.code.toval.misc.StringUtils;
import de.invation.code.toval.properties.AbstractProperties;
import de.invation.code.toval.properties.PropertyException;
import de.invation.code.toval.validate.Validate;
public class SOABaseProperties extends AbstractProperties {
//------- Property setting -------------------------------------------------------------
private void setProperty(SOABaseProperty contextProperty, Object value) {
props.setProperty(contextProperty.toString(), value.toString());
}
private String getProperty(SOABaseProperty contextProperty) {
return props.getProperty(contextProperty.toString());
}
//-- Properties class
public void setPropertiesClass(Class> propertiesClass) {
Validate.notNull(propertiesClass);
setProperty(SOABaseProperty.PROPERTIES_CLASS, propertiesClass.getName());
}
public Class> getPropertiesClass() throws PropertyException {
String propertyValue = getProperty(SOABaseProperty.PROPERTIES_CLASS);
if (propertyValue == null) {
throw new PropertyException(SOABaseProperty.PROPERTIES_CLASS, propertyValue);
}
Class> propertiesClass = null;
try {
propertiesClass = ClassLoader.getSystemClassLoader().loadClass(propertyValue);
} catch (Exception e) {
throw new PropertyException(SOABaseProperty.PROPERTIES_CLASS, "Cannot extract properties class.\nReason: " + e.getMessage());
}
return propertiesClass;
}
public static SOABaseProperties loadPropertiesFromFile(File file) throws Exception {
Validate.notNull(file);
Validate.noDirectory(file);
Validate.exists(file);
SOABaseProperties testProperties = new SOABaseProperties();
testProperties.load(file.getAbsolutePath());
if (testProperties.getPropertiesClass().equals(testProperties.getClass())) {
return testProperties;
}
// Try to get constructor
Constructor> constructor = null;
try {
constructor = testProperties.getPropertiesClass().getConstructor();
} catch (SecurityException e) {
e.printStackTrace();
throw new Exception("Cannot extract SOABase constructor.\nReason: " + e.getMessage());
} catch (NoSuchMethodException e) {
e.printStackTrace();
throw new Exception("Cannot extract SOABase constructor.\nReason: " + e.getMessage());
}
Object newInstance = null;
try {
newInstance = constructor.newInstance();
} catch (IllegalArgumentException e) {
e.printStackTrace();
throw new Exception("Cannot create SOABase instance.\nReason: " + e.getMessage());
} catch (InstantiationException e) {
e.printStackTrace();
throw new Exception("Cannot create SOABase instance.\nReason: " + e.getMessage());
} catch (IllegalAccessException e) {
e.printStackTrace();
throw new Exception("Cannot create SOABase instance.\nReason: " + e.getMessage());
} catch (InvocationTargetException e) {
e.printStackTrace();
throw new Exception("Cannot create SOABase instance.\nReason: " + e.getMessage());
}
SOABaseProperties properties = (SOABaseProperties) newInstance;
properties.load(file.getAbsolutePath());
return properties;
}
//-- Base class
public void setBaseClass(Class> baseClass) {
Validate.notNull(baseClass);
setProperty(SOABaseProperty.BASE_CLASS, baseClass.getName());
}
public Class> getBaseClass() throws PropertyException {
String propertyValue = getProperty(SOABaseProperty.BASE_CLASS);
if (propertyValue == null) {
throw new PropertyException(SOABaseProperty.BASE_CLASS, propertyValue);
}
Class> baseClass = null;
try {
baseClass = ClassLoader.getSystemClassLoader().loadClass(propertyValue);
} catch (Exception e) {
throw new PropertyException(SOABaseProperty.BASE_CLASS, "Cannot extract base class.\nReason: " + e.getMessage());
}
return baseClass;
}
//-- Context name
public void setName(String name) {
Validate.notNull(name);
Validate.notEmpty(name);
setProperty(SOABaseProperty.NAME, name);
}
public String getName() throws PropertyException {
String propertyValue = getProperty(SOABaseProperty.NAME);
if (propertyValue == null) {
throw new PropertyException(SOABaseProperty.NAME, propertyValue);
}
return propertyValue;
}
//-- Subjects
public void setSubjects(Set subjects) {
Validate.notNull(subjects);
if (subjects.isEmpty()) {
return;
}
Validate.noNullElements(subjects);
setProperty(SOABaseProperty.SUBJECTS, ArrayUtils.toString(encapsulateValues(subjects)));
}
public Set getSubjects() {
Set result = new HashSet();
String propertyValue = getProperty(SOABaseProperty.SUBJECTS);
if (propertyValue == null) {
return result;
}
StringTokenizer subjectTokens = StringUtils.splitArrayString(propertyValue, String.valueOf(ArrayUtils.VALUE_SEPARATION));
while (subjectTokens.hasMoreTokens()) {
String nextToken = subjectTokens.nextToken();
result.add(nextToken.substring(1, nextToken.length() - 1));
}
return result;
}
//-- Objects
public void setObjects(Set objects) {
Validate.notNull(objects);
if (objects.isEmpty()) {
return;
}
Validate.noNullElements(objects);
setProperty(SOABaseProperty.OBJECTS, ArrayUtils.toString(encapsulateValues(objects)));
}
public Set getObjects() {
Set result = new HashSet();
String propertyValue = getProperty(SOABaseProperty.OBJECTS);
if (propertyValue == null) {
return result;
}
StringTokenizer subjectTokens = StringUtils.splitArrayString(propertyValue, String.valueOf(ArrayUtils.VALUE_SEPARATION));
while (subjectTokens.hasMoreTokens()) {
String nextToken = subjectTokens.nextToken();
result.add(nextToken.substring(1, nextToken.length() - 1));
}
return result;
}
//-- Activities
public void setActivities(Set transactions) {
Validate.notNull(transactions);
if (transactions.isEmpty()) {
return;
}
Validate.noNullElements(transactions);
setProperty(SOABaseProperty.ACTIVITIES, ArrayUtils.toString(encapsulateValues(transactions)));
}
public Set getActivities() {
Set result = new HashSet();
String propertyValue = getProperty(SOABaseProperty.ACTIVITIES);
if (propertyValue == null) {
return result;
}
StringTokenizer subjectTokens = StringUtils.splitArrayString(propertyValue, String.valueOf(ArrayUtils.VALUE_SEPARATION));
while (subjectTokens.hasMoreTokens()) {
String nextToken = subjectTokens.nextToken();
result.add(nextToken.substring(1, nextToken.length() - 1));
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy