/** * $Id: ConvertAnyDoc2.java 1 2007-06-04 10:06:18Z pascal $ * * * TODO : alot */ import java.io.*; import java.util.ArrayList; import java.util.Vector; /** * @category anyProjekt -> anyDocument * @see anyForum * @serial $Id: ConvertAnyDoc2.java 1 2007-06-04 10:06:18Z pascal $ * @since 2007-06-01 Description: converts an anyDocument to another format like html, anyWiki etc. * @author pc * @TODO: MVC richtig umsetzen, Fehlerbehandlungen, Umsetzung als barrierefreies Servlet, GUI fŸrs Taggen des anyDocuments ... */ public class ConvertAnyDoc2 { /** * Description: erwartet zwei Parameter: 1. quelle.txt, 2. Format, in das zu konvertieren ist * * @param: String args[] */ public static void main(String[] args) throws IOException { if (args.length ==1) { ConvertAnyDoc_MVC.print_hilfe(); return; } if (args.length < 2) { System.out.println("Es werden die internen Testparameter genommen: 'ConvertAnyDoc2 convertQuelleTest.txt anyForum'\n "); args = new String[] { "ConvertQuelleTest.txt", "anyForum" }; } try { ConvertAnyDoc_MVC cad = new ConvertAnyDoc_MVC(args[0]); cad.model_convert2("Convert_regEx."+args[1]); cad.view_save("Converted.txt"); } catch (Exception e) { System.out.println("ERROR: es gab einen Fehler:\n"); e.printStackTrace(); } } } /** * Description: diese Classe bildet die eigentliche Funktionalitaet ab. * * @author pc */ class ConvertAnyDoc_MVC { private final static String[] formate = { "anyWiki", "2do:pdf", "2do:anyForum", "2do:html", "2do:rtf" }; // spaeter mal auslagern in eine Datei. dadurch dynamischer private final String filename_chscheSubset="Convert_chscheSubset.txt"; // es ist also wichtig sich im richtigen Verzeichnis zu befinden private String[] strArr_chscheSubset; // es ist also wichtig sich im richtigen Verzeichnis zu befinden private String str_model; private String str_view; private String str_format; // das wird spŠter mal aus der Datei eingelesen ... //private String[][] regexReplace = new String[2][]; //{ "<.*>" }; /** * Description: Der eigene Konstruktor nimmt zur Initialisierung die Aufrufparameter entgegen * Ausserdem werden das miminale ch'sche Subset eingelesen - ohne das gehts nicht. * @param model_filename * @param str_format */ ConvertAnyDoc_MVC(String model_filename) { try { this.strArr_chscheSubset=file_load_array(filename_chscheSubset); this.str_model=file_load(model_filename); } catch (Exception e) { System.out.println("ERROR: es gab einen Fehler beim Laden der Daten:\n"); e.printStackTrace(); System.out.println("Der richtige Aufruf lautet z.B. so: \n ConvertAnyDoc2 quelle.txt anyWiki \nDie Datei 'quelle.txt' genŸgt den anyDoc Anforderungen, die UnterstŸtzten Formate sind:\n"); for (int i = 0; i < formate.length; i++) { System.out.println(formate[i]); } } } /** * Description: loads a given filename and return a String[] of the content of the file. * @param filename * @return String[] content of the file, line per line in an [] */ private String[] file_load_array (String filename) { ArrayList al = new ArrayList(); try { File file = new File(filename); if (file.exists()) { FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedReader(fileReader); String entry; while ((entry = reader.readLine()) != null) { al.add(entry); } reader.close(); } else { System.out.println("ERROR: Das File "+ file.getName()+" existiert nicht! "); } } catch (Exception e) { System.out.println("es gab einen IO-Fehler:\n"); e.printStackTrace(); } String[] tmp_strArr= new String[al.size()]; for (int i=0; i< tmp_strArr.length; i++) { tmp_strArr[i]=al.get(i); } return tmp_strArr; } /** * Description: loads a given filename and return a String of the content of the file. * @param filename * @return String content of the file */ private String file_load (String filename) { StringBuffer sb = new StringBuffer(); try { File file = new File(filename); if (file.exists()) { FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedReader(fileReader); String entry; while ((entry = reader.readLine()) != null) { sb.append(entry); } reader.close(); } } catch (Exception e) { System.out.println("es gab einen IO-Fehler:\n"); e.printStackTrace(); } return sb.toString(); } /** * Description: es wird ein String uebergeben, welcher das Format bezeichnet, in das konvertiert werden soll. * Dann wird die dazugehoerige Datei ConvertAnyDoc_regexe.* gesucht und wenn vorhanden in das Stringarray geladen. * @param format */ private String[][] setRegexReplace(String filename) { String[] regexReplace_oneLine= file_load_array(filename); String[] str_tmp; ArrayList x_regexReplace = new ArrayList(); ArrayList y_regexReplace = new ArrayList(); try { for (int i=0; i< regexReplace_oneLine.length; i++) { str_tmp=regexReplace_oneLine[i].split(" , "); if (str_tmp.length>2 ) { System.out.println("WARNING: Die Datei zum Format von "+filename+"hat mehr als die erlaubten zwei Spalten in einer Zeile. "); } // hier werden die zwei Spalten im regex-Model gelesen ... x_regexReplace.add(i,str_tmp[0]); y_regexReplace.add(i,str_tmp[1]); } } catch (Exception e) { System.out.println("Die RegEx-Datei "+ filename+" ist korrupt. Moeglicherweise fehlen bloss leerzeichen zwischen dem Komma der zwei Spalten"); } // ... hier werden die zwei Spalten in die passende [][] kopiert String[][] tmp_strArr = new String[2][x_regexReplace.size()]; for ( int i=0; i< x_regexReplace.size()-1; i++) { tmp_strArr[0][i]= x_regexReplace.get(i); tmp_strArr[1][i]= y_regexReplace.get(i); } return tmp_strArr; } /** * Description: speichert den aktuellen view der Klasse. * * @param fileName * @throws java.io.IOException */ void view_save(String fileName) throws java.io.IOException { FileOutputStream fos; byte[] b; File file = new File(fileName); // generates a file fos = new FileOutputStream(file); b = str_view.getBytes(); fos.write(b); fos.flush(); fos.close(); } /** * Description: nimmt den String, der aus dem File in der main-Methode gemacht wurde (also das Model), und * wendet darauf die regexe (aus einem anderen file, identifiziert durch den Paramter "format") an. */ String model_convert2(String format) throws java.io.IOException { String[][] regexReplace = new String[2][]; String str_model = this.str_model; System.out.println("ORIGINAL Model:\n"+str_model); regexReplace=setRegexReplace(format); //str_model = str_model.replaceAll("\\\\begin\\{quote\\}", "\n[QUOTE]"); for (int y=0; y