/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.foundation.cg;
import java.io.File;
import java.util.Enumeration;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openflexo.foundation.DocType;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.TargetType;
import org.openflexo.foundation.cg.templates.CGDocTemplates;
import org.openflexo.foundation.cg.templates.CustomCGTemplateRepository;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.GeneratedDocResource;
import org.openflexo.foundation.rm.InvalidFileNameException;
import org.openflexo.foundation.rm.ProjectRestructuration;
import org.openflexo.foundation.utils.FlexoProjectFile;
import org.openflexo.foundation.xml.GeneratedCodeBuilder;
import org.openflexo.localization.FlexoLocalization;
import org.openflexo.logging.FlexoLogger;
/**
* @author gpolet
*
*/
public class GeneratedDoc extends GeneratedOutput {
private static final Logger logger = FlexoLogger.getLogger(GeneratedDoc.class.getPackage().getName());
private CGDocTemplates _templates;
/**
* Creates and returns a newly created workflow
*
* @return a newly created workflow
*/
public static GeneratedDoc createNewGeneratedDoc(FlexoProject project) {
GeneratedDoc newCG = new GeneratedDoc(project);
if (logger.isLoggable(Level.INFO)) {
logger.info("createNewGeneratedDoc(), project=" + project + " " + newCG);
}
File cgFile = ProjectRestructuration.getExpectedGeneratedDocFile(project);
FlexoProjectFile generatedCodeFile = new FlexoProjectFile(cgFile, project);
GeneratedDocResource cgRes;
try {
cgRes = new GeneratedDocResource(project, newCG, generatedCodeFile);
} catch (InvalidFileNameException e2) {
e2.printStackTrace();
generatedCodeFile = new FlexoProjectFile("GeneratedDoc");
generatedCodeFile.setProject(project);
try {
cgRes = new GeneratedDocResource(project, newCG, generatedCodeFile);
} catch (InvalidFileNameException e) {
if (logger.isLoggable(Level.SEVERE)) {
logger.severe("Could not create generated doc.");
}
e.printStackTrace();
return null;
}
}
try {
cgRes.saveResourceData();
project.registerResource(cgRes);
} catch (Exception e1) {
// Warns about the exception
if (logger.isLoggable(Level.WARNING)) {
logger.warning("Exception raised: " + e1.getClass().getName() + ". See console for details.");
}
e1.printStackTrace();
}
return newCG;
}
/**
*
*/
public GeneratedDoc(GeneratedCodeBuilder builder) {
this(builder.getProject());
builder.generatedCode = this;
_resource = builder.resource;
initializeDeserialization(builder);
}
/**
* @param project
*/
public GeneratedDoc(FlexoProject project) {
super(project);
}
@Override
public String getFullyQualifiedName() {
return "GeneratedDoc";
}
/**
* Overrides getClassNameKey
*
* @see org.openflexo.foundation.FlexoModelObject#getClassNameKey()
*/
@Override
public String getClassNameKey() {
return "generated_doc";
}
@Override
public String getInspectorName() {
return Inspectors.DG.GENERATED_DOC_INSPECTOR;
}
@Override
public CGDocTemplates getTemplates() {
if (_templates == null) {
Vector<TargetType> v = new Vector<TargetType>();
v.addAll(getProject().getDocTypes());
_templates = new CGDocTemplates(getProject(), v);
}
return _templates;
}
/**
* Overrides getDefaultRepositoryName
*
* @see org.openflexo.foundation.cg.GeneratedOutput#getDefaultRepositoryName()
*/
@Override
public String getDefaultRepositoryName() {
return "default_dg_repository_name";
}
/**
* Overrides getOrCreateDefaultRepository
*
* @see org.openflexo.foundation.cg.GeneratedOutput#getOrCreateDefaultRepository()
*/
/*
* @Override public GenerationRepository getOrCreateDefaultRepository() { if (getGeneratedRepositories().size() > 0) return
* getGeneratedRepositories().firstElement(); return null; }
*/
@Override
public String getHelpText() {
return FlexoLocalization.localizedForKey("generated_doc_help_text");
}
/**
* Overrides finalizeDeserialization
*
* @see org.openflexo.foundation.FlexoXMLSerializableObject#finalizeDeserialization(java.lang.Object)
*/
@Override
public void finalizeDeserialization(Object builder) {
super.finalizeDeserialization(builder);
if (getTemplates() != null) {
for (DocType docType : getProject().getDocTypes()) {
getTemplates().getApplicationRepository().getTemplateSetForTarget(docType, true);
Enumeration<CustomCGTemplateRepository> en1 = getTemplates().getCustomRepositories();
while (en1.hasMoreElements()) {
CustomCGTemplateRepository rep = en1.nextElement();
rep.getTemplateSetForTarget(docType, true);
}
}
}
}
}