001: /**
002: * LibreSource
003: * Copyright (C) 2004-2008 Artenum SARL / INRIA
004: * http://www.libresource.org - contact@artenum.com
005: *
006: * This file is part of the LibreSource software,
007: * which can be used and distributed under license conditions.
008: * The license conditions are provided in the LICENSE.TXT file
009: * at the root path of the packaging that enclose this file.
010: * More information can be found at
011: * - http://dev.libresource.org/home/license
012: *
013: * Initial authors :
014: *
015: * Guillaume Bort / INRIA
016: * Francois Charoy / Universite Nancy 2
017: * Julien Forest / Artenum
018: * Claude Godart / Universite Henry Poincare
019: * Florent Jouille / INRIA
020: * Sebastien Jourdain / INRIA / Artenum
021: * Yves Lerumeur / Artenum
022: * Pascal Molli / Universite Henry Poincare
023: * Gerald Oster / INRIA
024: * Mariarosa Penzi / Artenum
025: * Gerard Sookahet / Artenum
026: * Raphael Tani / INRIA
027: *
028: * Contributors :
029: *
030: * Stephane Bagnier / Artenum
031: * Amadou Dia / Artenum-IUP Blois
032: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
033: */package org.libresource.so6.core.engine.util;
034:
035: import org.xml.sax.Attributes;
036: import org.xml.sax.SAXException;
037: import org.xml.sax.helpers.DefaultHandler;
038:
039: import java.util.ArrayList;
040: import java.util.Hashtable;
041:
042: import javax.xml.parsers.SAXParser;
043: import javax.xml.parsers.SAXParserFactory;
044:
045: /**
046: * @author smack
047: */
048: public class InfoPatchHandler extends DefaultHandler {
049: // interesting tag name
050: private final static String INFO_TAG = "name begin end class path comment contrib";
051: private String tag;
052: private StringBuffer buffer;
053: private String className;
054: private String path;
055:
056: // information to retreive
057: private long fromTicket = -1;
058: private long toTicket = -1;
059: private String wsName;
060: private String comment = "";
061: private Hashtable filesIndex;
062: private long nbLine;
063:
064: public InfoPatchHandler() {
065: filesIndex = new Hashtable();
066: nbLine = 0;
067: }
068:
069: public long getFromTicket() {
070: return fromTicket;
071: }
072:
073: public long getToTicket() {
074: return toTicket;
075: }
076:
077: public String getWsName() {
078: return wsName;
079: }
080:
081: public String getComment() {
082: return comment;
083: }
084:
085: public Hashtable getFileIndex() {
086: return filesIndex;
087: }
088:
089: public long getNbLines() {
090: return nbLine;
091: }
092:
093: public void characters(char[] buff, int offset, int len)
094: throws SAXException {
095: if (INFO_TAG.indexOf(tag) != -1) {
096: buffer.append(buff, offset, len);
097: }
098: }
099:
100: public void endElement(String namespaceuri, String sname,
101: String qname) throws SAXException {
102: if (qname.equals("name")) {
103: try {
104: wsName = new String(Base64.decode(buffer.toString()),
105: "UTF-8");
106: } catch (Exception e) {
107: // TODO: handle exception
108: }
109: }
110:
111: if (qname.equals("begin")) {
112: fromTicket = Long.parseLong(buffer.toString());
113: }
114:
115: if (qname.equals("end")) {
116: toTicket = Long.parseLong(buffer.toString());
117: }
118:
119: if (qname.equals("class")) {
120: className = buffer.toString();
121: }
122:
123: if (qname.equals("comment")) {
124: try {
125: comment = new String(Base64.decode(buffer.toString()),
126: "UTF-8");
127: } catch (Exception e) {
128: // TODO: handle exception
129: }
130: }
131:
132: if (qname.equals("contrib")) {
133: nbLine += Long.parseLong(buffer.toString());
134: }
135:
136: if (qname.equals("path")) {
137: try {
138: path = new String(Base64.decode(buffer.toString()),
139: "UTF-8");
140: } catch (Exception e) {
141: // TODO: handle exception
142: }
143:
144: ArrayList opList = (ArrayList) filesIndex.get(path);
145:
146: if (opList != null) {
147: opList.add(className);
148: } else {
149: opList = new ArrayList();
150: opList.add(className);
151: filesIndex.put(path, opList);
152: }
153: }
154: }
155:
156: public void startElement(String namespaceuri, String sname,
157: String qname, Attributes attr) throws SAXException {
158: tag = qname;
159: buffer = new StringBuffer();
160: }
161:
162: public static void main(String[] args) throws Exception {
163: SAXParserFactory factory = SAXParserFactory.newInstance();
164: SAXParser saxParser = factory.newSAXParser();
165: InfoPatchHandler infoPatch = new InfoPatchHandler();
166:
167: saxParser.parse(args[0], infoPatch);
168: System.out.println("From ticket: " + infoPatch.getFromTicket());
169: System.out.println("To ticket: " + infoPatch.getToTicket());
170: System.out.println("WsName: " + infoPatch.getWsName());
171: System.out.println("Comment: " + infoPatch.getComment());
172: System.out.println("NbLine: " + infoPatch.getNbLines());
173: }
174: }
|