| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| package com.cloud.gate.util; | |
| import java.io.IOException; | |
| import java.io.InputStream; | |
| import java.util.ArrayList; | |
| import java.util.Calendar; | |
| import java.util.Date; | |
| import java.util.List; | |
| import org.apache.log4j.Logger; | |
| import com.cloud.bridge.util.DateHelper; | |
| import com.cloud.bridge.util.StringHelper; | |
| import com.cloud.bridge.util.XElement; | |
| import com.cloud.bridge.util.XSerializer; | |
| import com.cloud.bridge.util.XSerializerJsonAdapter; | |
| import com.cloud.bridge.util.XSerializerXmlAdapter; | |
| import com.cloud.gate.testcase.BaseTestCase; | |
| import junit.framework.Assert; | |
| class SubFoo { | |
| @XElement(name="Name") | |
| private String name; | |
| @XElement(name="Value") | |
| private String value; | |
| public SubFoo() { | |
| } | |
| public SubFoo(String n, String v) { | |
| name = n; | |
| value = v; | |
| } | |
| } | |
| class BaseFoo { | |
| @XElement(name="BaseName") | |
| private String baseName; | |
| @XElement(name="BaseValue") | |
| private String baseValue; | |
| public BaseFoo() { | |
| baseName="baseName"; | |
| baseValue="baseValue"; | |
| } | |
| } | |
| class Foo extends BaseFoo { | |
| @XElement(name="Name") | |
| private String name; | |
| @XElement(name="Value") | |
| private String value; | |
| @XElement(name="ByteValue") | |
| private byte bValue; | |
| @XElement(name="ShortValue") | |
| private short sValue; | |
| @XElement(name="LongValue") | |
| private long lValue; | |
| @XElement(name="NullValue") | |
| private String nullValue; | |
| @XElement(name="TimeValue") | |
| private Date dt = new Date(); | |
| @XElement(name="CalendarValue") | |
| private Calendar cal = Calendar.getInstance(); | |
| @XElement(name="SubObject") | |
| public SubFoo sub; | |
| @XElement(name="SubObjects", item="ListItem", itemClass="com.cloud.gate.util.SubFoo") | |
| public List<SubFoo> subs; | |
| @XElement(name="ArrayObjects", item="ArrayItem", itemClass="com.cloud.gate.util.SubFoo") | |
| public SubFoo[] subArray; | |
| public Foo() { | |
| subs = new ArrayList<SubFoo>(); | |
| } | |
| public Foo(String name, String value) { | |
| this.name = name; | |
| this.value = value; | |
| subs = new ArrayList<SubFoo>(); | |
| } | |
| } | |
| public class UtilTestCase extends BaseTestCase { | |
| protected final static Logger logger = Logger.getLogger(UtilTestCase.class); | |
| public void testStringHelper() { | |
| String value = StringHelper.substringInBetween("archive/doc1.doc", "archive", "/"); | |
| Assert.assertTrue(value == null); | |
| value = StringHelper.substringInBetween("archive/sub1/doc1.doc", "archive", "/"); | |
| Assert.assertTrue(value.equals("sub1")); | |
| value = StringHelper.substringInBetween("archive/sub2/doc1.doc", "archive", "/"); | |
| Assert.assertTrue(value.equals("sub2")); | |
| value = StringHelper.substringInBetween("archive/sub3/subb/doc1.doc", "archive", "/"); | |
| Assert.assertTrue(value.equals("sub3")); | |
| value = StringHelper.substringInBetween("archive/sub3/subb/doc1.doc", "archive/sub3", "/"); | |
| Assert.assertTrue(value.equals("subb")); | |
| value = StringHelper.substringInBetween("archive/sub3/subb/doc1.doc", null, "/"); | |
| Assert.assertTrue(value.equals("archive")); | |
| } | |
| public void testJava2XmlJson() { | |
| XSerializer serializer = new XSerializer(new XSerializerXmlAdapter()); | |
| serializer.setFlattenCollection(true); | |
| serializer.setOmitNull(true); | |
| Foo foo = new Foo("dummyName", "dummyValue"); | |
| foo.sub = new SubFoo("subName", "subValue"); | |
| foo.subs.add(new SubFoo("Sub1", "Sub1-value")); | |
| foo.subs.add(new SubFoo("Sub2", "Sub2-value")); | |
| foo.subArray = new SubFoo[3]; | |
| foo.subArray[0] = new SubFoo("Array-sub1", "Sub1-value"); | |
| foo.subArray[1] = new SubFoo("Array-sub2", "Sub1-value"); | |
| foo.subArray[2] = new SubFoo("Array-sub3", "Sub1-value"); | |
| String output = serializer.serializeTo(foo, "Foo", "http://www.cloud.com/S3", 0); | |
| logger.info(output); | |
| serializer = new XSerializer(new XSerializerJsonAdapter()); | |
| output = serializer.serializeTo(foo, "Foo", "http://www.cloud.com/S3", 0); | |
| logger.info(output); | |
| } | |
| public void testXml2Java() { | |
| XSerializer serializer = new XSerializer(new XSerializerXmlAdapter()); | |
| serializer.setFlattenCollection(true); | |
| XSerializer.registerRootType("Foo", Foo.class); | |
| try { | |
| InputStream is = this.getClass().getResourceAsStream("/com/cloud/gate/util/Xml2JavaTestData.xml"); | |
| String xml = StringHelper.stringFromStream(is); | |
| Object object = serializer.serializeFrom(xml); | |
| if(object != null) { | |
| String output = serializer.serializeTo(object, "Foo", "http://www.cloud.com/S3", 0); | |
| logger.info("Redump parsed java object"); | |
| logger.info(output); | |
| } | |
| is.close(); | |
| } catch(IOException e) { | |
| logger.error("Unexpected exception " + e.getMessage(), e); | |
| } | |
| } | |
| public void testMisc() { | |
| String[] tokens = "/".split("/"); | |
| logger.info("length : " + tokens.length); | |
| for(int i = 0; i < tokens.length; i++) { | |
| logger.info("token " + i + ": " + tokens[i]); | |
| } | |
| logger.info(DateHelper.getDateDisplayString( | |
| DateHelper.GMT_TIMEZONE, new Date(), "E, d MMM yyyy HH:mm:ss z")); | |
| } | |
| } |