package net.sf.minuteProject.application;
import java.io.File;
import java.util.Date;
import net.sf.minuteProject.configuration.bean.AbstractConfiguration;
import net.sf.minuteProject.configuration.bean.AbstractConfigurationRoot;
import net.sf.minuteProject.configuration.bean.Target;
import net.sf.minuteProject.configuration.bean.Template;
import net.sf.minuteProject.exception.MinuteProjectException;
//import net.sf.minuteProject.configuration.bean.file.Lines;
import net.sf.minuteProject.loader.implicitstructure.Implicitstructure;
import net.sf.minuteProject.loader.implicitstructure.ImplicitstructureHolder;
import net.sf.minuteProject.loader.implicitstructure.node.BaseStructure;
import net.sf.minuteProject.loader.implicitstructure.node.Lines;
import net.sf.minuteProject.loader.init.Init;
import net.sf.minuteProject.loader.init.InitHolder;
import net.sf.minuteProject.loader.init.node.Configuration;
import net.sf.minuteProject.loader.init.node.Definition;
import net.sf.minuteProject.loader.init.node.Targetlocation;
import net.sf.minuteProject.utils.ModelUtils;
import net.sf.minuteProject.utils.io.FileUtils;
import org.apache.log4j.Logger;
import org.apache.velocity.VelocityContext;
public class ImplicitStructureGenerator extends AbstractGenerator {
private static Logger logger = Logger.getLogger(ModelGenerator.class);
private ImplicitstructureHolder implicitstructureHolder;
private InitHolder initholder;
private File file;
private Target target;
private Lines lines;
public ImplicitStructureGenerator(String configurationFile) {
super(configurationFile);
resetTemplatePath();
}
public static void main(String args[]) throws Exception {
if (args.length < 1) {
System.exit(1);
}
ImplicitStructureGenerator implicitGenerator = new ImplicitStructureGenerator(args[0]);
implicitGenerator.init(args);
}
private void init(String args[]) throws Exception{
Date startDate = new Date();
logger.info("start time = "+new Date());
loadInit(args[0]);
loadDefinition(initholder);
loadTarget(initholder);
generate(initholder.getConfiguration().getTarget());
Date endDate = new Date();
logger.info("time taken : "+(endDate.getTime()-startDate.getTime())+ "ms.");
}
private void loadInit(String filename) throws Exception {
Init loader = new Init(filename);
initholder = loader.load();
}
private void loadTarget(InitHolder initholder) throws Exception {
Configuration configuration = initholder.getConfiguration();
if (configuration!=null) {
Targetlocation target = configuration.getTargetlocation();
if (target!=null) {
loadTarget (target);
}
}
}
private void loadDefinition(InitHolder initholder) throws Exception {
Configuration configuration = initholder.getConfiguration();
if (configuration!=null) {
Definition definition = configuration.getDefinition();
if (definition!=null) {
String filename = definition.getFilename();
String dir = definition.getDir();
loadDefinition (dir, filename);
}
}
}
private void loadTarget(Targetlocation initTarget) throws Exception {
target = populateTarget(initTarget);
loadTarget(initholder.getConfiguration(), target);
}
private void loadDefinition(String dir, String filename) throws Exception {
Implicitstructure loader = new Implicitstructure(dir, filename);
implicitstructureHolder = loader.load();
String location = implicitstructureHolder.getBaseStructure().getLocation();
// String separator = implicitstructureHolder.getBaseStructure().getSeparator();
if (location!=""){
file = new File(location);
if (!file.exists())
file = new File(dir+"/"+location);
// lines = FileUtils.getLines(file, separator);
}
}
private Target populateTarget (Targetlocation initTarget) {
Target target = new Target();
target.setDir(initTarget.getDir());
target.setFileName(initTarget.getFilename());
return target;
}
// public void loadTarget (AbstractConfigurationRoot abstractConfigurationRoot, Target target) throws Exception {
// loadConfiguration(abstractConfigurationRoot, getTargetConfigurationInputStream(abstractConfigurationRoot, target), GENERATOR_TARGET_RULES);
// complementWithTargetInfo(abstractConfigurationRoot, target);
// }
@Override
public AbstractConfiguration getConfigurationRoot() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getConfigurationRulesFile() {
// TODO Auto-generated method stub
return null;
}
public String getPropertyConfigurationRulesFile() {
return null;
}
public void generate(Template template) throws MinuteProjectException {
if (template.getScopeSpecificValue().equals("document"))
generateDocumentSpecific(template);
// if (template.getScopeSpecificValue().equals("line"))
// generateBeanSpecific(template);
}
private void generateDocumentSpecific (Template template) throws MinuteProjectException {
BaseStructure baseStructure = implicitstructureHolder.getBaseStructure();
writeTemplateResult(baseStructure, template);
}
protected void putStandardContextObject(VelocityContext context) {
super.putStandardContextObject(context);
FileUtils fileUtils = new FileUtils();
context.put("file", file);
context.put("fileUtils", new FileUtils());
context.put("lines", fileUtils.getLines( file, implicitstructureHolder.getBaseStructure().getSeparator()));
}
}