public function handle(\DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     $dimensionName = XMLAUtil::stringElement($row, 'DIMENSION_NAME');
     $dimensionUniqueName = XMLAUtil::stringElement($row, 'DIMENSION_UNIQUE_NAME');
     $dimensionCaption = XMLAUtil::stringElement($row, 'DIMENSION_CAPTION');
     $description = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $dimensionType = XMLAUtil::integerElement($row, 'DIMENSION_TYPE');
     $type = DimensionType::getDictionary()->forOrdinal($dimensionType);
     $defaultHierarchyUniqueName = XMLAUtil::stringElement($row, 'DEFAULT_HIERARCHY');
     $dimensionOrdinal = XMLAUtil::integerElement($row, 'DIMENSION_ORDINAL');
     $dimension = new XMLADimension($this->cube, $dimensionUniqueName, $dimensionName, $dimensionCaption, $description, $type, $defaultHierarchyUniqueName, $dimensionOrdinal == NULL ? 0 : $dimensionOrdinal);
     $list->add($dimension);
     $this->cube->dimensionsByUname[$dimension->getUniqueName()] = $dimension;
 }
 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()));
 }
 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);
 }
 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;
 }
 public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list)
 {
     /*
           Example:
     
           <row>
        <CATALOG_NAME>FoodMart</CATALOG_NAME>
        <SCHEMA_NAME>FoodMart</SCHEMA_NAME>
        <CUBE_NAME>HR</CUBE_NAME>
        <DIMENSION_UNIQUE_NAME>[Store]</DIMENSION_UNIQUE_NAME>
        <HIERARCHY_UNIQUE_NAME>[Store]</HIERARCHY_UNIQUE_NAME>
        <LEVEL_UNIQUE_NAME>[Store].[Store Name]</LEVEL_UNIQUE_NAME>
        <PROPERTY_NAME>Store Manager</PROPERTY_NAME>
        <PROPERTY_CAPTION>Store Manager</PROPERTY_CAPTION>
        <PROPERTY_TYPE>1</PROPERTY_TYPE>
        <DATA_TYPE>130</DATA_TYPE>
        <PROPERTY_CONTENT_TYPE>0</PROPERTY_CONTENT_TYPE>
        <DESCRIPTION>HR Cube - Store Hierarchy - Store
            Name Level - Store Manager Property</DESCRIPTION>
           </row>
     */
     $description = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $uniqueName = XMLAUtil::stringElement($row, 'DESCRIPTION');
     $caption = XMLAUtil::stringElement($row, 'PROPERTY_CAPTION');
     $name = XMLAUtil::stringElement($row, 'PROPERTY_NAME');
     $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;
     }
     $contentTypeOrdinal = XMLAUtil::integerElement($row, 'PROPERTY_CONTENT_TYPE');
     $contentType = $contentTypeOrdinal == null ? null : PropertyContentType::getDictionary()->forOrdinal($contentTypeOrdinal);
     $propertyType = XMLAUtil::integerElement($row, 'PROPERTY_TYPE');
     $type = PropertyType::getDictionary()->forMask($propertyType);
     $list->add(new XMLAProperty($uniqueName, $name, $caption, $description, $datatype, $type, $contentType));
 }
 /**
  * @param DOMElement $cell
  *
  * @throws OLAPException
  */
 private function getTypedValue(DOMElement $cell)
 {
     $element = XMLAUtil::findChild($cell, XMLAUtil::MDDATASET_NS, 'Value');
     if ($element == null) {
         return null;
     }
     // The object type is contained in xsi:type attribute.
     $type = $element->attributes->getNamedItem('xsi:type');
     try {
         switch ($type) {
             case 'xsd:int':
                 return XMLAUtil::integerElement($cell, 'Value');
             case 'xsd:double':
                 return XMLAUtil::doubleElement($cell, 'Value');
             case 'xsd:float':
                 return XMLAUtil::floatElement($cell, 'Value');
             case 'xsd:long':
                 return XMLAUtil::longElement($cell, 'Value');
             case 'xsd:boolean':
                 return XMLAUtil::booleanElement($cell, 'Value');
             default:
                 return XMLAUtil::stringElement($cell, 'Value');
         }
     } catch (Exception $e) {
         throw new OLAPException('Error while casting a cell value to the correct php type for' . ' its XSD type ' . $type);
     }
 }