protected function prepareTestDatabase() {
        $environment_metamodel = data_controller_get_environment_metamodel();

        // registering test data source and creating corresponding database
        $datasource = $environment_metamodel->findDataSource(DATASOURCE_NAME__TEST);
        if (!isset($datasource)) {
            $databaseNameSuffix = GD_NamingConvention::generateDataMartName() . '_ts';
            $datasourceInfo = array('name' => DATASOURCE_NAME__TEST, 'publicName' => 'Test Suite', 'database' => $databaseNameSuffix);
            gd_datasource_create($datasourceInfo);

            // creating test tables
            $this->createDatasetStorage(TABLE_NAME__LEAF);
            $this->createDatasetStorage(TABLE_NAME__BRANCH);
            $this->createDatasetStorage(TABLE_NAME__MAIN);

            // populating the datasets
            $this->populateDatasets();
        }
    }
/**
 * @param $datamartName
 * @param $export
 * @return services_error|stdClass
 * @throws Exception
 */
function gd_sync_resource_import ( $datamartName, $export ) {
    try {
        $content = json_decode($export);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new Exception('Invalid JSON');
        }

        $datasourceName = gd_datasource_create(array(
            'publicName' => $datamartName,
            'description' => 'Imported Topic'
        ));

        gd_datasource_set_active($datasourceName);
        $importContext = new GD\Sync\Import\ImportContext(array('datasourceName'=>$datasourceName,'operation'=>'create'));
        $importStream = new GD\Sync\Import\ImportStream();
        $importStream->set(null,$content);

        $importController = new \GD\Sync\Import\ImportController();
        $importController->import($importStream,$importContext);

        $apiObject = new stdClass();
        $apiObject->name = $datasourceName;
        $apiObject->messages = gd_get_session_messages();
        return $apiObject;
    } catch ( Exception $e ) {
        return gd_admin_ui_service_exception_handler($e);
    }
}
/**
 * @param $form
 * @param $form_state
 * @throws Exception
 */
function gd_sync_import_create_form_submit ( $form, &$form_state ) {
    try {
        $content = json_decode($form_state['values']['content']);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new Exception('Invalid JSON');
        }

        $datasourceName = gd_datasource_create(array(
            'publicName' => $form_state['values']['name'],
            'description' => 'Imported Datamart.'
        ));

        gd_datasource_set_active($datasourceName);
        $importContext = new GD\Sync\Import\ImportContext(array('datasourceName'=>$datasourceName,'operation'=>'create'));
        $importStream = new GD\Sync\Import\ImportStream();
        $importStream->set(null,$content);

        $importController = new \GD\Sync\Import\ImportController();
        $importController->import($importStream,$importContext);

        drupal_set_message('Datamart Created Successfully');
    } catch ( Exception $e ) {
        LogHelper::log_error($e);
        drupal_set_message($e->getMessage(),'error');
    }
}
    }

    if ( !gd_datasource_name_is_unique(trim($_POST['publicName'])) ) {
        $errors[] = "Topic Name already exists. Please rename the topic";
    }

    // process
    if ( empty($errors) ) {
        global $user;

        $new = array();
        $new['publicName'] = $_POST['publicName'];
        $new['description'] = $_POST['description'];

        try {
            $datasourceName = gd_datasource_create($new);
            gd_datasource_set_active($datasourceName);

            drupal_set_message("Topic successfully created","status");
            drupal_goto("account_datamart_statistics_charts");

        } catch ( Exception $e ) {
            LogHelper::log_error($e);
            $errors[] = $e->getMessage();
        }
    }
}

?>
<div id="content-inside">
    <div style="float: left; width: 85%"><h2>Create Topic</h2></div>