/*******************************************************************************
* Copyright (c) 2010 Yadu.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Yadu - initial API and implementation
******************************************************************************/
package code.google.restclient.test.work;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import code.google.restclient.mime.MimeTypeUtil;
/**
* @author Yaduvendra.Singh
*/
public class Test {
public static void main(String[] args) {
// testTransformer();
xmlPrettyPrinter();
/*
try {
testRegex();
} catch (IOException e) {
e.printStackTrace();
}
*/
// getFileSize();
// encodeUTF8();
// testSysProps();
// testLog4j();
// testMimeType();
}
private static void testMimeType() {
// File tmpFile = new File("C:/E/Projects_Other/eclipse/RestClient/logs/files/test.txt");
String tmpFile = "C:/E/Projects_Other/eclipse/RestClient/logs/files/test.txt";
System.out.println("mime type => " + MimeTypeUtil.getMimeType(tmpFile));
System.out.println("media type => " + MimeTypeUtil.getMediaType(tmpFile));
}
private static void testLog4j() {
PropertyConfigurator.configure(org.apache.log4j.helpers.Loader.getResource("rc-log4j.properties"));
Logger log = Logger.getLogger(Test.class); // loads props automatically if log4j.properties is present in
// classpaht
log.debug("write something to log file");
}
private static void testSysProps() {
System.out.println("User Home Dir: " + System.getProperty("user.home"));
System.out.println("Java Version: " + System.getProperty("java.version"));
System.out.println("OS Name: " + System.getProperty("os.name"));
System.out.println("OS Version: " + System.getProperty("os.version"));
}
private static void encodeUTF8() {
try {
System.out.println("= (UTF-8) => " + URLEncoder.encode("=", "UTF-8"));
System.out.println("= (UTF-8) => " + URLDecoder.decode("=", "UTF-8"));
} catch ( UnsupportedEncodingException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void getFileSize() {
File file = new File("C:/E/Projects_Other/eclipse/RestClient/image_test_item.txt");
float size = (float) file.length() / 1000; // KBs
System.out.println("getFileSize(): file size = " + size);
}
private static void testRegex() throws IOException {
String regex = "^[a-zA-Z_]+\\(\\)[\\s]*(: | -)"; // (?i)<head>"; //\\."+RCConstants.TEMP_FILE_EXT+"$
String newToken = "";
String str = "streamToString() - error occurred while converting";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
matcher.find();
System.out.println("Group: " + matcher.group());
System.out.println("New Str: " + str.replaceFirst(regex, newToken).trim());
}
private static void testTransformer() {
ByteArrayOutputStream s;
try {
Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
TransformerFactory tf = TransformerFactory.newInstance();
// tf.setAttribute("indent-number", new Integer(4));
Transformer t = tf.newTransformer();
Element a, b;
a = d.createElement("a");
b = d.createElement("b");
a.appendChild(b);
d.appendChild(a);
t.setOutputProperty(OutputKeys.INDENT, "yes");
s = new ByteArrayOutputStream();
t.transform(new DOMSource(d), new StreamResult(s));
System.out.println(new String(s.toByteArray()));
} catch ( Exception e ) {
e.printStackTrace();
}
}
private static void xmlPrettyPrinter() {
String xmlStr =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><QueryMessage\n"
+ " xmlns=\"http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message\"\n"
+ " xmlns:query=\"http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query\">\n" + " <Query>\n"
+ " <query:CategorySchemeWhere>\n"
+ " \t\t\t\t\t <query:AgencyID>A</query:AgencyID>\n<query:AgencyID>true</query:AgencyID>\n"
+ " </query:CategorySchemeWhere>\n" + " </Query>\n\n\n\n\n"
+ " <test>hello<you><![CDATA[<sender>John Smith</sender>]]></you></test> " + "</QueryMessage>";
System.out.println("raw xml:\n" + xmlStr);
String transformedStr = null;
if ( xmlStr != null && !"".equals(xmlStr) ) {
InputStream is = new ByteArrayInputStream(xmlStr.getBytes());
transformedStr = getPrettyXml(is, true, true);
} else {
System.out.println("xmlPrettyPrinter() - XML string passed is null!");
}
System.out.println("************ transformed str: *************\n" + transformedStr);
}
public static String getPrettyXml(InputStream xmlStream, boolean indent, boolean breakCharNode) {
int tagsCount = 0;
boolean isCharNode = false;
if ( xmlStream == null ) {
System.out.println("getPrettyXml() - XML input stream passed is null!");
return null;
} else {
System.out.println("getPrettyXml() - Starting transformation ...");
}
StringWriter strWriter = new StringWriter();
XMLStreamReader xsr = null;
// AbstractXMLStreamWriter xsw = null;
XMLStreamWriter xsw = null;
try {
XMLInputFactory xif = XMLInputFactory.newInstance();
xsr = xif.createXMLStreamReader(xmlStream);
// get JSON writer
/*
//Configuration config = new Configuration();
//config.setTypeConverter(new SimpleConverter()); //Simple converter prints every value in quotes
//MappedNamespaceConvention convention = new MappedNamespaceConvention(config);
MappedNamespaceConvention convention = new MappedNamespaceConvention(config);
xsw = new MappedXMLStreamWriter(convention, strWriter);
*/
XMLOutputFactory xof = XMLOutputFactory.newInstance();
xsw = xof.createXMLStreamWriter(strWriter);
xsw.writeStartDocument();
while ( xsr.hasNext() ) {
int event = xsr.next();
if ( event == XMLStreamConstants.START_ELEMENT ) { // start tag
System.out.println("START_ELEMENT: " + xsr.getLocalName());
addIndent(xsw, indent, tagsCount);
xsw.writeStartElement(xsr.getLocalName());
tagsCount++;
for ( int i = 0; i < xsr.getAttributeCount(); i++ ) { // tag's attributes
System.out.println("@attribute: " + xsr.getAttributeLocalName(i) + "=" + xsr.getAttributeValue(i));
xsw.writeAttribute(xsr.getAttributeLocalName(i), xsr.getAttributeValue(i));
}
}
if ( event == XMLStreamConstants.CHARACTERS ) { // tag's text value
System.out.println("#text: " + xsr.getText());
if ( xsr.getText() != null && !"".equals(xsr.getText().trim()) ) {
if ( breakCharNode ) {
addIndent(xsw, indent, tagsCount);
isCharNode = false;
}
isCharNode = true;
xsw.writeCharacters(xsr.getText());
}
}
if ( event == XMLStreamConstants.CDATA ) { // cdata
System.out.println("[CDATA]: " + xsr.getText());
if ( xsr.getText() != null && !"".equals(xsr.getText().trim()) ) {
xsw.writeCData(xsr.getText());
}
}
if ( event == XMLStreamConstants.END_ELEMENT ) { // end tag
System.out.println("END_ELEMENT");
if ( tagsCount > 0 ) {
if ( breakCharNode || !isCharNode ) addIndent(xsw, indent, tagsCount - 1);
isCharNode = false;
xsw.writeEndElement();
tagsCount--;
} else {
System.out
.println("getPrettyXml() - Invalid xml data! Opening tags not equal to closing tags." + " Even then continuing ...");
}
}
}
xsw.writeEndDocument();
} catch ( XMLStreamException xse ) {
System.out.println("xml2Json() - Error while handling xml stream -> " + xse);
} finally {
try {
if ( xsr != null ) xsr.close();
if ( xsw != null ) xsw.close();
if ( strWriter != null ) strWriter.close();
} catch ( XMLStreamException xse ) {
System.out.println("xml2Json() - Error while closing xml stream reader/writer -> " + xse);
} catch ( IOException ioe ) {
System.out.println("xml2Json() - Error closing strWriter (string writer) -> " + ioe);
}
}
System.out.println("xml2Json() - json output =>\n" + strWriter.toString());
return strWriter.toString();
}
private static void addIndent(XMLStreamWriter xsw, boolean indent, int indentCount) throws XMLStreamException {
xsw.writeCharacters(getPrettyIndent(indent, indentCount));
}
public static String getPrettyIndent(boolean indent, int count) {
String str = " ";
StringBuffer buf = new StringBuffer();
buf.append("\n");
if ( indent ) {
while ( count >= 1 ) {
buf.append(str);
count--;
}
}
return buf.toString();
}
}