Package org.teiid.query.unittest

Source Code of org.teiid.query.unittest.FakeMetadataFacade

/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.  Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/

package org.teiid.query.unittest;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.ArgCheck;
import org.teiid.core.util.Assertion;
import org.teiid.query.function.FunctionLibrary;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.mapping.xml.MappingBaseNode;
import org.teiid.query.mapping.xml.MappingDocument;
import org.teiid.query.mapping.xml.MappingNode;
import org.teiid.query.mapping.xml.MappingVisitor;
import org.teiid.query.mapping.xml.Navigator;
import org.teiid.query.metadata.BasicQueryMetadata;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.StoredProcedureInfo;
import org.teiid.query.metadata.SupportConstants;
import org.teiid.query.sql.lang.SPParameter;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.SingleElementSymbol;


public class FakeMetadataFacade extends BasicQueryMetadata {

  private FakeMetadataStore store;
  private FunctionLibrary functionLibrary;

  public FakeMetadataFacade(FakeMetadataStore store) {
    this.store = store;
    this.functionLibrary = FakeMetadataFactory.SFM.getSystemFunctionLibrary();
  }
 
  public FakeMetadataFacade(FakeMetadataStore store, FunctionLibrary funcLibrary) {
    this.store = store;
    this.functionLibrary = funcLibrary;
  }

  public FakeMetadataStore getStore() {
    return this.store;
  }

    public Object getElementID(String elementName)
        throws TeiidComponentException, QueryMetadataException {

        Assertion.isNotNull(elementName);

    Object obj = store.findObject(elementName, FakeMetadataObject.ELEMENT);
    if(obj == null) {
      throw new QueryMetadataException("Element '" + elementName + "' not found."); //$NON-NLS-1$ //$NON-NLS-2$
    }
    return obj;
  }

    public Object getGroupID(String groupName)
        throws TeiidComponentException, QueryMetadataException {

        Assertion.isNotNull(groupName);

        Object result = store.findObject(groupName, FakeMetadataObject.GROUP);
        if (result == null){
            throw new QueryMetadataException("Group '" + groupName + "' not found."); //$NON-NLS-1$ //$NON-NLS-2$
        }
        return result;
  }

    public Collection getGroupsForPartialName(String partialGroupName)
        throws TeiidComponentException, QueryMetadataException {

    if(partialGroupName == null) {
      throw new QueryMetadataException("Group name cannot be null"); //$NON-NLS-1$
    }
       
        String qualifiedPartialPart = "."+partialGroupName; //$NON-NLS-1$
       
    // get all groupNames present in metadata
        Collection groupNames = store.findObjects(FakeMetadataObject.GROUP, "dummy", null); //$NON-NLS-1$

    // these are the correct group names whose valid partially qualified
    // part this partial name is part of
        Collection correctGroups = new ArrayList();
        Iterator groupIter = groupNames.iterator();
        while(groupIter.hasNext()) {
          String groupName = ((FakeMetadataObject) groupIter.next()).getName();
          if(groupName.toLowerCase().endsWith(qualifiedPartialPart.toLowerCase())) {
            correctGroups.add(groupName);
          }
        }

        return correctGroups;
    }

    public Object getModelID(Object groupOrElementID)
        throws TeiidComponentException, QueryMetadataException {

      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupOrElementID);
      FakeMetadataObject obj = (FakeMetadataObject) groupOrElementID;
    return obj.getProperty(FakeMetadataObject.Props.MODEL);
  }

    public String getInsertPlan(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    FakeMetadataObject obj = (FakeMetadataObject) groupID;
    return (String) obj.getProperty(FakeMetadataObject.Props.INSERT_PROCEDURE);
    }

    public String getUpdatePlan(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    FakeMetadataObject obj = (FakeMetadataObject) groupID;
    return (String) obj.getProperty(FakeMetadataObject.Props.UPDATE_PROCEDURE);
    }

    public String getDeletePlan(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    FakeMetadataObject obj = (FakeMetadataObject) groupID;
    return (String) obj.getProperty(FakeMetadataObject.Props.DELETE_PROCEDURE);
    }

    public String getFullName(Object metadataID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
    return ((FakeMetadataObject)metadataID).getName();
  }
   
    @Override
    public String getName(Object metadataID) throws TeiidComponentException,
        QueryMetadataException {
      String name = getFullName(metadataID);
      Object groupID = getGroupIDForElementID(metadataID);
      boolean isXml = false;
      String groupFullName = null;
      if (groupID != null) {
          isXml = isXMLGroup(groupID);
          groupFullName = getFullName(groupID);
      }
     
      if (isXml) {
        name = name.substring(groupFullName.length() + 1);
      } else {
        //the logic about should work in either case,
        //but there is a lot of metadata to correct
        name = SingleElementSymbol.getShortName(name);
      }
      return name;
    }

    public List getElementIDsInGroupID(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    List ids = store.findObjects(FakeMetadataObject.ELEMENT, FakeMetadataObject.Props.GROUP, groupID);
    Collections.sort(ids);
    return ids;
  }

    public Object getGroupIDForElementID(Object elementID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
    FakeMetadataObject element = (FakeMetadataObject) elementID;
    return element.getProperty(FakeMetadataObject.Props.GROUP);
  }

  public String getElementType(Object elementID)
    throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject) elementID;
    return (String) element.getProperty(FakeMetadataObject.Props.TYPE);
  }

  public Object getDefaultValue(Object elementID)
    throws TeiidComponentException, QueryMetadataException {
    ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
    return ((FakeMetadataObject)elementID).getDefaultValue();
  }

    public boolean isVirtualGroup(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
    return Boolean.TRUE.equals(group.getProperty(FakeMetadataObject.Props.IS_VIRTUAL));
  }

    public boolean isVirtualModel(Object modelID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, modelID);
      FakeMetadataObject model = (FakeMetadataObject) modelID;
        return ((Boolean)model.getProperty(FakeMetadataObject.Props.IS_VIRTUAL)).booleanValue();

    }

    public QueryNode getVirtualPlan(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
    QueryNode queryNode = (QueryNode) group.getProperty(FakeMetadataObject.Props.PLAN);
    if (queryNode.getQuery() == null) {
        throw new QueryMetadataException("no query");//$NON-NLS-1$
    }
    return queryNode;
  }

  public boolean modelSupports(Object modelID, int supportConstant)
        throws TeiidComponentException, QueryMetadataException {
    ArgCheck.isInstanceOf(FakeMetadataObject.class, modelID);
    switch(supportConstant) {
      default:
        throw new QueryMetadataException("Unknown model support constant: " + supportConstant); //$NON-NLS-1$
    }
  }

    public boolean groupSupports(Object groupID, int groupConstant)
        throws TeiidComponentException,QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
    Boolean supports = null;
    switch(groupConstant) {
      case SupportConstants.Group.UPDATE:
        supports = (Boolean) group.getProperty(FakeMetadataObject.Props.UPDATE);
        break;
      default:
        throw new QueryMetadataException("Unknown group support constant: " + groupConstant); //$NON-NLS-1$
    }
    return supports.booleanValue();
  }

    public boolean elementSupports(Object elementID, int elementConstant)
        throws TeiidComponentException,QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
      FakeMetadataObject element = (FakeMetadataObject) elementID;
    Boolean supports = null;
    switch(elementConstant) {
      case SupportConstants.Element.NULL:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.NULL);
        break;
            case SupportConstants.Element.NULL_UNKNOWN:
                supports = Boolean.FALSE;
                break;
      case SupportConstants.Element.SEARCHABLE_COMPARE:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.SEARCHABLE_COMPARE);
        break;
      case SupportConstants.Element.SEARCHABLE_LIKE:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE);
        break;
      case SupportConstants.Element.SELECT:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.SELECT);
        break;
      case SupportConstants.Element.UPDATE:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.UPDATE);
        break;
      case SupportConstants.Element.DEFAULT_VALUE:
                Object defaultValue = element.getProperty(FakeMetadataObject.Props.DEFAULT_VALUE);
                if(defaultValue == null) {
                    supports = Boolean.FALSE;
                } else if(defaultValue instanceof Boolean) {
                    supports = (Boolean) defaultValue;
                } else {
                    supports = Boolean.TRUE;
                }
        break;
      case SupportConstants.Element.AUTO_INCREMENT:
        supports = (Boolean) element.getProperty(FakeMetadataObject.Props.AUTO_INCREMENT);
        break;
            case SupportConstants.Element.CASE_SENSITIVE:
                supports = (Boolean) element.getProperty(FakeMetadataObject.Props.CASE_SENSITIVE);
                break;
            case SupportConstants.Element.SIGNED:
                supports = (Boolean) element.getProperty(FakeMetadataObject.Props.SIGNED);
                break;
      default:
        throw new QueryMetadataException("Unknown element support constant: " + elementConstant); //$NON-NLS-1$
    }
        if(supports != null) {
        return supports.booleanValue();
        }
        return false;
  }

    public int getMaxSetSize(Object modelID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, modelID);
      FakeMetadataObject model = (FakeMetadataObject) modelID;
        Integer maxSetSize = (Integer) model.getProperty(FakeMetadataObject.Props.MAX_SET_SIZE);
        if(maxSetSize == null) {
            return 100;
        }
        return maxSetSize.intValue();
    }

    public StoredProcedureInfo getStoredProcedureInfoForProcedure(String fullyQualifiedProcedureName)
        throws TeiidComponentException, QueryMetadataException {

        Assertion.isNotNull(fullyQualifiedProcedureName);

        FakeMetadataObject procedureID = store.findObject(fullyQualifiedProcedureName, FakeMetadataObject.PROCEDURE);
        if(procedureID == null) {
            throw new QueryMetadataException("Unknown stored procedure: " + fullyQualifiedProcedureName); //$NON-NLS-1$
        }

        StoredProcedureInfo procInfo = new StoredProcedureInfo();
        procInfo.setProcedureID(procedureID);
        procInfo.setModelID(procedureID.getProperty(FakeMetadataObject.Props.MODEL));
        procInfo.setQueryPlan((QueryNode)procedureID.getProperty(FakeMetadataObject.Props.PLAN));
        procInfo.setProcedureCallableName(fullyQualifiedProcedureName);
        procInfo.setUpdateCount(((Integer)procedureID.getProperty(FakeMetadataObject.Props.UPDATE_COUNT, new Integer(-1))).intValue());

        // Read params
        List params = (List) procedureID.getProperty(FakeMetadataObject.Props.PARAMS);
        List paramInfos = new ArrayList(params.size());
        Iterator iter = params.iterator();
        while(iter.hasNext()) {
            FakeMetadataObject param = (FakeMetadataObject) iter.next();
           
            String name = param.getName();
            if(name.indexOf(".") < 0) { //$NON-NLS-1$
                name = procedureID.getName() + "." + name; //$NON-NLS-1$
            }           
           
            int index = ( (Integer) param.getProperty(FakeMetadataObject.Props.INDEX) ).intValue();
            int direction = ( (Integer) param.getProperty(FakeMetadataObject.Props.DIRECTION) ).intValue();
            String dataTypeName = (String) param.getProperty(FakeMetadataObject.Props.TYPE);
            Class dataTypeClass = DataTypeManager.getDataTypeClass(dataTypeName);
           
            SPParameter paramInfo = new SPParameter(index, direction, name);
            paramInfo.setParameterType(direction);
            paramInfo.setMetadataID(param);
            if(direction == ParameterInfo.RESULT_SET) {
                paramInfo.setClassType(java.sql.ResultSet.class);
            } else {
                paramInfo.setClassType(dataTypeClass);
            }
           
            FakeMetadataObject resultSet = (FakeMetadataObject)param.getProperty(FakeMetadataObject.Props.RESULT_SET);
            if(resultSet != null){
              Iterator iter2 = ((List)resultSet.getProperty(FakeMetadataObject.Props.COLUMNS)).iterator();
              while(iter2.hasNext()){
                    ElementSymbol col = (ElementSymbol) iter2.next();
                paramInfo.addResultSetColumn(col.getName(), col.getType(), col.getMetadataID());
              }
            }
            paramInfos.add(paramInfo);
        }

        procInfo.setParameters(paramInfos);

        return procInfo;
  }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getIndexesInGroup(java.lang.Object)
     */
    public Collection getIndexesInGroup(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
        return getTypeOfKeysInGroup(groupID, FakeMetadataObject.TYPE_INDEX);
    }

    public Collection getUniqueKeysInGroup(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      return getTypeOfKeysInGroup(groupID, FakeMetadataObject.TYPE_PRIMARY_KEY);
    }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getForeignKeysInGroup(java.lang.Object)
     */
    public Collection getForeignKeysInGroup(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      return getTypeOfKeysInGroup(groupID, FakeMetadataObject.TYPE_FOREIGN_KEY);
    }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getPrimaryKeyIDForForeignKeyID(java.lang.Object)
     */
    public Object getPrimaryKeyIDForForeignKeyID(Object foreignKeyID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, foreignKeyID);
      FakeMetadataObject keyObj = (FakeMetadataObject) foreignKeyID;
        return keyObj.getProperty(FakeMetadataObject.Props.REFERENCED_KEY);
    }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getElementIDsInIndex(java.lang.Object)
     */
    public List getElementIDsInIndex(Object index)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, index);
        FakeMetadataObject keyObj = (FakeMetadataObject) index;
        return (List)keyObj.getProperty(FakeMetadataObject.Props.KEY_ELEMENTS);
    }

    public List getElementIDsInKey(Object keyID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, keyID);
    FakeMetadataObject keyObj = (FakeMetadataObject) keyID;
    return (List)keyObj.getProperty(FakeMetadataObject.Props.KEY_ELEMENTS);
    }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getAccessPatternsInGroup(Object)
     */
    public Collection getAccessPatternsInGroup(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      return getTypeOfKeysInGroup(groupID, FakeMetadataObject.TYPE_ACCESS_PATTERN);
    }

  //Used to get either keys or access patterns
  private Collection getTypeOfKeysInGroup(Object groupID,
                                        final Integer KEY_TYPE) {
    ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    FakeMetadataObject group = (FakeMetadataObject)groupID;

    Collection keys = (Collection)group.getProperty(FakeMetadataObject.Props.KEYS);
    if (keys == null){
      return Collections.EMPTY_LIST;
    }

    Collection keysOfType = new ArrayList(keys.size());
    Iterator keyIter = keys.iterator();
    while (keyIter.hasNext()) {
      FakeMetadataObject key = (FakeMetadataObject) keyIter.next();
      if (KEY_TYPE.equals(key.getProperty(FakeMetadataObject.Props.KEY_TYPE))){
        keysOfType.add(key);
      }
    }

    return keysOfType;
  }

    /**
     * @see org.teiid.query.metadata.QueryMetadataInterface#getElementIDsInAccessPattern(Object)
     */
    public List getElementIDsInAccessPattern(Object accessPattern)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, accessPattern);
      FakeMetadataObject accessPatternObj = (FakeMetadataObject) accessPattern;
        return (List)accessPatternObj.getProperty(FakeMetadataObject.Props.KEY_ELEMENTS);
    }

    public MappingNode getMappingNode(Object groupID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
        MappingDocument doc = (MappingDocument)group.getProperty(FakeMetadataObject.Props.PLAN);
        doc.setName(getFullName(groupID));
        return doc;
    }

    public boolean isXMLGroup(Object groupID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
        Object plan = group.getProperty(FakeMetadataObject.Props.PLAN);
        if(plan == null) {
          return false;
        }
        return (plan instanceof MappingNode);
    }

    public String getVirtualDatabaseName() throws TeiidComponentException, QueryMetadataException {
        return "myvdb"; //$NON-NLS-1$
    }
   
    public boolean isTemporaryTable(Object groupID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
      FakeMetadataObject group = (FakeMetadataObject) groupID;
        Boolean isTemp = (Boolean)group.getProperty(FakeMetadataObject.Props.TEMP);
        if(isTemp != null && isTemp.equals(Boolean.TRUE)) {
            return true;
        }
        return false;
    }   

  public Collection getXMLTempGroups(Object groupID)
        throws TeiidComponentException, QueryMetadataException{

    ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    MappingDocument mappingDoc = (MappingDocument)((FakeMetadataObject)groupID).getProperty(FakeMetadataObject.Props.PLAN);
        List tempGroups = resolveGroups(getStagingTables(mappingDoc));
        return tempGroups;
    }
   
    List getStagingTables(MappingDocument doc) {
        final List tables = new ArrayList();
       
        // visitor to extract all the explicit staging tables.
        MappingVisitor visitor = new MappingVisitor() {
            public void visit(MappingBaseNode baseNode) {
                if (baseNode.getStagingTables() != null) {
                    tables.addAll(baseNode.getStagingTables());
                }
            }
        };
        doc.acceptVisitor(new Navigator(true, visitor));
        return tables;
    }
   

    private List resolveGroups(List groupNames)
        throws QueryMetadataException, TeiidComponentException {
       
        if(groupNames != null && !groupNames.isEmpty()) {
            ArrayList tempGroups = new ArrayList();
            for(int i = 0; i < groupNames.size(); i++) {          
                tempGroups.add(this.getGroupID((String)groupNames.get(i)));
            }
            return tempGroups;
        }
        return Collections.EMPTY_LIST;
    }

  /**
   * @see org.teiid.query.metadata.QueryMetadataInterface#getCardinality(java.lang.Object)
   */
  public int getCardinality(Object groupID)
    throws TeiidComponentException, QueryMetadataException {
    ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
    Integer cardinality = (Integer)((FakeMetadataObject)groupID).getProperty(FakeMetadataObject.Props.CARDINALITY);
    if (cardinality != null){
      return cardinality.intValue();
    }
    return QueryMetadataInterface.UNKNOWN_CARDINALITY;
  }

    public String getNameInSource(Object metadataID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
        return (String)((FakeMetadataObject)metadataID).getProperty(FakeMetadataObject.Props.NAME_IN_SOURCE);
    }

    public Properties getExtensionProperties(Object metadataID)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
        return ((FakeMetadataObject)metadataID).getExtensionProps();
    }

    public int getElementLength(Object elementID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject) elementID;
      return Integer.parseInt((String) element.getProperty(FakeMetadataObject.Props.LENGTH));
    }

    /**
     * Return position of element in group or result set.  Position returned is 1-based!
     */
    public int getPosition(Object elementID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
      FakeMetadataObject element = (FakeMetadataObject) elementID;
        return ((Integer) element.getProperty(FakeMetadataObject.Props.INDEX)).intValue() + 1;
    }

    public int getPrecision(Object elementID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject) elementID;
        String precision = (String) element.getProperty(FakeMetadataObject.Props.PRECISION);
        if (precision == null) {
            return 0;
        }
        return Integer.parseInt(precision);
    }

    public int getRadix(Object elementID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject) elementID;
        String radix = (String) element.getProperty(FakeMetadataObject.Props.RADIX);
        if (radix == null) {
            return 0;
        }
        return Integer.parseInt(radix);
    }

    public int getScale(Object elementID) throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject) elementID;
        String scale = (String) element.getProperty(FakeMetadataObject.Props.SCALE);
        if (scale == null) {
            return 0;
        }
        return Integer.parseInt(scale);
    }

   
    public String getNativeType(Object elementID) throws TeiidComponentException,
                                                 QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        String nativeType = (String) element.getProperty(FakeMetadataObject.Props.NATIVE_TYPE);
        if(nativeType == null) {
            return "";                 //$NON-NLS-1$
        }
        return nativeType;
    }
   
    public boolean hasMaterialization(Object groupID) throws TeiidComponentException,
                                                     QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
        FakeMetadataObject group = (FakeMetadataObject)groupID;
        return group.getProperty(FakeMetadataObject.Props.MAT_GROUP) != null;
    }

    public Object getMaterialization(Object groupID) throws TeiidComponentException,
                                                    QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
        FakeMetadataObject group =  (FakeMetadataObject) groupID;
        return group.getProperty(FakeMetadataObject.Props.MAT_GROUP);
    }
   
    public Object getMaterializationStage(Object groupID) throws TeiidComponentException,
                                                         QueryMetadataException {
       
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
        FakeMetadataObject group =  (FakeMetadataObject) groupID;
        return group.getProperty(FakeMetadataObject.Props.MAT_STAGE);
    }
   
    public Object getMaximumValue(Object elementID) throws TeiidComponentException,
                                                   QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return element.getProperty(FakeMetadataObject.Props.MAX_VALUE);
    }
   
    public Object getMinimumValue(Object elementID) throws TeiidComponentException,
                                                   QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return element.getProperty(FakeMetadataObject.Props.MIN_VALUE);
    }

    public int getDistinctValues(Object elementID) throws TeiidComponentException,
                                                   QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject)elementID;
        Integer val = (Integer) element.getProperty(FakeMetadataObject.Props.DISTINCT_VALUES);
        if(val != null) {
            return val.intValue();
        }
        return -1;
    }

    public int getNullValues(Object elementID) throws TeiidComponentException,
                                                   QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element = (FakeMetadataObject)elementID;
        Integer val = (Integer) element.getProperty(FakeMetadataObject.Props.NULL_VALUES);
        if(val != null) {
            return val.intValue();
        }
        return -1;
    }

    public List getXMLSchemas(Object groupID) throws TeiidComponentException,
                                             QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, groupID);
        FakeMetadataObject group =  (FakeMetadataObject) groupID;
        return (List) group.getProperty(FakeMetadataObject.Props.XML_SCHEMAS);
    }
   
  public boolean isProcedure(Object elementID) {
    ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return FakeMetadataObject.PROCEDURE.equals(element.getType());
  }
   
    public byte[] getBinaryVDBResource(String resourcePath) throws TeiidComponentException, QueryMetadataException {
        return "ResourceContents".getBytes(); //$NON-NLS-1$
    }

    public String getCharacterVDBResource(String resourcePath) throws TeiidComponentException, QueryMetadataException {
        return "ResourceContents"; //$NON-NLS-1$
    }

    public String[] getVDBResourcePaths() throws TeiidComponentException, QueryMetadataException {
        return new String[] {"my/resource/path"}; //$NON-NLS-1$
    }
   
    /**
     * @see org.teiid.query.metadata.BasicQueryMetadata#getModeledType(java.lang.Object)
     * @since 5.0
     */
    public String getModeledType(Object elementID) throws TeiidComponentException,
                                                  QueryMetadataException {
       
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return (String) element.getProperty(FakeMetadataObject.Props.MODELED_TYPE);
    }
   
    /**
     * @see org.teiid.query.metadata.BasicQueryMetadata#getModeledBaseType(java.lang.Object)
     * @since 5.0
     */
    public String getModeledBaseType(Object elementID) throws TeiidComponentException,
                                                      QueryMetadataException {
       
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
      FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return (String) element.getProperty(FakeMetadataObject.Props.MODELED_BASE_TYPE);
    }
   
    /**
     * @see org.teiid.query.metadata.BasicQueryMetadata#getModeledPrimitiveType(java.lang.Object)
     * @since 5.0
     */
    public String getModeledPrimitiveType(Object elementID) throws TeiidComponentException,
                                                           QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, elementID);
        FakeMetadataObject element =  (FakeMetadataObject) elementID;
        return (String) element.getProperty(FakeMetadataObject.Props.MODELED_PRIMITIVE_TYPE);
    }
   
    @Override
    public Object addToMetadataCache(Object metadataID, String key, Object value)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
      FakeMetadataObject object = (FakeMetadataObject) metadataID;
      synchronized (object) {
          Object result = object.getProperty(key);
          object.putProperty(key, value);
          return result;
    }
    }
   
    @Override
    public Object getFromMetadataCache(Object metadataID, String key)
        throws TeiidComponentException, QueryMetadataException {
      ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
      FakeMetadataObject object =  (FakeMetadataObject) metadataID;
      synchronized (object) {
          return object.getProperty(key);
    }
    }
   
    @Override
    public FunctionLibrary getFunctionLibrary() {
      return this.functionLibrary;
    }
   
    @Override
    public Object getPrimaryKey(Object metadataID) {
      Collection keys = getTypeOfKeysInGroup(metadataID, FakeMetadataObject.TYPE_PRIMARY_KEY);
      if (!keys.isEmpty()) {
        return keys.iterator().next();
      }
      return null;
    }
}
TOP

Related Classes of org.teiid.query.unittest.FakeMetadataFacade

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.