| /* |
| * 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 org.apache.chemistry.opencmis.commons.impl.json; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.GregorianCalendar; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.TimeZone; |
| |
| import org.apache.chemistry.opencmis.commons.data.Properties; |
| import org.apache.chemistry.opencmis.commons.data.PropertyDateTime; |
| import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat; |
| import org.apache.chemistry.opencmis.commons.enums.PropertyType; |
| import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper; |
| import org.apache.chemistry.opencmis.commons.impl.JSONConstants; |
| import org.apache.chemistry.opencmis.commons.impl.JSONConverter; |
| import org.apache.chemistry.opencmis.commons.impl.JSONConverter.PropertyMode; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeImpl; |
| import org.junit.Test; |
| |
| public class DateTimeTimezoneTest { |
| |
| private final static String TEST_PROP = "test:prop"; |
| private final static String TIMEZONE = "GMT+01:23"; |
| |
| @SuppressWarnings("unchecked") |
| @Test |
| public void testDateTimePropertyWrite() { |
| GregorianCalendar orgValue = new GregorianCalendar(TimeZone.getTimeZone(TIMEZONE)); |
| |
| PropertiesImpl props = new PropertiesImpl(); |
| props.addProperty(new PropertyDateTimeImpl(TEST_PROP, orgValue)); |
| |
| // milliseconds |
| |
| JSONObject json1 = JSONConverter.convert(props, "id", null, PropertyMode.OBJECT, false, DateTimeFormat.SIMPLE); |
| |
| assertNotNull(json1); |
| assertNotNull(json1.get(TEST_PROP)); |
| |
| Map<String, Object> prop1 = (Map<String, Object>) json1.get(TEST_PROP); |
| assertNotNull(prop1.get(JSONConstants.JSON_PROPERTY_VALUE)); |
| assertTrue(prop1.get(JSONConstants.JSON_PROPERTY_VALUE) instanceof List<?>); |
| |
| List<?> values1 = (List<?>) prop1.get(JSONConstants.JSON_PROPERTY_VALUE); |
| assertEquals(1, values1.size()); |
| assertTrue(values1.get(0) instanceof Number); |
| |
| assertEquals(orgValue.getTimeInMillis(), ((Number) values1.get(0)).longValue()); |
| |
| // DateTime string |
| |
| JSONObject json2 = JSONConverter |
| .convert(props, "id", null, PropertyMode.OBJECT, false, DateTimeFormat.EXTENDED); |
| |
| assertNotNull(json2); |
| assertNotNull(json2.get(TEST_PROP)); |
| |
| Map<String, Object> prop2 = (Map<String, Object>) json2.get(TEST_PROP); |
| assertNotNull(prop2.get(JSONConstants.JSON_PROPERTY_VALUE)); |
| assertTrue(prop2.get(JSONConstants.JSON_PROPERTY_VALUE) instanceof List<?>); |
| |
| List<?> values2 = (List<?>) prop2.get(JSONConstants.JSON_PROPERTY_VALUE); |
| assertEquals(1, values2.size()); |
| assertTrue(values2.get(0) instanceof String); |
| |
| GregorianCalendar calValue = DateTimeHelper.parseXmlDateTime(values2.get(0).toString()); |
| assertEquals(orgValue.getTimeInMillis(), calValue.getTimeInMillis()); |
| assertTrue(orgValue.getTimeZone().hasSameRules(calValue.getTimeZone())); |
| } |
| |
| @Test |
| public void testDateTimePropertyRead() { |
| |
| GregorianCalendar orgValue = new GregorianCalendar(TimeZone.getTimeZone(TIMEZONE)); |
| |
| Map<String, Object> json = new HashMap<String, Object>(); |
| Map<String, Object> propJson = new HashMap<String, Object>(); |
| |
| json.put(TEST_PROP, propJson); |
| |
| // milliseconds |
| |
| propJson.put(JSONConstants.JSON_PROPERTY_ID, TEST_PROP); |
| propJson.put(JSONConstants.JSON_PROPERTY_DATATYPE, PropertyType.DATETIME.value()); |
| propJson.put(JSONConstants.JSON_PROPERTY_VALUE, orgValue.getTimeInMillis()); |
| |
| Properties props1 = JSONConverter.convertProperties(json, null); |
| |
| assertNotNull(props1); |
| assertNotNull(props1.getProperties()); |
| assertNotNull(props1.getProperties().get(TEST_PROP)); |
| assertTrue(props1.getProperties().get(TEST_PROP) instanceof PropertyDateTime); |
| |
| GregorianCalendar value1 = ((PropertyDateTime) props1.getProperties().get(TEST_PROP)).getFirstValue(); |
| |
| assertEquals(orgValue.getTimeInMillis(), value1.getTimeInMillis()); |
| assertTrue(value1.getTimeZone().hasSameRules(TimeZone.getTimeZone("GMT"))); |
| |
| // DateTime string |
| |
| propJson.put(JSONConstants.JSON_PROPERTY_ID, TEST_PROP); |
| propJson.put(JSONConstants.JSON_PROPERTY_DATATYPE, PropertyType.DATETIME.value()); |
| propJson.put(JSONConstants.JSON_PROPERTY_VALUE, DateTimeHelper.formatXmlDateTime(orgValue)); |
| |
| Properties props2 = JSONConverter.convertProperties(json, null); |
| |
| assertNotNull(props2); |
| assertNotNull(props2.getProperties()); |
| assertNotNull(props2.getProperties().get(TEST_PROP)); |
| assertTrue(props2.getProperties().get(TEST_PROP) instanceof PropertyDateTime); |
| |
| GregorianCalendar value2 = ((PropertyDateTime) props2.getProperties().get(TEST_PROP)).getFirstValue(); |
| |
| assertEquals(orgValue.getTimeInMillis(), value2.getTimeInMillis()); |
| assertTrue(value2.getTimeZone().hasSameRules(TimeZone.getTimeZone(TIMEZONE))); |
| } |
| } |