|
楼主 |
发表于 2006-5-2 17:18
|
显示全部楼层
TMX.java
- package com.greenflute.tmx;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.log4j.Logger;
- import org.apache.log4j.PropertyConfigurator;
- import org.jdom.Document;
- import org.jdom.JDOMException;
- import org.jdom.Element;
- import org.jdom.DocType;
- import org.jdom.input.SAXBuilder;
- import org.jdom.output.XMLOutputter;
- import org.jdom.output.Format;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.*;
- public class TMX {
- private Hashtable properties = null;
- private ArrayList segments = null;
- public TMX() {
- logger = Logger.getLogger(TMX.class);
- properties = new Hashtable();
- segments = new ArrayList();
- }
- public void parseTMX(String filename) {
- try {
- SAXBuilder builder = new SAXBuilder();
- Document document = builder.build(filename);
- //doctpye
- DocType doctype = document.getDocType();
- properties.put("doctype.name", doctype.getElementName());
- properties.put("doctpye.systemid", doctype.getSystemID());
- logger.debug(doctype.getElementName());
- logger.debug(doctype.getPublicID());
- logger.debug(doctype.getSystemID());
- logger.debug(doctype.toString());
- //root element
- Element root = document.getRootElement();
- properties.put("tmx.version", root.getAttributeValue("version"));
- //header
- Element header = root.getChild("header");
- properties.put("header.creationtool", header.getAttributeValue("creationtool"));
- properties.put("header.creationtoolversion", header.getAttributeValue("creationtoolversion"));
- properties.put("header.segtype", header.getAttributeValue("segtype"));
- properties.put("header.o-tmf", header.getAttributeValue("o-tmf"));
- properties.put("header.adminlang", header.getAttributeValue("adminlang"));
- properties.put("header.srclang", header.getAttributeValue("srclang"));
- properties.put("header.datatype", header.getAttributeValue("datatype"));
- //body
- Element body = root.getChild("body");
- List tus = body.getChildren();
- Iterator it = tus.iterator();
- //loop through every tu,tuv,seg
- List tuvs = null;
- String src = null, target = null;
- Object temp = null;
- Element tu = null;
- boolean targetlangok = false; //targetlanguage
- while (it.hasNext()) {
- tu = (Element) it.next();
- tuvs = tu.getChildren();
- temp = tuvs.get(0);
- src = (temp == null) ? "" : ((Element) (temp)).getChild("seg").getText();
- temp = tuvs.get(1);
- target = (temp == null) ? "" : ((Element) (temp)).getChild("seg").getText();
- if (!targetlangok) {
- properties.put("header.targetlang", ((Element) (temp)).getAttributeValue("lang"));
- targetlangok = true;
- } else {
- segments.add(new String[]{src, target});
- }
- }
- document = null;
- builder = null;
- } catch (JDOMException e) {
- logger.error("Error occured in parsing TMX file!", e);
- } catch (IOException e) {
- logger.error("Error occured in parsing TMX file!", e);
- }
- }
- public void saveTMX(String filename) {
- Document document = new Document();
- Object temp = null;
- String src = null, target = null; //language
- //doctype
- temp = properties.get("doctpye.name");
- DocType doctype = new DocType(temp == null ? "tmx" : (String) temp);
- temp = properties.get("doctpye.systemid");
- doctype.setSystemID(temp == null ? "tmx11.dtd" : (String) temp);
- document.setDocType(doctype);
- //root
- Element root = document.setRootElement(new Element("tmx")).getRootElement();
- temp = properties.get("tmx.version");
- root.setAttribute("version", (temp == null ? "1.1" : (String) temp));
- //header
- Element header = new Element("header");
- temp = properties.get("header.creationtool");
- header.setAttribute("creationtool", temp == null ? "TMX2XLS" : (String) temp);
- temp = properties.get("header.creationtoolversion");
- header.setAttribute("creationtoolversion", temp == null ? "0.1" : (String) temp);
- temp = properties.get("header.segtype");
- header.setAttribute("segtype", temp == null ? "sentence" : (String) temp);
- temp = properties.get("header.o-tmf");
- header.setAttribute("o-tmf", temp == null ? "TMX2XLS" : (String) temp);
- temp = properties.get("header.adminlang");
- header.setAttribute("adminlang", temp == null ? "EN-US" : (String) temp);
- temp = properties.get("header.srclang");
- header.setAttribute("srclang", temp == null ? "DE" : (String) temp);
- src = temp == null ? "DE" : (String) temp; //srclanguage
- temp = properties.get("header.datatype");
- header.setAttribute("datatype", temp == null ? "plaintext" : (String) temp);
- root.addContent(header);
- temp = properties.get("header.targetlang");
- target = temp == null ? "LT" : (String) temp; //targetlanguage
- //body
- Element body = new Element("body");
- Element tu = null, tuv = null;
- String[] sentence = null;
- for (int i = 0; i < segments.size(); i++) {
- sentence = (String[]) segments.get(i);
- tu = new Element("tu");
- //src tuv
- tuv = new Element("tuv").
- setAttribute("lang", src).
- addContent(new Element("seg").setText(sentence[0]));
- tu.addContent(tuv);
- //target tuv
- tuv = new Element("tuv").
- setAttribute("lang", target).
- addContent(new Element("seg").setText(sentence[1]));
- tu.addContent(tuv);
- //add to body
- body.addContent(tu);
- }
- root.addContent(body);
- try {
- XMLOutputter outputter = new XMLOutputter();
- outputter.setFormat(Format.getPrettyFormat());
- outputter.output(document, new FileOutputStream(filename));
- //outputter.output(document, System.out);
- outputter = null;
- document = null;
- } catch (IOException e) {
- logger.error("Error occured in saving TMX file!", e);
- }
- }
- public void parseXLS(String filename) {
- try {
- HSSFWorkbook book = new HSSFWorkbook(new FileInputStream(filename));
- HSSFSheet header = book.getSheet("header");
- HSSFRow row = null;
- //check the file format
- if (header == null) {
- throw new Exception("Invalid XLS Format, Can't transform to TMX file!");
- }
- Iterator it = header.rowIterator();
- while (it.hasNext()) {
- row = (HSSFRow) it.next();
- properties.put(row.getCell((short) 0).getStringCellValue(),
- row.getCell((short) 1).getStringCellValue());
- logger.debug(row.getCell((short) 0).getStringCellValue());
- logger.debug(row.getCell((short) 1).getStringCellValue());
- }
- HSSFSheet body = book.getSheet("body");
- it = body.rowIterator();
- boolean targetlangok = false; //targetlanguage
- while (it.hasNext()) {
- //this is the first row!!
- if (!targetlangok) {
- properties.put("header.targetlang", ((HSSFRow) it.next()).getCell((short) 1).getStringCellValue());
- targetlangok = true;
- } else {
- row = (HSSFRow) it.next();
- segments.add(new String[]{row.getCell((short) 0).getStringCellValue(),
- row.getCell((short) 1).getStringCellValue()});
- logger.debug(row.getCell((short) 0).getStringCellValue());
- logger.debug(row.getCell((short) 1).getStringCellValue());
- }
- }
- } catch (IOException e) {
- logger.error("Error occured in parsing XLS file!", e);
- } catch (Exception e) {
- logger.error("Error occured in parsing XLS file!", e);
- }
- }
- public void saveXLS(String filename) {
- Object temp = null;
- String src = null, target = null;
- temp = properties.get("header.srclang");
- src = temp == null ? "DE" : (String) temp; //srclanguage
- temp = properties.get("header.targetlang");
- target = temp == null ? "LT" : (String) temp; //targetlanguage
- HSSFWorkbook book = new HSSFWorkbook();
- HSSFSheet body = book.createSheet("body");
- HSSFRow row = null;
- HSSFCell cell = null;
- //first row, language title
- row = body.createRow(0);
- row.createCell((short) 0).setCellValue(src);
- row.createCell((short) 1).setCellValue(target);
- //sentences
- String[] sentence = null;
- for (int i = 0; i < segments.size(); i++) {
- sentence = (String[]) segments.get(i);
- row = body.createRow(i + 1);
- cell = row.createCell((short) 0);
- cell.setEncoding((short) 1);
- cell.setCellValue(sentence[0]);
- cell = row.createCell((short) 1);
- cell.setEncoding((short) 1);
- cell.setCellValue(sentence[1]);
- logger.debug(sentence[0]);
- logger.debug(sentence[1]);
- }
- //header
- HSSFSheet header = book.createSheet("header");
- temp = properties.get("doctpye.name");
- row = header.createRow(0);
- row.createCell((short) 0).setCellValue("doctpye.name");
- row.createCell((short) 1).setCellValue(temp == null ? "tmx" : (String) temp);
- row = header.createRow(1);
- temp = properties.get("doctpye.systemid");
- row.createCell((short) 0).setCellValue("doctpye.systemid");
- row.createCell((short) 1).setCellValue(temp == null ? "tmx11.dtd" : (String) temp);
- row = header.createRow(2);
- temp = properties.get("tmx.version");
- row.createCell((short) 0).setCellValue("tmx.version");
- row.createCell((short) 1).setCellValue(temp == null ? "1.1" : (String) temp);
- row = header.createRow(3);
- temp = properties.get("header.creationtool");
- row.createCell((short) 0).setCellValue("header.creationtool");
- row.createCell((short) 1).setCellValue(temp == null ? "TMX2XLS" : (String) temp);
- row = header.createRow(4);
- temp = properties.get("header.creationtoolversion");
- row.createCell((short) 0).setCellValue("header.creationtoolversion");
- row.createCell((short) 1).setCellValue(temp == null ? "0.1" : (String) temp);
- row = header.createRow(5);
- temp = properties.get("header.segtype");
- row.createCell((short) 0).setCellValue("header.segtype");
- row.createCell((short) 1).setCellValue(temp == null ? "sentence" : (String) temp);
- row = header.createRow(6);
- temp = properties.get("header.o-tmf");
- row.createCell((short) 0).setCellValue("header.o-tmf");
- row.createCell((short) 1).setCellValue(temp == null ? "TMX2XLS" : (String) temp);
- row = header.createRow(7);
- temp = properties.get("header.adminlang");
- row.createCell((short) 0).setCellValue("header.adminlang");
- row.createCell((short) 1).setCellValue(temp == null ? "EN-US" : (String) temp);
- row = header.createRow(8);
- //temp = properties.get("header.srclang");
- row.createCell((short) 0).setCellValue("header.srclang");
- row.createCell((short) 1).setCellFormula("body!a1");
- row = header.createRow(9);
- temp = properties.get("header.datatype");
- row.createCell((short) 0).setCellValue("header.datatype");
- row.createCell((short) 1).setCellValue(temp == null ? "plaintext" : (String) temp);
- row = header.createRow(10);
- row.createCell((short) 0).setCellValue("header.targetlang");
- row.createCell((short) 1).setCellFormula("body!b1");
- try {
- book.write(new FileOutputStream(filename));
- } catch (IOException e) {
- logger.error("Error occured in saving XLS file!", e);
- }
- }
- private static Logger logger = null;
- }
复制代码 |
|