LENS-791 : Fix CLI output to print yaml representation of entity
Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/b805ee98 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/b805ee98 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/b805ee98 Branch: refs/heads/master Commit: b805ee989188c5889e6472b48572d126b6515414 Parents: 58d8636 Author: Rajat Khandelwal <pro...@apache.org> Authored: Fri Feb 5 14:12:29 2016 +0530 Committer: Amareshwari Sriramadasu <amareshw...@apache.org> Committed: Fri Feb 5 14:12:29 2016 +0530 ---------------------------------------------------------------------- lens-api/pom.xml | 7 + .../java/org/apache/lens/api/APIResult.java | 33 +- .../main/java/org/apache/lens/api/DateTime.java | 2 +- .../main/java/org/apache/lens/api/LensConf.java | 6 +- .../org/apache/lens/api/LensSessionHandle.java | 47 +-- .../java/org/apache/lens/api/ToXMLString.java | 73 ++++ .../java/org/apache/lens/api/ToYAMLString.java | 121 ++++++ .../apache/lens/api/jaxb/LensJAXBContext.java | 47 ++- .../lens/api/jaxb/YAMLToStringStrategy.java | 389 +++++++++++++++++++ .../lens/api/query/InMemoryQueryResult.java | 5 + .../lens/api/query/LensPreparedQuery.java | 4 +- .../org/apache/lens/api/query/LensQuery.java | 3 +- .../org/apache/lens/api/query/QueryHandle.java | 10 - .../lens/api/query/QueryPrepareHandle.java | 10 - .../org/apache/lens/api/query/QueryResult.java | 3 +- .../lens/api/query/QueryResultSetMetadata.java | 4 +- .../org/apache/lens/api/query/QueryStatus.java | 42 +- .../lens/api/query/QuerySubmitResult.java | 3 +- .../apache/lens/api/query/SchedulerJobInfo.java | 2 + .../org/apache/lens/api/result/QueryCostTO.java | 1 - .../lens/api/jaxb/YAMLToStringStrategyTest.java | 166 ++++++++ .../toString/org.apache.lens.api.DateTime.xml | 24 ++ .../toString/org.apache.lens.api.DateTime.yaml | 16 + .../toString/org.apache.lens.api.LensConf.xml | 33 ++ .../toString/org.apache.lens.api.LensConf.yaml | 17 + ...pache.lens.api.query.InMemoryQueryResult.xml | 49 +++ ...ache.lens.api.query.InMemoryQueryResult.yaml | 17 + ....apache.lens.api.query.LensPreparedQuery.xml | 43 ++ ...apache.lens.api.query.LensPreparedQuery.yaml | 24 ++ .../org.apache.lens.api.query.LensQuery.xml | 67 ++++ .../org.apache.lens.api.query.LensQuery.yaml | 42 ++ ...che.lens.api.query.PersistentQueryResult.xml | 27 ++ ...he.lens.api.query.PersistentQueryResult.yaml | 19 + .../org.apache.lens.api.query.QueryHandle.xml | 24 ++ .../org.apache.lens.api.query.QueryHandle.yaml | 16 + ....lens.api.query.QueryHandleWithResultSet.xml | 26 ++ ...lens.api.query.QueryHandleWithResultSet.yaml | 16 + .../org.apache.lens.api.query.QueryPlan.xml | 43 ++ .../org.apache.lens.api.query.QueryPlan.yaml | 29 ++ ...apache.lens.api.query.QueryPrepareHandle.xml | 24 ++ ...pache.lens.api.query.QueryPrepareHandle.yaml | 16 + ...he.lens.api.query.QueryResultSetMetadata.xml | 33 ++ ...e.lens.api.query.QueryResultSetMetadata.yaml | 17 + .../org.apache.lens.api.query.QueryStatus.xml | 35 ++ .../org.apache.lens.api.query.QueryStatus.yaml | 22 ++ .../org.apache.lens.api.query.ResultRow.xml | 33 ++ .../org.apache.lens.api.query.ResultRow.yaml | 16 + ...apache.lens.api.query.SchedulerJobHandle.xml | 24 ++ ...pache.lens.api.query.SchedulerJobHandle.yaml | 16 + .../org.apache.lens.api.result.QueryCostTO.xml | 26 ++ .../org.apache.lens.api.result.QueryCostTO.yaml | 18 + .../lens/cli/commands/BaseLensCommand.java | 37 +- .../lens/cli/commands/LensCRUDCommand.java | 7 +- .../cli/commands/LensConnectionCommands.java | 26 +- .../cli/commands/LensDimensionCommands.java | 7 +- .../lens/cli/commands/LensQueryCommands.java | 6 +- .../cli/commands/LogicalTableCrudCommand.java | 13 +- .../apache/lens/cli/LensCliApplicationTest.java | 3 +- .../apache/lens/cli/TestLensCubeCommands.java | 5 +- .../lens/cli/TestLensDimensionCommands.java | 4 +- .../cli/TestLensDimensionTableCommands.java | 6 +- .../apache/lens/cli/TestLensFactCommands.java | 4 +- .../lens/cli/TestLensStorageCommands.java | 4 +- .../java/org/apache/lens/client/LensClient.java | 1 + .../apache/lens/client/LensMetadataClient.java | 26 +- .../org/apache/lens/client/LensStatement.java | 2 +- .../src/main/resources/lens-client-default.xml | 5 + lens-examples/pom.xml | 16 +- .../apache/lens/examples/SampleMetastore.java | 5 +- .../src/main/resources/example-job.xml | 5 +- .../examples/ExampleSchemaToStringTest.java | 45 +++ .../test/resources/yaml/city-local-part.yaml | 20 + lens-examples/src/test/resources/yaml/city.yaml | 23 ++ .../src/test/resources/yaml/city_subset.yaml | 30 ++ .../src/test/resources/yaml/city_table.yaml | 36 ++ .../resources/yaml/customer-local-part.yaml | 20 + .../src/test/resources/yaml/customer.yaml | 38 ++ .../src/test/resources/yaml/customer_table.yaml | 45 +++ .../src/test/resources/yaml/db-storage.yaml | 19 + .../test/resources/yaml/dim1-local-part.yaml | 20 + .../test/resources/yaml/dim2-local-part.yaml | 20 + .../test/resources/yaml/dim4-local-part.yaml | 20 + .../src/test/resources/yaml/dim_table.yaml | 35 ++ .../src/test/resources/yaml/dim_table2.yaml | 34 ++ .../src/test/resources/yaml/dim_table3.yaml | 34 ++ .../src/test/resources/yaml/dim_table4.yaml | 43 ++ .../src/test/resources/yaml/example-job.yaml | 39 ++ .../test/resources/yaml/fact1-local-part1.yaml | 20 + .../test/resources/yaml/fact1-local-part2.yaml | 20 + .../test/resources/yaml/fact1-local-part3.yaml | 20 + .../src/test/resources/yaml/fact1.yaml | 35 ++ .../test/resources/yaml/fact2-local-part1.yaml | 20 + .../test/resources/yaml/fact2-local-part2.yaml | 20 + .../test/resources/yaml/fact2-local-part3.yaml | 20 + .../src/test/resources/yaml/fact2.yaml | 36 ++ .../resources/yaml/local-cluster-storage.yaml | 19 + .../src/test/resources/yaml/local-storage.yaml | 19 + .../resources/yaml/product-local-parts.yaml | 48 +++ .../src/test/resources/yaml/product.yaml | 36 ++ .../test/resources/yaml/product_db_table.yaml | 36 ++ .../src/test/resources/yaml/product_table.yaml | 39 ++ .../test/resources/yaml/raw-local-part1.yaml | 20 + .../test/resources/yaml/raw-local-part2.yaml | 20 + .../test/resources/yaml/raw-local-part3.yaml | 20 + .../test/resources/yaml/raw-local-part4.yaml | 20 + .../test/resources/yaml/raw-local-part5.yaml | 20 + .../test/resources/yaml/raw-local-part6.yaml | 20 + .../src/test/resources/yaml/rawfact.yaml | 38 ++ .../yaml/sales-aggr-continuous-fact.yaml | 45 +++ .../yaml/sales-aggr-fact1-local-parts.yaml | 40 ++ .../yaml/sales-aggr-fact1-mydb-parts.yaml | 24 ++ .../test/resources/yaml/sales-aggr-fact1.yaml | 60 +++ .../yaml/sales-aggr-fact2-local-parts.yaml | 40 ++ .../yaml/sales-aggr-fact2-mydb-parts.yaml | 24 ++ .../test/resources/yaml/sales-aggr-fact2.yaml | 56 +++ .../src/test/resources/yaml/sales-cube.yaml | 110 ++++++ .../src/test/resources/yaml/sales-raw-fact.yaml | 50 +++ .../resources/yaml/sales-raw-local-parts.yaml | 32 ++ .../src/test/resources/yaml/sample-cube.yaml | 47 +++ .../yaml/sample-db-only-dimension.yaml | 32 ++ .../test/resources/yaml/sample-dimension.yaml | 32 ++ .../test/resources/yaml/sample-dimension2.yaml | 24 ++ .../org/apache/lens/server/LensJerseyTest.java | 2 +- .../apache/lens/server/LensServerTestUtil.java | 9 +- pom.xml | 1 + src/site/apt/user/client-config.apt | 14 +- 126 files changed, 3432 insertions(+), 249 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/pom.xml ---------------------------------------------------------------------- diff --git a/lens-api/pom.xml b/lens-api/pom.xml index e4a89ff..9b5e5f8 100644 --- a/lens-api/pom.xml +++ b/lens-api/pom.xml @@ -93,8 +93,10 @@ <arg>-extension</arg> <arg>-Xinheritance</arg> <arg>-XtoString</arg> + <arg>-XtoString-toStringStrategyClass=org.apache.lens.api.jaxb.YAMLToStringStrategy</arg> <arg>-Xequals</arg> <arg>-XhashCode</arg> + <arg>-Xfluent-api</arg> </args> <plugins> <plugin> @@ -102,6 +104,11 @@ <artifactId>jaxb2-basics</artifactId> <version>${jaxb2.basics.plugin.version}</version> </plugin> + <plugin> + <groupId>org.jvnet.jaxb2_commons</groupId> + <artifactId>jaxb2-fluent-api</artifactId> + <version>${jaxb2.fluent.plugin.version}</version> + </plugin> </plugins> </configuration> </plugin> http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/APIResult.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/APIResult.java b/lens-api/src/main/java/org/apache/lens/api/APIResult.java index f50d3ea..26e9926 100644 --- a/lens-api/src/main/java/org/apache/lens/api/APIResult.java +++ b/lens-api/src/main/java/org/apache/lens/api/APIResult.java @@ -18,15 +18,8 @@ */ package org.apache.lens.api; -import java.io.StringWriter; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.*; -import org.apache.lens.api.jaxb.LensJAXBContext; - import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -45,7 +38,7 @@ import lombok.NoArgsConstructor; * Instantiates a new API result. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class APIResult { +public class APIResult extends ToYAMLString { /** * The status. */ @@ -61,19 +54,6 @@ public class APIResult { private String message; /** - * The Constant JAXB_CONTEXT. - */ - private static final JAXBContext JAXB_CONTEXT; - - static { - try { - JAXB_CONTEXT = new LensJAXBContext(APIResult.class); - } catch (JAXBException e) { - throw new RuntimeException(e); - } - } - - /** * API Result status. */ @XmlType @@ -94,17 +74,6 @@ public class APIResult { FAILED } - @Override - public String toString() { - try { - StringWriter stringWriter = new StringWriter(); - Marshaller marshaller = JAXB_CONTEXT.createMarshaller(); - marshaller.marshal(this, stringWriter); - return stringWriter.toString(); - } catch (JAXBException e) { - return e.getMessage(); - } - } private static final APIResult SUCCESS = new APIResult(Status.SUCCEEDED, ""); public static APIResult partial(int actual, int expected) { http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/DateTime.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/DateTime.java b/lens-api/src/main/java/org/apache/lens/api/DateTime.java index 3f89fdd..cd88a57 100644 --- a/lens-api/src/main/java/org/apache/lens/api/DateTime.java +++ b/lens-api/src/main/java/org/apache/lens/api/DateTime.java @@ -42,7 +42,7 @@ import lombok.*; * Instantiates a new date. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class DateTime { +public class DateTime extends ToYAMLString { /** * The Date. http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/LensConf.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/LensConf.java b/lens-api/src/main/java/org/apache/lens/api/LensConf.java index 67d6461..86504c7 100644 --- a/lens-api/src/main/java/org/apache/lens/api/LensConf.java +++ b/lens-api/src/main/java/org/apache/lens/api/LensConf.java @@ -39,7 +39,7 @@ import lombok.NoArgsConstructor; * Instantiates a new lens conf. */ @NoArgsConstructor -public class LensConf implements Serializable { +public class LensConf extends ToYAMLString implements Serializable { /** * The Constant serialVersionUID. @@ -75,4 +75,8 @@ public class LensConf implements Serializable { public void addProperties(Map<String, String> props) { properties.putAll(props); } + + public String getProperty(Object key) { + return properties.get(key); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java b/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java index dc9142d..74725e3 100644 --- a/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java +++ b/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java @@ -21,20 +21,12 @@ */ package org.apache.lens.api; -import java.io.StringReader; -import java.io.StringWriter; import java.util.UUID; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import org.apache.lens.api.jaxb.LensJAXBContext; - import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -57,7 +49,7 @@ import lombok.NoArgsConstructor; * Instantiates a new lens session handle. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class LensSessionHandle { +public class LensSessionHandle extends ToXMLString { /** * The public id. @@ -76,47 +68,12 @@ public class LensSessionHandle { private UUID secretId; /** - * The Constant JAXB_CONTEXT. - */ - private static final JAXBContext JAXB_CONTEXT; - - static { - try { - JAXB_CONTEXT = new LensJAXBContext(LensSessionHandle.class); - } catch (JAXBException e) { - throw new RuntimeException(e); - } - } - - /** * Value of. * * @param sessionStr the session str * @return the lens session handle */ public static LensSessionHandle valueOf(String sessionStr) { - try { - Unmarshaller unmarshaller = JAXB_CONTEXT.createUnmarshaller(); - return (LensSessionHandle) unmarshaller.unmarshal(new StringReader(sessionStr)); - } catch (JAXBException e) { - return null; - } - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - try { - StringWriter stringWriter = new StringWriter(); - Marshaller marshaller = JAXB_CONTEXT.createMarshaller(); - marshaller.marshal(this, stringWriter); - return stringWriter.toString(); - } catch (JAXBException e) { - return ""; - } + return valueOf(sessionStr, LensSessionHandle.class); } } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/ToXMLString.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/ToXMLString.java b/lens-api/src/main/java/org/apache/lens/api/ToXMLString.java new file mode 100644 index 0000000..fca56a8 --- /dev/null +++ b/lens-api/src/main/java/org/apache/lens/api/ToXMLString.java @@ -0,0 +1,73 @@ +/** + * 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.api; + + +import java.io.StringReader; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import org.apache.lens.api.jaxb.LensJAXBContext; + +public abstract class ToXMLString { + protected static final Map<Class<?>, JAXBContext> JAXB_CONTEXTS = new HashMap<>(); + + + @Override + public String toString() { + return toString(this); + } + + public static String toString(Object o) { + try { + StringWriter stringWriter = new StringWriter(); + Marshaller marshaller = getLensJAXBContext(o.getClass()).createMarshaller(); + marshaller.marshal(o, stringWriter); + return stringWriter.toString(); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + public static JAXBContext getLensJAXBContext(Class<?> clazz) { + if (!JAXB_CONTEXTS.containsKey(clazz)) { + try { + JAXB_CONTEXTS.put(clazz, new LensJAXBContext(clazz)); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + return JAXB_CONTEXTS.get(clazz); + } + + public static <T> T valueOf(String sessionStr, Class<T> tClass) { + try { + Unmarshaller unmarshaller = getLensJAXBContext(tClass).createUnmarshaller(); + return (T) unmarshaller.unmarshal(new StringReader(sessionStr)); + } catch (JAXBException e) { + return null; + } + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/ToYAMLString.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/ToYAMLString.java b/lens-api/src/main/java/org/apache/lens/api/ToYAMLString.java new file mode 100644 index 0000000..65a0c44 --- /dev/null +++ b/lens-api/src/main/java/org/apache/lens/api/ToYAMLString.java @@ -0,0 +1,121 @@ +/** + * 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.api; + + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.List; + +import org.apache.lens.api.jaxb.YAMLToStringStrategy; + +import org.jvnet.jaxb2_commons.lang.ToString; +import org.jvnet.jaxb2_commons.lang.ToStringStrategy; +import org.jvnet.jaxb2_commons.locator.ObjectLocator; + +import com.google.common.collect.Lists; +import lombok.Data; + +public abstract class ToYAMLString implements ToString { + @Data(staticConstructor = "of") + public static class FieldNameAndValue { + final String name; + final Object value; + } + + public String toString() { + final ToStringStrategy strategy = new YAMLToStringStrategy(); + final StringBuilder buffer = new StringBuilder(); + append(null, buffer, strategy); + return buffer.toString(); + } + + public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { + if (getFieldsToAppend().size() == 1) { + Object field = getFieldsToAppend().iterator().next().getValue(); + strategy.append(locator, buffer, field); + return buffer; + } + strategy.appendStart(locator, this, buffer); + appendFields(locator, buffer, strategy); + strategy.appendEnd(locator, this, buffer); + return buffer; + } + + Collection<FieldNameAndValue> fieldsToAppend = null; + + public Collection<FieldNameAndValue> getFieldsToAppend() { + if (fieldsToAppend == null) { + List<FieldNameAndValue> fieldNameAndValueList = Lists.newArrayList(); + for (Field field : this.getClass().getDeclaredFields()) { + try { + Method getter = getGetter(field); + fieldNameAndValueList.add(new FieldNameAndValue(getReadableName(getter), getter.invoke(this))); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + //pass. The field doesn't have getter. + } + } + fieldsToAppend = fieldNameAndValueList; + } + return fieldsToAppend; + } + + @Override + public StringBuilder appendFields(ObjectLocator objectLocator, StringBuilder stringBuilder, ToStringStrategy + toStringStrategy) { + for (FieldNameAndValue fieldNameAndValue : fieldsToAppend) { + toStringStrategy.appendField(objectLocator, this, fieldNameAndValue.getName(), stringBuilder, + fieldNameAndValue.getValue()); + } + return stringBuilder; + } + + private String getReadableName(Method method) { + return method.getName().replaceAll("^get", "").replaceAll("^is", "Is").replaceAll("([a-z])(?=[A-Z])", "$1 "); + } + + private Method getGetter(Field field) throws NoSuchMethodException { + String getterName; + if (field.getType().isAssignableFrom(Boolean.class) || field.getType().equals(Boolean.TYPE)) { + getterName = field.getName(); + if (!getterName.startsWith("is")) { + getterName = "is" + toPascalCase(getterName); + } + } else { + getterName = "get" + toPascalCase(field.getName()); + } + return this.getClass().getDeclaredMethod(getterName); + } + + private String toPascalCase(String str) { + return str.substring(0, 1).toUpperCase() + str.substring(1); + } + + public String toXMLString() { + return ToXMLString.toString(this); + } + + public static <T> T fromXMLString(String xml, Class<? extends T> clazz) { + return ToXMLString.valueOf(xml, clazz); + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/jaxb/LensJAXBContext.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/jaxb/LensJAXBContext.java b/lens-api/src/main/java/org/apache/lens/api/jaxb/LensJAXBContext.java index 85a47ec..e517c92 100644 --- a/lens-api/src/main/java/org/apache/lens/api/jaxb/LensJAXBContext.java +++ b/lens-api/src/main/java/org/apache/lens/api/jaxb/LensJAXBContext.java @@ -21,12 +21,16 @@ */ package org.apache.lens.api.jaxb; -import java.net.URL; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import javax.xml.XMLConstants; import javax.xml.bind.*; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.util.ValidationEventCollector; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; @@ -38,6 +42,18 @@ import lombok.extern.slf4j.Slf4j; public class LensJAXBContext extends JAXBContext { private final JAXBContext jaxbContext; private final boolean hasTopLevelClass; + private static final LensJAXBContext INSTANCE; + private static final Unmarshaller UNMARSHALLER; + + static { + try { + INSTANCE = new LensJAXBContext(org.apache.lens.api.metastore.ObjectFactory.class, + org.apache.lens.api.scheduler.ObjectFactory.class); + UNMARSHALLER = INSTANCE.createUnmarshaller(); + } catch (JAXBException e) { + throw new RuntimeException("Couldn't create instance of lens jaxb context", e); + } + } public LensJAXBContext(Class... classesToBeBoundArray) throws JAXBException { jaxbContext = JAXBContext.newInstance(classesToBeBoundArray); @@ -55,11 +71,12 @@ public class LensJAXBContext extends JAXBContext { public Unmarshaller createUnmarshaller() throws JAXBException { Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); if (!hasTopLevelClass) { - ClassLoader classLoader = LensJAXBContext.class.getClassLoader(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); try { - URL resource = classLoader.getResource("cube-0.1.xsd"); - Schema schema = sf.newSchema(resource); + Schema schema = sf.newSchema(new Source[]{ + new StreamSource(getClass().getResourceAsStream("/scheduler-job-0.1.xsd")), + new StreamSource(getClass().getResourceAsStream("/cube-0.1.xsd")), + }); unmarshaller.setSchema(schema); } catch (SAXException e) { throw new JAXBException(e); @@ -88,4 +105,26 @@ public class LensJAXBContext extends JAXBContext { return true; } } + + public LensJAXBContext getInstance() { + return INSTANCE; + } + + public Unmarshaller getUnmarshaller() { + return UNMARSHALLER; + } + + public static <T> T unmarshallFromFile(String filename) throws JAXBException, IOException { + File file = new File(filename); + if (file.exists()) { + return ((JAXBElement<T>) UNMARSHALLER.unmarshal(file)).getValue(); + } else { + // load from classpath + InputStream stream = LensJAXBContext.class.getResourceAsStream(filename); + if (stream == null) { + throw new IOException("File not found:" + filename); + } + return ((JAXBElement<T>) UNMARSHALLER.unmarshal(stream)).getValue(); + } + } } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/jaxb/YAMLToStringStrategy.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/jaxb/YAMLToStringStrategy.java b/lens-api/src/main/java/org/apache/lens/api/jaxb/YAMLToStringStrategy.java new file mode 100644 index 0000000..f5af1c6 --- /dev/null +++ b/lens-api/src/main/java/org/apache/lens/api/jaxb/YAMLToStringStrategy.java @@ -0,0 +1,389 @@ +/** + * 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.api.jaxb; + +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.isNotBlank; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; + +import javax.xml.datatype.XMLGregorianCalendar; + +import org.apache.lens.api.metastore.*; +import org.apache.lens.api.query.QueryHandle; +import org.apache.lens.api.query.QueryPrepareHandle; +import org.apache.lens.api.query.ResultColumn; + +import org.jvnet.jaxb2_commons.lang.JAXBToStringStrategy; +import org.jvnet.jaxb2_commons.lang.ToString; +import org.jvnet.jaxb2_commons.lang.ToStringStrategy; +import org.jvnet.jaxb2_commons.locator.ObjectLocator; + +import com.google.common.collect.Sets; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class YAMLToStringStrategy extends JAXBToStringStrategy { + public static final ToStringStrategy INSTANCE = new YAMLToStringStrategy(); + private int indentationValue = -1; + public static final String INDENTATION_STRING = " "; + private boolean insideArray = false; + private Stack<Boolean> insideArrayStack = new Stack<>(); + public static final Set<Class<?>> WRAPPER_TYPES = Sets.newHashSet(Boolean.class, Character.class, Byte.class, + Short.class, Integer.class, Long.class, Float.class, Double.class, Void.class, XMLGregorianCalendar.class, + UUID.class, String.class, Enum.class, QueryHandle.class, QueryPrepareHandle.class, java.util.Date.class); + + { + insideArrayStack.push(false); + } + + public StringBuilder indent(StringBuilder buffer) { + for (int i = 0; i < indentationValue; i++) { + buffer.append(INDENTATION_STRING); + } + return buffer; + } + + public static String objectToString(ToString object) { + final StringBuilder buffer = new StringBuilder(); + object.append(null, buffer, INSTANCE); + return buffer.toString(); + } + + @Override + public StringBuilder appendStart(ObjectLocator parentLocator, Object object, StringBuilder buffer) { + indentationValue++; + return buffer; + } + + @Override + public StringBuilder appendEnd(ObjectLocator parentLocator, Object parent, StringBuilder buffer) { + indentationValue--; + return buffer; + } + + protected void appendFieldStart(ObjectLocator parentLocator, Object parent, String fieldName, StringBuilder buffer) { + if (fieldName != null) { + indent(buffer).append(fieldName).append(": "); + } + } + + interface NameableContext { + String getHeading(); + + void close(); + + String getDetails(); + } + + @Data + class XFieldNameableContext implements NameableContext { + final XField field; + private String displayString; + private String description; + private String name; + private String heading; + + @Override + public String getHeading() { + StringBuilder singleLineHeading = new StringBuilder(); + if (isNotBlank(field.getDisplayString())) { + singleLineHeading.append(field.getDisplayString()).append("(").append(field.getName()).append(")"); + } else { + singleLineHeading.append(field.getName()); + } + if (isNotBlank(field.getDescription())) { + singleLineHeading.append(" [").append(field.getDescription()).append("]"); + } + this.name = field.getName(); + this.description = field.getDescription(); + this.displayString = field.getDisplayString(); + field.setName(null); + field.setDescription(null); + field.setDisplayString(null); + this.heading = singleLineHeading.toString(); + return singleLineHeading.toString() + ":"; + } + + @Override + public void close() { + field.setName(this.name); + field.setDisplayString(this.displayString); + field.setDescription(this.description); + } + + @Override + public String getDetails() { + try { + String fieldDetails = YAMLToStringStrategy.super.appendInternal(null, new StringBuilder(), field).toString(); + if (field instanceof XJoinChain) { + return "\n" + fieldDetails; + } + String singleLineDetails = fieldDetails.replaceAll("\\s+$", "").replaceAll("\n\\s+", ", ").trim(); + if (singleLineDetails.length() < 100 && !singleLineDetails.contains("-")) { + return singleLineDetails; + } + return "\n" + fieldDetails; + } finally { + close(); + } + } + } + + @Data + class ReflectiveNameableContext implements NameableContext { + private final Object value; + private final Method getter, setter; + private String name; + + @Override + public String getHeading() { + try { + name = (String) getter.invoke(value); + setter.invoke(value, new Object[]{null}); + } catch (IllegalAccessException | InvocationTargetException e) { + return "-"; + } + if (isBlank(name)) { + return "-"; + } + return name + ":"; + } + + @Override + public void close() { + try { + setter.invoke(value, new Object[]{name}); + } catch (IllegalAccessException | InvocationTargetException e) { + return; + } + } + + @Override + public String getDetails() { + try { + String fieldDetails = YAMLToStringStrategy.super.appendInternal(null, new StringBuilder(), value).toString(); + String singleLineDetails = fieldDetails.replaceAll("\\s+$", "").replaceAll("\n\\s+", ", ").trim(); + if (singleLineDetails.length() < 100 && !singleLineDetails.contains("-")) { + return singleLineDetails; + } + return "\n" + fieldDetails; + } finally { + close(); + } + } + } + + public NameableContext getNameableContext(Object value) { + if (value instanceof XField) { + return new XFieldNameableContext((XField) value); + } + try { + if (value.getClass().getMethod("getName") != null) { + return new ReflectiveNameableContext(value, value.getClass().getMethod("getName"), + value.getClass().getMethod("setName", String.class)); + } + } catch (NoSuchMethodException e) { + try { + if (value.getClass().getMethod("getStorageName") != null) { + return new ReflectiveNameableContext(value, value.getClass().getMethod("getStorageName"), + value.getClass().getMethod("setStorageName", String.class)); + } + } catch (NoSuchMethodException e1) { + return null; + } + } + return null; + } + + @Override + protected StringBuilder appendInternal(ObjectLocator locator, StringBuilder stringBuilder, Object value) { + insideArray = insideArrayStack.peek(); + insideArrayStack.push(false); + try { + if (value instanceof String && ((String) value).isEmpty()) { + appendNullText(stringBuilder); + return stringBuilder; + } + if (!canBeInlinedWithOtherArrayElements(value)) { + appendNewLine(stringBuilder); + } + if (value instanceof Map) { + indentationValue++; + for (Object key : ((Map) value).keySet()) { + appendNewLine(indent(stringBuilder).append(key).append(": ").append(((Map) value).get(key))); + } + indentationValue--; + return stringBuilder; + } + if (value instanceof XProperty || value instanceof XPartSpecElement || value instanceof XTimePartSpecElement + || value instanceof ResultColumn) { + removeLastArrayStart(stringBuilder); + if (value instanceof ResultColumn) { + ResultColumn column = (ResultColumn) value; + indent(stringBuilder).append(column.getName()).append(": ").append(column.getType()); + } + if (value instanceof XProperty) { + XProperty property = (XProperty) value; + indent(stringBuilder).append(property.getName()).append(": ").append(property.getValue()); + } + if (value instanceof XPartSpecElement) { + XPartSpecElement partSpecElement = (XPartSpecElement) value; + indent(stringBuilder).append(partSpecElement.getKey()).append(": ").append(partSpecElement.getValue()); + } + if (value instanceof XTimePartSpecElement) { + XTimePartSpecElement partSpecElement = (XTimePartSpecElement) value; + indent(stringBuilder).append(partSpecElement.getKey()).append(": ").append(partSpecElement.getValue()); + } + return appendNewLine(stringBuilder); + } + + if (value instanceof XJoinEdge) { + XJoinEdge edge = (XJoinEdge) value; + XTableReference from = edge.getFrom(); + XTableReference to = edge.getTo(); + stringBuilder.setLength(stringBuilder.length() - 2); + stringBuilder + .append(from.getTable()).append(".").append(from.getColumn()).append(from.isMapsToMany() ? "(many)" : "") + .append("=") + .append(to.getTable()).append(".").append(to.getColumn()).append(to.isMapsToMany() ? "(many)" : ""); + return appendNewLine(stringBuilder); + } + NameableContext context = getNameableContext(value); + if (context != null) { + String heading = context.getHeading(); + if (isBlank(heading)) { + heading = "-"; + } + if (insideArray) { + stringBuilder.setLength(stringBuilder.length() - 2); + } + String details = context.getDetails(); + stringBuilder.append(heading); + if (details.charAt(0) != '\n') { + stringBuilder.append(" "); + } + stringBuilder.append(details); + return appendNewLine(stringBuilder); + } + // some other way of getting heading + if (value instanceof Collection) { + Collection collection = (Collection) value; + // try inline + StringBuilder allElements = super.appendInternal(locator, new StringBuilder(), value); + if (collection.size() != 0 && canBeInlinedWithOtherArrayElements((collection.iterator().next())) + && allElements.length() < 120) { + stringBuilder.setLength(stringBuilder.length() - 1); + String sep = " "; + for (Object singleElement : collection) { + stringBuilder.append(sep); + appendInternal(locator, stringBuilder, singleElement); + sep = ", "; + } + return stringBuilder; + } else { + return stringBuilder.append(allElements); + } + } + // If this class is just a wrapper over a another object + Field[] fields = value.getClass().getDeclaredFields(); + int nonStaticFields = 0; + String fieldName = null; + for (Field field : fields) { + if (!Modifier.isStatic(field.getModifiers())) { + nonStaticFields++; + fieldName = field.getName(); + } + } + if (nonStaticFields == 1) { + try { + Object wrappedValue = value.getClass().getDeclaredMethod("get" + fieldName.substring(0, 1).toUpperCase() + + fieldName.substring(1)).invoke(value); + return appendNewLine(appendInternal(locator, stringBuilder, wrappedValue)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + log.error("getter access failed. Going the usual way"); + } + } + return super.appendInternal(locator, stringBuilder, value); + } finally { + insideArrayStack.pop(); + } + } + + private boolean canBeInlinedWithOtherArrayElements(Object value) { + if (value.getClass().isPrimitive()) { + return true; + } + for (Class<?> clazz : WRAPPER_TYPES) { + if (clazz.isAssignableFrom(value.getClass())) { + return true; + } + } + return false; + } + + private void removeLastArrayStart(StringBuilder stringBuilder) { + stringBuilder.setLength(stringBuilder.length() - ((indentationValue + 1) * INDENTATION_STRING.length())); + } + + @Override + protected void appendFieldEnd(ObjectLocator parentLocator, Object parent, String fieldName, StringBuilder buffer) { + appendNewLine(buffer); + } + + private StringBuilder appendNewLine(StringBuilder buffer) { + if (buffer.length() != 0 && buffer.charAt(buffer.length() - 1) != '\n') { + while (buffer.charAt(buffer.length() - 1) == ' ') { + buffer.setLength(buffer.length() - 1); + } + buffer.append("\n"); + } + return buffer; + } + + @Override + protected void appendArrayStart(StringBuilder buffer) { + indentationValue++; + insideArrayStack.push(true); + appendArraySeparator(buffer); + } + + @Override + protected void appendArrayEnd(StringBuilder buffer) { + // start takes care + indentationValue--; + insideArrayStack.pop(); + } + + @Override + protected void appendArraySeparator(StringBuilder buffer) { + indent(buffer).append("-"); + } + + @Override + protected void appendNullText(StringBuilder buffer) { + buffer.setLength(buffer.lastIndexOf("\n") + 1); + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/InMemoryQueryResult.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/InMemoryQueryResult.java b/lens-api/src/main/java/org/apache/lens/api/query/InMemoryQueryResult.java index 36d0ba0..b7013a0 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/InMemoryQueryResult.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/InMemoryQueryResult.java @@ -67,4 +67,9 @@ public class InMemoryQueryResult extends QueryResult { b.append(numRows).append(" rows "); return b.toString(); } + + @Override + public String toString() { + return super.toString(); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/LensPreparedQuery.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/LensPreparedQuery.java b/lens-api/src/main/java/org/apache/lens/api/query/LensPreparedQuery.java index f5bc35d..2d100b6 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/LensPreparedQuery.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/LensPreparedQuery.java @@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import org.apache.lens.api.LensConf; +import org.apache.lens.api.ToYAMLString; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -62,7 +63,7 @@ import lombok.NoArgsConstructor; * Instantiates a new lens prepared query. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class LensPreparedQuery { +public class LensPreparedQuery extends ToYAMLString { /** * The prepare handle. @@ -112,4 +113,5 @@ public class LensPreparedQuery { @XmlElement @Getter private LensConf conf; + } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/LensQuery.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/LensQuery.java b/lens-api/src/main/java/org/apache/lens/api/query/LensQuery.java index 23c4dec..e0ee761 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/LensQuery.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/LensQuery.java @@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlRootElement; import org.apache.lens.api.LensConf; import org.apache.lens.api.Priority; +import org.apache.lens.api.ToYAMLString; import lombok.*; @@ -79,7 +80,7 @@ import lombok.*; */ @NoArgsConstructor(access = AccessLevel.PROTECTED) @EqualsAndHashCode -public class LensQuery { +public class LensQuery extends ToYAMLString { /** * The query handle. http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java index 2d4c706..88e4b0f 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java @@ -86,14 +86,4 @@ public class QueryHandle extends QuerySubmitResult implements Serializable { } return handleId.toString(); } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return getHandleIdString(); - } } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java index 38e87b1..24b0e9a 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java @@ -72,16 +72,6 @@ public class QueryPrepareHandle extends QuerySubmitResult { return new QueryPrepareHandle(UUID.fromString(handle)); } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return getQueryHandleString(); - } - public String getQueryHandleString() { return prepareHandleId.toString(); } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QueryResult.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryResult.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryResult.java index 3bc7cc7..db91e41 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QueryResult.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryResult.java @@ -24,6 +24,7 @@ package org.apache.lens.api.query; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSeeAlso; +import org.apache.lens.api.ToYAMLString; import org.apache.lens.api.result.PrettyPrintable; import lombok.AccessLevel; @@ -38,5 +39,5 @@ import lombok.NoArgsConstructor; * Instantiates a new query result. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public abstract class QueryResult implements PrettyPrintable { +public abstract class QueryResult extends ToYAMLString implements PrettyPrintable { } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java index 22c61cf..dbdc677 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java @@ -27,6 +27,8 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import org.apache.lens.api.ToYAMLString; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -47,7 +49,7 @@ import lombok.NoArgsConstructor; * Instantiates a new query result set metadata. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class QueryResultSetMetadata { +public class QueryResultSetMetadata extends ToYAMLString { /** * The columns. http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java index 40e5d87..7a9ada1 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java @@ -11,7 +11,7 @@ * * 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 + * "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. @@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import org.apache.lens.api.ToYAMLString; import org.apache.lens.api.result.LensErrorTO; import lombok.*; @@ -59,7 +60,7 @@ import lombok.*; * Instantiates a new query status. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class QueryStatus implements Serializable { +public class QueryStatus extends ToYAMLString implements Serializable { /** * The Constant serialVersionUID. @@ -171,43 +172,6 @@ public class QueryStatus implements Serializable { @XmlElement private LensErrorTO lensErrorTO; - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - - StringBuilder str = new StringBuilder(" Status : ").append(status.toString()).append("\n"); - if (statusMessage != null) { - str.append(" Message : ").append(statusMessage).append("\n"); - } - - str.append(" Progress : ").append(progress).append("\n"); - if (progressMessage != null) { - str.append(" Progress Message : ").append(progressMessage).append("\n"); - } - - if (queueNumber != null) { - str.append(" Position in queue : ").append(queueNumber).append("\n"); - } - - if (errorMessage != null) { - str.append(" Error : ").append(errorMessage).append("\n"); - } - - if (status.equals(Status.SUCCESSFUL)) { - if (isResultSetAvailable) { - str.append(" Result Available"); - } else { - str.append(" Result Not Available"); - } - } - - return str.toString(); - } - public boolean finished() { return status.equals(Status.SUCCESSFUL) || status.equals(Status.FAILED) || status.equals(Status.CANCELED); } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/QuerySubmitResult.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QuerySubmitResult.java b/lens-api/src/main/java/org/apache/lens/api/query/QuerySubmitResult.java index f3fb6db..93d7e0a 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/QuerySubmitResult.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/QuerySubmitResult.java @@ -24,6 +24,7 @@ package org.apache.lens.api.query; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSeeAlso; +import org.apache.lens.api.ToYAMLString; import org.apache.lens.api.result.QueryCostTO; /** @@ -32,6 +33,6 @@ import org.apache.lens.api.result.QueryCostTO; @XmlRootElement @XmlSeeAlso({QueryHandle.class, QueryPrepareHandle.class, QueryHandleWithResultSet.class, QueryPlan.class, QueryCostTO.class}) -public abstract class QuerySubmitResult { +public abstract class QuerySubmitResult extends ToYAMLString { } http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInfo.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInfo.java b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInfo.java index 1ae7894..92260b5 100644 --- a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInfo.java +++ b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInfo.java @@ -20,11 +20,13 @@ package org.apache.lens.api.query; import org.apache.lens.api.scheduler.XJob; +import lombok.AllArgsConstructor; import lombok.Data; /** * POJO to represent the <code>job</code> table in the database. */ @Data +@AllArgsConstructor public class SchedulerJobInfo { /** http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java b/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java index 266a4b7..25ab336 100644 --- a/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java +++ b/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java @@ -48,7 +48,6 @@ import lombok.*; * Instantiates a new query cost. */ @NoArgsConstructor(access = AccessLevel.PROTECTED) -@ToString public class QueryCostTO extends QuerySubmitResult implements Serializable { /** http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/java/org/apache/lens/api/jaxb/YAMLToStringStrategyTest.java ---------------------------------------------------------------------- diff --git a/lens-api/src/test/java/org/apache/lens/api/jaxb/YAMLToStringStrategyTest.java b/lens-api/src/test/java/org/apache/lens/api/jaxb/YAMLToStringStrategyTest.java new file mode 100644 index 0000000..3a784f8 --- /dev/null +++ b/lens-api/src/test/java/org/apache/lens/api/jaxb/YAMLToStringStrategyTest.java @@ -0,0 +1,166 @@ +/** + * 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.api.jaxb; + +import java.io.*; +import java.util.Collection; +import java.util.List; +import java.util.TimeZone; + +import org.apache.lens.api.ToXMLString; + +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import com.google.common.collect.Lists; +import lombok.Data; + +public class YAMLToStringStrategyTest { + String timeZone; + public static final String XML_LICENSE_HEADER = "<!--\n" + + "\n" + + " Licensed to the Apache Software Foundation (ASF) under one\n" + + " or more contributor license agreements. See the NOTICE file\n" + + " distributed with this work for additional information\n" + + " regarding copyright ownership. The ASF licenses this file\n" + + " to you under the Apache License, Version 2.0 (the\n" + + " \"License\"); you may not use this file except in compliance\n" + + " with the License. You may obtain a copy of the License at\n" + + "\n" + + " http://www.apache.org/licenses/LICENSE-2.0\n" + + "\n" + + " Unless required by applicable law or agreed to in writing,\n" + + " software distributed under the License is distributed on an\n" + + " \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n" + + " KIND, either express or implied. See the License for the\n" + + " specific language governing permissions and limitations\n" + + " under the License.\n" + + "\n" + + "-->\n"; + + public static final String YAML_HEADER = "# Licensed to the Apache Software Foundation (ASF) under one\n" + + "# or more contributor license agreements. See the NOTICE file\n" + + "# distributed with this work for additional information\n" + + "# regarding copyright ownership. The ASF licenses this file\n" + + "# to you under the Apache License, Version 2.0 (the\n" + + "# \"License\"); you may not use this file except in compliance\n" + + "# with the License. You may obtain a copy of the License at\n" + + "#\n" + + "# http://www.apache.org/licenses/LICENSE-2.0\n" + + "#\n" + + "# Unless required by applicable law or agreed to in writing, software\n" + + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" + + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + + "# See the License for the specific language governing permissions and\n" + + "# limitations under the License.\n"; + + @BeforeClass + public void setTimeZone() throws IOException { + timeZone = System.getProperty("user.timezone"); + System.setProperty("user.timezone", "GMT"); + TimeZone.setDefault(null); + write(); + } + + private void write() throws IOException { + for (Object object : getNewObjectsForYAML()) { + BufferedWriter xmlWriter = new BufferedWriter(new FileWriter(new File("src/test/resources/toString/" + + object.getClass().getName() + ".xml"))); + BufferedWriter toStringWriter = new BufferedWriter(new FileWriter(new File("src/test/resources/toString/" + + object.getClass().getName() + ".yaml"))); + xmlWriter.write(XML_LICENSE_HEADER); + xmlWriter.write(ToXMLString.toString(object)); + xmlWriter.close(); + + toStringWriter.write(YAML_HEADER); + toStringWriter.write(object.toString()); + toStringWriter.close(); + } + } + + private Collection<Object> getNewObjectsForYAML() { + return Lists.newArrayList(); + } + + @AfterClass + public void reSetTimeZone() { + System.setProperty("user.timezone", timeZone); + TimeZone.setDefault(null); + } + + @Data + public static class ToStringTestData { + private final String name; + private final Object object; + private final String toString; + + public void verify() { + Assert.assertEquals(object.toString().trim(), toString.trim(), "toString didn't match for " + name); + } + } + + @DataProvider + public Object[][] toStringDataProvider() throws Exception { + Collection<ToStringTestData> dataCollection = provideData(); + Object[][] array = new Object[dataCollection.size()][1]; + int i = 0; + for (ToStringTestData data : dataCollection) { + array[i++][0] = data; + } + return array; + } + + protected Collection<ToStringTestData> provideData() throws Exception { + List<ToStringTestData> dataList = Lists.newArrayList(); + for (String fn : new File(getClass().getResource("/toString").toURI()).list(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.endsWith("xml"); + } + })) { + Class<?> clazz = Class.forName(fn.substring(0, fn.length() - 4)); + Object unmarshalled = clazz.cast(new LensJAXBContext(clazz) + .createUnmarshaller().unmarshal(getClass().getResourceAsStream("/toString/" + fn))); + String toString = readYAML("/toString/" + fn.replaceAll("xml$", "yaml")); + dataList.add(new ToStringTestData(fn, unmarshalled, toString)); + } + return dataList; + } + + @Test(dataProvider = "toStringDataProvider") + public void testToString(ToStringTestData testData) { + testData.verify(); + } + + protected String readYAML(String s) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(s))); + String line = br.readLine(); + StringBuilder sb = new StringBuilder(); + while (line != null) { + if (!line.startsWith("#")) { + sb.append(line).append("\n"); + } + line = br.readLine(); + } + return sb.toString().trim(); + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.xml new file mode 100644 index 0000000..2527018 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<dateTime> + <date>2016-02-02T19:17:34.893</date> +</dateTime> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.yaml new file mode 100644 index 0000000..24f89aa --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.DateTime.yaml @@ -0,0 +1,16 @@ +# 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. +Tue Feb 02 19:17:34 GMT 2016 http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.xml new file mode 100644 index 0000000..41fc022 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<conf> + <properties> + <entry> + <key>key2</key> + <value>value2</value> + </entry> + <entry> + <key>key1</key> + <value>value1</value> + </entry> + </properties> +</conf> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.yaml new file mode 100644 index 0000000..82548fd --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.LensConf.yaml @@ -0,0 +1,17 @@ +# 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. +key2: value2 +key1: value1 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.xml new file mode 100644 index 0000000..2d7b5a2 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<inMemoryQueryResult> + <rows> + <rows> + <values> + <values xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</values> + <values xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">name</values> + <values xsi:type="xs:double" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">3.5</values> + <values xsi:type="xs:boolean" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</values> + </values> + </rows> + <rows> + <values> + <values xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2</values> + <values xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">home</values> + <values xsi:type="xs:double" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">9.5</values> + <values xsi:type="xs:boolean" xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">false</values> + </values> + </rows> + </rows> +</inMemoryQueryResult> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.yaml new file mode 100644 index 0000000..a6f4739 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.InMemoryQueryResult.yaml @@ -0,0 +1,17 @@ +# 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. +- 1, name, 3.5, true +- 2, home, 9.5, false http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.xml new file mode 100644 index 0000000..1276b61 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<lensPreparedQuery> + <prepareHandle> + <prepareHandleId>42d071c5-15d2-4836-982c-4e434ce651b5</prepareHandleId> + </prepareHandle> + <userQuery>cube select blah</userQuery> + <preparedTime>2016-02-02T19:17:34.894+05:30</preparedTime> + <preparedUser>user</preparedUser> + <selectedDriverName>selected-driver</selectedDriverName> + <driverQuery>select blah from driver table</driverQuery> + <conf> + <properties> + <entry> + <key>key2</key> + <value>value2</value> + </entry> + <entry> + <key>key1</key> + <value>value1</value> + </entry> + </properties> + </conf> +</lensPreparedQuery> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.yaml new file mode 100644 index 0000000..7893ec0 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensPreparedQuery.yaml @@ -0,0 +1,24 @@ +# 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. +Prepare Handle: 42d071c5-15d2-4836-982c-4e434ce651b5 +User Query: cube select blah +Prepared Time: Tue Feb 02 13:47:34 GMT 2016 +Prepared User: user +Selected Driver Name: selected-driver +Driver Query: select blah from driver table +Conf: + key2: value2 + key1: value1 http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.xml new file mode 100644 index 0000000..4f84433 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<lensQuery> + <queryHandle> + <handleId>28be0bb7-f675-4065-9de4-0c0be6e39068</handleId> + </queryHandle> + <userQuery>cube select blah blah</userQuery> + <submittedUser>user</submittedUser> + <priority>HIGH</priority> + <isPersistent>true</isPersistent> + <selectedDriverName>selected-driver</selectedDriverName> + <driverQuery>select blah from driver table</driverQuery> + <status> + <progress>10.0</progress> + <status>RUNNING</status> + <statusMessage>query running</statusMessage> + <isResultSetAvailable>false</isResultSetAvailable> + <lensErrorTO> + <code>9999</code> + <message>error message</message> + <stackTrace>random stack trace</stackTrace> + </lensErrorTO> + <errorMessage>error message</errorMessage> + <progressMessage>progress message</progressMessage> + <queueNumber>11</queueNumber> + </status> + <resultSetPath>/path/to/result</resultSetPath> + <driverOpHandle>a6f6fb20-cd1b-44dc-819c-36eb8c99e72c</driverOpHandle> + <queryConf> + <properties> + <entry> + <key>key2</key> + <value>value2</value> + </entry> + <entry> + <key>key1</key> + <value>value1</value> + </entry> + </properties> + </queryConf> + <submissionTime>1454420854897</submissionTime> + <launchTime>1454420854897</launchTime> + <driverStartTime>1454420854897</driverStartTime> + <driverFinishTime>1454420854897</driverFinishTime> + <finishTime>1454420854897</finishTime> + <closedTime>1454420854897</closedTime> + <queryName>query name</queryName> +</lensQuery> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.yaml new file mode 100644 index 0000000..ee8af96 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.LensQuery.yaml @@ -0,0 +1,42 @@ +# 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. +Query Handle: 28be0bb7-f675-4065-9de4-0c0be6e39068 +User Query: cube select blah blah +Submitted User: user +Priority: HIGH +Is Persistent: true +Selected Driver Name: selected-driver +Driver Query: select blah from driver table +Status: + Progress: 10.0 + Queue Number: 11 + Status: RUNNING + Status Message: query running + Is Result Set Available: false + Progress Message: progress message + Error Message: error message +Result Set Path: /path/to/result +Driver Op Handle: a6f6fb20-cd1b-44dc-819c-36eb8c99e72c +Query Conf: + key2: value2 + key1: value1 +Submission Time: 1454420854897 +Launch Time: 1454420854897 +Driver Start Time: 1454420854897 +Driver Finish Time: 1454420854897 +Finish Time: 1454420854897 +Closed Time: 1454420854897 +Query Name: query name http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.xml new file mode 100644 index 0000000..6228730 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<persistentQueryResult> + <persistedURI>hdfs://a.zip</persistedURI> + <numRows>100</numRows> + <fileSize>9878</fileSize> + <httpResultUrl>http://query/result/a</httpResultUrl> +</persistentQueryResult> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.yaml new file mode 100644 index 0000000..746f411 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.PersistentQueryResult.yaml @@ -0,0 +1,19 @@ +# 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. +Persisted URI: hdfs://a.zip +Num Rows: 100 +File Size: 9878 +Http Result Url: http://query/result/a http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.xml new file mode 100644 index 0000000..35fce9c --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<queryHandle> + <handleId>28be0bb7-f675-4065-9de4-0c0be6e39068</handleId> +</queryHandle> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.yaml new file mode 100644 index 0000000..1715af3 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandle.yaml @@ -0,0 +1,16 @@ +# 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. +28be0bb7-f675-4065-9de4-0c0be6e39068 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.xml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.xml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.xml new file mode 100644 index 0000000..57111fc --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + + 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. + +--> +<queryHandleWithResultSet> + <queryHandle> + <handleId>28be0bb7-f675-4065-9de4-0c0be6e39068</handleId> + </queryHandle> +</queryHandleWithResultSet> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/b805ee98/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.yaml ---------------------------------------------------------------------- diff --git a/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.yaml b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.yaml new file mode 100644 index 0000000..dfa33d2 --- /dev/null +++ b/lens-api/src/test/resources/toString/org.apache.lens.api.query.QueryHandleWithResultSet.yaml @@ -0,0 +1,16 @@ +# 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. +Query Handle: 28be0bb7-f675-4065-9de4-0c0be6e39068