/*
* (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.dg.rm;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openflexo.dg.docx.DGDocxXMLGenerator;
import org.openflexo.dg.docx.DocxTemplatesEnum;
import org.openflexo.dg.file.DGDocxXmlFile;
import org.openflexo.dg.file.DGHTMLFile;
import org.openflexo.dg.file.DGJSFile;
import org.openflexo.dg.file.DGLatexFile;
import org.openflexo.dg.file.DGTextFile;
import org.openflexo.dg.html.DGHTMLGenerator;
import org.openflexo.dg.html.DGJSGenerator;
import org.openflexo.dg.html.DGTextGenerator;
import org.openflexo.dg.latex.DGLatexGenerator;
import org.openflexo.dg.latex.StyleDocGenerator;
import org.openflexo.foundation.cg.CGFile;
import org.openflexo.foundation.cg.CGSymbolicDirectory;
import org.openflexo.foundation.cg.DGRepository;
import org.openflexo.foundation.cg.GenerationRepository;
import org.openflexo.foundation.dkv.DKVModel;
import org.openflexo.foundation.dm.DMModel;
import org.openflexo.foundation.dm.eo.DMEOEntity;
import org.openflexo.foundation.ie.cl.ComponentDefinition;
import org.openflexo.foundation.ie.cl.FlexoComponentLibrary;
import org.openflexo.foundation.ie.menu.FlexoNavigationMenu;
import org.openflexo.foundation.rm.DuplicateResourceException;
import org.openflexo.foundation.rm.FlexoCopiedResource;
import org.openflexo.foundation.rm.FlexoFileResource;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.InvalidFileNameException;
import org.openflexo.foundation.rm.ResourceType;
import org.openflexo.foundation.rm.cg.CGRepositoryFileResource;
import org.openflexo.foundation.rm.cg.TextFileResource;
import org.openflexo.foundation.utils.FlexoProjectFile;
import org.openflexo.foundation.wkf.FlexoProcess;
import org.openflexo.foundation.wkf.FlexoWorkflow;
import org.openflexo.foundation.wkf.ProcessFolder;
import org.openflexo.foundation.wkf.node.OperationNode;
import org.openflexo.logging.FlexoLogger;
import org.openflexo.toolbox.FileUtils;
public class GeneratedFileResourceFactory {
static final Logger logger = FlexoLogger.getLogger(GeneratedFileResourceFactory.class.getPackage().getName());
public static <CD extends ComponentDefinition> ComponentLatexFileResource<CD> createNewComponentLatexFileResource(
DGRepository repository, DGLatexGenerator<CD> generator) {
ComponentLatexFileResource<CD> returned = (ComponentLatexFileResource<CD>) generator.getProject().resourceForKey(
ResourceType.LATEX_FILE, ComponentLatexFileResource.nameForRepositoryAndComponent(repository, generator.getObject()));
if (returned != null && returned.getCGFile() == null) {
returned.delete(false);
returned = null;
}
if (returned == null) {
returned = new ComponentLatexFileResource<CD>(generator.getProject());
returned.setGenerator(generator);
returned.setName(ComponentLatexFileResource.nameForRepositoryAndComponent(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, returned);
initCGFile(repository, returned, cgFile);
registerDGFile(returned, DGLatexGenerator.nameForComponent(generator.getObject(), repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created page LATEX resource " + returned.getName());
}
} else {
returned.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved page resource " + returned.getName());
}
}
generator.setLatexResource(returned);
returned.registerObserverWhenRequired();
return returned;
}
public static ComponentLibraryLatexFileResource createNewComponentLibraryLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoComponentLibrary> generator) {
FlexoProject project = generator.getProject();
ComponentLibraryLatexFileResource res = (ComponentLibraryLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
ComponentLibraryLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ComponentLibraryLatexFileResource(project);
res.setGenerator(generator);
res.setName(ComponentLibraryLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForComponentLibrary(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created ComponentLibrary LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved ComponentLibrary resource " + res.getName());
}
}
generator.setLatexResource(res);
return res;
}
public static DefinitionsLatexFileResource createNewDefinitionsLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoProject> definitionsGenerator) {
FlexoProject project = definitionsGenerator.getProject();
DefinitionsLatexFileResource res = (DefinitionsLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
LatexFileResource.nameForRepositoryAndIdentifier(repository, definitionsGenerator.getIdentifier()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new DefinitionsLatexFileResource(project);
res.setGenerator(definitionsGenerator);
res.setName(LatexFileResource.nameForRepositoryAndIdentifier(repository, definitionsGenerator.getIdentifier()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerUniqueDGFile(res, DGLatexGenerator.nameForDefinitions(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Definitions LATEX resource " + res.getName());
}
} else {
res.setGenerator(definitionsGenerator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Definitions LATEX resource " + res.getName());
}
}
definitionsGenerator.setLatexResource(res);
return res;
}
public static DKVModelLatexFileResource createNewDKVLatexFileResource(DGRepository repository, DGLatexGenerator<DKVModel> generator) {
FlexoProject project = generator.getProject();
DKVModelLatexFileResource res = (DKVModelLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
DKVModelLatexFileResource.nameForRepositoryAndDKV(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new DKVModelLatexFileResource(project);
res.setGenerator(generator);
res.setName(DKVModelLatexFileResource.nameForRepositoryAndDKV(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForDKV(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created DKV LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved DKV resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static DMEOEntityLatexFileResource createNewEOEntityLatexFileResource(DGRepository repository,
DGLatexGenerator<DMEOEntity> generator) {
DMEOEntityLatexFileResource res = (DMEOEntityLatexFileResource) generator.getProject().resourceForKey(ResourceType.LATEX_FILE,
DMEOEntityLatexFileResource.nameForRepositoryAndEntity(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
FlexoProject project = generator.getProject();
res = new DMEOEntityLatexFileResource(project);
res.setGenerator(generator);
res.setName(DMEOEntityLatexFileResource.nameForRepositoryAndEntity(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
DMEOEntity entity = generator.getObject();
registerDGFile(res, DGLatexGenerator.nameForEntity(entity, repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created EOEntity LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved EOEntity resource " + res.getName());
}
}
generator.setLatexResource(res);
res.registerObserverWhenRequired();
return res;
}
public static DMModelLatexFileResource createNewDMModelLatexFileResource(DGRepository repository, DGLatexGenerator<DMModel> generator) {
FlexoProject project = generator.getProject();
DMModelLatexFileResource res = (DMModelLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
DMModelLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new DMModelLatexFileResource(project);
res.setGenerator(generator);
res.setName(DMModelLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForDataModel(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created DMModel LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved DMModel resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static MenuLatexFileResource createNewMenuLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoNavigationMenu> generator) {
FlexoProject project = generator.getProject();
MenuLatexFileResource res = (MenuLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
MenuLatexFileResource.nameForRepositoryAndMenu(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new MenuLatexFileResource(project);
res.setGenerator(generator);
res.setName(MenuLatexFileResource.nameForRepositoryAndMenu(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForMenu(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Menu LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Menu resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static OperationLatexFileResource createNewOperationLatexFileResource(DGRepository repository,
DGLatexGenerator<OperationNode> generator) {
FlexoProject project = generator.getProject();
OperationLatexFileResource res = (OperationLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
OperationLatexFileResource.nameForRepositoryAndOperation(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new OperationLatexFileResource(project);
res.setGenerator(generator);
res.setName(OperationLatexFileResource.nameForRepositoryAndOperation(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForOperation(generator.getObject(), repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Operation LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved operation resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static ProcessLatexFileResource createNewProcessLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoProcess> generator) {
FlexoProject project = generator.getProject();
ProcessLatexFileResource res = (ProcessLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
ProcessLatexFileResource.nameForRepositoryAndProcess(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProcessLatexFileResource(project);
res.setGenerator(generator);
res.setName(ProcessLatexFileResource.nameForRepositoryAndProcess(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForProcess(generator.getObject(), repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Process LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved process resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static ProjectLatexFileResource createNewProjectLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoProject> generator) {
FlexoProject project = generator.getProject();
ProjectLatexFileResource res = (ProjectLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
ProjectLatexFileResource.nameForRepositoryAndProject(repository, project));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProjectLatexFileResource(project);
res.setGenerator(generator);
res.setName(ProjectLatexFileResource.nameForRepositoryAndProject(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForProject(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Menu LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Menu resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setLatexResource(res);
return res;
}
public static ReadersGuideLatexFileResource createNewReadersGuideLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoProject> readersGuideGenerator) {
FlexoProject project = readersGuideGenerator.getProject();
ReadersGuideLatexFileResource res = (ReadersGuideLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
LatexFileResource.nameForRepositoryAndIdentifier(repository, readersGuideGenerator.getIdentifier()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ReadersGuideLatexFileResource(project);
res.setGenerator(readersGuideGenerator);
res.setName(LatexFileResource.nameForRepositoryAndIdentifier(repository, readersGuideGenerator.getIdentifier()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerUniqueDGFile(res, DGLatexGenerator.nameForReadersGuide(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Reader's guide LATEX resource " + res.getName());
}
} else {
res.setGenerator(readersGuideGenerator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Reader\'s guide LATEX resource " + res.getName());
}
}
readersGuideGenerator.setLatexResource(res);
return res;
}
public static StyleLatexFileResource createNewStyleLatexFileResource(DGRepository repository, StyleDocGenerator generator,
String styleName) {
FlexoProject project = generator.getProject();
StyleLatexFileResource returned = new StyleLatexFileResource(project);
returned.setGenerator(generator);
returned.setName(LatexFileResource.nameForRepositoryAndIdentifier(repository, generator.getIdentifier()));
DGLatexFile cgFile = new DGLatexFile(repository, returned);
initCGFile(repository, returned, cgFile);
return registerUniqueDGFile(returned, styleName);
}
public static WorkflowLatexFileResource createNewWorkflowLatexFileResource(DGRepository repository,
DGLatexGenerator<FlexoWorkflow> generator) {
FlexoProject project = generator.getProject();
WorkflowLatexFileResource res = (WorkflowLatexFileResource) project.resourceForKey(ResourceType.LATEX_FILE,
WorkflowLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new WorkflowLatexFileResource(project);
res.setGenerator(generator);
res.setName(WorkflowLatexFileResource.nameForRepositoryAndModel(repository, generator.getObject()));
DGLatexFile cgFile = new DGLatexFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGLatexGenerator.nameForWorkflow(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Workflow LATEX resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Workflow resource " + res.getName());
}
}
generator.setLatexResource(res);
return res;
}
public static ProjectHTMLFileResource createNewProjectHTMLFileResource(DGRepository repository, DGHTMLGenerator<FlexoProject> generator) {
FlexoProject project = generator.getProject();
ProjectHTMLFileResource res = (ProjectHTMLFileResource) project.resourceForKey(ResourceType.HTML_FILE,
ProjectHTMLFileResource.nameForRepositoryAndProject(repository, project));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProjectHTMLFileResource(project);
res.setGenerator(generator);
res.setName(ProjectHTMLFileResource.nameForRepositoryAndProject(repository, generator.getObject()));
DGHTMLFile cgFile = new DGHTMLFile(repository, res);
initCGFile(repository, res, cgFile);
registerDGFile(res, DGHTMLGenerator.nameForProject(repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Project html resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Project resource" + res.getName());
}
}
generator.setHtmlResource(res);
return res;
}
public static ProjectTextFileResource createNewProjectTextFileResource(DGRepository repository, DGTextGenerator<FlexoProject> generator) {
FlexoProject project = generator.getProject();
ProjectTextFileResource res = (ProjectTextFileResource) project.resourceForKey(ResourceType.TEXT_FILE,
ProjectTextFileResource.nameForRepositoryAndProject(repository, project));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProjectTextFileResource(project);
res.setGenerator(generator);
res.setName(ProjectTextFileResource.nameForRepositoryAndProject(repository, generator.getObject()));
DGTextFile dgtextFile = new DGTextFile(repository, res);
initCGFile(repository, res, dgtextFile);
registerDGFile(res, generator.getFileName());
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Project Text resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Project text resource " + res.getName());
}
}
generator.setTextResource(res);
return res;
}
public static WorkflowTextFileResource createNewWorkflowTextFileResource(DGRepository repository,
DGTextGenerator<FlexoWorkflow> generator) {
FlexoProject project = generator.getProject();
WorkflowTextFileResource res = (WorkflowTextFileResource) project.resourceForKey(ResourceType.TEXT_FILE,
WorkflowTextFileResource.nameForRepositoryAndWorkflow(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new WorkflowTextFileResource(project);
res.setGenerator(generator);
res.setName(WorkflowTextFileResource.nameForRepositoryAndWorkflow(repository, generator.getObject()));
DGTextFile dgtextFile = new DGTextFile(repository, res);
initCGFile(repository, res, dgtextFile);
registerDGFile(res, generator.getFileName());
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Workflow Text resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved Project text resource " + res.getName());
}
}
generator.setTextResource(res);
return res;
}
public static ProcessJSFileResource createNewProcessJSFileResource(DGRepository repository, DGJSGenerator<FlexoProcess> generator) {
FlexoProject project = generator.getProject();
ProcessJSFileResource res = (ProcessJSFileResource) project.resourceForKey(ResourceType.JS_FILE,
ProcessJSFileResource.nameForRepositoryAndProcess(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProcessJSFileResource(project);
res.setGenerator(generator);
res.setName(ProcessJSFileResource.nameForRepositoryAndProcess(repository, generator.getObject()));
DGJSFile cgFile = new DGJSFile(repository, res);
cgFile.setSymbolicDirectory(generator.getSymbolicDirectory(repository));
repository.addToFiles(cgFile);
res.setCGFile(cgFile);
registerDGFile(res, DGJSGenerator.nameForProcess(generator.getObject(), repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Process JS resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved process resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setJSResource(res);
return res;
}
public static ProcessFolderJSFileResource createNewProcessFolderJSFileResource(DGRepository repository,
DGJSGenerator<ProcessFolder> generator) {
FlexoProject project = generator.getProject();
ProcessFolderJSFileResource res = (ProcessFolderJSFileResource) project.resourceForKey(ResourceType.JS_FILE,
ProcessFolderJSFileResource.nameForRepositoryAndProcessFolder(repository, generator.getObject()));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProcessFolderJSFileResource(project);
res.setGenerator(generator);
res.setName(ProcessFolderJSFileResource.nameForRepositoryAndProcessFolder(repository, generator.getObject()));
DGJSFile cgFile = new DGJSFile(repository, res);
cgFile.setSymbolicDirectory(generator.getSymbolicDirectory(repository));
repository.addToFiles(cgFile);
res.setCGFile(cgFile);
registerDGFile(res, DGJSGenerator.nameForProcessFolder(generator.getObject(), repository));
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Process Folder JS resource " + res.getName());
}
} else {
res.setGenerator(generator);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved process Folder resource " + res.getName());
}
}
res.registerObserverWhenRequired();
generator.setJSResource(res);
return res;
}
public static ProjectDocxXmlFileResource createNewProjectDocxXmlFileResource(DGRepository repository,
DGDocxXMLGenerator<FlexoProject> generator, DocxTemplatesEnum docxTemplate) {
FlexoProject project = generator.getProject();
ProjectDocxXmlFileResource res = (ProjectDocxXmlFileResource) project.resourceForKey(ResourceType.DOCXXML_FILE,
ProjectDocxXmlFileResource.nameForRepositoryAndDocxTemplate(repository, docxTemplate));
if (res != null && res.getCGFile() == null) {
res.delete(false);
res = null;
}
if (res == null) {
res = new ProjectDocxXmlFileResource(generator, docxTemplate);
res.setName(ProjectDocxXmlFileResource.nameForRepositoryAndDocxTemplate(repository, docxTemplate));
DGDocxXmlFile cgFile = new DGDocxXmlFile(repository, res);
cgFile.setSymbolicDirectory(generator.getSymbolicDirectory(repository));
repository.addToFiles(cgFile);
res.setCGFile(cgFile);
registerDGFile(res, docxTemplate.getFilePath());
if (logger.isLoggable(Level.FINE)) {
logger.fine("Created Project Docx Xml resource " + res.getName());
}
} else {
res.setGenerator(generator);
generator.addDocxResource(res, docxTemplate);
if (logger.isLoggable(Level.FINE)) {
logger.fine("Successfully retrieved project resource " + res.getName());
}
}
return res;
}
private static void initCGFile(DGRepository repository, TextFileResource returned, CGFile cgFile) {
cgFile.setSymbolicDirectory(repository.getSrcSymbolicDirectory());
repository.addToFiles(cgFile);
returned.setCGFile(cgFile);
}
public static FlexoCopiedResource createNewCopiedFileResource(GenerationRepository repository, CGFile cgFile,
CGSymbolicDirectory symbolicDirectory, FlexoFileResource resourceToCopy) {
return createNewCopiedFileResource(repository, cgFile, symbolicDirectory, resourceToCopy, null);
}
public static FlexoCopiedResource createNewCopiedFileResource(GenerationRepository repository, CGFile cgFile,
CGSymbolicDirectory symbolicDirectory, FlexoFileResource resourceToCopy, String folderPath) {
FlexoProject project = repository.getProject();
FlexoCopiedResource returned = new FlexoCopiedResource(project, resourceToCopy);
if (repository.getSymbolicDirectories().get(symbolicDirectory.getName()) != symbolicDirectory) {
if (logger.isLoggable(Level.SEVERE)) {
logger.severe("Hu oh!!! you added a file to a repository but you passed a symbolic directory that is not in it? I will continue, but I would expect major failures later");
}
}
cgFile.setResource(returned);
cgFile.setSymbolicDirectory(symbolicDirectory);
repository.addToFiles(cgFile);
returned.setCGFile(cgFile);
return registerUniqueDGFile(returned, resourceToCopy.getFileName(), folderPath);
}
private static <DGLF extends CGRepositoryFileResource> DGLF registerDGFile(DGLF returned, String fileName) {
FlexoProjectFile file = returned.makeFlexoProjectFile("", fileName);
try {
returned.setResourceFile(file);
} catch (InvalidFileNameException e1) {
String attempt = FileUtils.getValidFileName(file.getRelativePath());
int i = 0;
file = new FlexoProjectFile(attempt);
while (i < 100) {
try {
returned.setResourceFile(file);
break;
} catch (InvalidFileNameException e) {
i++;
file = new FlexoProjectFile(attempt + "-" + i);
if (i == 100) {
e.printStackTrace();
}
}
}
if (returned.getResourceFile() == null) {
return null;
}
}
try {
returned.getProject().registerResource(returned);
} catch (DuplicateResourceException e) {
// Warns about the exception
logger.severe("DuplicateResourceException: " + e.getMessage() + ". See console for details.");
e.printStackTrace();
}
returned.rebuildDependancies();
return returned;
}
private static <DGLF extends CGRepositoryFileResource> DGLF registerUniqueDGFile(DGLF returned, String fileName) {
return registerUniqueDGFile(returned, fileName, null);
}
private static <DGLF extends CGRepositoryFileResource> DGLF registerUniqueDGFile(DGLF returned, String fileName, String folderPath) {
FlexoProjectFile file = returned.makeFlexoProjectFile(folderPath == null ? "" : folderPath, fileName);
try {
returned.setResourceFile(file);
} catch (InvalidFileNameException e1) {
file = new FlexoProjectFile(FileUtils.getValidFileName(file.getRelativePath()));
try {
returned.setResourceFile(file);
} catch (InvalidFileNameException e) {
if (logger.isLoggable(Level.SEVERE)) {
logger.severe("Invalid file name: " + file.getRelativePath() + ". This should never happen.");
}
return null;
}
}
try {
returned.getProject().registerResource(returned);
} catch (DuplicateResourceException e) {
// Warns about the exception
logger.warning("Exception raised: " + e.getClass().getName() + ". See console for details.");
e.printStackTrace();
}
returned.rebuildDependancies();
return returned;
}
}