All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sta.cts.ConvRunner Maven / Gradle / Ivy


package com.sta.cts;

import java.util.Arrays;
import java.util.Hashtable;
import java.util.Enumeration;

import java.io.File;

import com.wutka.dtd.DTD;
import com.wutka.dtd.DTDParser;
import com.wutka.dtd.DTDElement;
import com.wutka.dtd.DTDAttribute;

import com.sta.mlogger.MLogEntry;
import com.sta.mlogger.MLogEntry4Text;
import com.sta.mlogger.MLogger;

/**
 * 

Name: ConvRunner

*

Description: * Klasse zum Starten und zur Demonstration der Funktionalit?t des * Converters. Diese Klasse enth?lt sowohl eine (statische) Main-Methode, * die zum Start per Kommandozeile eingesetzt werden kann, als auch eine Reihe * von Methoden, die zum (direkten) Start aus einem anderen Java-Programm * (einer anderen Java-Klasse) heraus verwendet werden k?nnen. Ziel bei der * Entwicklung war, das "Methoden-Interface" so einfach wie m?glich zu halten, * so dass der Aufruf per "Reflection" erfolgen kann. *

*

Historischer Werdegang: *

    *
  • Der Converter2 wird ab dem 26.09.2003 unabh?ngig vom Converter1 weiterentwickelt.
  • *
  • Die letzte Version vom Converter1 ist 1.32, die erste neue Version vom Converter2 ist 2.33.
  • *
  • Die Versionsnummer vom Converter2 wurde in dieser Datei weiter gepflegt.
  • *
  • Am 23.08.2016 erfolgte die Umstellung auf Converter3 mit FOP 2.1.
  • *
  • Die letzte Version von Converter2 ist 2.91, testweise 2.92, die erste Version von Converter3 ist die 3.92.
  • *
* *

Aufzeichnung der Versionsgeschichte: *

    *
  • 2.33 - erste neue Version vom Converter2 (Unabh?ngigkeit vom Converter1)
  • *
  • 2.50 - Ergebnisse von OptimizeIt eingearbeitet
  • *
  • 2.51 - FOP configuration file support (fop/userconfig.xml)
  • *
  • ...
  • *
  • 2.8x - XMLElement, Transformation mit XSL's aus Ressourcen
  • *
  • 2.88 - Umstellung auf Java 1.8
  • *
  • 2.89 - neue Methode in ConvTools
  • *
  • 2.90 - Umstellung von com.tsn.cts auf com.sta.cts (Januar 2016)
  • *
  • 3.92 - Umstellung auf Converter3 mit FOP 2.1
  • *
  • 3.101 - Umstellung auf Maven, Patch ToXMLStream wg. Zeilenumbruch nach XML-Header
  • *
  • 3.109 - ab hier Verteilung ?ber Maven-Central, erste verwendbare Version 3.110
  • *
* *

Copyright: Copyright (c) 2001-2023

*

Company: >StA-Soft<

* @author StA * @version 3.119 */ public final class ConvRunner { /** * Converter-Version. */ public static final String VERSION = Converter3VersionHelper.VERSION; /** * Converter-Copyright. */ public static final String COPYRIGHT = Converter3VersionHelper.COPYRIGHT; /** * Converter-Company. */ public static final String COMPANY = Converter3VersionHelper.COMPANY; //=========================================================================== /** * Name des DTD-Files / der DTD-Datei = Struktur der Quelldatei. */ private String myDTDFileName; /** * Name der Quelldatei. */ private String mySrcFileName; /** * Name des XSL-Files bzw. Liste von XSL-File-Namen und Transformations-Codes. */ private String myXSLFileNames; /** * Tempor?res Verzeichnis incl. Dateiname f?r tempor?re Dateien. */ private String myTmpFilePath; /** * Pfad incl. Dateiname excl. Extension f?r die Zieldatei(en). */ private String myDstFilePath; /** * Typ (Extension) der Zieldatei(en). */ private String myDstFileType; //=========================================================================== /** * Converter-Version ermitteln. * @return Converter-Version */ public static String getVersion() { return VERSION; } /** * Copyright ermitteln. * @return Copyright */ public static String getCopyright() { return COPYRIGHT; } /** * Company ermitteln. * @return Company */ public static String getCompany() { return COMPANY; } //=========================================================================== /** * Standard-Constructor. Es wird reset() aufgerufen. */ private ConvRunner() { reset(); } //--------------------------------------------------------------------------- /** * ConvRunner zur?cksetzen. Diese Methode kann anstelle einer * Neu-Instantiirung der Klasse verwendet werden, um den Ausgangszustand * wieder herzustellen, falls der ConvRunner mehrfach verwendet werden soll. */ public void reset() { myDTDFileName = "."; mySrcFileName = null; myTmpFilePath = null; } /** * Name des DTD-Files / der DTD-Datei = Struktur der Quelldatei vorgeben. * @param aDTDFileName DTD-Dateiname */ public void setDTDFileName(String aDTDFileName) { myDTDFileName = aDTDFileName; } /** * Name der Quelldatei vorgeben. * @param aSrcFileName Name der Quelldatei */ public void setSrcFileName(String aSrcFileName) { mySrcFileName = aSrcFileName; } /** * Name des XSL-Files bzw. Liste von XSL-File-Namen und Transformations-Codes * vorgeben. * @param aXSLFileNames Name des XSL-Files bzw. Liste von XSL-File-Namen * und Transformations-Codes */ public void setXSLFileNames(String aXSLFileNames) { myXSLFileNames = aXSLFileNames; } /** * Tempor?res Verzeichnis incl. Dateiname f?r tempor?re Dateien vorgeben. * @param aTmpFilePath Tempor?res Verzeichnis incl. Dateiname f?r tempor?re * Dateien */ public void setTmpFilePath(String aTmpFilePath) { myTmpFilePath = aTmpFilePath; } /** * Pfad incl. Dateiname excl. Extension f?r die Zieldatei(en) vorgeben. * Die Vorgabe f?r tempor?re Dateien wird automatisch gesetzt, falls noch * nicht erfolgt. * @param aDstFilePath Pfad incl. Dateiname excl. Extension f?r die * Zieldatei(en) */ public void setDstFilePath(String aDstFilePath) { myDstFilePath = aDstFilePath; if (myTmpFilePath == null) { myTmpFilePath = aDstFilePath; } } /** * Typ (Extension) der Zieldatei(en) vorgeben. * @param aDstFileType Typ (Extension) der Zieldatei(en) */ public void setDstFileType(String aDstFileType) { myDstFileType = aDstFileType; } /** * Pfad incl. Dateiname und incl. Extension f?r die Zieldatei(en) vorgeben. * Es werden die Methoden setDstFilePath und setDstFileType aufgerufen. * @param aDstFileName Pfad incl. Dateiname und incl. Extension f?r die * Zieldatei(en) */ public void setDstFileName(String aDstFileName) { int i = aDstFileName.lastIndexOf("."); String locDstFilePath = aDstFileName.substring(0, i); String locDstFileType = aDstFileName.substring(i + 1); setDstFilePath(locDstFilePath); setDstFileType(locDstFileType); } //--------------------------------------------------------------------------- /** * Die eigentliche zentrale Converter-Routine. In dieser Routine wird der * Gesamtvorgang von Konvertierung und Transformation realisiert. Die * notwendigen Parameter m?ssen vor dem Aufruf dieser Methode mit den * Set-Methoden vorgegeben werden. *

* Konvertierung: *

* Bei der Konvertierung gibt es 2 M?glichkeiten: Entweder wird eine DTD-Datei * angegeben oder eben nicht. Im 1. Fall (DTD angegeben) erfolgt eine * Konvertierung der Quelldatei (SrcFileName) nach XML. Im 2. Fall (keine * DTD-Datei angegeben) wird dieser Schritt ausgelassen und davon ausgegangen, * da? es sich bei der Quelldatei bereits um eine XML-Datei handelt. *

* Transformation: *

* Die Transformation wird nur dann ausgef?hrt, wenn wenigstens eine XSL-Datei * bzw. ein Transformations-Code vorgegeben wurde. * @throws Exception falls ein Fehler auftritt */ public void runConv() throws Exception { if ((myDTDFileName != null) && (myDTDFileName.length() != 0) && (!myDTDFileName.equals("."))) { // Initialisierung eines DTD-Parsers, Parsen der DTD und // Ablage im Speicher. DTDParser dtdparser = new DTDParser(new File(myDTDFileName), false); DTD dtd = dtdparser.parse(true); // Element "Scanner" in der DTD suchen // Standardwert des Attributs "class" ermitteln (= Scanner-Klassen-Name) DTDElement e = (DTDElement) dtd.elements.get("Scanner"); DTDAttribute a = (DTDAttribute) e.attributes.get("class"); String aClass = a.defaultValue; // ermittelte Scanner-Klasse instantiieren und // mit dem SrcFileName initialisieren Scanner scanner = (Scanner) Class.forName(aClass).newInstance(); scanner.init(mySrcFileName); try { // Standardwerte der restlichen Attribute des Elements Scanner // zu einer Hash-Tabelle zusammenfassen und per InitH dem // Scanner ?bergeben. Enumeration en = e.attributes.elements(); Hashtable ht = new Hashtable(); while (en.hasMoreElements()) { DTDAttribute a1 = (DTDAttribute) en.nextElement(); if (!a1.defaultValue.equals("class")) { ht.put(a1.name, a1.defaultValue); } } scanner.initH(ht); // optional: Debug-Modus einschalten // scanner.setXDebug(true); // Parser f?r EDI/CSV/XML? initialisieren und parsen Parser parser = new Parser(); if ((myXSLFileNames != null) && (myXSLFileNames.length() != 0) && (!myXSLFileNames.equals("."))) { String aTmpFileType; /* if (myDstFileType == "tmp") { aTmpFileType = "temp"; } else { */ aTmpFileType = "tmp"; /* } */ int cnt = parser.convert(dtd, "Root", scanner, myDstFilePath, aTmpFileType); if (cnt == 0) { throw new Exception("Error (ConvRunner.runConv::conv+trans): Error while converting."); } // Transformer initialisieren und transformieren // Idee: // Wenn XSLFileNames ein Vector ist, dann f?r alle Vector-Elemente (j): // Trenne FileName nach ";"s auf => ein oder mehrere File-Namen (i) // Transformiere TMP0 ---(FileName[0])---> TMP1 // Transformiere TMP1 ---(FileName[1])---> TMP2 // usw. ---> TMP(i) // TMP(i) => DestType[j] // => F?r jede TMP-Datei kann/k?nnen eine/mehrere Transformationsmenge/n // angewendet werden XTransformer transformer = new XTransformer(); String aTmpName; int i; for (i = 0; i < cnt; i++) { if (i == 0) { aTmpName = ""; } else { aTmpName = Integer.toString(i); } transformer.mtransform(myDstFilePath + aTmpName + "." + aTmpFileType, myXSLFileNames, myDstFilePath + aTmpName + "." + myDstFileType, true); } } else { int cnt = parser.convert(dtd, "Root", scanner, myDstFilePath, myDstFileType); if (cnt == 0) { throw new Exception("Error (ConvRunner.runConv::conv-only): Error while converting."); } } } finally { scanner.done(); } } else { if ((myXSLFileNames != null) && (myXSLFileNames.length() != 0) && (!myXSLFileNames.equals("."))) { XTransformer transformer = new XTransformer(); transformer.mtransform(mySrcFileName, myXSLFileNames, myDstFilePath + "." + myDstFileType, false); } else { throw new Exception("Error (ConvRunner.runConv::trans-only): Missing XSLFileNames."); } } } //--------------------------------------------------------------------------- /** * "Abk?rzung" f?r Konvertierung. * @param aDTDFileName wie in den Set-Methoden * @param aSrcFileName wie in den Set-Methoden * @param aXSLFileNames wie in den Set-Methoden * @param aTmpFilePath wie in den Set-Methoden * @param aDstFilePath wie in den Set-Methoden * @param aDstFileType wie in den Set-Methoden * @throws Exception wie in runConv() */ public static void runConv(String aDTDFileName, String aSrcFileName, String aXSLFileNames, String aTmpFilePath, String aDstFilePath, String aDstFileType) throws Exception { ConvRunner cr = new ConvRunner(); cr.setDTDFileName(aDTDFileName); cr.setSrcFileName(aSrcFileName); cr.setXSLFileNames(aXSLFileNames); cr.setTmpFilePath(aTmpFilePath); cr.setDstFilePath(aDstFilePath); cr.setDstFileType(aDstFileType); cr.runConv(); } /** * "Abk?rzung" f?r Konvertierung. * @param aDTDFileName wie in den Set-Methoden * @param aSrcFileName wie in den Set-Methoden * @param aXSLFileNames wie in den Set-Methoden * @param aTmpFilePath wie in den Set-Methoden * @param aDstFileName wie in den Set-Methoden * @throws Exception wie in runConv() */ public static void runConv(String aDTDFileName, String aSrcFileName, String aXSLFileNames, String aTmpFilePath, String aDstFileName) throws Exception { ConvRunner cr = new ConvRunner(); cr.setDTDFileName(aDTDFileName); cr.setSrcFileName(aSrcFileName); cr.setXSLFileNames(aXSLFileNames); cr.setTmpFilePath(aTmpFilePath); cr.setDstFileName(aDstFileName); cr.runConv(); } //--------------------------------------------------------------------------- /** * Main-Methode. * @param args die Kommandozeilenargumente/Parameter */ public static void main(String[] args) { MLogEntry mle = new MLogEntry4Text(); mle.setMLogFormat("%msg"); mle.setBreakAfterOutput(true); MLogger.addMLogEntryTS(mle); try { MLogger.inf(""); MLogger.inf("Converter/Transformer System Version " + VERSION); MLogger.inf("Copyright (c) " + COPYRIGHT + " " + COMPANY + " (StA)"); MLogger.inf(""); if ((args.length >= 1) && "-err".equals(args[0])) { mle.setMaxLevel(MLogEntry.ERROR); args = Arrays.copyOfRange(args, 1, args.length); } else if ((args.length >= 1) && "-wrn".equals(args[0])) { mle.setMaxLevel(MLogEntry.WARNING); args = Arrays.copyOfRange(args, 1, args.length); } else if ((args.length >= 1) && "-inf".equals(args[0])) { mle.setMaxLevel(MLogEntry.INFO); args = Arrays.copyOfRange(args, 1, args.length); } else if ((args.length >= 1) && "-msg".equals(args[0])) { mle.setMaxLevel(MLogEntry.MESSAGE); args = Arrays.copyOfRange(args, 1, args.length); } else if ((args.length >= 1) && "-deb".equals(args[0])) { mle.setMaxLevel(MLogEntry.DEBUG); args = Arrays.copyOfRange(args, 1, args.length); } else if ((args.length >= 1) && "-all".equals(args[0])) { mle.setMaxLevel(MLogEntry.ALL); args = Arrays.copyOfRange(args, 1, args.length); } if (args.length >= 4) { try { if (args.length == 4) { runConv(args[0], args[1], args[2], null, args[3]); } else { runConv(args[0], args[1], args[2], null, args[3], args[4]); } } catch (Exception e) { MLogger.err("Error (ConvRunner): " + e.getMessage()); } } else if ((args.length == 1) && (args[0].equals("-infos"))) { Hashtable ht = ConvRunnerHelper.getEnvironmentHash(); Enumeration e = ht.keys(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); if ((key != null) && key.startsWith("version.")) { Object value = ht.get(key); if (value instanceof String) { MLogger.inf(key + "=" + value); } } } MLogger.inf(""); MLogger.inf("FOP: " + org.apache.fop.Version.getVersion()); MLogger.inf(""); } else if ((args.length == 1) && (args[0].equals("-info"))) { MLogger.inf("Xerces-Version: " + ConvRunnerHelper.getXercesVersion()); MLogger.inf("Xalan-Version: " + ConvRunnerHelper.getXalanVersion()); MLogger.inf("Batik-Version: " + ConvRunnerHelper.getBatikVersion()); MLogger.inf("FOP-Version: " + ConvRunnerHelper.getFOPVersion()); } else if ((args.length == 1) && (args[0].equals("-xalan"))) { ConvRunnerHelper.checkEnvironment(null); MLogger.inf(""); } else if ((args.length == 2) && (args[0].equals("-parse"))) { XMLElement.run(args[1]); } else { if ((args.length != 1) || (!args[0].equals("-help"))) { MLogger.err("Syntax error."); MLogger.err(""); } MLogger.err("Usage:"); MLogger.err(""); MLogger.err(" DTDFileName SrcFileName XSLFileNames DstFilePath DstFileType"); MLogger.err("or"); MLogger.err(" DTDFileName SrcFileName XSLFileNames DstFileName"); MLogger.err("or"); MLogger.err(" -help"); MLogger.err("or"); MLogger.err(" -infos"); MLogger.err("or"); MLogger.err(" -info"); MLogger.err("or"); MLogger.err(" -parse FileName"); MLogger.err(""); MLogger.err(" DTDFileName ..... File name for DTD-File, or . if not used."); MLogger.err(" SrcFileName ..... File name for Source file, needs to be xml if DTD=."); MLogger.err(" XSLFileNames ..... ';' separated list of XSL-Files, or . if not used."); MLogger.err(" DstFilePath ..... Path for Destination-File, incl. Name, excl. Extension."); MLogger.err(" DstFileType ..... Extension for Destination-File."); MLogger.err(" DstFileName ..... File name for Destination-File, =Path+Type"); MLogger.err(""); MLogger.err("Special \"XSLFileNames\" (transformation codes):"); MLogger.err(""); MLogger.err(" HXML ... special transformation to autom. build hierarchies"); MLogger.err(" L2H(filename) ... special transformation to build hierarchies desc. by file"); MLogger.err(" FOP ... create PDF from XSL-FO source XML file"); MLogger.err(" PS ... create PS (PostScript) from XSL-FO source XML file"); MLogger.err(" HSSF ... process or create MS-Office (Excel) documents (dep. on file ext.)"); MLogger.err(" BATIK ... render SVG to JPG, TIF or PNG (dep. on file ext.)"); MLogger.err(""); MLogger.err("Parameters for Stylesheets:"); MLogger.err(""); MLogger.err(" XSLFileName(Name=Value)"); MLogger.err(" XSLFileName(Name1=Value1)(Name2=Value2)..."); MLogger.err(""); MLogger.err(" A parameter name have to be an identifier, only letters and numbers are allowed."); MLogger.err(" Values must not contain ')' and ';', spaces are allowed, norm. used for filenames"); MLogger.err(" or (simple string) stylesheet options."); MLogger.err(""); MLogger.err("Examples:"); MLogger.err(""); MLogger.err(" mappe1.dtd mappe1.csv mappe1.xsl mappe1 out"); MLogger.err(" mappe1.dtd mappe1.csv mappe1.xsl mappe1.out"); MLogger.err(" . mappe1.xml mappe1.xsl mappe1.out"); MLogger.err(" mappe1.dtd mappe1.csv . mappe1.xml"); MLogger.err(""); MLogger.err("More complex examples:"); MLogger.err(""); MLogger.err(" convert.dtd convert.csv \"L2H(hierarchy_convert.xml)\" convert2.xml"); MLogger.err(" . checkstyle_errors.xml \"checkstyle_frm.xsl;report_frm_htm.xsl\" checkstyle.htm"); MLogger.err(" . checkstyle_errors.xml \"checkstyle_frm.xsl;report_frm_fo.xsl;FOP\" checkstyle.pdf"); MLogger.err(" . energy.svg BATIK energy.png"); MLogger.err(" . hssf.xls HSSF hssf1.xml"); MLogger.err(" . hssf1.xml HSSF hssf1.xls"); MLogger.err(""); } } finally { MLogger.removeMLogEntryTS(mle); } System.exit(0); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy