org.nuiton.eugene.writer.ChainedFileWriter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eugene Show documentation
Show all versions of eugene Show documentation
Efficient Universal Generator.
/*
* #%L
* EUGene :: EUGene
*
* $Id: ChainedFileWriter.java 1095 2011-09-21 18:02:48Z tchemit $
* $HeadURL: http://svn.nuiton.org/svn/eugene/tags/eugene-2.6.1/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java $
* %%
* Copyright (C) 2004 - 2010 CodeLutin
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
package org.nuiton.eugene.writer;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Map;
/**
* Contract to generate files from any incoming sources (zargo, xmi, ...) to any
* other ones.
*
* User: chemit Date: 27 nov. 2009 Time: 11:20:39
*
* @since 2.0.0
*/
public interface ChainedFileWriter {
/** @return the accepted incoming protocol */
String getInputProtocol();
/**
* Obtain the input protocol of this writer given the passed {@code
* modelType}.
*
* @param modelType the type of model used
* @return the input protocol or {@code null} if this writer does not accept
* the type of model
*/
String getInputProtocol(String modelType);
/**
* Obtain the output protocol of this writer given the passed {@code
* modelType}.
*
* @param modelType the type of model used
* @return the output protocol or {@code null} if should not be chained
*/
String getOutputProtocol(String modelType);
/**
* Test if a type of model can be treated by this writer.
*
* @param modelType model type to test
* @return {@code true} if this writer accept the given type of model,
* {@code false} otherwise.
*/
boolean acceptModel(String modelType);
/**
* Test in a entry can be treated by this writer.
*
* @param include the include to test
* @return {@code true} if the writer accept the entry, {@code false}
* otherwise.
*/
boolean acceptInclude(String include);
/**
* @return the default includes files to be treated by the writer (can be an
* ant-like expression)
*/
String getDefaultIncludes();
/** @return the defalt relative path where to pick files to treate. */
String getDefaultInputDirectory();
/**
* @return the defalt relative path where to pick files to treate on a test
* phase.
*/
String getDefaultTestInputDirectory();
/** @return the default relative path to add to output basedir */
String getDefaultOutputDirectory();
/**
* @return the default relative path to add to output basedir on a test
* phase.
*/
String getDefaultTestOutputDirectory();
/**
* Obtain the real directory where to write files.
*
* //FIXME-TC20091126 make this configurable (via the properties)
*
* @param outputBasedir the output base directory
* @param testPhase {@code true} if writer is used in a test phase
* @return the real output directory where to generate for this particular
* writer
*/
File getOutputDirectory(File outputBasedir, boolean testPhase);
/**
* Obtain the real directory where to extract files (when using resources
* from class-path).
*
* @param outputBasedir the output base directory
* @param testPhase {@code true} if writer is used in a test phase
* @return the real output directory where to extract for this particular
* writer
* @since 2.1.3
*/
File getExtractDirectory(File outputBasedir, boolean testPhase);
/**
* Launch the generation for this writer with all pre-computed data to
* treate and resources to copy.
*
* @param configuration the share configuration of all writers.
* @param data data to treate (files to react + resources to copy)
* @throws IOException if any io pb.
* @since 2.1.3
*/
void generate(ChainedFileWriterConfiguration configuration,
ChainedFileWriterData data)
throws IOException;
/**
* Obtain for a given {@code inputDirectory}, all files to treate.
*
* @param configuration the shared configuration
* @param inputPath the input path (can be a directory or a classpath path)
* @param includePattern the include pattern separated by comma
* @param inClassPath a flag to say if we should search in classpath
* @return the list of resources detected
* @throws IOException if any IO pb while searching resources
* @throws IllegalArgumentException if no include pattern given
* @since 2.1.3
*/
List getFiles(ChainedFileWriterConfiguration configuration,
String inputPath,
List includePattern,
boolean inClassPath) throws IOException, IllegalArgumentException;
/**
* Obtain the optional resource files associated to the given file to react.
*
* @param file the file to react
* @return the array of resources associated to the file
* @throws IOException if could not get resources
* @since 2.1.3
*/
List getResources(URL file) throws IOException;
/** Clear all internal states */
void clear();
/**
* Add an entry to treate.
*
* @param entry the entry to add to writer
*/
void addEntry(ChainedFileWriterEntry entry);
/**
* @return the array of properties names authorized for the chained
* writer.
*/
String[] getAuthorizedPropertyNames();
/**
* @return the dictionnary of authorized property descriptions (keys are
* property names and values are descriptions).
*/
Map getAuthorizedPropertyDescriptions();
/**
* Obtain a writer extra property.
*
* @param key the key of required property
* @param type the type of property
* @param the type of property
* @return the property found or {@code null} if not found.
*/
T getProperty(String key, Class type);
/** @return the list of all entries registered */
List getEntries();
/** @return the writer report (to save generated file to later report) */
WriterReport getWriterReport();
void setWriterReport(WriterReport writerReport);
}