public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     $hierarchyUniqueName = XMLAUtil::stringElement($row, 'HIERARCHY_UNIQUE_NAME');
     $hierarchyName = XMLAUtil::stringElement($row, 'HIERARCHY_NAME') == NULL ? str_replace(array('[', ']'), array('', ''), $hierarchyUniqueName) : XMLAUtil::stringElement($row, 'HIERARCHY_NAME');
     $hierarchyCaption = XMLAUtil::stringElement($row, 'HIERARCHY_CAPTION');
     $description = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $allMember = XMLAUtil::stringElement($row, 'ALL_MEMBER');
     $defaultMemberUniqueName = XMLAUtil::stringElement($row, 'DEFAULT_MEMBER');
     $hierarchy = new XMLAHierarchy($context->getDimension($row), $hierarchyUniqueName, $hierarchyName, $hierarchyCaption, $description, $allMember != NULL, $defaultMemberUniqueName);
     $list->add($hierarchy);
     $this->cube->hierarchiesByUname[$hierarchy->getUniqueName()] = $hierarchy;
 }
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     $schemaName = XMLAUtil::stringElement($row, "SCHEMA_NAME") === NULL ? '' : XMLAUtil::stringElement($row, "SCHEMA_NAME");
     $catalogName = XMLAUtil::stringElement($row, "CATALOG_NAME");
     if (!$catalogName && XMLAUtil::stringElement($row, "CUBE_NAME")) {
         $catalogName = XMLAUtil::stringElement($row, "CUBE_NAME");
     }
     //print $catalogName . ':' . $schemaName . PHP_EOL;
     //echo 'XMLACatalogSchmeHandler: before if';
     if ($this->catalogName == $catalogName && $list->get($schemaName) === NULL) {
         //echo 'XMLACatalogSchmeHandler: inside if';
         if ($schemaName !== null) {
             $list->add(new XMLASchema($context->getCatalog($row), $schemaName));
         }
     }
 }
Ejemplo n.º 3
0
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     /*
           Example:
     
           <row>
               <CATALOG_NAME>FoodMart</CATALOG_NAME>
               <SCHEMA_NAME>FoodMart</SCHEMA_NAME>
               <CUBE_NAME>Warehouse</CUBE_NAME>
               <SET_NAME>[Top Sellers]</SET_NAME>
               <SCOPE>1</SCOPE>
           </row>
     */
     $setName = XMLAUtil::stringElement($row, 'SET_NAME');
     $list->add(new XMLANamedSet($context->getCube($row), $setName));
 }
Ejemplo n.º 4
0
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     /*
           Example:
     
           <row>
               <CATALOG_NAME>FoodMart</CATALOG_NAME>
               <SCHEMA_NAME>FoodMart</SCHEMA_NAME>
               <CUBE_NAME>Sales</CUBE_NAME>
               <MEASURE_NAME>Profit</MEASURE_NAME>
               <MEASURE_UNIQUE_NAME>[Measures].[Profit]</MEASURE_UNIQUE_NAME>
               <MEASURE_CAPTION>Profit</MEASURE_CAPTION>
               <MEASURE_AGGREGATOR>127</MEASURE_AGGREGATOR>
               <DATA_TYPE>130</DATA_TYPE>
               <MEASURE_IS_VISIBLE>true</MEASURE_IS_VISIBLE>
               <DESCRIPTION>Sales Cube - Profit Member</DESCRIPTION>
           </row>
     */
     $measureName = XMLAUtil::stringElement($row, 'MEASURE_NAME');
     $measureUniqueName = XMLAUtil::stringElement($row, 'MEASURE_UNIQUE_NAME');
     $measureCaption = XMLAUtil::stringElement($row, 'MEASURE_CAPTION');
     $description = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $measureAggregator = NULL;
     /*$measureAggregator =
       MeasureAggregator::getDictionary ( )::forOrdinal (
          XMLAUtil::integerElement (
             $row, 'MEASURE_AGGREGATOR' ) );*/
     // Figure out datatype
     $datatype = NULL;
     $ordinalDatatype = DataType::getDictionary()->forName(XMLAUtil::stringElement($row, 'DATA_TYPE'));
     if ($ordinalDatatype == null) {
         $datatype = Datatype::getDictionary()->forOrdinal(XMLAUtil::integerElement($row, 'DATA_TYPE'));
     } else {
         $datatype = $ordinalDatatype;
     }
     $measureIsVisible = XMLAUtil::booleanElement($row, 'MEASURE_IS_VISIBLE');
     $member = $context->getCube($row)->getMetadataReader()->lookupMemberByUniqueName($measureUniqueName);
     if ($member == null) {
         throw new OLAPException('The server failed to resolve a member with the same unique name as a measure named ' . $measureUniqueName);
     }
     $list->add(new XMLAMeasure($member->getLevel(), $measureUniqueName, $measureName, $measureCaption, $description, null, $measureAggregator, $datatype, $measureIsVisible, $member->getOrdinal()));
 }
Ejemplo n.º 5
0
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     $memberOrdinal = XMLAUtil::integerElement($row, 'LEVEL_NUMBER');
     $memberUniqueName = XMLAUtil::stringElement($row, 'MEMBER_UNIQUE_NAME');
     $memberName = XMLAUtil::stringElement($row, 'MEMBER_NAME');
     $parentUniqueName = XMLAUtil::stringElement($row, 'PARENT_UNIQUE_NAME');
     $memberTypeValues = MemberType::values();
     $memberType = $memberTypeValues[XMLAUtil::integerElement($row, 'MEMBER_TYPE')];
     $memberCaption = XMLAUtil::stringElement($row, 'MEMBER_CAPTION');
     $childrenCardinality = XMLAUtil::integerElement($row, 'CHILDREN_CARDINALITY');
     $level = $context->getLevel($row);
     $map = array();
     $this->addUserDefinedDimensionProperties($row, $level, $map);
     $depth = XMLAUtil::integerElement($row, 'DEPTH');
     if ($depth && $depth != $level->getDepth()) {
         $map['DEPTH'] = $depth;
     }
     $member = new XMLAMember($level, $memberUniqueName, $memberName, $memberCaption, "", $parentUniqueName, $memberType, $childrenCardinality, $memberOrdinal, $map);
     $list->add($member);
 }
Ejemplo n.º 6
0
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     /*
           Example:
     
           <row>
               <CATALOG_NAME>FoodMart</CATALOG_NAME>
               <SCHEMA_NAME>FoodMart</SCHEMA_NAME>
               <CUBE_NAME>Sales</CUBE_NAME>
               <DIMENSION_UNIQUE_NAME>[Customers]</DIMENSION_UNIQUE_NAME>
               <HIERARCHY_UNIQUE_NAME>[Customers]</HIERARCHY_UNIQUE_NAME>
               <LEVEL_NAME>(All)</LEVEL_NAME>
               <LEVEL_UNIQUE_NAME>[Customers].[(All)]</LEVEL_UNIQUE_NAME>
               <LEVEL_CAPTION>(All)</LEVEL_CAPTION>
               <LEVEL_NUMBER>0</LEVEL_NUMBER>
               <LEVEL_CARDINALITY>1</LEVEL_CARDINALITY>
               <LEVEL_TYPE>1</LEVEL_TYPE>
               <CUSTOM_ROLLUP_SETTINGS>0</CUSTOM_ROLLUP_SETTINGS>
               <LEVEL_UNIQUE_SETTINGS>3</LEVEL_UNIQUE_SETTINGS>
               <LEVEL_IS_VISIBLE>true</LEVEL_IS_VISIBLE>
               <DESCRIPTION>Sales Cube - Customers Hierarchy - (All)
               Level</DESCRIPTION>
           </row>
     */
     $levelUniqueName = XMLAUtil::stringElement($row, 'LEVEL_UNIQUE_NAME');
     // SAP BW doesn't return a HIERARCHY_NAME attribute,
     // so try to use the unique name instead
     $levelName = XMLAUtil::stringElement($row, 'LEVEL_NAME') == null ? $levelUniqueName != null ? ereg_replace("\\]\$", "", ereg_replace("^\\[", "", $levelUniqueName)) : null : XMLAUtil::stringElement($row, 'LEVEL_NAME');
     $levelCaption = XMLAUtil::stringElement($row, 'LEVEL_CAPTION');
     $description = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $levelNumber = XMLAUtil::integerElement($row, 'LEVEL_NUMBER');
     $levelTypeCode = XMLAUtil::integerElement($row, 'LEVEL_TYPE');
     $levelType = LevelType::getDictionary()->forOrdinal($levelTypeCode);
     $calculated = ($levelTypeCode & self::MDLEVEL_TYPE_CALCULATED) != 0;
     $levelCardinality = XMLAUtil::integerElement($row, 'LEVEL_CARDINALITY');
     $level = new XMLALevel($context->getHierarchy($row), $levelUniqueName, $levelName, $levelCaption, $description, $levelNumber, $levelType, $calculated, $levelCardinality);
     $list->add($level);
     $this->cubeForCallback->levelsByUname[$level->getUniqueName()] = $level;
 }
Ejemplo n.º 7
0
 /**
  * Constructor
  *
  * @param XMLAHierarchy $hierarchy
  * @param string        $uniqueName  Unique name
  * @param string        $name        Name
  * @param string        $caption     Caption
  * @param string        $description Description
  * @param integer       $depth       Distance to root
  * @param LevelType     $type        Level type
  * @param boolean       $calculated  Whether level is calculated
  * @param integer       $cardinality Number of members in this level
  */
 public function __construct(XMLAHierarchy $hierarchy, $uniqueName, $name, $caption, $description, $depth, LevelType $type = NULL, $calculated, $cardinality)
 {
     parent::__construct($uniqueName, $name, $caption, $description);
     assert($hierarchy != null);
     $this->type = $type;
     $this->calculated = $calculated;
     $this->cardinality = $cardinality;
     $this->depth = $depth;
     $this->hierarchy = $hierarchy;
     $levelRestrictions = array("CATALOG_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getName(), "SCHEMA_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getName(), "CUBE_NAME" => $hierarchy->getDimension()->getCube()->getName(), "DIMENSION_UNIQUE_NAME" => $hierarchy->getDimension()->getUniqueName(), "HIERARCHY_UNIQUE_NAME" => $hierarchy->getUniqueName(), "LEVEL_UNIQUE_NAME" => $this->getUniqueName());
     $this->propertyList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_PROPERTIES), XMLAConnectionContext::createAtLevel($this), new XMLAPropertyHandler(), $levelRestrictions);
     try {
         if ($hierarchy->getDimension()->getDimensionType() == DimensionType::getEnum(DimensionType::MEASURE)) {
             $restrictions = array("CATALOG_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getName(), "SCHEMA_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getName(), "CUBE_NAME" => $hierarchy->getDimension()->getCube()->getName());
             $this->memberList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEASURES), new XMLAConnectionContext($hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata()->getConnection(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog(), $hierarchy->getDimension()->getCube()->getSchema(), $hierarchy->getDimension()->getCube(), $hierarchy->getDimension(), $hierarchy, $this), new XMLAMeasureHandler($hierarchy->getDimension(), $restrictions));
         } else {
             $this->memberList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEMBERS), new XMLAConnectionContext($hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata()->getConnection(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog(), $hierarchy->getDimension()->getCube()->getSchema(), $hierarchy->getDimension()->getCube(), $hierarchy->getDimension(), $hierarchy, $this), new XMLAMemberHandler(), $levelRestrictions);
         }
     } catch (OlapException $e) {
         throw new RuntimeException("Programming error", $e);
     }
 }
Ejemplo n.º 8
0
 /**
  * Constructor
  *
  * @param XMLASchema Schema
  * @param string     name Name
  * @param string     description Description
  *
  * @throws OLAPException
  */
 public function __construct(XMLASchema $schema, $name, $description)
 {
     assert($schema != null);
     assert($name != null);
     assert($description != null);
     $this->schema = $schema;
     $this->name = $name;
     $this->description = $description;
     $this->metadataReader = new XMLACachingMetadataReader(new XMLAMetadataReader($this), $this->measuresMap);
     $connection = $schema->getCatalog()->getMetaData()->getConnection();
     $context = XMLAConnectionContext::createAtGranule($this, null, null, null);
     $restrictions = array('CATALOG_NAME' => $schema->getCatalog()->getName(), 'SCHEMA_NAME' => $schema->getName(), 'CUBE_NAME' => $this->getName());
     $this->dimensions = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_DIMENSIONS), $context, new XMLADimensionHandler($this), $restrictions);
     // populate measures up front; a measure is needed in every query
     $this->measures = new NamedList();
     $connection->populateList($this->measures, $context, new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEASURES), new XMLAMeasureHandler($this->getDimensions()->get('Measures')), $restrictions);
     for ($i = 0; $i < $this->measures->size(); $i++) {
         $measure = $this->measures->get($i);
         $this->measuresMap[$measure->getUniqueName()] = $measure;
     }
     // populate named sets
     $this->namedSets = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_SETS), $context, new XMLANamedSetHandler(), $restrictions);
 }
 /**
  * Shorthand way to create a Context at Level level.
  *
  * @param XMLALevel Level (must not be null)
  */
 public static function createAtLevel(XMLALevel $level)
 {
     return XMLAConnectionContext::createAtGranule($level->getHierarchy()->getDimension()->getCube(), $level->getHierarchy()->getDimension(), $level->getHierarchy(), $level);
 }
Ejemplo n.º 10
0
 /**
  * Looks a member by its unique name and returns members related by
  * the specified tree-operations.
  *
  * @param array  treeOps Collection of tree operations to travel relative to
  *               given member in order to create list of members
  *
  * @param string memberUniqueName Unique name of member
  *
  * @param array  IMember List to be populated with members related to the given
  *               member, or empty set if the member is not found
  *
  * @throws OLAPException if error occurs
  */
 public function lookupMemberRelatives(array $treeOps, $memberUniqueName, NamedList $list)
 {
     $context = XMLAConnectionContext::createAtGranule($this->cube, null, null, null);
     $treeOpMask = 0;
     foreach ($treeOps as $treeOp) {
         $treeOpMask |= $treeOp->xmlaOrdinal();
     }
     $this->cube->getSchema()->getCatalog()->getMetaData()->getConnection()->populateList($list, $context, new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEMBERS), new XMLAMemberHandler(), array('CATALOG_NAME' => $this->cube->getSchema()->getCatalog()->getName(), 'SCHEMA_NAME' => $this->cube->getSchema()->getName(), 'CUBE_NAME' => $this->cube->getName(), 'MEMBER_UNIQUE_NAME' => $memberUniqueName, 'TREE_OP' => $treeOpMask));
 }