
de.tsl2.nano.codegen.GeneratorUtility Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tsl2.nano.generator Show documentation
Show all versions of tsl2.nano.generator Show documentation
velocity template generator through classes or dom
package de.tsl2.nano.codegen;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import de.tsl2.nano.core.cls.BeanAttribute;
import de.tsl2.nano.core.cls.BeanClass;
import de.tsl2.nano.core.cls.CallingPath;
import de.tsl2.nano.core.util.CUtil;
import de.tsl2.nano.core.util.CollectionUtil;
import de.tsl2.nano.core.util.DateUtil;
import de.tsl2.nano.core.util.FormatUtil;
import de.tsl2.nano.core.util.MapUtil;
import de.tsl2.nano.core.util.ObjectUtil;
import de.tsl2.nano.core.util.StringUtil;
import de.tsl2.nano.core.util.Util;
/**
* helper class for {@linkplain ClassGenerator}
*
* @author ts 07.12.2008
* @version $Revision: 1.0 $
*
*/
public class GeneratorUtility {
Properties props = new Properties(System.getProperties());
private VelocityContext context;
/**
* Constructor
*/
protected GeneratorUtility() {
super();
}
/**
* firstToUpperCase
*
* @param string to convert
* @return converted string
*/
public String toFirstUpperCase(String string) {
return BeanAttribute.toFirstUpper(string);
}
/**
* firstToLowerCase
*
* @param string to convert
* @return converted string
*/
public String toFirstLowerCase(String string) {
return BeanAttribute.toFirstLower(string);
}
public String toLowerCase(String text) {
return text.toLowerCase();
}
public Class strings() {
return StringUtil.class;
}
public Class objects() {
return ObjectUtil.class;
}
public Class compareables() {
return CUtil.class;
}
public Class maps() {
return MapUtil.class;
}
public Class collections() {
return CollectionUtil.class;
}
public Class formats() {
return FormatUtil.class;
}
public Class dates() {
return DateUtil.class;
}
/**
* toUpperCase
*
* @param string to convert
* @return converted string
*/
public String toUpperCase(String text) {
return text.toUpperCase();
}
public void put(String key, Object value) {
props.put(key, value);
if (context != null)
context.put(key, value);
}
/**
* if the value was found, it will return the value. if not, an empty string
* will be returned to delete the variable-entry inside the template.
*
* if key starts with 'obj:', it will be interpreted as class name and an
* instance of that class will be returned if key starts with 'cls:', it will be
* interpreted as class name and that class will be returned if key starts with
* 'bls:', it will be interpreted as class name and that class will be returned -
* packed into BeanClass instance.
*
* @param key key
* @return value or empty string
*/
public Object get(String key) {
final Object value = props.get(key);
if (value == null) {
String cls = props.getProperty(key.substring(4));
if (key.startsWith("cls:"))
return clazz(cls != null ? cls : key.substring(4));
else if (key.startsWith("obj:"))
return object(cls != null ? cls : key.substring(4));
else if (key.startsWith("bls:"))
return beanclass(cls != null ? cls : key.substring(4));
}
return value != null ? value : key;
}
public String getFilePathFromPackage(String pck) {
return pck.replace('.', '/');
}
public String toValidName(String txt) {
return StringUtil.toValidName(txt);
}
/**
* @param cls class name having default constructor
* @return new instance of given class. this result object will be available as
* property 'obj'+simple-class-name
*/
public Object object(String cls) {
Object instance = BeanClass.createInstance(cls);
put("obj:" + instance.getClass().getSimpleName(), instance);
return instance;
}
/**
* @param cls class name
* @return beanclass of given class
*/
public BeanClass> beanclass(String cls) {
BeanClass> bc = BeanClass.createBeanClass(cls);
put("bls:" + bc.getClass().getSimpleName(), bc);
return bc;
}
/**
* @param cls class name
* @return class. this result object will be available as property
* 'cls'+simple-class-name
*/
public Class> clazz(String cls) {
Class> clazz = BeanClass.load(cls);
put("cls:" + clazz.getClass().getSimpleName(), clazz);
return clazz;
}
/**
* creates an enumeration string (list seperated with ',', e.g.: SATURDAY,
* SUNDAY).
*/
public String toString(Object obj) {
String t = StringUtil.toString(obj, -1);
return Util.isContainer(obj) ? t.substring(1, t.length() - 1) : t;
}
/** tries to evaluate the given expression. if expression is not invokable, returns false */
public Object evalOrNull(Object obj, String expression, Object...args) {
try {
return eval(obj, expression);
} catch (Exception ex) {
System.err.println("expression is not invokable: " + expression + " => " + ex.toString());
return null;
}
}
public Object eval(String expression) {
String objRef = StringUtil.substring(expression, null, ".");
return eval(get(objRef), expression);
}
public Object eval(Object obj, String expression, Object... args) {
Map margs = !Util.isEmpty(args) ? MapUtil.asIndexedMap(args) : (Map)props;
return CallingPath.eval(obj, expression, margs);
}
public void setContext(VelocityContext context) {
this.context = context;
}
// public void addAspectAround(String pointcut, Function replacementCallback) {
// }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy