public function initializeFactsDatasetFrom($sourceFactsDataset) {
     if (isset($sourceFactsDataset)) {
         if (!isset($this->factsDataset)) {
             $this->initiateFactsDataset();
         }
         $this->factsDataset->initializeFrom($sourceFactsDataset);
     }
 }
Exemplo n.º 2
0
 public function initializeSourceDatasetFrom($sourceSourceDataset)
 {
     if (isset($sourceSourceDataset)) {
         if (!isset($this->sourceDataset)) {
             $this->initiateSourceDataset();
         }
         $this->sourceDataset->initializeFrom($sourceSourceDataset);
     }
 }
Exemplo n.º 3
0
 protected function mergeWithDataset(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceDatasetName, $sourceDataset)
 {
     $datasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourceDatasetName);
     // dataset/datasource/name
     if (!isset($sourceDataset->datasourceName)) {
         throw new IllegalStateException(t("'@datasetName' dataset definition does not contain a reference to datasource", array('@datasetName' => isset($sourceDataset->publicName) ? $sourceDataset->publicName : $datasetName)));
     }
     $sourceDataset->datasourceName = NameSpaceHelper::resolveNameSpace($namespace, $sourceDataset->datasourceName);
     // dataset/cache/datasource/name
     if (isset($sourceDataset->cache->datasourceName)) {
         $sourceDataset->cache->datasourceName = NameSpaceHelper::resolveNameSpace($namespace, $sourceDataset->cache->datasourceName);
     }
     $dataset = new DatasetMetaData();
     $dataset->name = $datasetName;
     $dataset->initializeFrom($sourceDataset);
     $isDatasetAcceptable = $this->isMetaDataAcceptable($dataset, $filters);
     if ($isDatasetAcceptable) {
         $metamodel->registerDataset($dataset);
     }
     return $isDatasetAcceptable ? $dataset : NULL;
 }
    protected function mergeWithDataset(AbstractMetaModel $metamodel, array $filters = NULL, $namespace, $sourceDatasetName, $sourceDataset) {
        $datasetName = NameSpaceHelper::resolveNameSpace($namespace, $sourceDatasetName);

        // dataset/datasource/name
        if (isset($sourceDataset->datasourceName)) {
            $sourceDataset->datasourceName = NameSpaceHelper::resolveNameSpace($namespace, $sourceDataset->datasourceName);
        }
        elseif (isset($namespace)) {
            $sourceDataset->datasourceName = $namespace;
        }
        else {
            throw new IllegalStateException(t(
                '%datasetName dataset definition does not contain a reference to datasource',
                array('%datasetName' => (isset($sourceDataset->publicName) ? $sourceDataset->publicName : $datasetName))));
        }

        // datasets defined using .json refer to 'persistent' column
        if (isset($sourceDataset->columns)) {
            foreach ($sourceDataset->columns as $sourceColumn) {
                if (!isset($sourceColumn->persistence)) {
                    $sourceColumn->persistence = ColumnMetaData::PERSISTENCE__STORAGE_CREATED;
                }
            }
        }

        $dataset = new DatasetMetaData();
        $dataset->name = $datasetName;
        $dataset->initializeFrom($sourceDataset);

        $isDatasetAcceptable = $this->isMetaDataAcceptable($dataset, $filters);

        if ($isDatasetAcceptable) {
            $metamodel->registerDataset($dataset);
        }

        return $isDatasetAcceptable ? $dataset : NULL;
    }
    protected function update(Import\ImportStream $stream, Import\ImportContext $context) {
        $datasets = $stream->get('datasets');
        if (empty($datasets)) {
            return;
        }

        gd_datasource_set_active($context->get('datasourceName'));
        $metamodel = data_controller_get_metamodel();

        $environment_metamodel = data_controller_get_environment_metamodel();
        $datasource = $environment_metamodel->getDataSource($context->get('datasourceName'));

        foreach ( $datasets as $dataset ) {
            $existingDataset = GD_DatasetMetaModelLoaderHelper::findDatasetByUUID($metamodel->datasets, $dataset->uuid);
            if ( !$existingDataset ) {

                // map for re-linking dependent objects
                $dataset->originalName = $dataset->name;

                // create new name
                $newDatasetName = GD_NamingConvention::generateDatasetName();
                $dataset->name = $newDatasetName;
                $dataset->source = $newDatasetName;
                $dataset->datasourceName = $datasource->name;
            } else {
                // map for re-linking dependent objects
                $dataset->originalName = $dataset->name;

                $dataset->name = $existingDataset->name;
                $dataset->source = $existingDataset->source;
                $dataset->datasourceName = $existingDataset->datasourceName;
            }
        }

        // prepare dataset columns for import
        $this->prepareColumns($datasets);

        // prepares the metadata object, has to be of type RecordMetaData
        foreach ( $datasets as $key => $dataset ) {
            $metadata = new DatasetMetaData();
            $metadata->initializeFrom($dataset);
            $datasets[$key] = $metadata;
        }

        // ensure datasets are created in order to satisfy dependencies
        usort($datasets, array(new ReferencedDatasetComparator(), 'compare'));

        foreach ( $datasets as $dataset ) {
            $existingDataset = GD_DatasetMetaModelLoaderHelper::findDatasetByUUID($metamodel->datasets, $dataset->uuid);
            if ($existingDataset) {
                gd_data_controller_ddl_modify_dataset($dataset);
            } else {
                MetaModelFactory::getInstance()->startGlobalModification();
                try {
                    $transaction = db_transaction();
                    try {
                        gd_data_controller_ddl_create_dataset($dataset);
                    } catch (Exception $e) {
                        $transaction->rollback();
                        throw $e;
                    }
                } catch (Exception $e) {
                    MetaModelFactory::getInstance()->finishGlobalModification(false);
                    throw $e;
                }
                MetaModelFactory::getInstance()->finishGlobalModification(true);
            }
        }

        $stream->set('datasets',$datasets);
    }