protected function update(Import\ImportStream $stream, Import\ImportContext $context) {

        $this->datasourceName = $context->get('datasourceName');

        $reports = $stream->get('reports');
        if (empty($reports)) {
            return;
        }

        $metamodel = data_controller_get_metamodel();
        $this->datasets = $metamodel->datasets;

        foreach ( $reports as $reportKey => $report ) {
            $report = (object) $report;
            $existingReport = gd_report_get_by_uuid($report->uuid,$this->datasourceName);
            if ( !$existingReport ) {
                // create
                $node = $this->createReport($report);
                if ( !empty($node->nid ) ) {
                    $reports[$reportKey] = $node;
                } else {
                    throw new Exception('Report node creation failed');
                }
            } else {
                $existingReport->title = $report->title;
                $existingReport->field_report_desc[$existingReport->language][0]['value'] = $report->description;
                $existingReport->field_report_datasource[$existingReport->language][0]['value'] = $this->datasourceName;
                $existingReport->field_report_custom_view[$existingReport->language][0]['value'] = $report->custom_view;
                $existingReport->field_report_tags[$existingReport->language] = array();
                if (!empty($report->tags)) {
                    foreach ($report->tags as $tid) {
                        $existingReport->field_report_tags[$existingReport->language][] = array('tid' => $tid);
                    }
                }

                // update dataset references
                $existingReport->field_report_dataset_sysnames[$existingReport->language] = array();
                foreach ( $report->datasets as $datasetIdentifier ) {
                    $dataset = GD_DatasetMetaModelLoaderHelper::findDatasetByUUID($this->datasets,$datasetIdentifier);
                    if (!isset($dataset)) {
                        $datasetName = NameSpaceHelper::addNameSpace(gd_datasource_get_active(), $datasetIdentifier);
                        $dataset = $metamodel->getDataset($datasetName);
                    }
                    $existingReport->field_report_dataset_sysnames[$existingReport->language][] = array('value'=>$dataset->name);
                }

                $this->processConfig($report->config);
                $existingReport->field_report_conf[$existingReport->language][0]['value'] = json_encode($report->config);

                gd_report_save($existingReport);

                $event = new DefaultEvent();
                $event->type = 101; // see gd_health_monitoring_database_install() for more details
                $event->owner = $existingReport->nid;
                EventRecorderFactory::getInstance()->record($event);

                $reports[$reportKey] = $existingReport;
            }
        }

        $stream->set('reports',$reports);
    }
    protected function processConfigReports (&$config) {
        //  TODO Services casts everything to array not objects
        $config = (object) $config;
        // dashboard reports
        foreach ( $config->items as $key => $item ) {
            //  TODO Services casts everything to array not objects
            $item = (object) $item;
            if ( $item->type == 'report' ) {
                $reportNode = gd_report_get_by_uuid($item->content,$this->datasourceName);
                //  TODO Services casts everything to array not objects
                $config->items[$key] = (object) $config->items[$key];
                $config->items[$key]->content = $reportNode->nid;
            }
        }

        // drill down reports
        foreach ( $config->drilldowns as $key => $drilldown ) {
            //  TODO Services casts everything to array not objects
            $config->drilldowns[$key] = (object) $config->drilldowns[$key];
            // report nid update
            $reportNode = gd_report_get_by_uuid($drilldown->report,$this->datasourceName);
            $config->drilldowns[$key]->report = (int) $reportNode->nid;

            // column name update
            $config->drilldowns[$key]->column = DatasetImportHelper::getNewColumnName($drilldown->column,$this->datasets);
        }
    }