package org.whole.examples.helpers;
import java.io.File;
import java.io.FileNotFoundException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jdt.core.IJavaProject;
import org.whole.lang.bindings.BindingManagerFactory;
import org.whole.lang.codebase.FilePersistenceProvider;
import org.whole.lang.codebase.IFilePersistenceProvider;
import org.whole.lang.codebase.IPersistenceProvider;
import org.whole.lang.java.codebase.JDTJavaSourcePersistenceKit;
import org.whole.lang.java.codebase.JavaBuilderPersistenceKit;
import org.whole.lang.java.codebase.JavaClassTemplateFactory;
import org.whole.lang.java.codebase.JavaSourceTemplateFactory;
import org.whole.lang.java.model.InterfaceDeclaration;
import org.whole.lang.java.model.MethodDeclaration;
import org.whole.lang.java.model.Type;
import org.whole.lang.java.reflect.JavaEntityDescriptorEnum;
import org.whole.lang.matchers.Matcher;
import org.whole.lang.model.IEntity;
import org.whole.lang.operations.PrettyPrinterOperation;
import org.whole.lang.properties.codebase.PropertiesTextPersistenceKit;
import org.whole.lang.properties.codebase.PropertiesXmlPersistenceKit;
import org.whole.lang.text.codebase.TextSourcePersistenceKit;
import org.whole.lang.util.StringUtils;
import org.whole.lang.xml.codebase.XmlBuilderPersistenceKit;
import org.whole.lang.xml.codebase.XmlSourcePersistenceKit;
import org.whole.lang.xsd.codebase.XsdPersistenceKit;
import org.whole.lang.xsd.codebase.XsiPersistenceKit;
public class Helpers {
public static boolean isAbstractFactory(InterfaceDeclaration entity) {
return entity.getName().getValue().endsWith("Factory");
}
public static boolean isFactoryMethod(MethodDeclaration entity) {
if (!Matcher.matchImpl(JavaEntityDescriptorEnum.SimpleName, entity.getName().wGetAdaptee(false)))
return false;
String methodName = entity.getName().getValue();
Type returnType = entity.getReturnType();
return (methodName.startsWith("create") || methodName.startsWith("new")) &&
!returnType.wGetEntityDescriptor().equals(JavaEntityDescriptorEnum.PrimitiveType) ;
}
public static String toClassName(String factoryMethodName) {
if (factoryMethodName.startsWith("create"))
return factoryMethodName.substring(6);
else
return factoryMethodName.substring(3);
}
public static String toGetterName(String name) {
return "get"+StringUtils.toUpperCap(name);
}
public static String toSetterName(String name) {
return "set"+StringUtils.toUpperCap(name);
}
public static String toFluentSetterName(String name) {
return "with"+StringUtils.toUpperCap(name);
}
public static IEntity loadJavaClass(String className) throws Exception {
return new JavaClassTemplateFactory(className).create();
}
public static IEntity loadJavaSource(String className, IJavaProject javaProject) throws Exception {
return new JavaSourceTemplateFactory(className, javaProject).create();
}
public static IEntity loadJava(String fileName) throws Exception {
return JDTJavaSourcePersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveJava(IEntity model, String fileName) throws Exception {
JDTJavaSourcePersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadJavaBuilder(String fileName) throws Exception {
return JavaBuilderPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveJavaBuilder(IEntity model, String fileName) throws Exception {
JavaBuilderPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadXml(String fileName) throws Exception {
return XmlSourcePersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveXml(IEntity model, String fileName) throws Exception {
XmlSourcePersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadXmlBuilder(String fileName) throws Exception {
return XmlBuilderPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveXmlBuilder(IEntity model, String fileName) throws Exception {
XmlBuilderPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadXsi(String fileName) throws Exception {
return XsiPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveXsi(IEntity model, String fileName) throws Exception {
XsiPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadXsd(String fileName) throws Exception {
return XsdPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveXsd(IEntity model, String fileName) throws Exception {
XsdPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadString(String fileName) throws Exception {
String text = PrettyPrinterOperation.toPrettyPrintString(
loadText(fileName));
return BindingManagerFactory.instance.createValue(text);
}
public static IEntity loadText(String fileName) throws Exception {
return TextSourcePersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveText(IEntity model, String fileName) throws Exception {
TextSourcePersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadProperties(String fileName) throws Exception {
return PropertiesTextPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveProperties(IEntity model, String fileName) throws Exception {
PropertiesTextPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IEntity loadXmlProperties(String fileName) throws Exception {
return PropertiesXmlPersistenceKit.instance().readModel(
createFilePersistenceProvider(fileName));
}
public static void saveXmlProperties(IEntity model, String fileName) throws Exception {
PropertiesXmlPersistenceKit.instance().writeModel(model,
createFilePersistenceProvider(fileName));
}
public static IPersistenceProvider createFilePersistenceProvider(String fileName) throws FileNotFoundException {
IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(fileName);
if (resource instanceof IFile)
return new IFilePersistenceProvider((IFile) resource);
else
return new FilePersistenceProvider(new File(fileName));
//TODO also from ReflectionFactory.getPlatformClassLoader().getResourceAsStream(fileName)
}
}