Repository: lens Updated Branches: refs/heads/master 186f03f76 -> ae83caae5
http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java b/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java deleted file mode 100644 index 7d54c7b..0000000 --- a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java +++ /dev/null @@ -1,1116 +0,0 @@ -/** - * 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.server.metastore; - -import java.lang.reflect.Constructor; -import java.text.ParseException; -import java.util.*; - -import javax.ws.rs.WebApplicationException; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import org.apache.lens.api.metastore.*; -import org.apache.lens.cube.metadata.*; -import org.apache.lens.cube.metadata.ExprColumn.ExprSpec; -import org.apache.lens.cube.metadata.ReferencedDimAttribute.ChainRefCol; -import org.apache.lens.server.api.error.LensException; - -import org.apache.hadoop.hive.metastore.TableType; -import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Order; -import org.apache.hadoop.hive.ql.io.HiveOutputFormat; -import org.apache.hadoop.hive.ql.metadata.HiveException; -import org.apache.hadoop.hive.ql.metadata.Partition; -import org.apache.hadoop.hive.ql.metadata.Table; -import org.apache.hadoop.hive.serde.serdeConstants; -import org.apache.hadoop.mapred.InputFormat; - -import com.google.common.base.Optional; -import com.google.common.collect.Maps; -import lombok.extern.slf4j.Slf4j; - -/** - * Utilities for converting to and from JAXB types to hive.ql.metadata.cube types - */ -@Slf4j -public final class JAXBUtils { - private JAXBUtils() { - - } - - private static final ObjectFactory XCF = new ObjectFactory(); - - /** - * Create a hive ql cube object from corresponding JAXB object - * - * @param cube JAXB Cube - * @return {@link Cube} - * @throws LensException - */ - public static CubeInterface hiveCubeFromXCube(XCube cube, Cube parent) throws LensException { - if (cube instanceof XDerivedCube) { - XDerivedCube dcube = (XDerivedCube) cube; - Set<String> dims = new LinkedHashSet<String>(); - dims.addAll(dcube.getDimAttrNames().getAttrName()); - - Set<String> measures = new LinkedHashSet<String>(); - measures.addAll(dcube.getMeasureNames().getMeasureName()); - - Map<String, String> properties = mapFromXProperties(cube.getProperties()); - return new DerivedCube(cube.getName(), measures, dims, properties, 0L, parent); - } else { - XBaseCube bcube = (XBaseCube) cube; - Set<CubeDimAttribute> dims = new LinkedHashSet<CubeDimAttribute>(); - if (bcube.getDimAttributes() != null && !bcube.getDimAttributes().getDimAttribute().isEmpty()) { - for (XDimAttribute xd : bcube.getDimAttributes().getDimAttribute()) { - dims.add(hiveDimAttrFromXDimAttr(xd)); - } - } - - Set<CubeMeasure> measures = new LinkedHashSet<CubeMeasure>(); - for (XMeasure xm : bcube.getMeasures().getMeasure()) { - measures.add(hiveMeasureFromXMeasure(xm)); - } - - Set<ExprColumn> expressions = new LinkedHashSet<ExprColumn>(); - if (bcube.getExpressions() != null && !bcube.getExpressions().getExpression().isEmpty()) { - for (XExprColumn xe : bcube.getExpressions().getExpression()) { - expressions.add(hiveExprColumnFromXExprColumn(xe)); - } - } - - Set<JoinChain> joinchains = new LinkedHashSet<JoinChain>(); - if (bcube.getJoinChains() != null && !bcube.getJoinChains().getJoinChain().isEmpty()) { - for (XJoinChain xj : bcube.getJoinChains().getJoinChain()) { - joinchains.add(joinChainFromXJoinChain(xj)); - } - } - - Map<String, String> properties = mapFromXProperties(cube.getProperties()); - return new Cube(cube.getName(), measures, dims, expressions, joinchains, properties, 0L); - } - } - - /** - * Get XCube from hive.ql.metadata.Cube - * - * @param c - * @return {@link XCube} - */ - public static XCube xCubeFromHiveCube(CubeInterface c) { - XCube xc; - if (c.isDerivedCube()) { - XDerivedCube xdc = XCF.createXDerivedCube(); - xdc.setMeasureNames(new XMeasureNames()); - xdc.setDimAttrNames(new XDimAttrNames()); - xc = xdc; - xdc.getMeasureNames().getMeasureName().addAll(c.getMeasureNames()); - xdc.getDimAttrNames().getAttrName().addAll(c.getDimAttributeNames()); - xdc.setParent(((DerivedCube) c).getParent().getName()); - } else { - XBaseCube xbc = XCF.createXBaseCube(); - xbc.setMeasures(new XMeasures()); - xbc.setDimAttributes(new XDimAttributes()); - xbc.setExpressions(new XExpressions()); - xbc.setJoinChains(new XJoinChains()); - xc = xbc; - for (CubeMeasure cm : c.getMeasures()) { - xbc.getMeasures().getMeasure().add(xMeasureFromHiveMeasure(cm)); - } - - for (ExprColumn ec : c.getExpressions()) { - xbc.getExpressions().getExpression().add(xExprColumnFromHiveExprColumn(ec)); - } - for (CubeDimAttribute cd : c.getDimAttributes()) { - xbc.getDimAttributes().getDimAttribute().add(xDimAttrFromHiveDimAttr(cd, (Cube) c)); - } - for (JoinChain jc : c.getJoinChains()) { - xbc.getJoinChains().getJoinChain().add(getXJoinChainFromJoinChain(jc)); - } - } - xc.setName(c.getName()); - xc.setProperties(new XProperties()); - xc.getProperties().getProperty().addAll(xPropertiesFromMap(((AbstractCubeTable) c).getProperties())); - return xc; - } - - /** - * Create a hive ql CubeDimension from JAXB counterpart - * - * @param xd - * @return {@link org.apache.lens.cube.metadata.CubeDimAttribute} - */ - public static CubeDimAttribute hiveDimAttrFromXDimAttr(XDimAttribute xd) throws LensException { - Date startDate = getDateFromXML(xd.getStartTime()); - Date endDate = getDateFromXML(xd.getEndTime()); - - CubeDimAttribute hiveDim; - - if (xd.getHierarchy() != null) { - List<CubeDimAttribute> hierarchy = new ArrayList<>(); - for (XDimAttribute hd : xd.getHierarchy().getDimAttribute()) { - hierarchy.add(hiveDimAttrFromXDimAttr(hd)); - } - hiveDim = new HierarchicalDimAttribute(xd.getName(), xd.getDescription(), hierarchy); - } else if (xd.getChainRefColumn() != null - && !xd.getChainRefColumn().isEmpty()) { - hiveDim = new ReferencedDimAttribute(new FieldSchema(xd.getName(), xd.getType().toLowerCase(), - xd.getDescription()), - xd.getDisplayString(), - getChainRefColumns(xd.getChainRefColumn()), - startDate, - endDate, - null, - xd.getNumDistinctValues(), - xd.getValues(), - mapFromXProperties(xd.getTags()) - ); - } else { - hiveDim = new BaseDimAttribute(new FieldSchema(xd.getName(), xd.getType().toLowerCase(), - xd.getDescription()), - xd.getDisplayString(), - startDate, - endDate, - null, - xd.getNumDistinctValues(), - xd.getValues(), - mapFromXProperties(xd.getTags()) - ); - } - return hiveDim; - } - - private static List<ChainRefCol> getChainRefColumns(List<XChainColumn> chainCols) { - List<ChainRefCol> chainRefCols = new ArrayList<>(); - for (XChainColumn chainCol : chainCols) { - chainRefCols.add(new ChainRefCol(chainCol.getChainName(), chainCol.getRefCol())); - } - return chainRefCols; - } - - /** - * Get XMLGregorianCalendar from Date. - * - * Useful for converting from java code to XML spec. - * - * @param d Date value - * @return XML value - */ - 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.warn("Error converting date " + d, e); - return null; - } - } - - /** - * Get Date from XMLGregorianCalendar - * - * Useful for converting from XML spec to java code. - * - * @param cal XML value - * @return Date value - */ - public static Date getDateFromXML(XMLGregorianCalendar cal) { - if (cal == null) { - return null; - } - return cal.toGregorianCalendar().getTime(); - } - - /** - * Create XMeasure from hive ql cube measure - */ - public static XMeasure xMeasureFromHiveMeasure(CubeMeasure cm) { - if (cm == null) { - return null; - } - - XMeasure xm = XCF.createXMeasure(); - xm.setName(cm.getName()); - xm.setDescription(cm.getDescription()); - xm.setDisplayString(cm.getDisplayString()); - xm.setDefaultAggr(cm.getAggregate()); - xm.setFormatString(cm.getFormatString()); - xm.setType(XMeasureType.valueOf(cm.getType().toUpperCase())); - xm.setUnit(cm.getUnit()); - xm.setStartTime(getXMLGregorianCalendar(cm.getStartTime())); - xm.setEndTime(getXMLGregorianCalendar(cm.getEndTime())); - xm.setMin(cm.getMin()); - xm.setMax(cm.getMax()); - xm.setTags(getXProperties(xPropertiesFromMap(cm.getTags()))); - return xm; - } - - public static XProperties getXProperties(List<XProperty> prop) { - XProperties properties = XCF.createXProperties(); - properties.getProperty().addAll(prop); - return properties; - } - - /** - * Create XExprColumn from hive ExprColum - */ - public static XExprColumn xExprColumnFromHiveExprColumn(ExprColumn ec) { - if (ec == null) { - return null; - } - - XExprColumn xe = XCF.createXExprColumn(); - xe.setName(ec.getName()); - xe.setType(ec.getType()); - xe.setDescription(ec.getDescription()); - xe.setDisplayString(ec.getDisplayString()); - xe.getExprSpec().addAll(xExprSpecFromExprColumn(ec.getExpressionSpecs())); - xe.setTags(getXProperties(xPropertiesFromMap(ec.getTags()))); - return xe; - } - - private static Collection<XExprSpec> xExprSpecFromExprColumn(Collection<ExprSpec> esSet) { - List<XExprSpec> xes = new ArrayList<XExprSpec>(); - for (ExprSpec es : esSet) { - XExprSpec e = new XExprSpec(); - e.setExpr(es.getExpr()); - e.setStartTime(getXMLGregorianCalendar(es.getStartTime())); - e.setEndTime(getXMLGregorianCalendar(es.getEndTime())); - xes.add(e); - } - return xes; - } - - private static ExprSpec[] exprSpecFromXExprColumn(Collection<XExprSpec> xesList) throws LensException { - List<ExprSpec> esArray = new ArrayList<ExprSpec>(xesList.size()); - for (XExprSpec xes : xesList) { - esArray.add(new ExprSpec(xes.getExpr(), getDateFromXML(xes.getStartTime()), getDateFromXML(xes.getEndTime()))); - } - return esArray.toArray(new ExprSpec[0]); - } - - /** - * Create XDimAttribute from CubeDimAttribute - */ - public static XDimAttribute xDimAttrFromHiveDimAttr(CubeDimAttribute cd, AbstractBaseTable baseTable) { - XDimAttribute xd = XCF.createXDimAttribute(); - xd.setName(cd.getName()); - xd.setDescription(cd.getDescription()); - xd.setDisplayString(cd.getDisplayString()); - xd.setStartTime(getXMLGregorianCalendar(cd.getStartTime())); - xd.setEndTime(getXMLGregorianCalendar(cd.getEndTime())); - xd.setTags(getXProperties(xPropertiesFromMap(cd.getTags()))); - if (cd instanceof ReferencedDimAttribute) { - ReferencedDimAttribute rd = (ReferencedDimAttribute) cd; - if (!rd.getChainRefColumns().isEmpty()) { - for (ChainRefCol crCol : rd.getChainRefColumns()) { - XChainColumn xcc = new XChainColumn(); - xcc.setChainName(crCol.getChainName()); - xcc.setRefCol(crCol.getRefColumn()); - if (baseTable.getChainByName(crCol.getChainName()) == null) { - log.error("Missing chain definition for " + crCol.getChainName()); - } else { - xcc.setDestTable(baseTable.getChainByName(crCol.getChainName()).getDestTable()); - } - xd.getChainRefColumn().add(xcc); - } - } - xd.setType(rd.getType()); - Optional<Long> numOfDistinctValues = rd.getNumOfDistinctValues(); - if (numOfDistinctValues.isPresent()) { - xd.setNumDistinctValues(numOfDistinctValues.get()); - } - if (rd.getValues().isPresent()) { - xd.getValues().addAll(rd.getValues().get()); - } - } else if (cd instanceof BaseDimAttribute) { - BaseDimAttribute bd = (BaseDimAttribute) cd; - xd.setType(bd.getType()); - Optional<Long> numOfDistinctValues = bd.getNumOfDistinctValues(); - if (numOfDistinctValues.isPresent()) { - xd.setNumDistinctValues(numOfDistinctValues.get()); - } - if (bd.getValues().isPresent()) { - xd.getValues().addAll(bd.getValues().get()); - } - } else if (cd instanceof HierarchicalDimAttribute) { - HierarchicalDimAttribute hd = (HierarchicalDimAttribute) cd; - XDimAttributes hierarchy = new XDimAttributes(); - for (CubeDimAttribute hdDim : hd.getHierarchy()) { - hierarchy.getDimAttribute().add(xDimAttrFromHiveDimAttr(hdDim, baseTable)); - } - xd.setHierarchy(hierarchy); - } - return xd; - } - - /** - * Create XJoinChain from cube join chain - */ - public static XJoinChain getXJoinChainFromJoinChain(JoinChain jc) { - XJoinChain xjc = XCF.createXJoinChain(); - xjc.setName(jc.getName()); - xjc.setDescription(jc.getDescription()); - xjc.setDisplayString(jc.getDisplayString()); - xjc.setDestTable(jc.getDestTable()); - xjc.setPaths(new XJoinPaths()); - - for (JoinChain.Path path : jc.getPaths()) { - xjc.getPaths().getPath().add(xJoinPathFromJoinPath(path)); - } - return xjc; - } - - public static XJoinPath xJoinPathFromJoinPath(JoinChain.Path path) { - XJoinPath xjp = XCF.createXJoinPath(); - xjp.setEdges(new XJoinEdges()); - for (JoinChain.Edge edge : path.getLinks()) { - XJoinEdge xje = XCF.createXJoinEdge(); - xje.setFrom(xTabReferenceFromTabReference(edge.getFrom())); - xje.setTo(xTabReferenceFromTabReference(edge.getTo())); - xjp.getEdges().getEdge().add(xje); - } - return xjp; - } - - public static List<XTableReference> xTabReferencesFromHiveTabReferences(List<TableReference> hiveRefs) { - List<XTableReference> xrefList = new ArrayList<XTableReference>(); - - for (TableReference hRef : hiveRefs) { - xrefList.add(xTabReferenceFromTabReference(hRef)); - } - return xrefList; - } - - private static XTableReference xTabReferenceFromTabReference(TableReference ref) { - XTableReference xref = XCF.createXTableReference(); - xref.setTable(ref.getDestTable()); - xref.setColumn(ref.getDestColumn()); - xref.setMapsToMany(ref.isMapsToMany()); - return xref; - } - - /** - * Create hive ql CubeMeasure from JAXB counterpart - * - * @param xm - * @return {@link CubeMeasure} - */ - public static CubeMeasure hiveMeasureFromXMeasure(XMeasure xm) { - Date startDate = xm.getStartTime() == null ? null : xm.getStartTime().toGregorianCalendar().getTime(); - Date endDate = xm.getEndTime() == null ? null : xm.getEndTime().toGregorianCalendar().getTime(); - CubeMeasure cm = new ColumnMeasure(new FieldSchema(xm.getName(), xm.getType().name().toLowerCase(), - xm.getDescription()), - xm.getDisplayString(), - xm.getFormatString(), - xm.getDefaultAggr(), - xm.getUnit(), - startDate, - endDate, - null, - xm.getMin(), - xm.getMax(), - mapFromXProperties(xm.getTags()) - ); - return cm; - } - - /** - * Create cube's JoinChain from JAXB counterpart - * - * @param xj - * @return {@link JoinChain} - */ - public static JoinChain joinChainFromXJoinChain(XJoinChain xj) { - JoinChain jc = new JoinChain(xj.getName(), xj.getDisplayString(), xj.getDescription()); - for (int i = 0; i < xj.getPaths().getPath().size(); i++) { - XJoinPath xchain = xj.getPaths().getPath().get(i); - List<TableReference> chain = new ArrayList<TableReference>(xchain.getEdges().getEdge().size() * 2); - - for (XJoinEdge xRef : xchain.getEdges().getEdge()) { - chain.add(new TableReference(xRef.getFrom().getTable(), xRef.getFrom().getColumn(), - xRef.getFrom().isMapsToMany())); - chain.add(new TableReference(xRef.getTo().getTable(), xRef.getTo().getColumn(), xRef.getTo().isMapsToMany())); - } - jc.addPath(chain); - } - return jc; - } - - public static ExprColumn hiveExprColumnFromXExprColumn(XExprColumn xe) throws LensException { - ExprColumn ec = new ExprColumn(new FieldSchema(xe.getName(), xe.getType().toLowerCase(), - xe.getDescription()), - xe.getDisplayString(), - mapFromXProperties(xe.getTags()), - exprSpecFromXExprColumn(xe.getExprSpec())); - return ec; - } - - /** - * Convert JAXB properties to Map<String, String> - * - * @param xProperties - * @return {@link Map} - */ - public static Map<String, String> mapFromXProperties(XProperties xProperties) { - Map<String, String> properties = new HashMap<String, String>(); - if (xProperties != null && !xProperties.getProperty().isEmpty()) { - for (XProperty xp : xProperties.getProperty()) { - properties.put(xp.getName(), xp.getValue()); - } - } - return properties; - } - - /** - * Convert string map to XProperties - */ - public static List<XProperty> xPropertiesFromMap(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 = XCF.createXProperty(); - property.setName(e.getKey()); - property.setValue(e.getValue()); - xpList.add(property); - } - } - return xpList; - } - - public static Set<XSegment> xSegmentsFromSegments(Set<Segment> segs) { - Set<XSegment> xsegs = new HashSet<XSegment>(); - if (segs != null && !segs.isEmpty()) { - for (Segment seg : segs) { - XSegment xcubeSeg = XCF.createXSegment(); - xcubeSeg.setCubeName(seg.getName()); - xcubeSeg.setSegmentParameters(getXpropertiesFromSegment(seg)); - xsegs.add(xcubeSeg); - } - } - return xsegs; - } - - public static XProperties getXpropertiesFromSegment(Segment cseg) { - XProperties xproperties = XCF.createXProperties(); - for (String prop : cseg.getProperties().keySet()) { - String segPrefix = MetastoreUtil.getSegmentPropertyKey(cseg.getName()); - if (prop.startsWith(segPrefix)){ - XProperty xprop = XCF.createXProperty(); - xprop.setName(prop.replace(segPrefix, "")); - xprop.setValue(cseg.getProperties().get(prop)); - xproperties.getProperty().add(xprop); - } - } - return xproperties; - } - - - public static FieldSchema fieldSchemaFromColumn(XColumn c) { - if (c == null) { - return null; - } - - return new FieldSchema(c.getName(), c.getType().toLowerCase(), c.getComment()); - } - - public static XColumn columnFromFieldSchema(FieldSchema fs) { - if (fs == null) { - return null; - } - XColumn c = XCF.createXColumn(); - c.setName(fs.getName()); - c.setType(fs.getType()); - c.setComment(fs.getComment()); - return c; - } - - public static ArrayList<FieldSchema> fieldSchemaListFromColumns(XColumns columns) { - if (columns != null && !columns.getColumn().isEmpty()) { - ArrayList<FieldSchema> fsList = new ArrayList<FieldSchema>(columns.getColumn().size()); - for (XColumn c : columns.getColumn()) { - fsList.add(fieldSchemaFromColumn(c)); - } - return fsList; - } - return null; - } - - public static Map<String, String> columnStartAndEndTimeFromXColumns(XColumns columns) { - if (columns != null && !columns.getColumn().isEmpty()) { - Map<String, String> colStartTimeMap = new HashMap<String, String>(); - for (XColumn c : columns.getColumn()) { - if (!(c.getStartTime() == null)) { - colStartTimeMap.put(MetastoreConstants.FACT_COL_START_TIME_PFX.concat(c.getName()), c.getStartTime()); - } - if (!(c.getEndTime() == null)) { - colStartTimeMap.put(MetastoreConstants.FACT_COL_END_TIME_PFX.concat(c.getName()), c.getEndTime()); - } - } - return colStartTimeMap; - } - return null; - } - - public static List<XColumn> columnsFromFieldSchemaList(List<FieldSchema> fslist) { - List<XColumn> cols = new ArrayList<XColumn>(); - if (fslist == null || fslist.isEmpty()) { - return cols; - } - - for (FieldSchema fs : fslist) { - cols.add(columnFromFieldSchema(fs)); - } - return cols; - } - - public static Map<String, Set<UpdatePeriod>> getFactUpdatePeriodsFromStorageTables(XStorageTables storageTables) { - if (storageTables != null && !storageTables.getStorageTable().isEmpty()) { - Map<String, Set<UpdatePeriod>> factUpdatePeriods = new LinkedHashMap<String, Set<UpdatePeriod>>(); - - for (XStorageTableElement ste : storageTables.getStorageTable()) { - Set<UpdatePeriod> updatePeriods = new TreeSet<>(); - // Check if the update period array is empty. - List<XUpdatePeriod> updatePeriodList = ste.getUpdatePeriods().getUpdatePeriod(); - if (updatePeriodList.isEmpty()) { - List<XUpdatePeriodTableDescriptor> tableDescriptorList = ste.getUpdatePeriods() - .getUpdatePeriodTableDescriptor(); - for (XUpdatePeriodTableDescriptor tableDescriptor : tableDescriptorList) { - updatePeriodList.add(tableDescriptor.getUpdatePeriod()); - } - } - for (XUpdatePeriod upd : updatePeriodList) { - updatePeriods.add(UpdatePeriod.valueOf(upd.name())); - } - factUpdatePeriods.put(ste.getStorageName(), updatePeriods); - } - return factUpdatePeriods; - } - return null; - } - - public static Map<String, UpdatePeriod> dumpPeriodsFromStorageTables(XStorageTables storageTables) { - if (storageTables != null && !storageTables.getStorageTable().isEmpty()) { - Map<String, UpdatePeriod> dumpPeriods = new LinkedHashMap<String, UpdatePeriod>(); - - for (XStorageTableElement ste : storageTables.getStorageTable()) { - UpdatePeriod dumpPeriod = null; - if (ste.getUpdatePeriods() != null && !ste.getUpdatePeriods().getUpdatePeriod().isEmpty()) { - dumpPeriod = UpdatePeriod.valueOf(ste.getUpdatePeriods().getUpdatePeriod().get(0).name()); - } - dumpPeriods.put(ste.getStorageName(), dumpPeriod); - } - return dumpPeriods; - } - return null; - } - - public static Storage storageFromXStorage(XStorage xs) { - if (xs == null) { - return null; - } - - Storage storage; - try { - Class<?> clazz = Class.forName(xs.getClassname()); - Constructor<?> constructor = clazz.getConstructor(String.class); - storage = (Storage) constructor.newInstance(xs.getName()); - storage.addProperties(mapFromXProperties(xs.getProperties())); - return storage; - } catch (Exception e) { - log.error("Could not create storage class" + xs.getClassname() + "with name:" + xs.getName(), e); - throw new WebApplicationException(e); - } - } - - public static XStorage xstorageFromStorage(Storage storage) { - if (storage == null) { - return null; - } - - XStorage xstorage = null; - xstorage = XCF.createXStorage(); - xstorage.setProperties(new XProperties()); - xstorage.setName(storage.getName()); - xstorage.setClassname(storage.getClass().getCanonicalName()); - xstorage.getProperties().getProperty().addAll(xPropertiesFromMap(storage.getProperties())); - return xstorage; - } - - public static XDimensionTable dimTableFromCubeDimTable(CubeDimensionTable cubeDimTable) { - if (cubeDimTable == null) { - return null; - } - - XDimensionTable dimTab = XCF.createXDimensionTable(); - dimTab.setDimensionName(cubeDimTable.getDimName()); - dimTab.setTableName(cubeDimTable.getName()); - dimTab.setWeight(cubeDimTable.weight()); - dimTab.setColumns(new XColumns()); - dimTab.setProperties(new XProperties()); - dimTab.setStorageTables(new XStorageTables()); - - for (FieldSchema column : cubeDimTable.getColumns()) { - dimTab.getColumns().getColumn().add(columnFromFieldSchema(column)); - } - dimTab.getProperties().getProperty().addAll(xPropertiesFromMap(cubeDimTable.getProperties())); - - return dimTab; - } - - public static List<? extends XTableReference> dimRefListFromTabRefList( - List<TableReference> tabRefs) { - if (tabRefs != null && !tabRefs.isEmpty()) { - List<XTableReference> xTabRefs = new ArrayList<XTableReference>(tabRefs.size()); - for (TableReference ref : tabRefs) { - XTableReference xRef = XCF.createXTableReference(); - xRef.setColumn(ref.getDestColumn()); - xRef.setTable(ref.getDestTable()); - xRef.setMapsToMany(ref.isMapsToMany()); - xTabRefs.add(xRef); - } - return xTabRefs; - } - - return null; - } - - public static CubeDimensionTable cubeDimTableFromDimTable(XDimensionTable dimensionTable) throws LensException { - - return new CubeDimensionTable(dimensionTable.getDimensionName(), - dimensionTable.getTableName(), - fieldSchemaListFromColumns(dimensionTable.getColumns()), - dimensionTable.getWeight(), - dumpPeriodsFromStorageTables(dimensionTable.getStorageTables()), - mapFromXProperties(dimensionTable.getProperties())); - } - - public static CubeFactTable cubeFactFromFactTable(XFactTable fact) throws LensException { - List<FieldSchema> columns = fieldSchemaListFromColumns(fact.getColumns()); - - Map<String, Set<UpdatePeriod>> storageUpdatePeriods = getFactUpdatePeriodsFromStorageTables( - fact.getStorageTables()); - Map<String, Map<UpdatePeriod, String>> storageTablePrefixMap = storageTablePrefixMapOfStorage( - fact.getStorageTables()); - return new CubeFactTable(fact.getCubeName(), fact.getName(), columns, storageUpdatePeriods, fact.getWeight(), - mapFromXProperties(fact.getProperties()), storageTablePrefixMap); - } - - public static Segmentation segmentationFromXSegmentation(XSegmentation seg) throws LensException { - - Map<String, String> props = new HashMap<>(); - // Skip properties with keyword internal. These properties are internal to lens - // and users are not supposed to see them. - for(String prop : mapFromXProperties(seg.getProperties()).keySet()) { - if (!(prop.toLowerCase().startsWith(MetastoreConstants.SEGMENTATION_KEY_PFX))) { - props.put(prop, mapFromXProperties(seg.getProperties()).get(prop)); - } - } - return new Segmentation(seg.getCubeName(), - seg.getName(), - segmentsFromXSegments(seg.getSegements()), - seg.getWeight(), - props); - } - - - public static XFactTable factTableFromCubeFactTable(CubeFactTable cFact) { - XFactTable fact = XCF.createXFactTable(); - fact.setName(cFact.getName()); - fact.setColumns(new XColumns()); - fact.setProperties(new XProperties()); - fact.setStorageTables(new XStorageTables()); - - fact.getProperties().getProperty().addAll(xPropertiesFromMap(cFact.getProperties())); - fact.getColumns().getColumn().addAll(columnsFromFieldSchemaList(cFact.getColumns())); - fact.setWeight(cFact.weight()); - fact.setCubeName(cFact.getCubeName()); - return fact; - } - - public static XSegmentation xsegmentationFromSegmentation(Segmentation cSeg) { - XSegmentation seg = XCF.createXSegmentation(); - seg.setName(cSeg.getName()); - seg.setProperties(new XProperties()); - seg.setSegements(new XSegments()); - seg.setWeight(cSeg.weight()); - seg.setCubeName(cSeg.getBaseCube()); - if (xPropertiesFromMap(cSeg.getProperties()) != null) { - seg.getProperties().getProperty().addAll(xPropertiesFromMap(cSeg.getProperties())); - } - seg.getSegements().getSegment(). - addAll(xSegmentsFromSegments(cSeg.getSegments())); - return seg; - } - - public static StorageTableDesc storageTableDescFromXStorageTableDesc( - XStorageTableDesc xtableDesc) { - StorageTableDesc tblDesc = new StorageTableDesc(); - tblDesc.setTblProps(mapFromXProperties(xtableDesc.getTableParameters())); - tblDesc.setSerdeProps(mapFromXProperties(xtableDesc.getSerdeParameters())); - tblDesc.setPartCols(fieldSchemaListFromColumns(xtableDesc.getPartCols())); - tblDesc.setTimePartCols(xtableDesc.getTimePartCols()); - tblDesc.setExternal(xtableDesc.isExternal()); - tblDesc.setLocation(xtableDesc.getTableLocation()); - tblDesc.setInputFormat(xtableDesc.getInputFormat()); - tblDesc.setOutputFormat(xtableDesc.getOutputFormat()); - tblDesc.setFieldDelim(xtableDesc.getFieldDelimiter()); - tblDesc.setFieldEscape(xtableDesc.getEscapeChar()); - tblDesc.setCollItemDelim(xtableDesc.getCollectionDelimiter()); - tblDesc.setLineDelim(xtableDesc.getLineDelimiter()); - tblDesc.setMapKeyDelim(xtableDesc.getMapKeyDelimiter()); - tblDesc.setSerName(xtableDesc.getSerdeClassName()); - tblDesc.setStorageHandler(xtableDesc.getStorageHandlerName()); - return tblDesc; - } - - public static StorageTableDesc storageTableDescFromXStorageTableElement( - XStorageTableElement storageTableElement) { - return storageTableDescFromXStorageTableDesc(storageTableElement.getTableDesc()); - } - - public static XStorageTableElement getXStorageTableFromHiveTable(Table tbl) { - XStorageTableElement tblElement = new XStorageTableElement(); - tblElement.setUpdatePeriods(new XUpdatePeriods()); - tblElement.setTableDesc(getStorageTableDescFromHiveTable(tbl)); - return tblElement; - } - - public static XStorageTableDesc getStorageTableDescFromHiveTable(Table tbl) { - XStorageTableDesc tblDesc = new XStorageTableDesc(); - tblDesc.setPartCols(new XColumns()); - tblDesc.setTableParameters(new XProperties()); - tblDesc.setSerdeParameters(new XProperties()); - tblDesc.getPartCols().getColumn().addAll(columnsFromFieldSchemaList(tbl.getPartCols())); - String timePartCols = tbl.getParameters().get(MetastoreConstants.TIME_PART_COLUMNS); - if (timePartCols != null) { - tblDesc.getTimePartCols().addAll(Arrays.asList(org.apache.commons.lang.StringUtils.split(timePartCols, ","))); - } - tblDesc.setNumBuckets(tbl.getNumBuckets()); - tblDesc.getBucketCols().addAll(tbl.getBucketCols()); - List<String> sortCols = new ArrayList<String>(); - List<Integer> sortOrders = new ArrayList<Integer>(); - for (Order order : tbl.getSortCols()) { - sortCols.add(order.getCol()); - sortOrders.add(order.getOrder()); - } - tblDesc.getSortCols().addAll(sortCols); - tblDesc.getSortColOrder().addAll(sortOrders); - - XSkewedInfo xskewinfo = new XSkewedInfo(); - xskewinfo.getColNames().addAll(tbl.getSkewedColNames()); - for (List<String> value : tbl.getSkewedColValues()) { - XSkewColList colVallist = new XSkewColList(); - colVallist.getElements().addAll(value); - xskewinfo.getColValues().add(colVallist); - XSkewedValueLocation valueLocation = new XSkewedValueLocation(); - if (tbl.getSkewedColValueLocationMaps().get(value) != null) { - valueLocation.setValue(colVallist); - valueLocation.setLocation(tbl.getSkewedColValueLocationMaps().get(value)); - xskewinfo.getValueLocationMap().add(valueLocation); - } - } - - tblDesc.getTableParameters().getProperty().addAll(xPropertiesFromMap(tbl.getParameters())); - tblDesc.getSerdeParameters().getProperty().addAll(xPropertiesFromMap( - tbl.getTTable().getSd().getSerdeInfo().getParameters())); - tblDesc.setExternal(tbl.getTableType().equals(TableType.EXTERNAL_TABLE)); - tblDesc.setCompressed(tbl.getTTable().getSd().isCompressed()); - tblDesc.setTableLocation(tbl.getDataLocation().toString()); - tblDesc.setInputFormat(tbl.getInputFormatClass().getCanonicalName()); - tblDesc.setOutputFormat(tbl.getOutputFormatClass().getCanonicalName()); - tblDesc.setFieldDelimiter(tbl.getSerdeParam(serdeConstants.FIELD_DELIM)); - tblDesc.setLineDelimiter(tbl.getSerdeParam(serdeConstants.LINE_DELIM)); - tblDesc.setCollectionDelimiter(tbl.getSerdeParam(serdeConstants.COLLECTION_DELIM)); - tblDesc.setMapKeyDelimiter(tbl.getSerdeParam(serdeConstants.MAPKEY_DELIM)); - tblDesc.setEscapeChar(tbl.getSerdeParam(serdeConstants.ESCAPE_CHAR)); - tblDesc.setSerdeClassName(tbl.getSerializationLib()); - tblDesc.setStorageHandlerName(tbl.getStorageHandler() != null - ? tbl.getStorageHandler().getClass().getCanonicalName() : ""); - return tblDesc; - } - - public static Map<String, StorageTableDesc> tableDescPrefixMapFromXStorageTables(XStorageTables storageTables) { - Map<String, StorageTableDesc> storageTablePrefixToDescMap = new HashMap<>(); - if (storageTables != null && !storageTables.getStorageTable().isEmpty()) { - for (XStorageTableElement sTbl : storageTables.getStorageTable()) { - if (sTbl.getUpdatePeriods() != null && sTbl.getUpdatePeriods().getUpdatePeriodTableDescriptor() != null && !sTbl - .getUpdatePeriods().getUpdatePeriodTableDescriptor().isEmpty()) { - for (XUpdatePeriodTableDescriptor updatePeriodTable : sTbl.getUpdatePeriods() - .getUpdatePeriodTableDescriptor()) { - // Get table name with update period as the prefix. - storageTablePrefixToDescMap.put(updatePeriodTable.getUpdatePeriod() + "_" + sTbl.getStorageName(), - storageTableDescFromXStorageTableDesc(updatePeriodTable.getTableDesc())); - } - } else { - storageTablePrefixToDescMap.put(sTbl.getStorageName(), storageTableDescFromXStorageTableElement(sTbl)); - } - } - } - return storageTablePrefixToDescMap; - } - - public static Map<String, Map<UpdatePeriod, String>> storageTablePrefixMapOfStorage(XStorageTables storageTables) { - Map<String, Map<UpdatePeriod, String>> storageTableMap = new HashMap<>(); - if (storageTables != null && !storageTables.getStorageTable().isEmpty()) { - for (XStorageTableElement sTbl : storageTables.getStorageTable()) { - Map<UpdatePeriod, String> storageNameMap = new HashMap<>(); - if (sTbl.getUpdatePeriods() != null && sTbl.getUpdatePeriods().getUpdatePeriodTableDescriptor() != null && !sTbl - .getUpdatePeriods().getUpdatePeriodTableDescriptor().isEmpty()) { - for (XUpdatePeriodTableDescriptor updatePeriodTable : sTbl.getUpdatePeriods() - .getUpdatePeriodTableDescriptor()) { - // Get table name with update period as the prefix. - storageNameMap.put(UpdatePeriod.valueOf(updatePeriodTable.getUpdatePeriod().value()), - updatePeriodTable.getUpdatePeriod() + "_" + sTbl.getStorageName()); - } - } else { - for (XUpdatePeriod updatePeriod : sTbl.getUpdatePeriods().getUpdatePeriod()) { - storageNameMap.put(UpdatePeriod.valueOf(updatePeriod.value()), sTbl.getStorageName()); - } - } - storageTableMap.put(sTbl.getStorageName(), storageNameMap); - } - } - return storageTableMap; - } - - public static Set<Segment> segmentsFromXSegments(XSegments segs) { - Set<Segment> cubeSegs = new HashSet<>(); - for (XSegment xcube : segs.getSegment()){ - Map<String, String> segProp = new HashMap<>(); - if (xcube.getSegmentParameters() != null) { - for (XProperty prop : xcube.getSegmentParameters().getProperty()) { - segProp.put(prop.getName(), prop.getValue()); - } - } - cubeSegs.add(new Segment(xcube.getCubeName(), segProp)); - } - return cubeSegs; - } - - public static Map<String, Date> timePartSpecfromXTimePartSpec( - XTimePartSpec xtimePartSpec) { - Map<String, Date> timePartSpec = new HashMap<String, Date>(); - if (xtimePartSpec != null && !xtimePartSpec.getPartSpecElement().isEmpty()) { - for (XTimePartSpecElement xtimePart : xtimePartSpec.getPartSpecElement()) { - timePartSpec.put(xtimePart.getKey(), getDateFromXML(xtimePart.getValue())); - } - } - return timePartSpec; - } - - public static Map<String, String> nonTimePartSpecfromXNonTimePartSpec( - XPartSpec xnonTimePartSpec) { - Map<String, String> nonTimePartSpec = new HashMap<String, String>(); - if (xnonTimePartSpec != null && !xnonTimePartSpec.getPartSpecElement().isEmpty()) { - for (XPartSpecElement xPart : xnonTimePartSpec.getPartSpecElement()) { - nonTimePartSpec.put(xPart.getKey(), xPart.getValue()); - } - } - return nonTimePartSpec; - } - - public static XPartitionList xpartitionListFromPartitionList(String cubeTableName, List<Partition> partitions, - List<String> timePartCols) throws HiveException { - XPartitionList xPartitionList = new XPartitionList(); - xPartitionList.getPartition(); - if (partitions != null) { - for (Partition partition : partitions) { - xPartitionList.getPartition().add(xpartitionFromPartition(cubeTableName, partition, timePartCols)); - } - } - return xPartitionList; - } - - public static XPartition xpartitionFromPartition(String cubeTableName, Partition p, List<String> timePartCols) - throws HiveException { - XPartition xp = new XPartition(); - xp.setFactOrDimensionTableName(cubeTableName); - xp.setPartitionParameters(new XProperties()); - xp.setSerdeParameters(new XProperties()); - xp.setName(p.getCompleteName()); - xp.setLocation(p.getLocation()); - xp.setInputFormat(p.getInputFormatClass().getCanonicalName()); - xp.setOutputFormat(p.getOutputFormatClass().getCanonicalName()); - xp.getPartitionParameters().getProperty().addAll(xPropertiesFromMap(p.getParameters())); - String upParam = p.getParameters().get(MetastoreConstants.PARTITION_UPDATE_PERIOD); - xp.setUpdatePeriod(XUpdatePeriod.valueOf(upParam)); - LinkedHashMap<String, String> partSpec = p.getSpec(); - xp.setFullPartitionSpec(new XPartSpec()); - for (Map.Entry<String, String> entry : partSpec.entrySet()) { - XPartSpecElement e = new XPartSpecElement(); - e.setKey(entry.getKey()); - e.setValue(entry.getValue()); - xp.getFullPartitionSpec().getPartSpecElement().add(e); - } - try { - xp.setTimePartitionSpec(new XTimePartSpec()); - xp.setNonTimePartitionSpec(new XPartSpec()); - for (Map.Entry<String, String> entry : partSpec.entrySet()) { - if (timePartCols.contains(entry.getKey())) { - XTimePartSpecElement timePartSpecElement = new XTimePartSpecElement(); - timePartSpecElement.setKey(entry.getKey()); - timePartSpecElement - .setValue(getXMLGregorianCalendar(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).parse( - entry.getValue()))); - xp.getTimePartitionSpec().getPartSpecElement().add(timePartSpecElement); - } else { - XPartSpecElement partSpecElement = new XPartSpecElement(); - partSpecElement.setKey(entry.getKey()); - partSpecElement.setValue(entry.getValue()); - xp.getNonTimePartitionSpec().getPartSpecElement().add(partSpecElement); - } - } - } catch (ParseException exc) { - log.debug("can't form time part spec from " + partSpec, exc); - xp.setTimePartitionSpec(null); - xp.setNonTimePartitionSpec(null); - } - xp.setSerdeClassname(p.getTPartition().getSd().getSerdeInfo().getSerializationLib()); - xp.getSerdeParameters().getProperty().addAll(xPropertiesFromMap( - p.getTPartition().getSd().getSerdeInfo().getParameters())); - return xp; - } - - public static void updatePartitionFromXPartition(Partition partition, XPartition xp) throws ClassNotFoundException { - partition.getParameters().putAll(mapFromXProperties(xp.getPartitionParameters())); - partition.getTPartition().getSd().getSerdeInfo().setParameters(mapFromXProperties(xp.getSerdeParameters())); - partition.setLocation(xp.getLocation()); - if (xp.getInputFormat() != null) { - partition.setInputFormatClass(Class.forName(xp.getInputFormat()).asSubclass(InputFormat.class)); - } - if (xp.getOutputFormat() != null) { - Class<? extends HiveOutputFormat> outputFormatClass = - Class.forName(xp.getOutputFormat()).asSubclass(HiveOutputFormat.class); - partition.setOutputFormatClass(outputFormatClass); - } - partition.getParameters().put(MetastoreConstants.PARTITION_UPDATE_PERIOD, xp.getUpdatePeriod().name()); - partition.getTPartition().getSd().getSerdeInfo().setSerializationLib(xp.getSerdeClassname()); - } - - public static StoragePartitionDesc storagePartSpecFromXPartition( - XPartition xpart) { - StoragePartitionDesc partDesc = new StoragePartitionDesc( - xpart.getFactOrDimensionTableName(), - timePartSpecfromXTimePartSpec(xpart.getTimePartitionSpec()), - nonTimePartSpecfromXNonTimePartSpec(xpart.getNonTimePartitionSpec()), - UpdatePeriod.valueOf(xpart.getUpdatePeriod().name())); - partDesc.setPartParams(mapFromXProperties(xpart.getPartitionParameters())); - partDesc.setSerdeParams(mapFromXProperties(xpart.getSerdeParameters())); - partDesc.setLocation(xpart.getLocation()); - partDesc.setInputFormat(xpart.getInputFormat()); - partDesc.setOutputFormat(xpart.getOutputFormat()); - partDesc.setSerializationLib(xpart.getSerdeClassname()); - return partDesc; - } - - public static List<StoragePartitionDesc> storagePartSpecListFromXPartitionList( - final XPartitionList xpartList) { - ArrayList<StoragePartitionDesc> ret = new ArrayList<StoragePartitionDesc>(); - for (XPartition xpart : xpartList.getPartition()) { - ret.add(storagePartSpecFromXPartition(xpart)); - } - return ret; - } - - public static Dimension dimensionFromXDimension(XDimension dimension) throws LensException { - Set<CubeDimAttribute> dims = new LinkedHashSet<CubeDimAttribute>(); - for (XDimAttribute xd : dimension.getAttributes().getDimAttribute()) { - dims.add(hiveDimAttrFromXDimAttr(xd)); - } - - Set<ExprColumn> expressions = new LinkedHashSet<ExprColumn>(); - if (dimension.getExpressions() != null && !dimension.getExpressions().getExpression().isEmpty()) { - for (XExprColumn xe : dimension.getExpressions().getExpression()) { - expressions.add(hiveExprColumnFromXExprColumn(xe)); - } - } - - Set<JoinChain> joinchains = new LinkedHashSet<JoinChain>(); - if (dimension.getJoinChains() != null && !dimension.getJoinChains().getJoinChain().isEmpty()) { - for (XJoinChain xj : dimension.getJoinChains().getJoinChain()) { - joinchains.add(joinChainFromXJoinChain(xj)); - } - } - - Map<String, String> properties = mapFromXProperties(dimension.getProperties()); - return new Dimension(dimension.getName(), dims, expressions, joinchains, properties, 0L); - } - - public static XDimension xdimensionFromDimension(Dimension dimension) { - XDimension xd = XCF.createXDimension(); - xd.setName(dimension.getName()); - xd.setAttributes(new XDimAttributes()); - xd.setExpressions(new XExpressions()); - xd.setJoinChains(new XJoinChains()); - xd.setProperties(new XProperties()); - - xd.getProperties().getProperty().addAll(xPropertiesFromMap(((AbstractCubeTable) dimension).getProperties())); - for (CubeDimAttribute cd : dimension.getAttributes()) { - xd.getAttributes().getDimAttribute().add(xDimAttrFromHiveDimAttr(cd, dimension)); - } - - for (ExprColumn ec : dimension.getExpressions()) { - xd.getExpressions().getExpression().add(xExprColumnFromHiveExprColumn(ec)); - } - - for (JoinChain jc : dimension.getJoinChains()) { - xd.getJoinChains().getJoinChain().add(getXJoinChainFromJoinChain(jc)); - } - - return xd; - } - - public static XNativeTable nativeTableFromMetaTable(Table table) { - XNativeTable xtable = XCF.createXNativeTable(); - xtable.setColumns(new XColumns()); - xtable.setName(table.getTableName()); - xtable.setDbname(table.getDbName()); - xtable.setOwner(table.getOwner()); - xtable.setCreatetime(table.getTTable().getCreateTime()); - xtable.setLastAccessTime(table.getTTable().getLastAccessTime()); - xtable.getColumns().getColumn().addAll(columnsFromFieldSchemaList(table.getCols())); - xtable.setStorageDescriptor(getStorageTableDescFromHiveTable(table)); - xtable.setTableType(table.getTableType().name()); - return xtable; - } - - public static Map<String, String> getFullPartSpecAsMap(XPartition partition) { - Map<String, String> spec = Maps.newHashMap(); - if (partition.getTimePartitionSpec() != null) { - for (XTimePartSpecElement timePartSpecElement : partition.getTimePartitionSpec().getPartSpecElement()) { - spec.put(timePartSpecElement.getKey(), UpdatePeriod.valueOf(partition.getUpdatePeriod().name()).format() - .format(getDateFromXML(timePartSpecElement.getValue()))); - } - } - if (partition.getNonTimePartitionSpec() != null) { - for (XPartSpecElement partSpecElement : partition.getNonTimePartitionSpec().getPartSpecElement()) { - spec.put(partSpecElement.getKey(), partSpecElement.getValue()); - } - } - return spec; - } -} http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java index 9d823da..9ba1eb1 100644 --- a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java +++ b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java @@ -1,4 +1,4 @@ -/** + /** * 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 http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java index 02e2f8b..df4e07a 100644 --- a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java +++ b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java @@ -39,6 +39,7 @@ import org.apache.lens.api.LensSessionHandle; import org.apache.lens.api.metastore.ObjectFactory; import org.apache.lens.api.metastore.XCube; import org.apache.lens.api.metastore.XFactTable; +import org.apache.lens.api.metastore.XStorage; import org.apache.lens.api.query.*; import org.apache.lens.api.result.LensAPIResult; @@ -166,6 +167,16 @@ public class RestAPITestUtil { checkResponse(result); } + public static void createStorageFailFast(final WebTarget target, final LensSessionHandle sessionId, + final XStorage storage, MediaType mt) { + APIResult result = target.path("metastore").path("storages").queryParam("sessionid", sessionId) + .request(mt).post(Entity.entity( + new GenericEntity<JAXBElement<XStorage>>(cubeObjectFactory.createXStorage(storage)) { + }, mt), + APIResult.class); + checkResponse(result); + } + public static APIResult setCurrentDatabase(final WebTarget target, final LensSessionHandle sessionId, final String dbName, MediaType mt) { http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-server/src/test/java/org/apache/lens/server/common/TestDataUtils.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/common/TestDataUtils.java b/lens-server/src/test/java/org/apache/lens/server/common/TestDataUtils.java index 0400519..fbfd898 100644 --- a/lens-server/src/test/java/org/apache/lens/server/common/TestDataUtils.java +++ b/lens-server/src/test/java/org/apache/lens/server/common/TestDataUtils.java @@ -50,6 +50,10 @@ public class TestDataUtils { return "db" + getRandomName(); } + public static String getRandomStorageName() { + return "storage" + getRandomName(); + } + public static String getRandomCubeName() { return "cube" + getRandomName(); } http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java index 567c929..064da01 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java @@ -47,9 +47,11 @@ import org.apache.lens.api.result.LensAPIResult; import org.apache.lens.api.result.LensErrorTO; import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver; import org.apache.lens.cube.error.ColUnAvailableInTimeRange; +import org.apache.lens.cube.metadata.HDFSStorage; import org.apache.lens.server.LensJerseyTest; import org.apache.lens.server.LensRequestLoggingFilter; import org.apache.lens.server.common.ErrorResponseExpectedData; +import org.apache.lens.server.common.RestAPITestUtil; import org.apache.lens.server.error.GenericExceptionMapper; import org.apache.lens.server.error.LensJAXBValidationExceptionMapper; import org.apache.lens.server.metastore.MetastoreResource; @@ -255,6 +257,7 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { final String testCube = getRandomCubeName(); final String testDimensionField = getRandomDimensionField(); final String testFact = getRandomFactName(); + final String testStorage = getRandomStorageName(); /* Setup: Begin */ LensSessionHandle sessionId = openSession(target, "foo", "bar", new LensConf(), mt); @@ -268,9 +271,21 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { XCube xcube = createXCubeWithDummyMeasure(testCube, Optional.of("dt"), testXDim); createCubeFailFast(target, sessionId, xcube, mt); + /* Create Storage */ + XStorage xs = new XStorage(); + xs.setClassname(HDFSStorage.class.getCanonicalName()); + xs.setName(testStorage); + RestAPITestUtil.createStorageFailFast(target, sessionId, xs, mt); + /* Create a fact with test dimension field */ XColumn xColumn = createXColumn(testDimensionField); XFactTable xFactTable = createXFactTableWithColumns(testFact, testCube, xColumn); + + //Create a StorageTable + XStorageTables tables = new XStorageTables(); + tables.getStorageTable().add(createStorageTblElement(testStorage,"DAILY")); + xFactTable.setStorageTables(tables); + createFactFailFast(target, sessionId, xFactTable, mt); /* Setup: End */ @@ -343,6 +358,18 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { } finally { closeSessionFailFast(target(), sessionId, mt); } + } + private XStorageTableElement createStorageTblElement(String storageName, String... updatePeriod) { + XStorageTableElement tbl = new XStorageTableElement(); + tbl.setUpdatePeriods(new XUpdatePeriods()); + tbl.setStorageName(storageName); + if (updatePeriod != null) { + for (String p : updatePeriod) { + tbl.getUpdatePeriods().getUpdatePeriod().add(XUpdatePeriod.valueOf(p)); + } + } + tbl.setTableDesc(new XStorageTableDesc()); + return tbl; } }