예제 #1
0
 protected function mergeWithCube(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceCubeName, $sourceCube)
 {
     $cubeName = NameSpaceHelper::resolveNameSpace($namespace, $sourceCubeName);
     // cube/sourceDataset/Name
     if (!isset($sourceCube->sourceDatasetName)) {
         throw new IllegalStateException(t("'@cubeName' cube definition does not contain a reference to source dataset", array('@cubeName' => isset($sourceCube->publicName) ? $sourceCube->publicName : $cubeName)));
     }
     $sourceCube->sourceDatasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourceCube->sourceDatasetName);
     // fix dimensions
     if (isset($sourceCube->dimensions)) {
         foreach ($sourceCube->dimensions as $dimension) {
             if (isset($dimension->levels)) {
                 foreach ($dimension->levels as $level) {
                     // cube/dimension/level/dataset/name
                     if (!isset($level->datasetName)) {
                         continue;
                     }
                     $level->datasetName = NameSpaceHelper::resolveNameSpace($namespace, $level->datasetName);
                 }
             }
         }
     }
     // cube/region/dataset/name
     if (isset($sourceCube->regions)) {
         foreach ($sourceCube->regions as $regionName => $region) {
             if (!isset($region->datasetName)) {
                 throw new IllegalStateException(t("'@regionName' region of '@cubeName' cube does not contain a reference to dataset", array('@cubeName' => isset($sourceCube->publicName) ? $sourceCube->publicName : $cubeName, '@regionName' => $regionName)));
             }
             $region->datasetName = NameSpaceHelper::resolveNameSpace($namespace, $region->datasetName);
         }
     }
     $cube = new CubeMetaData();
     $cube->name = $cubeName;
     $cube->initializeFrom($sourceCube);
     $metamodel->registerCube($cube);
     return $cube;
 }
    protected function mergeWithCube(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceCubeName, $sourceCube) {
        $cubeName = NameSpaceHelper::resolveNameSpace($namespace, $sourceCubeName);

        // cube/sourceDataset/Name
        if (!isset($sourceCube->factsDatasetName)) {
            throw new IllegalStateException(t(
                '%cubeName cube definition does not contain a reference to facts dataset',
                array('%cubeName' => (isset($sourceCube->publicName) ? $sourceCube->publicName : $cubeName))));
        }
        $sourceCube->factsDatasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourceCube->factsDatasetName);

        // fix dimensions
        if (isset($sourceCube->dimensions)) {
            foreach ($sourceCube->dimensions as $dimension) {
                // cube/dimension/dataset/name
                if (!isset($dimension->datasetName)) {
                    continue;
                }
                $dimension->datasetName = NameSpaceHelper::resolveNameSpace($namespace, $dimension->datasetName);
            }
        }

        $cube = new CubeMetaData();
        $cube->name = $cubeName;
        $cube->initializeFrom($sourceCube);

        $isCubeAcceptable = $this->isMetaDataAcceptable($cube, $filters);

        // TODO eliminate this check in the future. Use different approach
        if ($isCubeAcceptable) {
            $isCubeAcceptable = $metamodel->findDataset($cube->factsDatasetName) !== NULL;
        }

        if ($isCubeAcceptable) {
            $metamodel->registerCube($cube);
        }

        return $cube;
    }