📄 xmlformatter.java
字号:
/* * @(#)$Id: XMLFormatter.java,v 1.4 2004/07/02 23:59:21 huebsch Exp $ * * Copyright (c) 2001-2004 Regents of the University of California. * All rights reserved. * * This file is distributed under the terms in the attached BERKELEY-LICENSE * file. If you do not find these files, copies can be found by writing to: * Computer Science Division, Database Group, Universite of California, * 617 Soda Hall #1776, Berkeley, CA 94720-1776. Attention: Berkeley License * * Copyright (c) 2003-2004 Intel Corporation. All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE file. * If you do not find these files, copies can be found by writing to: * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, * Berkeley, CA, 94704. Attention: Intel License Inquiry. */package pier.helpers.formatters;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.util.Iterator;import pier.data.Tuple;import pier.data.TupleCollection;import pier.query.QueryPlan;import pier.query.QueryTag;/** * Class XMLFormatter * * Need to: * - Create overall document header (and footer...) * - create tuple format * - error message schema (<error> string </error>) * - generic message schema (<message> string </message>) * */public class XMLFormatter extends SimpleFormatter { // xml tag public final static String XML_STRING = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; // xml namespace stuff public final static String XIP_NAMESPACE_STRING = "xmlns:xip=\"urn:publicid:IDN+cde.berkeley.edu:schemas:XIP:200404\""; public final static String XMLSCHEMA_NAMESPACE_STRING = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""; public final static String XIP_NAMESPACE_PREFIX = "xip"; // XIPResultResponse Tags public final static String RESULT_RESPONSE_TAG = "XIPResultResponse"; public final static String NUM_TUPLES_TAG = "NumTuples"; public final static String TUPLE_COLLECTION_TAG = "Tuples"; public final static String TUPLE_TAG = "Tuple"; public final static String FIELD_TAG = "Field"; // XipQueryResponse Tags public final static String QUERY_RESPONSE_TAG = "XIPQueryResponse"; public final static String QID_TAG = "QID"; public final static String REFNUM_TAG = "Refnum"; public final static String QUERY_TAG_TAG = "QueryTag"; public final static String QUERY_TAG = "Query"; public final static String QUERY_STRING_TAG = "QueryString"; // XipSchemaResponse Tags public final static String SCHEMA_RESPONSE_TAG = "XIPQueryResponse"; // XIPMessage Tags public final static String MESSAGE_TAG = "XIPMessage"; // XIPError Tags public final static String ERROR_TAG = "XIPError"; /** * Method convertStringToBuffer * * @param string * @return */ protected ByteBuffer convertStringToBuffer(String string) { ByteBuffer buffer = ByteBuffer.wrap(string.getBytes()); buffer.position(0); return buffer; } /** * Method convertStringToBuffer * * @param stringBuffer * @return */ protected ByteBuffer convertStringToBuffer(StringBuffer stringBuffer) { return convertStringToBuffer(stringBuffer.toString()); } /** * Method escapeString * Escape XML characters * * @param string * @return */ protected String escapeString(String string) { // Convert: & -> & string = string.replaceAll("&", "&"); // Convert: < -> < string = string.replaceAll("<", "<"); // Convert: > -> > string = string.replaceAll(">", ">"); // Convert: ' -> ' string = string.replaceAll("\'", "'"); // Convert: " -> " string = string.replaceAll("\"", """); return string; } /** * Method convertTupleToElement * * @param tuple * @return */ public String convertTupleToElement(Tuple tuple) { String string = new String(); string = string + "<" + TUPLE_TAG + ">"; for (int i = 0; i < tuple.numFields(); i++) { string = string + "<" + FIELD_TAG + ">" + escapeString(tuple.getValue(i).toString()) + "</" + FIELD_TAG + ">"; } string = string + "</" + TUPLE_TAG + ">"; return string; } /** * Method formatTuple * * @param tuple * @param refnum * @param queryTag * @param source * @param time * @return */ public ByteBuffer formatTuple(Tuple tuple, int refnum, QueryTag queryTag, InetSocketAddress source, long time) { String tupleString = "<" + TUPLE_COLLECTION_TAG + ">"; tupleString = tupleString + convertTupleToElement(tuple); tupleString = tupleString + "</" + TUPLE_COLLECTION_TAG + ">"; return convertStringToBuffer(tupleString); } /** * Method formatTuples * * @param tuples * @param refnum * @param queryTag * @param source * @param time * @return */ public ByteBuffer formatTuples(TupleCollection tuples, int refnum, QueryTag queryTag, InetSocketAddress source, long time) { StringBuffer buffer = new StringBuffer(); Iterator tupleIterator = tuples.iterator(); buffer.append("<" + TUPLE_COLLECTION_TAG + ">"); while (tupleIterator.hasNext()) { Tuple theTuple = (Tuple) tupleIterator.next(); convertTupleToElement(theTuple); } buffer.append("</" + TUPLE_COLLECTION_TAG + ">"); return convertStringToBuffer(buffer); } /** * Method formatQuery * * @param theQuery * @param refnum * @param source * @param time * @return */ public ByteBuffer formatQuery(String theQuery, int refnum, InetSocketAddress source, long time) { StringBuffer buffer = new StringBuffer(); buffer.append("<" + QID_TAG + ">"); buffer.append("<" + REFNUM_TAG + ">"); buffer.append(refnum); buffer.append("</" + REFNUM_TAG + ">"); buffer.append("</" + QID_TAG + ">"); buffer.append("<" + QUERY_TAG + ">"); buffer.append("<" + QUERY_STRING_TAG + ">"); buffer.append(escapeString(theQuery)); buffer.append("</" + QUERY_STRING_TAG + ">"); buffer.append("</" + QUERY_TAG + ">"); return convertStringToBuffer(buffer); } /** * Method formatQuery * * @param thePlan * @param refnum * @param source * @param time * @return */ public ByteBuffer formatQuery(QueryPlan thePlan, int refnum, InetSocketAddress source, long time) { return formatQuery( thePlan.toString(), refnum, source, time); // dont distinguish between plan and query, for now } /** * Method formatMessage * * @param message * @param refnum * @param queryTag * @param source * @param time * @return */ public ByteBuffer formatMessage(String message, int refnum, QueryTag queryTag, InetSocketAddress source, long time) { StringBuffer buffer = new StringBuffer(); buffer.append("<" + MESSAGE_TAG + ">"); buffer.append(escapeString(message)); buffer.append("</" + MESSAGE_TAG + ">"); return convertStringToBuffer(buffer); } /** * Method formatError * * @param errorMessage * @param refnum * @param queryTag * @param source * @param time * @return */ public ByteBuffer formatError(String errorMessage, int refnum, QueryTag queryTag, InetSocketAddress source, long time) { StringBuffer buffer = new StringBuffer(); buffer.append("<" + ERROR_TAG + ">"); buffer.append(escapeString(errorMessage)); buffer.append("</" + ERROR_TAG + ">"); return convertStringToBuffer(buffer); } /** * Method messagePreamble * * * @param messageType * @param time * @return */ public ByteBuffer messagePreamble(int messageType, long time) { String str = XML_STRING; switch (messageType) { case MESSAGE_TYPE_QUERY_ECHO: str += "<" + XIP_NAMESPACE_PREFIX + ":" + QUERY_RESPONSE_TAG + " " + XIP_NAMESPACE_STRING + " " + XMLSCHEMA_NAMESPACE_STRING + " " + "xsi:schemaLocation=\"" + XIP_NAMESPACE_STRING + " " + QUERY_RESPONSE_TAG + ".xsd\"" + ">"; break; case MESSAGE_TYPE_ERROR: str += "<" + XIP_NAMESPACE_PREFIX + ":" + ERROR_TAG + " " + XIP_NAMESPACE_STRING + " " + XMLSCHEMA_NAMESPACE_STRING + " " + "xsi:schemaLocation=\"" + XIP_NAMESPACE_STRING + " " + ERROR_TAG + ".xsd\"" + ">"; break; case MESSAGE_TYPE_MESSAGE: str += "<" + XIP_NAMESPACE_PREFIX + ":" + MESSAGE_TAG + " " + XIP_NAMESPACE_STRING + " " + XMLSCHEMA_NAMESPACE_STRING + " " + "xsi:schemaLocation=\"" + XIP_NAMESPACE_STRING + " " + MESSAGE_TAG + ".xsd\"" + ">"; break; case MESSAGE_TYPE_SCHEMA: str += "<" + XIP_NAMESPACE_PREFIX + ":" + SCHEMA_RESPONSE_TAG + " " + XIP_NAMESPACE_STRING + " " + XMLSCHEMA_NAMESPACE_STRING + " " + "xsi:schemaLocation=\"" + XIP_NAMESPACE_STRING + " " + SCHEMA_RESPONSE_TAG + ".xsd\"" + ">"; break; case MESSAGE_TYPE_RESULT: str += "<" + XIP_NAMESPACE_PREFIX + ":" + RESULT_RESPONSE_TAG + " " + XIP_NAMESPACE_STRING + " " + XMLSCHEMA_NAMESPACE_STRING + " " + "xsi:schemaLocation=\"" + XIP_NAMESPACE_STRING + " " + RESULT_RESPONSE_TAG + ".xsd\"" + ">"; break; default: str = "</>"; } return convertStringToBuffer(str); } /** * Method messagePostamble * * * @param messageType * @param time * @return */ public ByteBuffer messagePostamble(int messageType, long time) { String str = ""; switch (messageType) { case MESSAGE_TYPE_QUERY_ECHO: str = "</" + XIP_NAMESPACE_PREFIX + ":" + QUERY_RESPONSE_TAG + ">"; break; case MESSAGE_TYPE_ERROR: str = "</" + XIP_NAMESPACE_PREFIX + ":" + ERROR_TAG + ">"; break; case MESSAGE_TYPE_MESSAGE: str = "</" + XIP_NAMESPACE_PREFIX + ":" + MESSAGE_TAG + ">"; break; case MESSAGE_TYPE_SCHEMA: str = "</" + XIP_NAMESPACE_PREFIX + ":" + SCHEMA_RESPONSE_TAG + ">"; break; case MESSAGE_TYPE_RESULT: str = "</" + XIP_NAMESPACE_PREFIX + ":" + RESULT_RESPONSE_TAG + ">"; break; default: str = "</>"; } return convertStringToBuffer(str); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -