blob: 7fe7ffd0e924717bfab1674f2c14ac5f468f4731 [file] [log] [blame]
/*
* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tiles.autotag.generate;
import java.io.File;
import java.util.List;
import java.util.Map;
import org.apache.tiles.autotag.model.TemplateClass;
import org.apache.tiles.autotag.model.TemplateSuite;
/**
* The basic template generator. Use {@link TemplateGeneratorBuilder} to
* create instances of this class.
*
* @version $Rev$ $Date$
*/
class BasicTemplateGenerator implements TemplateGenerator {
/**
* The template suite generators.
*/
private List<TSGeneratorDirectoryPair> templateSuiteGenerators;
/**
* The template class generators.
*/
private List<TCGeneratorDirectoryPair> templateClassGenerators;
/**
* Indicates that this generator generates resources.
*/
private boolean generatingResources = false;
/**
* Indicates that this generator generates classes.
*/
private boolean generatingClasses = false;
/**
* Constructor.
*
* @param templateSuiteGenerators The template suite generators.
* @param templateClassGenerators The template class generators.
* @param generatingClasses Indicates that this generator generates classes.
* @param generatingResources Indicates that this generator generates resources.
*/
BasicTemplateGenerator(
List<TSGeneratorDirectoryPair> templateSuiteGenerators,
List<TCGeneratorDirectoryPair> templateClassGenerators,
boolean generatingClasses, boolean generatingResources) {
this.templateSuiteGenerators = templateSuiteGenerators;
this.templateClassGenerators = templateClassGenerators;
this.generatingClasses = generatingClasses;
this.generatingResources = generatingResources;
}
@Override
public void generate(String packageName, TemplateSuite suite, Map<String, String> parameters,
String runtimeClass) {
for (TSGeneratorDirectoryPair pair : templateSuiteGenerators) {
pair.getGenerator().generate(pair.getDirectory(), packageName, suite, parameters);
}
for (TemplateClass templateClass : suite.getTemplateClasses()) {
for (TCGeneratorDirectoryPair pair : templateClassGenerators) {
pair.getGenerator().generate(pair.getDirectory(), packageName,
suite, templateClass, parameters, runtimeClass);
}
}
}
/**
* A pair of a template suite generator and a directory.
*
* @version $Rev$ $Date$
*/
static class TSGeneratorDirectoryPair {
/**
* The directory where files are generated.
*/
private File directory;
/**
* The generator.
*/
private TemplateSuiteGenerator generator;
/**
* Constructor.
*
* @param directory The directory where files are generated.
* @param generator The generator.
*/
public TSGeneratorDirectoryPair(File directory,
TemplateSuiteGenerator generator) {
this.directory = directory;
this.generator = generator;
}
/**
* Returns the directory where files are generated.
*
* @return The directory where files are generated.
*/
public File getDirectory() {
return directory;
}
/**
* Returns the generator.
*
* @return The generator.
*/
public TemplateSuiteGenerator getGenerator() {
return generator;
}
}
/**
* A pair of a template class generator and a directory.
*
* @version $Rev$ $Date$
*/
static class TCGeneratorDirectoryPair {
/**
* The directory where files are generated.
*/
private File directory;
/**
* The generator.
*/
private TemplateClassGenerator generator;
/**
* Constructor.
*
* @param directory The directory where files are generated.
* @param generator The generator.
*/
public TCGeneratorDirectoryPair(File directory,
TemplateClassGenerator generator) {
this.directory = directory;
this.generator = generator;
}
/**
* Returns the directory where files are generated.
*
* @return The directory where files are generated.
*/
public File getDirectory() {
return directory;
}
/**
* Returns the generator.
*
* @return The generator.
*/
public TemplateClassGenerator getGenerator() {
return generator;
}
}
@Override
public boolean isGeneratingResources() {
return generatingResources;
}
@Override
public boolean isGeneratingClasses() {
return generatingClasses;
}
}