Пример #1
0
        /// <summary>
        /// Retrieve list of all transformation specifications configured.
        /// </summary>
        /// <returns></returns>
        public HttpResponseMessage Get()
        {
            Logger.Information("Incoming transformation specification list request.");

            try
            {
                string landLinkConfig = AppSettings.Get("LandLinkConfigFile");

                var config = new TransformationConfig().LoadFromFile(landLinkConfig);


                List <object> resultList = new List <object>();


                foreach (var spec in config.TransformationSpecifications)
                {
                    var record = new
                    {
                        Name        = spec.Name,
                        Description = spec.Description,
                        Type        = spec.Type
                    };

                    resultList.Add(record);
                }


                return(Request.CreateResponse(HttpStatusCode.Created, resultList, new JsonMediaTypeFormatter()));
            }
            catch (Exception ex)
            {
                return(HttpErrorHelper.CreateHttpResponsForUnexpectedException(this, Logger, ex));
            }
        }
Пример #2
0
        private void ExportEquipmentPsiFile(TransformationConfig config, CIMGraph graph)
        {
            var stopWatch = Stopwatch.StartNew();

            var cimObjects = GetIdentifiedObjects(config, graph, true, false, true).ToList();

            var exportFileName = base.ExportFolderName + "\\konstant_equipment_psi.xml";

            Console.WriteLine("Serializing to PSI/Visue CIM Equipment XML: " + exportFileName + " (can take several minutes)...");

            var converter = new NetSamEquipmentXMLConverter(cimObjects, new List <IPreProcessor> {
                new AddMissingBayProcessor(), new DisconnectedLinkProcessor(), new EnsureACLSUniqueNames()
            });

            var result = converter.GetCimObjects().ToList();

            var xmlProfile = converter.GetXMLData(result);

            XmlSerializer xmlSerializer = new XmlSerializer(xmlProfile.GetType());

            System.IO.StreamWriter file = new System.IO.StreamWriter(exportFileName);
            xmlSerializer.Serialize(file, xmlProfile);
            file.Close();

            Console.WriteLine("Finish exporting Equipment CIM XML!");
        }
Пример #3
0
        protected override async Task Execute()
        {
            await base.Execute();

            AssertFileExists(ConfigFileName);

            Console.WriteLine("Reading GIS data based on configuration: " + ConfigFileName + " (can take several minutes)...");

            var config = new TransformationConfig().LoadFromFile(ConfigFileName);

            var transformer = config.InitializeDataTransformer("test");

            ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotRunPreCheckConnectivity();
            ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotLogToTable();

            transformer.TransferData();

            var writer = (CIMGraphWriter)transformer.GetFirstDataWriter();
            var graph  = writer.GetCIMGraph();

            // Create folder if not exists
            if (!System.IO.Directory.Exists(base.ExportFolderName))
            {
                System.IO.Directory.CreateDirectory(base.ExportFolderName);
            }

            ExportEquipmentPsiFile(config, graph);
            ExportAssetPsiFile(config, graph);
        }
Пример #4
0
        protected override async Task Execute()
        {
            await base.Execute();

            AssertFileExists(ConfigFileName);

            Console.WriteLine("Creating full CIM network dump based on configuration: " + ConfigFileName);

            var config = new TransformationConfig().LoadFromFile(ConfigFileName);

            //config.DataReaders[0].ConfigParameters.Add(new ConfigParameter { Name = "Extent", Value = "548694,552348,6187246,6189391" });

            var transformer = config.InitializeDataTransformer("test");

            ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotRunPreCheckConnectivity();
            ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotLogToTable();

            transformer.TransferData();

            var writer = (CIMGraphWriter)transformer.GetFirstDataWriter();
            var graph  = writer.GetCIMGraph();

            var stopWatch = Stopwatch.StartNew();

            ExportEquipment(config, graph);
            ExportAsset(config, graph);
        }
Пример #5
0
        static IEnumerable <IdentifiedObject> GetIdentifiedObjects(TransformationConfig config, CIMGraph graph, bool includeEquipment = false, bool includeAssets = false, bool includeLocations = false)
        {
            var serializer       = config.InitializeSerializer("DAX") as IDAXSerializeable;
            var daxcimSerializer = (DAXCIMSerializer)serializer;
            var dataRepository   = CIMMetaDataManager.Repository;
            var objects          = graph.CIMObjects;

            return(daxcimSerializer.GetIdentifiedObjects(dataRepository, objects, includeEquipment, includeAssets, includeLocations));
        }
Пример #6
0
        private void ExportAsset(TransformationConfig config, CIMGraph graph)
        {
            var allCimObjects = GetIdentifiedObjects(config, graph, false, true, false).ToList();


            // Create folder if not exists
            if (!System.IO.Directory.Exists(base.ExportFolderName))
            {
                System.IO.Directory.CreateDirectory(base.ExportFolderName);
            }


            var cson = new CsonSerializer();

            using (var destination = File.Open(base.ExportFolderName + "\\konstant_asset.jsonl", FileMode.Create))
            {
                using (var source = cson.SerializeObjects(allCimObjects))
                {
                    source.CopyTo(destination);
                }
            }
        }
Пример #7
0
        private void ExportAssetPsiFile(TransformationConfig config, CIMGraph graph)
        {
            var stopWatch = Stopwatch.StartNew();

            var cimObjects = GetIdentifiedObjects(config, graph, false, true, false).ToList();

            var exportFileName = base.ExportFolderName + "\\konstant_asset_psi.xml";

            Console.WriteLine("Serializing to PSI/Visue CIM Asset XML: " + exportFileName + " (can take several minutes)...");

            var converter = new NetSamAssetXMLConverter(cimObjects);

            var result = converter.GetCimObjects().ToList();

            var xmlProfile = converter.GetXMLData(result);

            XmlSerializer xmlSerializer = new XmlSerializer(xmlProfile.GetType());

            System.IO.StreamWriter file = new System.IO.StreamWriter(exportFileName);
            xmlSerializer.Serialize(file, xmlProfile);
            file.Close();

            Console.WriteLine("Finish exporting Asset CIM XML!");
        }
Пример #8
0
        static void Main(string[] args)
        {
            if (args.Length < 6)
            {
                System.Console.Out.WriteLine("Usage: Gis2PowerFactoryBatchRunner.exe inputAdapterConfigFileName outputCimArchiveFolder outputCimArchiveName outputLogFile extent highVoltageOnly(true/false)");
                return;
            }

            try
            {
                string cimAdapterConfig = args[0];
                string cimArchiveFolder = args[1];
                string cimArchiveName   = args[2];
                Guid   cimModeRdfId     = Guid.Parse(args[3]);
                string logFileName      = args[4];
                string extent           = args[5];
                bool   highVoltageOnly  = false;

                if (args.Length == 7 && args[6].ToLower() == "true")
                {
                    highVoltageOnly = true;
                }

                var cimFileName = cimArchiveName + ".jsonl";

                Log.Logger = new LoggerConfiguration()
                             .WriteTo.File(logFileName, rollingInterval: RollingInterval.Day)
                             .WriteTo.Console()
                             .WriteTo.EventLog("NRGi.Gis2PowerFactoryBatchRunner", manageEventSource: true, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error)
                             .CreateLogger();

                Logger.WriteToConsole = true;

                var config = new TransformationConfig().LoadFromFile(cimAdapterConfig);

                // Sæt extent
                if (extent != null)
                {
                    config.DataReaders[0].ConfigParameters.Add(new ConfigParameter()
                    {
                        Name = "Extent", Value = extent
                    });
                }

                var transformer = config.InitializeDataTransformer("test");

                // Log ikke til database tabel, da vi køre på prod
                ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotLogToTable();
                ((CIMGraphWriter)transformer.GetFirstDataWriter()).DoNotRunPreCheckConnectivity();

                transformer.TransferData();

                CIMGraphWriter writer = transformer.GetFirstDataWriter() as CIMGraphWriter;
                CIMGraph       graph  = writer.GetCIMGraph();

                // Serialize
                var serializer = config.InitializeSerializer("DAX") as IDAXSerializeable;

                var cimObjects = ((DAXCIMSerializer)serializer).GetIdentifiedObjects(CIMMetaDataManager.Repository, graph.CIMObjects, true, true, true).ToList();

                var pfWriter = new KonstantCimArchiveWriter(cimObjects, cimArchiveFolder, cimArchiveName, cimModeRdfId, highVoltageOnly);

                Logger.Log(LogLevel.Info, "Export to Power Factory CIM Archive: " + cimArchiveFolder + "\\" + cimArchiveName + ".zip finished.");
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
        }
        /// <summary>
        /// Process the posted data according to transformation specification.
        /// If the writer (specificed in the transformation specification) is able to produce text or xml (i.e. geojson) that will be returned.
        /// If the writer (specificed in the transformation specification) is not able to produce output that can be returend (i.e. SQL writer), a http ok with no content will be return on successful completion.
        /// </summary>
        /// <returns></returns>
        public HttpResponseMessage Post(string specificationName, string projectName = null, string jobName = null, string userName = null)
        {
            Logger.Information("Incoming transformation command. TransformationSpecification='" + specificationName + "' JobName='" + jobName + "' ProjectName='" + projectName + "' UserName='******'");

            try
            {
                var httpRequest = HttpContext.Current.Request;

                System.IO.StreamReader reader = new System.IO.StreamReader(httpRequest.InputStream);
                string inputData = reader.ReadToEnd();

                if (inputData == null || inputData.Length == 0)
                {
                    Logger.Error("Input data cannot be null or length = 0!");
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Input data cannot be null. No data send in post request. Check if file is empty.", new JsonMediaTypeFormatter()));
                }

                string landLinkConfig = AppSettings.Get("LandLinkConfigFile");

                var config = new TransformationConfig().LoadFromFile(landLinkConfig);

                var transformer = config.InitializeDataTransformer(specificationName);

                if (transformer.GetSpecification().Type != null && transformer.GetSpecification().Type.ToLower() == "import" && jobName == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "jobName parameter must be set on import transformations", new JsonMediaTypeFormatter()));
                }

                var daxReader = transformer.GetFirstDataReader();

                // Log out first 200 bytes of input data
                int inputSubStringLen = 200;

                if (inputData.Length < inputSubStringLen)
                {
                    inputSubStringLen = inputData.Length;
                }

                Logger.Debug("Input data stream (max 200 bytes): " + inputData.Substring(0, inputSubStringLen));


                transformer.GetFirstDataReader().Open(inputData);

                transformer.TransferData(projectName, jobName, userName);

                var writer = transformer.GetFirstDataWriter();
                var transformationResult = writer.GetResult();

                if (transformationResult != null)
                {
                    int outputSubStringLen = 200;

                    if (transformationResult.Length < outputSubStringLen)
                    {
                        outputSubStringLen = transformationResult.Length;
                    }

                    Logger.Debug("Output data stream (max 200 bytes): " + transformationResult.Substring(0, outputSubStringLen));

                    HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.OK);
                    resp.Content = new StringContent(transformationResult);
                    resp.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

                    return(resp);
                }
                else
                {
                    return(new HttpResponseMessage(HttpStatusCode.OK));
                }
            }
            catch (Exception ex)
            {
                return(HttpErrorHelper.CreateHttpResponsForUnexpectedException(this, Logger, ex));
            }
        }