/******************************************************************************* * Copyright (c) 2007 Cambridge Semantics Incorporated. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * File: $Source$ * Created by: Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>) * Created on: Sep 19, 2007 * Revision: $Id$ * * Contributors: * Cambridge Semantics Incorporated - initial API and implementation *******************************************************************************/ package org.openanzo.jet.exceptions; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.List; import java.util.Vector; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.FileSet; import org.openanzo.jet.exceptions.templates.ExceptionDefinitionsTemplate; import org.openanzo.jet.exceptions.templates.ExceptionResourcesTemplate; import org.openanzo.jet.exceptions.templates.ExceptionsDefinitionsWikiTemplate; /** * Ant Task for running property definition generator * * @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>) * */ public class ExceptionDefinitionTask extends MatchingTask { File destinationFolder; File resourcesDestinationFolder; File wikiDestinationFolder; private String destinationPackage; List<FileSet> fileSets = new Vector<FileSet>(); ExceptionDefinitionParser parser; /** * Create a new composition task */ public ExceptionDefinitionTask() { } /** * Set the destination file * * @param destinationFolder * directory where the exception classes is written */ public void setDestdir(File destinationFolder) { this.destinationFolder = destinationFolder; } /** * Set the resourcesDestinationFolder file * * @param destinationFolder * directory where the message.properties file is written */ public void setResourcesDestdir(File destinationFolder) { this.resourcesDestinationFolder = destinationFolder; } /** * Set the wikiDestinationFolder file * * @param destinationFolder * directory where the wiki text is written */ public void setWikiDestdir(File destinationFolder) { this.wikiDestinationFolder = destinationFolder; } /** * Sets the package of the generated ExceptionConstants class. * * @param destinationPackage * A java package name. */ public void setDestinationPackage(String destinationPackage) { this.destinationPackage = destinationPackage; } /** * Gets the package of the generated ExceptionConstants class. * * @return A java package name. */ public String getDestinationPackage() { return destinationPackage; } /** * Add a set of files to parse * * @param fileSet * a set of files to parse */ public void addFileset(FileSet fileSet) { fileSets.add(fileSet); } @Override public void execute() throws BuildException { parser = new ExceptionDefinitionParser(); for (FileSet set : fileSets) { DirectoryScanner ds = set.getDirectoryScanner(getProject()); String files[] = ds.getIncludedFiles(); String base = ds.getBasedir().getAbsolutePath(); for (int i = 0; i < files.length; i++) { String filename = files[i]; String file = base + "/" + filename; parseFile(file); } } generate(); } /** * Parse a properties file * * @param fileName * file to parse */ public void parseFile(String fileName) { try { SAXParser fSAXParser = SAXParserFactory.newInstance().newSAXParser(); fSAXParser.parse(new FileInputStream(fileName), parser); } catch (Exception exception) { exception.printStackTrace(); } } /** * Generate the exception definitions */ public void generate() { try { ExceptionDefinitionsTemplate template = new ExceptionDefinitionsTemplate(); ExceptionResourcesTemplate resourcesTemplate = new ExceptionResourcesTemplate(); ExceptionsDefinitionsWikiTemplate wikiTemplate = new ExceptionsDefinitionsWikiTemplate(); parser.setPackage(this.getDestinationPackage()); String output = template.generate(parser); String resourceOutput = resourcesTemplate.generate(parser); String wikiOutput = wikiTemplate.generate(parser); File destFile = new File(this.destinationFolder, "ExceptionConstants.java"); if (!destFile.exists()) { destFile.getParentFile().mkdirs(); destFile.createNewFile(); } Writer fos = new OutputStreamWriter(new FileOutputStream(destFile), "UTF-8"); fos.write(output); fos.close(); File destFile2 = new File(this.resourcesDestinationFolder, "messages.properties"); if (!destFile2.exists()) { destFile2.getParentFile().mkdirs(); destFile2.createNewFile(); } Writer fos2 = new OutputStreamWriter(new FileOutputStream(destFile2), "UTF-8"); fos2.write(resourceOutput); fos2.close(); File destFile3 = new File(this.wikiDestinationFolder, "exceptions.wiki"); if (!destFile3.exists()) { destFile3.getParentFile().mkdirs(); destFile3.createNewFile(); } Writer fos3 = new OutputStreamWriter(new FileOutputStream(destFile3), "UTF-8"); fos3.write(wikiOutput); fos3.close(); } catch (Exception exception) { exception.printStackTrace(); } } }