1d127360fSAndrew Rist /************************************************************** 2*f3abe594Smseidel * 3d127360fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4d127360fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5d127360fSAndrew Rist * distributed with this work for additional information 6d127360fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7d127360fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8d127360fSAndrew Rist * "License"); you may not use this file except in compliance 9d127360fSAndrew Rist * with the License. You may obtain a copy of the License at 10*f3abe594Smseidel * 11d127360fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f3abe594Smseidel * 13d127360fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14d127360fSAndrew Rist * software distributed under the License is distributed on an 15d127360fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16d127360fSAndrew Rist * KIND, either express or implied. See the License for the 17d127360fSAndrew Rist * specific language governing permissions and limitations 18d127360fSAndrew Rist * under the License. 19*f3abe594Smseidel * 20d127360fSAndrew Rist *************************************************************/ 21d127360fSAndrew Rist 22d127360fSAndrew Rist 23*f3abe594Smseidel 24cdf0e10cSrcweir /* 25cdf0e10cSrcweir * Converter.java 26cdf0e10cSrcweir * 27cdf0e10cSrcweir * create Source and Target 28cdf0e10cSrcweir * for converting 29cdf0e10cSrcweir * TODO maybe a factory would be good here 30cdf0e10cSrcweir */ 31cdf0e10cSrcweir 32cdf0e10cSrcweir package com.sun.star.tooling.converter; 33cdf0e10cSrcweir 34cdf0e10cSrcweir import java.io.BufferedOutputStream; 35cdf0e10cSrcweir import java.io.File; 36cdf0e10cSrcweir import java.io.FileNotFoundException; 37cdf0e10cSrcweir import java.io.FileOutputStream; 38cdf0e10cSrcweir import java.io.IOException; 39cdf0e10cSrcweir import java.io.OutputStream; 40cdf0e10cSrcweir 41cdf0e10cSrcweir import javax.xml.parsers.ParserConfigurationException; 42cdf0e10cSrcweir import javax.xml.parsers.SAXParser; 43cdf0e10cSrcweir import javax.xml.parsers.SAXParserFactory; 44cdf0e10cSrcweir 45cdf0e10cSrcweir import org.xml.sax.EntityResolver; 46cdf0e10cSrcweir import org.xml.sax.SAXException; 47cdf0e10cSrcweir import org.xml.sax.SAXParseException; 48cdf0e10cSrcweir import org.xml.sax.XMLReader; 49cdf0e10cSrcweir import org.xml.sax.helpers.DefaultHandler; 50cdf0e10cSrcweir 51cdf0e10cSrcweir /** 52*f3abe594Smseidel * 53cdf0e10cSrcweir * This class handles the creating of the source to read from, 54cdf0e10cSrcweir * the target to write to and the appropriate DataHandler 55*f3abe594Smseidel * 56*f3abe594Smseidel * @author Christian Schmidt 2005 57cdf0e10cSrcweir */ 58cdf0e10cSrcweir public final class Converter { 59cdf0e10cSrcweir 60cdf0e10cSrcweir /** 61*f3abe594Smseidel * the used charset i.e. UTF-8 62cdf0e10cSrcweir */ 63cdf0e10cSrcweir private final static String CHARSET = new String("UTF-8"); 64cdf0e10cSrcweir 65cdf0e10cSrcweir private static final String EMPTY = new String(""); 66*f3abe594Smseidel 67cdf0e10cSrcweir /** 68cdf0e10cSrcweir * The DataHandler use to connect reader and writer 69cdf0e10cSrcweir */ 70cdf0e10cSrcweir private static DataHandler handler; 71cdf0e10cSrcweir 72cdf0e10cSrcweir /** 73cdf0e10cSrcweir * Counting the lines written by a writer 74cdf0e10cSrcweir */ 75cdf0e10cSrcweir private static int lineCounter; 76*f3abe594Smseidel 77cdf0e10cSrcweir /** 78cdf0e10cSrcweir * The target to write to 79cdf0e10cSrcweir */ 80cdf0e10cSrcweir private static DataWriter theTargetWriter; 81*f3abe594Smseidel 82*f3abe594Smseidel 83cdf0e10cSrcweir /** 84cdf0e10cSrcweir * Overwrite existing files 85cdf0e10cSrcweir */ 86cdf0e10cSrcweir private boolean overwrite = false; 87cdf0e10cSrcweir /** 88cdf0e10cSrcweir * The source to read from 89cdf0e10cSrcweir */ 90cdf0e10cSrcweir private Source reader; 91cdf0e10cSrcweir /** 92cdf0e10cSrcweir * The name of the source file 93cdf0e10cSrcweir */ 94cdf0e10cSrcweir private String sourceString; 95cdf0e10cSrcweir /** 96*f3abe594Smseidel * the Type of the Source file (SDF,GSI,XLIFF) 97cdf0e10cSrcweir */ 98cdf0e10cSrcweir private String sourceType; 99cdf0e10cSrcweir /** 100*f3abe594Smseidel * The name of the target file 101cdf0e10cSrcweir */ 102cdf0e10cSrcweir private String targetString; 103cdf0e10cSrcweir /** 104*f3abe594Smseidel * the Type of the Target file (SDF,GSI,XLIFF) 105cdf0e10cSrcweir */ 106*f3abe594Smseidel private String targetType; 107cdf0e10cSrcweir /** 108cdf0e10cSrcweir * The writer that handles the output 109cdf0e10cSrcweir */ 110cdf0e10cSrcweir private Target writer; 111cdf0e10cSrcweir 112cdf0e10cSrcweir /** 113cdf0e10cSrcweir * The sourceLanguage 114cdf0e10cSrcweir */ 115cdf0e10cSrcweir String sourceLanguage = "en-US"; 116*f3abe594Smseidel 117cdf0e10cSrcweir /** 118cdf0e10cSrcweir * The targetLanguage 119cdf0e10cSrcweir */ 120cdf0e10cSrcweir String targetLanguage = ""; 121cdf0e10cSrcweir 122cdf0e10cSrcweir /** 123cdf0e10cSrcweir * The name of the second source, needed for GSI to SDF merge 124cdf0e10cSrcweir */ 125cdf0e10cSrcweir private String secondSourceString=EMPTY; 126cdf0e10cSrcweir 127cdf0e10cSrcweir 128cdf0e10cSrcweir /** 129cdf0e10cSrcweir * Get the line counter 130cdf0e10cSrcweir * @return Returns the lineCounter. 131cdf0e10cSrcweir */ getLineCounter()132cdf0e10cSrcweir public static int getLineCounter() { 133cdf0e10cSrcweir return lineCounter; 134cdf0e10cSrcweir } 135cdf0e10cSrcweir 136cdf0e10cSrcweir /** 137cdf0e10cSrcweir * increment the lineCounter 138cdf0e10cSrcweir */ countLine()139cdf0e10cSrcweir final static void countLine() { 140cdf0e10cSrcweir lineCounter++; 141cdf0e10cSrcweir } 142cdf0e10cSrcweir 143cdf0e10cSrcweir /** 144cdf0e10cSrcweir * Creates a new instance of Converter 145*f3abe594Smseidel * 146cdf0e10cSrcweir * @param sourceType the type of the sourceFile 147cdf0e10cSrcweir * @param sourceString the name of the sourceFile 148cdf0e10cSrcweir * @param SourceLanguage the ISO Id of the sourceLanguage 149cdf0e10cSrcweir * @param targetType the type of the targetFile 150cdf0e10cSrcweir * @param targetString the name of the targetFile 151cdf0e10cSrcweir * @param TargetLanguage the ISO Id of the targetLanguage 152cdf0e10cSrcweir * @param secondSourceString the name of the second sourceFile (GSI merge only) 153cdf0e10cSrcweir * @param overwrite indicates whether overwrite existing files 154cdf0e10cSrcweir * @throws IOException 155cdf0e10cSrcweir * @throws Exception 156cdf0e10cSrcweir */ Converter(String sourceType, String sourceString, String SourceLanguage, String targetType, String targetString, String TargetLanguage,String secondSourceString, boolean overwrite)157cdf0e10cSrcweir public Converter(String sourceType, String sourceString, 158cdf0e10cSrcweir String SourceLanguage, String targetType, String targetString, 159cdf0e10cSrcweir String TargetLanguage,String secondSourceString, boolean overwrite) throws IOException, 160cdf0e10cSrcweir Exception { 161cdf0e10cSrcweir 162cdf0e10cSrcweir this.sourceType = sourceType; 163cdf0e10cSrcweir this.sourceString = sourceString; 164cdf0e10cSrcweir this.sourceLanguage = SourceLanguage; 165cdf0e10cSrcweir this.targetType = targetType; 166cdf0e10cSrcweir this.targetString = targetString; 167cdf0e10cSrcweir this.targetLanguage = TargetLanguage; 168cdf0e10cSrcweir this.secondSourceString=secondSourceString; 169cdf0e10cSrcweir this.overwrite = overwrite; 170cdf0e10cSrcweir 171cdf0e10cSrcweir handler = new DataHandler(); 172cdf0e10cSrcweir 173cdf0e10cSrcweir if ("sdf".equalsIgnoreCase(sourceType)) { 174cdf0e10cSrcweir reader = new SDFSource(); 175cdf0e10cSrcweir } else if ("xliff".equalsIgnoreCase(sourceType)||"dbxliff".equalsIgnoreCase(sourceType)) { 176cdf0e10cSrcweir reader = new XLIFFSource(); 177cdf0e10cSrcweir } else if ("gsi".equalsIgnoreCase(sourceType)) { 178cdf0e10cSrcweir reader = new GSISource(); 179cdf0e10cSrcweir } else { 180cdf0e10cSrcweir throw new ConverterException("Unknown Source File Type: '"+sourceType+"'"); 181cdf0e10cSrcweir } 182cdf0e10cSrcweir 183cdf0e10cSrcweir if ("sdf".equalsIgnoreCase(targetType)) { 184cdf0e10cSrcweir writer = new SDFTarget(); 185cdf0e10cSrcweir } else if ("xliff".equalsIgnoreCase(targetType)) { 186cdf0e10cSrcweir writer = new XLIFFTarget(); 187cdf0e10cSrcweir } else if ("gsi".equalsIgnoreCase(targetType)) { 188cdf0e10cSrcweir writer = new GSITarget(); 189cdf0e10cSrcweir } else { 190cdf0e10cSrcweir throw new ConverterException("Unknown Target File Type: '"+targetType+"'"); 191cdf0e10cSrcweir } 192cdf0e10cSrcweir 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir /** 196cdf0e10cSrcweir * Do the converting from the source file format to the target file format 197*f3abe594Smseidel * 198cdf0e10cSrcweir * @throws IOException 199cdf0e10cSrcweir */ convert()200cdf0e10cSrcweir public final void convert() throws IOException { 201cdf0e10cSrcweir 202cdf0e10cSrcweir try { 203cdf0e10cSrcweir 204cdf0e10cSrcweir reader.convertTo(writer); 205cdf0e10cSrcweir 206cdf0e10cSrcweir //TODO this belongs in the Target Class 207cdf0e10cSrcweir theTargetWriter.flush(); 208cdf0e10cSrcweir theTargetWriter.close(); 209cdf0e10cSrcweir } catch (Exception e) { 210cdf0e10cSrcweir OutputHandler.out(e.getMessage()); 211cdf0e10cSrcweir } 212cdf0e10cSrcweir 213cdf0e10cSrcweir } 214*f3abe594Smseidel 215cdf0e10cSrcweir 216cdf0e10cSrcweir /** 217*f3abe594Smseidel * 218cdf0e10cSrcweir * Encapsulate the reading from an GSI file 219*f3abe594Smseidel * 220cdf0e10cSrcweir * @author Christian Schmidt 2005 221cdf0e10cSrcweir * 222cdf0e10cSrcweir */ 223cdf0e10cSrcweir private class GSISource implements Source { 224cdf0e10cSrcweir DataReader theSourceReader; 225cdf0e10cSrcweir /** 226cdf0e10cSrcweir * Create a new Instance of GSISource 227*f3abe594Smseidel * 228cdf0e10cSrcweir * @throws IOException 229cdf0e10cSrcweir * @throws Exception 230cdf0e10cSrcweir */ GSISource()231cdf0e10cSrcweir public GSISource() throws IOException { 232cdf0e10cSrcweir 233cdf0e10cSrcweir theSourceReader = new GSIandSDFMerger(new File(sourceString),new File(secondSourceString), sourceLanguage, 234cdf0e10cSrcweir targetLanguage, CHARSET); 235cdf0e10cSrcweir } 236cdf0e10cSrcweir convertTo(Target t)237cdf0e10cSrcweir public void convertTo(Target t) { 238*f3abe594Smseidel 239cdf0e10cSrcweir try { 240cdf0e10cSrcweir theTargetWriter = t.getWriter(); 241cdf0e10cSrcweir while (handler.fillDataFrom(theSourceReader)) { 242cdf0e10cSrcweir 243cdf0e10cSrcweir theTargetWriter.getDatafrom(handler); 244cdf0e10cSrcweir theTargetWriter.writeData(); 245cdf0e10cSrcweir } 246cdf0e10cSrcweir } catch (IOException e) { 247cdf0e10cSrcweir OutputHandler.out(e.getMessage()); 248cdf0e10cSrcweir 249cdf0e10cSrcweir } catch (Exception e) { 250cdf0e10cSrcweir e.printStackTrace(); 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253cdf0e10cSrcweir } 254cdf0e10cSrcweir 255cdf0e10cSrcweir } 256cdf0e10cSrcweir /** 257*f3abe594Smseidel * 258cdf0e10cSrcweir * Encapsulate to write to a GSI file 259*f3abe594Smseidel * 260cdf0e10cSrcweir * @author Christian Schmidt 2005 261cdf0e10cSrcweir * 262cdf0e10cSrcweir */ 263cdf0e10cSrcweir private class GSITarget implements Target { 264cdf0e10cSrcweir 265cdf0e10cSrcweir File target; 266*f3abe594Smseidel 267cdf0e10cSrcweir /** 268cdf0e10cSrcweir * Create a new Instance of GSITarget 269*f3abe594Smseidel * 270cdf0e10cSrcweir * @throws FileNotFoundException 271cdf0e10cSrcweir * @throws IOException 272cdf0e10cSrcweir */ GSITarget()273cdf0e10cSrcweir public GSITarget() throws FileNotFoundException, IOException { 274cdf0e10cSrcweir 275cdf0e10cSrcweir target = FileMaker.newFile(targetString, overwrite); 276cdf0e10cSrcweir theTargetWriter = new GSIWriter(new BufferedOutputStream( 277cdf0e10cSrcweir new FileOutputStream(target)), CHARSET); 278cdf0e10cSrcweir } 279cdf0e10cSrcweir getWriter()280cdf0e10cSrcweir public DataWriter getWriter() { 281*f3abe594Smseidel 282cdf0e10cSrcweir return theTargetWriter; 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir } 286cdf0e10cSrcweir /** 287*f3abe594Smseidel * 288cdf0e10cSrcweir * Encapsulate the reading from an SDF file 289*f3abe594Smseidel * 290cdf0e10cSrcweir * @author Christian Schmidt 2005 291*f3abe594Smseidel * 292cdf0e10cSrcweir */ 293cdf0e10cSrcweir private final class SDFSource implements Source { 294cdf0e10cSrcweir 295cdf0e10cSrcweir DataReader Source; 296cdf0e10cSrcweir 297cdf0e10cSrcweir /** 298cdf0e10cSrcweir * Create a new Instance of SDFSource 299cdf0e10cSrcweir * @throws IOException 300cdf0e10cSrcweir * @throws Exception 301cdf0e10cSrcweir */ SDFSource()302cdf0e10cSrcweir public SDFSource() throws IOException, Exception { 303cdf0e10cSrcweir 304cdf0e10cSrcweir Source = new SDFReader(new File(sourceString), sourceLanguage, 305cdf0e10cSrcweir targetLanguage, CHARSET); 306cdf0e10cSrcweir } 307cdf0e10cSrcweir convertTo(Target t)308cdf0e10cSrcweir public void convertTo(Target t) { 309cdf0e10cSrcweir try { 310cdf0e10cSrcweir theTargetWriter = t.getWriter(); 311cdf0e10cSrcweir while (handler.fillDataFrom(Source)) { 312cdf0e10cSrcweir 313cdf0e10cSrcweir theTargetWriter.getDatafrom(handler); 314cdf0e10cSrcweir theTargetWriter.writeData(); 315cdf0e10cSrcweir } 316cdf0e10cSrcweir 317cdf0e10cSrcweir } catch (IOException e) { 318cdf0e10cSrcweir OutputHandler.out(e.getMessage()); 319cdf0e10cSrcweir 320cdf0e10cSrcweir } catch (Exception e) { 321cdf0e10cSrcweir e.printStackTrace(); 322cdf0e10cSrcweir } 323cdf0e10cSrcweir 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir } 327cdf0e10cSrcweir /** 328cdf0e10cSrcweir * Encapsulate writing to a SDF file 329cdf0e10cSrcweir * 330cdf0e10cSrcweir * @author Christian Schmidt 2005 331cdf0e10cSrcweir * 332cdf0e10cSrcweir */ 333cdf0e10cSrcweir private class SDFTarget implements Target { 334cdf0e10cSrcweir 335cdf0e10cSrcweir /** 336cdf0e10cSrcweir * Create a new Instance of SDFTarget 337*f3abe594Smseidel * 338cdf0e10cSrcweir * @throws IOException 339cdf0e10cSrcweir */ SDFTarget()340cdf0e10cSrcweir public SDFTarget() throws IOException { 341cdf0e10cSrcweir File target = FileMaker.newFile(targetString, overwrite); 342cdf0e10cSrcweir theTargetWriter = new SDFWriter(new BufferedOutputStream( 343cdf0e10cSrcweir new FileOutputStream(target)), CHARSET); 344cdf0e10cSrcweir } 345cdf0e10cSrcweir 346cdf0e10cSrcweir /* (non-Javadoc) 347cdf0e10cSrcweir * @see com.sun.star.tooling.converter.Converter.Target#getWriter() 348cdf0e10cSrcweir */ getWriter()349cdf0e10cSrcweir public DataWriter getWriter() { 350cdf0e10cSrcweir 351cdf0e10cSrcweir return theTargetWriter; 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir } 355cdf0e10cSrcweir 356cdf0e10cSrcweir /** 357*f3abe594Smseidel * The interface for all convertible sources 358*f3abe594Smseidel * 359cdf0e10cSrcweir * @author Christian Schmidt 2005 360cdf0e10cSrcweir * 361cdf0e10cSrcweir */ 362cdf0e10cSrcweir private interface Source { 363*f3abe594Smseidel 364cdf0e10cSrcweir DataReader Source=null; 365cdf0e10cSrcweir /** 366cdf0e10cSrcweir * Convert this. to the designated target 367*f3abe594Smseidel * @param target the target of the converting 368cdf0e10cSrcweir * @throws IOException 369cdf0e10cSrcweir */ convertTo(Target target)370cdf0e10cSrcweir abstract void convertTo(Target target) throws IOException; 371cdf0e10cSrcweir } 372cdf0e10cSrcweir 373cdf0e10cSrcweir /** 374cdf0e10cSrcweir * The interface for all creatable targets 375*f3abe594Smseidel * 376cdf0e10cSrcweir * @author Christian Schmidt 2005 377cdf0e10cSrcweir * 378cdf0e10cSrcweir */ 379cdf0e10cSrcweir private interface Target { 380cdf0e10cSrcweir /** 381cdf0e10cSrcweir * The writer to use 382cdf0e10cSrcweir */ 383cdf0e10cSrcweir public OutputStream writer = null; 384cdf0e10cSrcweir 385cdf0e10cSrcweir /** 386cdf0e10cSrcweir * Get the writer 387cdf0e10cSrcweir * this target uses to write the 388*f3abe594Smseidel * data in the correct format. 389*f3abe594Smseidel * 390cdf0e10cSrcweir * @return the used DataWriter 391cdf0e10cSrcweir */ getWriter()392cdf0e10cSrcweir abstract DataWriter getWriter(); 393cdf0e10cSrcweir 394cdf0e10cSrcweir } 395cdf0e10cSrcweir /** 396cdf0e10cSrcweir * Encapsulate the reading from an XLIFF file 397cdf0e10cSrcweir * 398cdf0e10cSrcweir * @author Christian Schmidt 2005 399cdf0e10cSrcweir * 400cdf0e10cSrcweir */ 401cdf0e10cSrcweir private class XLIFFSource implements Source { 402cdf0e10cSrcweir File source; 403cdf0e10cSrcweir 404cdf0e10cSrcweir /** 405cdf0e10cSrcweir * Create a new Instance of XLIFFSource 406*f3abe594Smseidel * 407*f3abe594Smseidel * 408cdf0e10cSrcweir */ XLIFFSource()409cdf0e10cSrcweir public XLIFFSource() { 410cdf0e10cSrcweir 411cdf0e10cSrcweir source = new File(sourceString); 412cdf0e10cSrcweir } 413cdf0e10cSrcweir convertTo(Target t)414cdf0e10cSrcweir public void convertTo(Target t) throws IOException { 415cdf0e10cSrcweir try { 416cdf0e10cSrcweir System.setProperty("entityExpansionLimit", "1000000"); 417cdf0e10cSrcweir boolean laden = source.canRead(); 418cdf0e10cSrcweir if (laden) { 419cdf0e10cSrcweir DefaultHandler contentHandler=null; 420cdf0e10cSrcweir if("dbxliff".equalsIgnoreCase(sourceType)){ 421cdf0e10cSrcweir contentHandler = new XLIFFReader(handler, t 422cdf0e10cSrcweir .getWriter(),false); 423cdf0e10cSrcweir }else{ 424cdf0e10cSrcweir contentHandler = new XLIFFReader(handler, t 425cdf0e10cSrcweir .getWriter()); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir SAXParserFactory factory = SAXParserFactory.newInstance(); 428cdf0e10cSrcweir factory.setNamespaceAware( true ); 429cdf0e10cSrcweir factory.setValidating( true ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir SAXParser parser=factory.newSAXParser(); 432cdf0e10cSrcweir XMLReader xliffreader=parser.getXMLReader(); 433cdf0e10cSrcweir 434*f3abe594Smseidel 435*f3abe594Smseidel 436cdf0e10cSrcweir // XMLReader xliffreader = XMLReaderFactory 437cdf0e10cSrcweir // .createXMLReader("org.apache.crimson.parser.XMLReaderImpl"); 438cdf0e10cSrcweir xliffreader.setErrorHandler(contentHandler); 439cdf0e10cSrcweir xliffreader.setContentHandler(contentHandler); 440cdf0e10cSrcweir /* one possibility to resolve an extern entity (DTD) */ 441cdf0e10cSrcweir EntityResolver res = new Resolver(); 442cdf0e10cSrcweir xliffreader.setEntityResolver(res); 443cdf0e10cSrcweir /* 444cdf0e10cSrcweir * a second possibility to resolve an extern entity (DTD) 445*f3abe594Smseidel * 446cdf0e10cSrcweir * xliffreader.setFeature("xml.org/sax/features/validation",true); 447cdf0e10cSrcweir * xliffreader.setEntityResolver(new EntityResolver() { 448cdf0e10cSrcweir * public InputSource resolveEntity(java.lang.String 449cdf0e10cSrcweir * publicId, java.lang.String systemId) throws SAXException, 450cdf0e10cSrcweir * java.io.IOException { if (publicId.equals("-//XLIFF//DTD 451*f3abe594Smseidel * XLIFF//EN")) // this deactivates the OpenOffice DTD 452cdf0e10cSrcweir * return new InputSource(new ByteArrayInputStream( " <?xml 453cdf0e10cSrcweir * version='1.0' encoding='UTF-8'?>" .getBytes())); else 454cdf0e10cSrcweir * return null; } }); 455*f3abe594Smseidel * 456cdf0e10cSrcweir */ 457cdf0e10cSrcweir 458cdf0e10cSrcweir xliffreader.parse(sourceString); 459cdf0e10cSrcweir 460cdf0e10cSrcweir } else { 461*f3abe594Smseidel System.out.println("File does not exist"); 462cdf0e10cSrcweir } 463cdf0e10cSrcweir 464cdf0e10cSrcweir } catch (SAXParseException e) { 465cdf0e10cSrcweir try { 466cdf0e10cSrcweir theTargetWriter.flush(); 467cdf0e10cSrcweir } catch (IOException e1) { 468cdf0e10cSrcweir 469cdf0e10cSrcweir e1.printStackTrace(); 470cdf0e10cSrcweir } 471cdf0e10cSrcweir OutputHandler.out("PARSE ERROR Zeile " + e.getLineNumber() 472cdf0e10cSrcweir + ", " + e.getMessage()); 473cdf0e10cSrcweir 474cdf0e10cSrcweir }catch (SAXException e){ 475cdf0e10cSrcweir try { 476cdf0e10cSrcweir theTargetWriter.flush(); 477cdf0e10cSrcweir } catch (IOException e1) { 478cdf0e10cSrcweir 479cdf0e10cSrcweir e1.printStackTrace(); 480cdf0e10cSrcweir } 481*f3abe594Smseidel OutputHandler.out("PARSE EXCEPTION " + e.getMessage()); 482cdf0e10cSrcweir } catch (ParserConfigurationException e) { 483*f3abe594Smseidel OutputHandler.out("PARSER Configuration failed\n " + e.getMessage()); 484cdf0e10cSrcweir } 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir } 488cdf0e10cSrcweir /** 489cdf0e10cSrcweir * Encapsulate writing to a XLIFF file 490*f3abe594Smseidel * 491cdf0e10cSrcweir * @author Christian Schmidt 2005 492cdf0e10cSrcweir * 493cdf0e10cSrcweir */ 494cdf0e10cSrcweir private class XLIFFTarget implements Target { 495cdf0e10cSrcweir File target; 496cdf0e10cSrcweir 497cdf0e10cSrcweir /** 498cdf0e10cSrcweir * Create a new Instance of XLIFFTarget 499*f3abe594Smseidel * 500cdf0e10cSrcweir * @throws FileNotFoundException 501cdf0e10cSrcweir * @throws IOException 502cdf0e10cSrcweir */ XLIFFTarget()503cdf0e10cSrcweir public XLIFFTarget() throws FileNotFoundException, IOException { 504cdf0e10cSrcweir target = FileMaker.newFile(targetString, overwrite); 505cdf0e10cSrcweir theTargetWriter = new XLIFFWriter(new BufferedOutputStream( 506cdf0e10cSrcweir new FileOutputStream(target)), CHARSET); 507cdf0e10cSrcweir 508cdf0e10cSrcweir } 509cdf0e10cSrcweir getWriter()510cdf0e10cSrcweir public DataWriter getWriter() { 511cdf0e10cSrcweir 512cdf0e10cSrcweir return theTargetWriter; 513cdf0e10cSrcweir } 514cdf0e10cSrcweir } 515cdf0e10cSrcweir 516*f3abe594Smseidel } 517cdf0e10cSrcweir 518