package net.sf.minuteProject.configuration.bean;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import net.sf.minuteProject.configuration.bean.system.Plugin;
import net.sf.minuteProject.configuration.bean.target.ImportTargets;
import net.sf.minuteProject.configuration.bean.target.TargetParams;
import net.sf.minuteProject.utils.io.FileUtils;
import net.sf.minuteProject.utils.parser.ParserUtils;
/**
* @author Florian Adler
*
*/
public class Target extends AbstractConfiguration{
private String dir;
private String fileName;
private String canonicalDir;
private String canonicalFileName;
private ArchitectureTarget architectureTarget;
private List <TemplateTarget> templateTargets;
private AbstractConfigurationRoot abstractConfigurationRoot;
private List <Target> dependency;
private List <Plugin> plugins;
private TargetParams targetParams;
private ImportTargets importTargets;
private String outputdirRoot;
private String templatedirRoot, templatedirRef;
private Boolean isGenerable;
private List<String> templatedirRefs;
private Targets targets;
public void complement (Target target) {
if (abstractConfigurationRoot==null)
abstractConfigurationRoot=target.getAbstractConfigurationRoot();
List<TemplateTarget> input = target.getTemplateTargets();
for (TemplateTarget templateTarget : input) {
templateTarget.setTarget(this);
templateTarget.setIsGenerable(target.isGenerable());
templateTarget.setRootdir(target.getTemplatedirRoot());
templateTarget.getTemplatedirRefs().addAll(target.getTemplatedirRefs());
templateTarget.getProperties().addAll(target.getProperties());
getTemplateTargets().add(templateTarget);
if (templateTarget.getTemplates()!=null) {
for (Template template : templateTarget.getTemplates()) {
template.setOutputdirRoot(target.getOutputdirRoot());
template.getProperties().addAll(target.getProperties());
// template.setRootdir (target.getTemplatedirRoot());
// template.setPackageRoot(templateTarget.getPackageRoot());
}
}
}
// getProperties().addAll(target.getProperties());
getPlugins().addAll(target.getPlugins());
}
public AbstractConfigurationRoot getAbstractConfigurationRoot() {
return abstractConfigurationRoot;
}
public void setAbstractConfigurationRoot(
AbstractConfigurationRoot abstractConfigurationRoot) {
this.abstractConfigurationRoot = abstractConfigurationRoot;
}
public ArchitectureTarget getArchitectureTarget() {
return architectureTarget;
}
public void setArchitectureTarget(ArchitectureTarget architectureTarget) {
this.architectureTarget = architectureTarget;
}
public Template getTemplate(String name) {
List list = getTemplateTargets();
for (int i = 0; i<list.size();i++) {
TemplateTarget templateTarget = (TemplateTarget)list.get(i);
Template template;
if ((template = templateTarget.getTemplate(name))!=null)
return template;
}
return null;
}
public void addTemplateTarget (TemplateTarget templateTarget) {
// if (templateTargets==null)
// templateTargets = new ArrayList<TemplateTarget>();
templateTarget.setTarget(this);
getTemplateTargets().add(templateTarget);
}
public List<TemplateTarget> getTemplateTargets() {
if (templateTargets==null)
templateTargets = new ArrayList<TemplateTarget>();
return templateTargets;
}
public void setTemplateTargets(List<TemplateTarget> templateTargets) {
this.templateTargets = templateTargets;
}
public void addDependency (String dependencies) {
if (getDependency()==null)
setDependency(new ArrayList<Target>());
//Target target = getTarget
}
public List<Target> getDependency() {
return dependency;
}
private void setDependency(List<Target> dependency) {
this.dependency = dependency;
}
public List<String> getAbsoluteRootDirs(String rootDir) {
List<String> l = new ArrayList<String>();
for (String s:ParserUtils.getList(rootDir))
l.add(FileUtils.getAbsoluteDir(s, s, getTemplatedirRoot()));
return l;
}
public String getAbsoluteRootDir(String rootDir) {
return FileUtils.getAbsoluteDir(rootDir, rootDir, getTemplatedirRoot());
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public String getFileName() {
// return FileUtils.stripRelativePath(fileName);
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void addPlugin (Plugin plugin) {
getPlugins().add(plugin);
}
public List<Plugin> getPlugins() {
if (plugins==null)
setPlugins(new ArrayList<Plugin>());
return plugins;
}
public void setPlugins(List<Plugin> plugins) {
this.plugins = plugins;
}
public String getCanonicalDir() {
return canonicalDir;
}
public void setCanonicalDir(String canonicalDir) {
this.canonicalDir = canonicalDir;
}
public String getCanonicalFileName() {
return canonicalFileName;
}
public void setCanonicalFileName(String canonicalFileName) {
this.canonicalFileName = canonicalFileName;
}
public ImportTargets getImportTargets() {
return importTargets;
}
public void setImportTargets(ImportTargets importTargets) {
this.importTargets = importTargets;
}
public TargetParams getTargetParams() {
return targetParams;
}
public void setTargetParams(TargetParams targetParams) {
this.targetParams = targetParams;
}
public String getOutputdirRoot() {
StringBuffer sb = new StringBuffer();
boolean hasTargetsOutputdir = hasTargetsOutputdir();
if (hasTargetsOutputdir) {
sb.append(getTargets().getOutputdirRoot());
}
if (outputdirRoot!=null) {
if (hasTargetsOutputdir)
sb.append("/");
sb.append(outputdirRoot);
}
return sb.toString();
}
private boolean hasTargetsOutputdir() {
return (getTargets()!=null && !StringUtils.isEmpty(getTargets().getOutputdirRoot())) ;
}
public void setOutputdirRoot(String outputdirRoot) {
this.outputdirRoot = outputdirRoot;
}
public String getTemplatedirRoot() {
return templatedirRoot;
}
public void setTemplatedirRoot(String templatedirRoot) {
this.templatedirRoot = templatedirRoot;
}
public String getTemplatedirRef() {
return templatedirRef;
}
public List<String> getTemplatedirRefs() {
if (templatedirRefs==null) {
templatedirRefs = new ArrayList<String>();
if (templatedirRef!=null)
templatedirRefs.add(templatedirRef);
}
return templatedirRefs;
}
public void addTemplatedirRef(String templatedirRef) {
if (templatedirRef!=null)
getTemplatedirRefs().add(templatedirRef);
}
public void setTemplatedirRef(String templatedirRef) {
this.templatedirRef = templatedirRef;
}
public boolean isGenerable() {
if (isGenerable==null) isGenerable = true;
return isGenerable;
}
public void setIsGenerable(Boolean isGenerable) {
this.isGenerable = isGenerable;
}
public void complementAdditional(Target target) {
getTemplatedirRefs().addAll(target.getTemplatedirRefs());
}
public String getTargetPropertyValue(String name) {
String s = getPropertyValue(name);
if (s!=null) return s;
if (abstractConfigurationRoot!=null) return abstractConfigurationRoot.getPropertyValue(name);
return null;
}
public Targets getTargets() {
return targets;
}
public void setTargets(Targets targets) {
this.targets = targets;
}
}