LENS-733 : Add Helper Method for lens-regression.
Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/7678a63b Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/7678a63b Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/7678a63b Branch: refs/heads/current-release-line Commit: 7678a63bcd41884437dabce3c47110d9876557f8 Parents: c8701a3 Author: Arshad Matin <arshadma...@apache.org> Authored: Wed Sep 16 19:10:05 2015 +0530 Committer: Raghavendra Singh <raghavsi...@apache.org> Committed: Wed Sep 16 19:10:05 2015 +0530 ---------------------------------------------------------------------- lens-regression/pom.xml | 4 + .../core/constants/QueryInventory.java | 57 +++++ .../core/helpers/LensServerHelper.java | 5 - .../core/helpers/MetastoreHelper.java | 218 +++++++++++++++++- .../regression/core/helpers/QueryHelper.java | 81 +++---- .../core/helpers/ServiceManagerHelper.java | 8 +- .../regression/core/helpers/SessionHelper.java | 4 - .../core/testHelper/BaseTestClass.java | 41 ++++ .../apache/lens/regression/util/AssertUtil.java | 62 +++++- .../apache/lens/regression/util/HadoopUtil.java | 61 +++++ .../org/apache/lens/regression/util/Util.java | 220 ++++++++++++++++++- 11 files changed, 675 insertions(+), 86 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/pom.xml ---------------------------------------------------------------------- diff --git a/lens-regression/pom.xml b/lens-regression/pom.xml index 250d008..560b4df 100644 --- a/lens-regression/pom.xml +++ b/lens-regression/pom.xml @@ -63,6 +63,10 @@ <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> </dependency> + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-common</artifactId> + </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java new file mode 100644 index 0000000..e41ca86 --- /dev/null +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java @@ -0,0 +1,57 @@ +/** + * 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.lens.regression.core.constants; + +public class QueryInventory { + + private QueryInventory() { + + } + + public static final String QUERY = "cube select id,name from sample_dim where name != 'first'"; + public static final String WRONG_QUERY = "cube select NO_ID from sample_dim where name != 'first'"; + + public static final String DIM_QUERY = "cube select id,name from sample_dim where name != 'first'"; + public static final String CUBE_QUERY = "cube select sample_dim.name, measure4 from sample_cube where " + + "time_range_in(dt, '2014-06-24-23', '2014-06-25-00')"; + public static final String WRONG_DIM_QUERY = "cube select NO_ID from sample_dim where name != 'first'"; + + public static final String HIVE_DIM_QUERY = "cube select id,name from sample_dim2 where name != 'first'"; + public static final String HIVE_CUBE_QUERY = "cube select sample_dim.name, measure4 from sample_cube where " + + "time_range_in(dt, '2014-06-24-23', '2014-06-25-00')"; + + public static final String JDBC_CUBE_QUERY = "cube select product_id from sales where " + + "time_range_in(delivery_time,'2015-04-12','2015-04-13')"; + public static final String WRONG_JDBC_CUBE_QUERY = "cube select product_id from sales where " + + "time_range_in(delivery_time,'2015-04-12','2015-04-14')"; + + public static final String WRONG_HIVE_DIM_QUERY = "cube select NO_ID from sample_dim2 where name != 'first'"; + public static final String WRONG_HIVE_CUBE_QUERY="cube select sample_dim.name, measure4 from sample_cube where " + + "time_range_in(dt, '2014-07-01-00', '2014-07-25-05')"; + + public static final String WRONG_SYNTAX_QUERY="cube select id,name from sample_dim2 name != 'first'"; + + public static final String JDBC_DIM_QUERY = "cube select id,name from sample_db_dim where name != 'first'"; + public static final String WRONG_JDBC_DIM_QUERY = "cube select NO_ID from sample_db_dim where name != 'first'"; + + public static final String SLEEP_FUNCTION = "CREATE TEMPORARY FUNCTION sleep AS 'hive.udf.SampleUdf'"; + public static final String SLEEP_QUERY = "cube select sleep(name) from sample_dim where name != 'first'"; + +} http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java index 8b41dba..760c088 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java @@ -21,9 +21,7 @@ package org.apache.lens.regression.core.helpers; import java.io.IOException; -import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; - import javax.xml.bind.JAXBException; import org.apache.lens.regression.util.AssertUtil; @@ -37,9 +35,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class LensServerHelper extends ServiceManagerHelper { - private WebTarget servLens = ServiceManagerHelper.getServerLens(); - private String sessionHandleString = ServiceManagerHelper.getSessionHandle(); - public LensServerHelper() { } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/MetastoreHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/MetastoreHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/MetastoreHelper.java index aff0e8e..f60ecef 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/MetastoreHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/MetastoreHelper.java @@ -19,17 +19,20 @@ package org.apache.lens.regression.core.helpers; - -import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; + import javax.xml.bind.JAXBException; +import org.apache.lens.api.DateTime; import org.apache.lens.api.StringList; +import org.apache.lens.api.metastore.*; import org.apache.lens.regression.core.constants.MetastoreURL; +import org.apache.lens.regression.core.type.FormBuilder; import org.apache.lens.regression.core.type.MapBuilder; import org.apache.lens.regression.util.AssertUtil; +import org.apache.lens.regression.util.Util; import org.apache.lens.server.api.error.LensException; import lombok.extern.slf4j.Slf4j; @@ -37,8 +40,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class MetastoreHelper extends ServiceManagerHelper { - private WebTarget servLens = ServiceManagerHelper.getServerLens(); - private String sessionHandleString = ServiceManagerHelper.getSessionHandle(); public MetastoreHelper() { } @@ -149,4 +150,213 @@ public class MetastoreHelper extends ServiceManagerHelper { dropDatabase(dbName, sessionHandleString); } + public void createStorage(XStorage storage, String sessionHandleString) throws Exception { + + String storageString = Util.convertObjectToXml(storage, XStorage.class, "createXStorage"); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + + Response response = this + .exec("post", MetastoreURL.METASTORE_STORAGES_URL, servLens, null, query, MediaType.APPLICATION_XML_TYPE, null, + storageString); + AssertUtil.assertSucceeded(response); + } + + public void createStorage(XStorage storage) throws Exception { + createStorage(storage, sessionHandleString); + } + + public void dropStorage(String storageName, String sessionHandleString) throws JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this + .exec("delete", MetastoreURL.METASTORE_STORAGES_URL + "/" + storageName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE, null); + AssertUtil.assertSucceeded(response); + } + + public void dropStorage(String storageName) throws JAXBException, LensException { + dropStorage(storageName, sessionHandleString); + } + + public StringList listStorages(String sessionHandleString) throws JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("get", MetastoreURL.METASTORE_STORAGES_URL, servLens, null, query); + AssertUtil.assertSucceededResponse(response); + StringList cubeList = response.readEntity(StringList.class); + return cubeList; + } + + public StringList listStorages() throws JAXBException, LensException { + return listStorages(sessionHandleString); + } + + public void createCube(XCube cube, String sessionHandleString) throws Exception { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + String cubeString = Util.convertObjectToXml(cube, XCube.class, "createXCube"); + Response response = this + .exec("post", MetastoreURL.METASTORE_CUBES_URL, servLens, null, query, MediaType.APPLICATION_XML_TYPE, null, + cubeString); + AssertUtil.assertSucceeded(response); + } + + public void createCube(XCube cube) throws Exception { + createCube(cube, sessionHandleString); + } + + public void createFacts(XFactTable facts, String sessionHandleString) throws Exception { + String factString = Util.convertObjectToXml(facts, XFactTable.class, "createXFactTable"); + + FormBuilder formData = new FormBuilder(); + formData.add("sessionid", sessionHandleString); + formData.add("fact", factString); + + Response response = this + .exec("post", MetastoreURL.METASTORE_FACTS_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, + MediaType.APPLICATION_XML, formData.getForm()); + AssertUtil.assertSucceeded(response); + } + + public void createFacts(XFactTable facts) throws Exception { + createFacts(facts, sessionHandleString); + } + + public StringList listCubes(String type, String sessionHandleString) throws Exception { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + if (type != null) { + query.put("type", type); + } + Response response = this.exec("get", MetastoreURL.METASTORE_CUBES_URL, servLens, null, query); + AssertUtil.assertSucceededResponse(response); + StringList cubeList = response.readEntity(StringList.class); + return cubeList; + } + + public StringList listCubes(String type) throws Exception { + return listCubes(type, sessionHandleString); + } + + public StringList listCubes() throws Exception { + return listCubes(null); + } + + public XCube getCube(String cubeName, String sessionHandleString) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("get", MetastoreURL.METASTORE_CUBES_URL + "/" + cubeName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE); + AssertUtil.assertSucceededResponse(response); + String responseString = response.readEntity(String.class); + log.info(responseString); + XCube cube = (XCube) Util.extractObject(responseString, XCube.class); + return cube; + } + + public XCube getCube(String cubeName) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + return getCube(cubeName, sessionHandleString); + } + + public XFactTable getFact(String factName, String sessionHandleString) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("get", MetastoreURL.METASTORE_FACTS_URL + "/" + factName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE); + AssertUtil.assertSucceededResponse(response); + String responseString = response.readEntity(String.class); + log.info(responseString); + XFactTable fact = (XFactTable) Util.extractObject(responseString, XFactTable.class); + return fact; + } + + public XFactTable getFact(String factName) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + return getFact(factName, sessionHandleString); + } + + public XDimension getDimension(String dimName, String sessionHandleString) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("get", MetastoreURL.METASTORE_DIMENSIONS_URL + "/" + dimName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE); + AssertUtil.assertSucceededResponse(response); + String responseString = response.readEntity(String.class); + log.info(responseString); + XDimension dim = (XDimension) Util.extractObject(responseString, XDimension.class); + return dim; + } + + public XDimension getDimension(String dimName) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + return getDimension(dimName, sessionHandleString); + } + + public XDimensionTable getDimensionTable(String dimName, String sessionHandleString) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("get", MetastoreURL.METASTORE_DIMTABLES_URL + "/" + dimName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE); + AssertUtil.assertSucceededResponse(response); + String responseString = response.readEntity(String.class); + log.info(responseString); + XDimensionTable dim = (XDimensionTable) Util.extractObject(responseString, XDimensionTable.class); + return dim; + } + + public XDimensionTable getDimensionTable(String dimName) + throws InstantiationException, IllegalAccessException, JAXBException, LensException { + return getDimensionTable(dimName, sessionHandleString); + } + + public void updateCube(XCube cube, String cubeName, String sessionHandleString) throws Exception { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + String cubeString = Util.convertObjectToXml(cube, XCube.class, "createXCube"); + Response response = this.exec("put", MetastoreURL.METASTORE_CUBES_URL + "/" + cubeName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE, null, cubeString); + AssertUtil.assertSucceeded(response); + } + + public void updateCube(XCube cube, String cubeName) throws Exception { + updateCube(cube, cubeName, sessionHandleString); + } + + public void dropCube(String cubeName, String sessionHandleString) throws JAXBException, LensException { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + Response response = this.exec("delete", MetastoreURL.METASTORE_CUBES_URL + "/" + cubeName, servLens, null, query, + MediaType.APPLICATION_XML_TYPE, null); + AssertUtil.assertSucceeded(response); + } + + public void dropCube(String cubeName) throws JAXBException, LensException { + dropCube(cubeName, sessionHandleString); + } + + public void createDimTable(XDimensionTable dt, String sessionHandleString) throws Exception { + String dimTable = Util.convertObjectToXml(dt, XDimensionTable.class, "createDimensionTable"); + + FormBuilder formData = new FormBuilder(); + formData.add("sessionid", sessionHandleString); + formData.add("dimensionTable", dimTable); + + Response response = this + .exec("post", MetastoreURL.METASTORE_DIMTABLES_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, + MediaType.APPLICATION_XML, formData.getForm()); + AssertUtil.assertSucceeded(response); + } + + public void createDimTable(XDimensionTable dt) throws Exception { + createDimTable(dt, sessionHandleString); + } + + public void getLatestDate(String sessionHandleString) throws Exception { + MapBuilder query = new MapBuilder("sessionid", sessionHandleString); + query.put("timeDimension", "event_time"); + Response response = this + .exec("get", "/metastore/cubes/rrcube/latestdate", servLens, null, query, MediaType.APPLICATION_XML_TYPE, null, + query); + DateTime dt = (DateTime) Util.getObject(response.readEntity(String.class), DateTime.class); + } + + public void getLatestDate() throws Exception { + getLatestDate(sessionHandleString); + } + } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java index 70cad28..37fb703 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java @@ -21,16 +21,13 @@ package org.apache.lens.regression.core.helpers; import java.util.List; -import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import javax.xml.bind.JAXBException; import org.apache.lens.api.LensConf; import org.apache.lens.api.query.*; import org.apache.lens.api.result.LensAPIResult; -import org.apache.lens.api.result.QueryCostTO; import org.apache.lens.regression.core.constants.QueryURL; import org.apache.lens.regression.core.type.FormBuilder; import org.apache.lens.regression.core.type.MapBuilder; @@ -48,8 +45,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class QueryHelper extends ServiceManagerHelper { - private WebTarget servLens = ServiceManagerHelper.getServerLens(); - private String sessionHandleString = ServiceManagerHelper.getSessionHandle(); public QueryHelper() { } @@ -58,6 +53,7 @@ public class QueryHelper extends ServiceManagerHelper { super(envFileName); } + /** * Execute with conf * @@ -67,8 +63,8 @@ public class QueryHelper extends ServiceManagerHelper { * @param conf * @return the query Handle */ - public QueryHandle executeQuery(String queryString, String queryName, String sessionHandleString, String conf) throws - InstantiationException, IllegalAccessException, JAXBException, LensException { + public LensAPIResult executeQuery(String queryString, String queryName, String sessionHandleString, + String conf) throws InstantiationException, IllegalAccessException, JAXBException, LensException { FormBuilder formData = new FormBuilder(); formData.add("sessionid", sessionHandleString); formData.add("query", queryString); @@ -79,30 +75,24 @@ public class QueryHelper extends ServiceManagerHelper { } Response response = this.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); - AssertUtil.assertSucceededResponse(response); String queryHandleString = response.readEntity(String.class); log.info("QueryHandle String:{}", queryHandleString); - LensAPIResult successResponse = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); - QueryHandle queryHandle = (QueryHandle) successResponse.getData(); - if (queryHandle == null) { - throw new LensException("Query Execute Failed"); - } - log.info("Query Handle : {}", queryHandle); - return queryHandle; + LensAPIResult result = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); + return result; } - public QueryHandle executeQuery(String queryString, String queryName, String sessionHandleString) throws + public LensAPIResult executeQuery(String queryString, String queryName, String sessionHandleString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQuery(queryString, queryName, sessionHandleString, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); } - public QueryHandle executeQuery(String queryString, String queryName) throws + public LensAPIResult executeQuery(String queryString, String queryName) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQuery(queryString, queryName, sessionHandleString); } - public QueryHandle executeQuery(String queryString) throws + public LensAPIResult executeQuery(String queryString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQuery(queryString, null); } @@ -118,7 +108,7 @@ public class QueryHelper extends ServiceManagerHelper { * @return the queryHandleWithResultSet */ - public QueryHandleWithResultSet executeQueryTimeout(String queryString, String timeout, String queryName, + public LensAPIResult executeQueryTimeout(String queryString, String timeout, String queryName, String sessionHandleString, String conf) throws InstantiationException, IllegalAccessException, JAXBException, LensException { FormBuilder formData = new FormBuilder(); @@ -134,35 +124,29 @@ public class QueryHelper extends ServiceManagerHelper { } Response response = this.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); - AssertUtil.assertSucceededResponse(response); String queryHandleString = response.readEntity(String.class); log.info("QueryHandle String:{}", queryHandleString); - LensAPIResult successResponse = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); - QueryHandleWithResultSet queryHandleWithResultSet = (QueryHandleWithResultSet) successResponse.getData(); - if (queryHandleWithResultSet==null) { - throw new LensException("Query Execute Failed"); - } - log.info("Query Handle with ResultSet : {}", queryHandleWithResultSet); - return queryHandleWithResultSet; + LensAPIResult result = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); + return result; } - public QueryHandleWithResultSet executeQueryTimeout(String queryString, String timeout, String queryName, + public LensAPIResult executeQueryTimeout(String queryString, String timeout, String queryName, String sessionHandleString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQueryTimeout(queryString, timeout, queryName, sessionHandleString, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); } - public QueryHandleWithResultSet executeQueryTimeout(String queryString, String timeout, String queryName) throws + public LensAPIResult executeQueryTimeout(String queryString, String timeout, String queryName) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQueryTimeout(queryString, timeout, queryName, sessionHandleString); } - public QueryHandleWithResultSet executeQueryTimeout(String queryString, String timeout) throws + public LensAPIResult executeQueryTimeout(String queryString, String timeout) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQueryTimeout(queryString, timeout, null); } - public QueryHandleWithResultSet executeQueryTimeout(String queryString) throws + public LensAPIResult executeQueryTimeout(String queryString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return executeQueryTimeout(queryString, null); } @@ -178,7 +162,7 @@ public class QueryHelper extends ServiceManagerHelper { * @return the query Handle */ - public QueryHandle executeQuery(String queryString, String queryName, String user, String sessionHandleString, + public LensAPIResult executeQuery(String queryString, String queryName, String user, String sessionHandleString, LensConf conf) throws JAXBException, InstantiationException, IllegalAccessException, LensException { FormBuilder formData = new FormBuilder(); @@ -196,12 +180,10 @@ public class QueryHelper extends ServiceManagerHelper { MediaType.APPLICATION_XML_TYPE)); Response response = this.exec("post", "/queryapi/queries", servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); - AssertUtil.assertSucceededResponse(response); String queryHandleString = response.readEntity(String.class); log.info("QueryHandle String:{}", queryHandleString); - LensAPIResult successResponse = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); - QueryHandle queryHandle = (QueryHandle) successResponse.getData(); - return queryHandle; + LensAPIResult result = (LensAPIResult) Util.getObject(queryHandleString, LensAPIResult.class); + return result; } /** @@ -213,7 +195,7 @@ public class QueryHelper extends ServiceManagerHelper { * @return the query Plan */ - public QueryPlan explainQuery(String queryString, String sessionHandleString, String conf) throws + public LensAPIResult explainQuery(String queryString, String sessionHandleString, String conf) throws JAXBException, InstantiationException, IllegalAccessException, LensException { FormBuilder formData = new FormBuilder(); formData.add("sessionid", sessionHandleString); @@ -224,21 +206,19 @@ public class QueryHelper extends ServiceManagerHelper { MediaType.APPLICATION_XML_TYPE)); Response response = this.exec("post", "/queryapi/queries", servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); - AssertUtil.assertSucceededResponse(response); String queryPlanString = response.readEntity(String.class); log.info("QueryPlan String:{}", queryPlanString); - LensAPIResult successResponse = (LensAPIResult) Util.getObject(queryPlanString, LensAPIResult.class); - QueryPlan queryPlan = (QueryPlan) successResponse.getData(); - return queryPlan; + LensAPIResult result = (LensAPIResult) Util.getObject(queryPlanString, LensAPIResult.class); + return result; } - public QueryPlan explainQuery(String queryString, String sessionHandleString) throws + public LensAPIResult explainQuery(String queryString, String sessionHandleString) throws JAXBException, InstantiationException, IllegalAccessException, LensException { return explainQuery(queryString, sessionHandleString, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); } - public QueryPlan explainQuery(String queryString) throws + public LensAPIResult explainQuery(String queryString) throws JAXBException, InstantiationException, IllegalAccessException, LensException { return explainQuery(queryString, sessionHandleString); } @@ -252,7 +232,7 @@ public class QueryHelper extends ServiceManagerHelper { * @return the Estimate result */ - public QueryCostTO estimateQuery(String queryString, String sessionHandleString, String conf) throws + public LensAPIResult estimateQuery(String queryString, String sessionHandleString, String conf) throws InstantiationException, IllegalAccessException, JAXBException, LensException { FormBuilder formData = new FormBuilder(); formData.add("sessionid", sessionHandleString); @@ -261,24 +241,19 @@ public class QueryHelper extends ServiceManagerHelper { formData.add("conf", conf); Response response = this.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); - AssertUtil.assertSucceededResponse(response); String queryCostString = response.readEntity(String.class); log.info("QueryCost String:{}", queryCostString); - LensAPIResult successResponse = (LensAPIResult) Util.getObject(queryCostString, LensAPIResult.class); - QueryCostTO queryCostTO = (QueryCostTO) successResponse.getData(); - if (queryCostTO == null) { - throw new LensException("Estimate Failed"); - } - return queryCostTO; + LensAPIResult result = (LensAPIResult) Util.getObject(queryCostString, LensAPIResult.class); + return result; } - public QueryCostTO estimateQuery(String queryString, String sessionHandleString) throws + public LensAPIResult estimateQuery(String queryString, String sessionHandleString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return estimateQuery(queryString, sessionHandleString, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); } - public QueryCostTO estimateQuery(String queryString) throws + public LensAPIResult estimateQuery(String queryString) throws InstantiationException, IllegalAccessException, JAXBException, LensException { return estimateQuery(queryString, sessionHandleString); } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/ServiceManagerHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/ServiceManagerHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/ServiceManagerHelper.java index b14b00b..feddb0f 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/ServiceManagerHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/ServiceManagerHelper.java @@ -57,8 +57,8 @@ public abstract class ServiceManagerHelper { private static final String LENS_SERVER_HDFS_URL = "lens.server.hdfsurl"; private static final String LENS_CURRENT_DB = "lens.server.currentDB"; - private static String sessionHandleString; - private static WebTarget servLens; + protected static String sessionHandleString; + protected static WebTarget servLens; protected String baseUrl; protected String adminUrl; @@ -163,10 +163,10 @@ public abstract class ServiceManagerHelper { MapBuilder query = new MapBuilder("sessionid", sessionHandleString); Response response = this.exec("delete", SessionURL.SESSION_BASE_URL, ServiceManagerHelper.servLens, null, query); APIResult result = response.readEntity(APIResult.class); - if (result.getStatus() == APIResult.Status.SUCCEEDED) { + if (result.getStatus() != APIResult.Status.SUCCEEDED) { throw new LensException("Status should be SUCCEEDED"); } - if (response.getStatus() == 200) { + if (response.getStatus() != 200) { throw new LensException("Status code should be 200"); } if (result.getMessage() == null) { http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java index e7bc700..3c640e2 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java @@ -22,10 +22,8 @@ package org.apache.lens.regression.core.helpers; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import javax.xml.bind.JAXBException; import org.apache.lens.api.APIResult; @@ -40,8 +38,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SessionHelper extends ServiceManagerHelper { - private WebTarget servLens = ServiceManagerHelper.getServerLens(); - private String sessionHandleString = ServiceManagerHelper.getSessionHandle(); public SessionHelper() { } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/core/testHelper/BaseTestClass.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/testHelper/BaseTestClass.java b/lens-regression/src/main/java/org/apache/lens/regression/core/testHelper/BaseTestClass.java index 2985af4..f442983 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/testHelper/BaseTestClass.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/testHelper/BaseTestClass.java @@ -16,8 +16,49 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.lens.regression.core.testHelper; +import org.apache.lens.regression.core.helpers.LensHelper; +import org.apache.lens.regression.core.helpers.LensServerHelper; +import org.apache.lens.regression.core.helpers.MetastoreHelper; +import org.apache.lens.regression.core.helpers.QueryHelper; +import org.apache.lens.regression.core.helpers.SessionHelper; + public class BaseTestClass { + private LensHelper lensHelper; + private QueryHelper qHelper; + private MetastoreHelper mHelper; + private SessionHelper sHelper; + private LensServerHelper lens; + + public static final String LENS_PROPERTIES = "lens.properties"; + + public BaseTestClass() { + + lensHelper = new LensHelper(LENS_PROPERTIES); + qHelper = lensHelper.getQueryHelper(); + mHelper = lensHelper.getMetastoreHelper(); + sHelper = lensHelper.getSessionHelper(); + lens = lensHelper.getServerHelper(); + } + + public QueryHelper getQueryHelper() { + return qHelper; + } + + public MetastoreHelper getMetastoreHelper() { + return mHelper; + } + + public SessionHelper getSessionHelper() { + return sHelper; + } + + public LensServerHelper getLensServerHelper() { + return lens; + } + + } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java b/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java index 62bd160..ea36858 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java @@ -22,8 +22,13 @@ package org.apache.lens.regression.util; import javax.ws.rs.core.Response; import org.apache.lens.api.APIResult; +import org.apache.lens.api.result.LensAPIResult; +import org.apache.lens.api.result.LensErrorTO; import org.apache.lens.server.api.error.LensException; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class AssertUtil { private AssertUtil() { @@ -37,11 +42,11 @@ public class AssertUtil { * @throws LensException */ public static void assertSucceeded(Response response) throws LensException { - if (response.getStatus() == 200) { + if (response.getStatus() != 200) { throw new LensException("Status code should be 200"); } APIResult result = Util.getApiResult(response); - if (result.getStatus() == APIResult.Status.SUCCEEDED) { + if (result.getStatus() != APIResult.Status.SUCCEEDED) { throw new LensException("Status should be SUCCEEDED"); } if (result.getMessage() == null) { @@ -56,13 +61,19 @@ public class AssertUtil { * @throws LensException */ public static void assertSucceededResponse(Response response) throws LensException { - if (response.getStatus() == 200) { + if (response.getStatus() != 200) { throw new LensException("Status code should be 200"); } } + public static void assertSucceededResponse(Response response, int expected) throws LensException { + if (response.getStatus() != expected) { + throw new LensException("Status code should be " + expected); + } + } + public static void assertGoneResponse(Response response) throws LensException { - if (response.getStatus() == 410) { + if (response.getStatus() != 410) { throw new LensException("Status code should be 410"); } } @@ -74,7 +85,7 @@ public class AssertUtil { * @throws LensException */ public static void assertFailedResponse(Response response) throws LensException { - if (response.getStatus() == 404) { + if (response.getStatus() != 404) { throw new LensException("Status code should be 404"); } } @@ -86,11 +97,11 @@ public class AssertUtil { * @throws LensException */ public static void assertFailed(Response response) throws LensException { - if (response.getStatus() == 400) { + if (response.getStatus() != 400) { throw new LensException("Status code should be 400"); } APIResult result = Util.getApiResult(response); - if (result.getStatus() == APIResult.Status.FAILED) { + if (result.getStatus() != APIResult.Status.FAILED) { throw new LensException("Status should be FAILED"); } if (result.getMessage() == null) { @@ -125,10 +136,45 @@ public class AssertUtil { */ public static void assertInternalServerError(Response response) throws LensException { - if (response.getStatus() == 500) { + if (response.getStatus() != 500) { throw new LensException("Status code should be 500"); } } + public static void validateFailedResponse(int errorCode, String errorMessage, boolean payLoad, Response response, + int httpResponseCode) throws InstantiationException, IllegalAccessException, LensException { + String queryHandleString = response.readEntity(String.class); + log.info(queryHandleString); + @SuppressWarnings("unchecked") LensAPIResult errorResponse = (LensAPIResult) Util + .getObject(queryHandleString, LensAPIResult.class); + LensErrorTO error = errorResponse.getLensErrorTO(); + LensErrorTO expectedError = null; + if (payLoad) { + expectedError = LensErrorTO.composedOf(errorCode, errorMessage, "nothing", error.getPayload()); + } else { + expectedError = LensErrorTO.composedOf(errorCode, errorMessage, "nothing"); + } + log.info("expected Error-: " + expectedError); + log.info("actual Error-: " + error); + if (!error.equals(expectedError)) { + throw new LensException("Wrong Error Response"); + } + if (!errorResponse.areValidStackTracesPresent()) { + throw new LensException("StackTrace should be present"); + } + if (payLoad) { + if (error.getPayload() == null) { + throw new LensException("Payload should not be null"); + } + } else { + if (error.getPayload() != null) { + throw new LensException("Payload should be null"); + } + } + if (errorResponse.isSuccessResult()) { + throw new LensException("SuccessResponse should be false"); + } + } + } http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/util/HadoopUtil.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/util/HadoopUtil.java b/lens-regression/src/main/java/org/apache/lens/regression/util/HadoopUtil.java new file mode 100644 index 0000000..a4ae5c1 --- /dev/null +++ b/lens-regression/src/main/java/org/apache/lens/regression/util/HadoopUtil.java @@ -0,0 +1,61 @@ +/** + * 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.lens.regression.util; + +import java.io.IOException; + + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HadoopUtil { + + private HadoopUtil() { + + } + + static String rmIp = Util.getProperty("lens.remote.host"); + + public static Configuration getHadoopConfiguration() { + Configuration conf = new Configuration(); + conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); + conf.set("fs.default.name", Util.getProperty("lens.server.hdfsurl")); + return conf; + } + + public static void uploadJars(String sourcePath, String hdfsDestinationPath) throws IOException { + + Configuration conf = HadoopUtil.getHadoopConfiguration(); + FileSystem fs = FileSystem.get(conf); + + Path localFilePath = new Path(sourcePath); + Path hdfsFilePath = new Path(hdfsDestinationPath); + + log.info("Copying " + sourcePath + " to " + hdfsDestinationPath); + fs.copyFromLocalFile(localFilePath, hdfsFilePath); + log.info("Copied Successfully " + sourcePath + " to " + hdfsDestinationPath); + + } + +} http://git-wip-us.apache.org/repos/asf/lens/blob/7678a63b/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java b/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java index 0e531e0..7bda529 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java @@ -18,28 +18,55 @@ */ package org.apache.lens.regression.util; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; +import java.util.Map.Entry; import javax.ws.rs.core.Response; import javax.xml.bind.*; +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.*; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + import org.apache.lens.api.APIResult; import org.apache.lens.api.StringList; import org.apache.lens.api.jaxb.LensJAXBContext; import org.apache.lens.api.metastore.ObjectFactory; +import org.apache.lens.api.metastore.XProperties; +import org.apache.lens.api.metastore.XProperty; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import com.jcraft.jsch.*; -import lombok.extern.slf4j.Slf4j; +import lombok.extern.slf4j.Slf4j; + @Slf4j public class Util { private static final String PROPERTY_FILE = "lens.properties"; private static Properties properties; + private static String localFilePath = "src/test/resources/"; + private static String localFile; + private static String backupFile; + private static String remoteFile; private Util() { @@ -127,13 +154,14 @@ public class Util { } @SuppressWarnings("unchecked") - public static <T> Object extractObject(String queryString, Class<T> c) throws - InstantiationException, IllegalAccessException { + public static <T> Object extractObject(String queryString, Class<T> c) + throws InstantiationException, IllegalAccessException { JAXBContext jaxbContext = null; Unmarshaller unmarshaller = null; StringReader reader = new StringReader(queryString); try { - jaxbContext = new LensJAXBContext(ObjectFactory.class) {}; + jaxbContext = new LensJAXBContext(ObjectFactory.class) { + }; unmarshaller = jaxbContext.createUnmarshaller(); return (T) ((JAXBElement<?>) unmarshaller.unmarshal(reader)).getValue(); } catch (JAXBException e) { @@ -143,8 +171,8 @@ public class Util { } @SuppressWarnings("unchecked") - public static <T> Object getObject(String queryString, Class<T> c) throws - InstantiationException, IllegalAccessException { + public static <T> Object getObject(String queryString, Class<T> c) + throws InstantiationException, IllegalAccessException { JAXBContext jaxbContext = null; Unmarshaller unmarshaller = null; StringReader reader = new StringReader(queryString); @@ -159,8 +187,8 @@ public class Util { } @SuppressWarnings("unchecked") - public static <T> String convertObjectToXml(T object, Class<T> clazz, String functionName) throws - SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, + public static <T> String convertObjectToXml(T object, Class<T> clazz, String functionName) + throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { JAXBElement<T> root = null; StringWriter stringWriter = new StringWriter(); @@ -209,4 +237,180 @@ public class Util { return stringListToMap(stringList); } + public static void changeConfig(HashMap<String, String> map, String remotePath) throws Exception { + String fileName; + remoteFile = remotePath; + + Path p = Paths.get(remoteFile); + + fileName = p.getFileName().toString(); + backupFile = localFilePath + "backup-" + fileName; + localFile = localFilePath + fileName; + log.info("Copying " + remoteFile + " to " + localFile); + remoteFile("get", remoteFile, localFile); + File locfile = new File(localFile); + File remfile = new File(backupFile); + Files.copy(locfile.toPath(), remfile.toPath(), REPLACE_EXISTING); + + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.parse(new FileInputStream(localFile)); + doc.normalize(); + + NodeList rootNodes = doc.getElementsByTagName("configuration"); + Node root = rootNodes.item(0); + Element rootElement = (Element) root; + NodeList property = rootElement.getElementsByTagName("property"); + + for (int i = 0; i < property.getLength(); i++) //Deleting redundant properties from the document + { + Node prop = property.item(i); + Element propElement = (Element) prop; + Node propChild = propElement.getElementsByTagName("name").item(0); + + Element nameElement = (Element) propChild; + if (map.containsKey(nameElement.getTextContent())) { + rootElement.removeChild(prop); + i--; + } + + } + + Iterator<Entry<String, String>> ab = map.entrySet().iterator(); + while (ab.hasNext()) { + Entry<String, String> entry = ab.next(); + String propertyName = entry.getKey(); + String propertyValue = entry.getValue(); + System.out.println(propertyName + " " + propertyValue + "\n"); + Node newNode = doc.createElement("property"); + rootElement.appendChild(newNode); + Node newName = doc.createElement("name"); + Element newNodeElement = (Element) newNode; + + newName.setTextContent(propertyName); + newNodeElement.appendChild(newName); + + Node newValue = doc.createElement("value"); + newValue.setTextContent(propertyValue); + newNodeElement.appendChild(newValue); + } + prettyPrint(doc); + remoteFile("put", remoteFile, localFile); + } + + /* + * function to save the changes in the document + */ + public static final void prettyPrint(Document xml) throws TransformerFactoryConfigurationError, TransformerException { + xml.normalize(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + Result output = new StreamResult(new File(localFile)); + Source input = new DOMSource(xml); + transformer.transform(input, output); + } + + /* + * function to download or upload a file to a remote server + */ + public static void remoteFile(String function, String remotePath, String localPath) + throws JSchException, SftpException { + String serverUrl = getProperty("lens.remote.host"); + String serverUname = getProperty("lens.remote.username"); + String serverPass = getProperty("lens.remote.password"); + + JSch jsch = new JSch(); + Session session = jsch.getSession(serverUname, serverUrl); + + UserInfo ui = null; + session.setUserInfo(ui); + session.setPassword(serverPass); + + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + session.connect(); + + Channel channel = session.openChannel("sftp"); + channel.connect(); + + ChannelSftp sftpChannel = (ChannelSftp) channel; + if (function.equals("get")) { + sftpChannel.get(remotePath, localPath); + } else if (function.equals("put")) { + sftpChannel.put(localPath, remotePath); + } + sftpChannel.exit(); + session.disconnect(); + + } + + public static void changeConfig(String remotePath) throws JSchException, SftpException { + String fileName; + remoteFile = remotePath; + + Path p = Paths.get(remoteFile); + + fileName = p.getFileName().toString(); + backupFile = localFilePath + "backup-" + fileName; + + log.info("Copying " + backupFile + " to " + remoteFile); + remoteFile("put", remoteFile, backupFile); + } + + public static Map<String, String> mapFromXProperties(XProperties xProperties) { + Map<String, String> properties = new HashMap<String, String>(); + if (xProperties != null && xProperties.getProperty() != null + && !xProperties.getProperty().isEmpty()) { + for (XProperty xp : xProperties.getProperty()) { + properties.put(xp.getName(), xp.getValue()); + } + } + return properties; + } + + public static XProperties xPropertiesFromMap(Map<String, String> map) { + ObjectFactory xCF = new ObjectFactory(); + if (map != null && !map.isEmpty()) { + XProperties xp = xCF.createXProperties(); + List<XProperty> xpList = xp.getProperty(); + for (Map.Entry<String, String> e : map.entrySet()) { + XProperty property = xCF.createXProperty(); + property.setName(e.getKey()); + property.setValue(e.getValue()); + xpList.add(property); + } + + return xp; + } + return null; + } + + public static List<XProperty> xPropertyFromMap(Map<String, String> map) { + List<XProperty> xpList = new ArrayList<XProperty>(); + if (map != null && !map.isEmpty()) { + for (Map.Entry<String, String> e : map.entrySet()) { + XProperty property = new XProperty(); + property.setName(e.getKey()); + property.setValue(e.getValue()); + xpList.add(property); + } + } + return xpList; + } + + public static XMLGregorianCalendar getXMLGregorianCalendar(Date d) { + if (d == null) { + return null; + } + + GregorianCalendar c1 = new GregorianCalendar(); + c1.setTime(d); + try { + return DatatypeFactory.newInstance().newXMLGregorianCalendar(c1); + } catch (DatatypeConfigurationException e) { + log.info("Error converting date " + d, e); + return null; + } + } + }