public AssetAdministrationShellEnvironment_V1_0 GetEnvironment_V1_0() { if (specPart?.Uri != null) { string specFilePath = specPart.Uri.ToString(); string extension = Path.GetExtension(specFilePath)?.ToLower(); AssetAdministrationShellEnvironment_V1_0 environment; switch (extension) { case ".json": { using (Stream file = specPart.GetStream(FileMode.Open, FileAccess.Read)) environment = AssetAdministrationShellEnvironment_V1_0.ReadEnvironment_V1_0(file, ExportType.Json); } break; case ".xml": { using (Stream file = specPart.GetStream(FileMode.Open, FileAccess.Read)) environment = AssetAdministrationShellEnvironment_V1_0.ReadEnvironment_V1_0(file, ExportType.Xml); } break; default: logger.Error("Not supported file format: " + extension); environment = null; break; } return(environment); } return(null); }
public static void WriteEnvironment_V1_0(AssetAdministrationShellEnvironment_V1_0 environment, ExportType exportType, string filePath) { if (environment == null) { return; } switch (exportType) { case ExportType.Json: try { string serialized = JsonConvert.SerializeObject(environment, JsonSettings); System.IO.File.WriteAllText(filePath, serialized); } catch (Exception e) { logger.Error(e); } break; case ExportType.Xml: try { using (StreamWriter writer = new StreamWriter(filePath)) { XmlSerializer serializer = new XmlSerializer(typeof(AssetAdministrationShellEnvironment_V1_0), AAS_NAMESPACE); XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add("xsi", XmlSchema.InstanceNamespace); namespaces.Add("aas", AAS_NAMESPACE); namespaces.Add("IEC61360", IEC61360_NAMESPACE); serializer.Serialize(writer, environment, namespaces); } } catch (Exception e) { logger.Error(e); } break; default: break; } }
public static AssetAdministrationShellEnvironment_V1_0 ReadEnvironment_V1_0(string filePath) { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException(filePath); } if (!System.IO.File.Exists(filePath)) { throw new ArgumentException(filePath + " does not exist"); } AssetAdministrationShellEnvironment_V1_0 env = null; string fileExtension = Path.GetExtension(filePath); ExportType exportType; switch (fileExtension) { case ".xml": exportType = ExportType.Xml; break; case ".json": exportType = ExportType.Json; break; default: throw new InvalidOperationException(fileExtension + " not supported"); } using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) env = ReadEnvironment_V1_0(file, exportType); if (env == null) { return(null); } ConvertToAssetAdministrationShell(env); return(env); }
public static AssetAdministrationShellEnvironment_V1_0 ReadEnvironment_V1_0(Stream stream, ExportType exportType) { AssetAdministrationShellEnvironment_V1_0 env = null; try { switch (exportType) { case ExportType.Xml: { XmlSerializer serializer = new XmlSerializer(typeof(AssetAdministrationShellEnvironment_V1_0), AAS_NAMESPACE); using (XmlReader reader = XmlReader.Create(stream, XmlSettings)) env = (AssetAdministrationShellEnvironment_V1_0)serializer.Deserialize(reader); } break; case ExportType.Json: { using (StreamReader reader = new StreamReader(stream)) env = JsonConvert.DeserializeObject <AssetAdministrationShellEnvironment_V1_0>(reader.ReadToEnd(), JsonSettings); } break; default: throw new InvalidOperationException(exportType + " not supported"); } ConvertToAssetAdministrationShell(env); return(env); } catch (Exception e) { logger.Error(e, "Failed to read environment - Exception: " + e.Message); return(null); } }
private static void ConvertToAssetAdministrationShell(AssetAdministrationShellEnvironment_V1_0 environment) { foreach (var envAsset in environment.EnvironmentAssets) { Asset asset = new Asset { Administration = envAsset.Administration, Category = envAsset.Category, Description = envAsset.Description, Identification = envAsset.Identification, IdShort = envAsset.IdShort, Kind = envAsset.Kind, AssetIdentificationModel = envAsset.AssetIdentificationModelReference?.ToReference_V1_0 <ISubmodel>() }; environment.Assets.Add(asset); } foreach (var envConceptDescription in environment.EnvironmentConceptDescriptions) { ConceptDescription conceptDescription = new ConceptDescription() { Administration = envConceptDescription.Administration, Category = envConceptDescription.Category, Description = envConceptDescription.Description, Identification = envConceptDescription.Identification, IdShort = envConceptDescription.IdShort, IsCaseOf = envConceptDescription.IsCaseOf?.ConvertAll(c => c.ToReference_V1_0()), EmbeddedDataSpecifications = (envConceptDescription.EmbeddedDataSpecification?.DataSpecificationContent?.DataSpecificationIEC61360 != null) ? new List <DataSpecificationIEC61360>() : null }; if (conceptDescription.EmbeddedDataSpecifications != null) { DataSpecificationIEC61360 dataSpecification = envConceptDescription .EmbeddedDataSpecification .DataSpecificationContent .DataSpecificationIEC61360 .ToDataSpecificationIEC61360(); (conceptDescription.EmbeddedDataSpecifications as List <DataSpecificationIEC61360>).Add(dataSpecification); } environment.ConceptDescriptions.Add(conceptDescription); } foreach (var envSubmodel in environment.EnvironmentSubmodels) { Submodel submodel = new Submodel() { Administration = envSubmodel.Administration, Category = envSubmodel.Category, Description = envSubmodel.Description, Identification = envSubmodel.Identification, IdShort = envSubmodel.IdShort, Kind = envSubmodel.Kind, SemanticId = envSubmodel.SemanticId?.ToReference_V1_0(), ConceptDescription = null, }; submodel.SubmodelElements.AddRange(envSubmodel.SubmodelElements.ConvertAll(c => c.submodelElement?.ToSubmodelElement(environment.ConceptDescriptions))); environment.Submodels.Add(submodel); } foreach (var envAssetAdministrationShell in environment.EnvironmentAssetAdministationShells) { AssetAdministrationShell assetAdministrationShell = new AssetAdministrationShell() { Administration = envAssetAdministrationShell.Administration, Category = envAssetAdministrationShell.Category, DerivedFrom = envAssetAdministrationShell.DerivedFrom?.ToReference_V1_0 <IAssetAdministrationShell>(), Description = envAssetAdministrationShell.Description, Identification = envAssetAdministrationShell.Identification, IdShort = envAssetAdministrationShell.IdShort }; IAsset asset = environment.Assets.Find(a => a.Identification.Id == envAssetAdministrationShell.AssetReference?.Keys?.FirstOrDefault()?.Value); assetAdministrationShell.Asset = asset; foreach (var envSubmodelRef in envAssetAdministrationShell.SubmodelReferences) { ISubmodel submodel = environment.Submodels.Find(s => s.Identification.Id == envSubmodelRef.Keys?.FirstOrDefault()?.Value); if (submodel != null) { assetAdministrationShell.Submodels.Add(submodel); } } environment.AssetAdministrationShells.Add(assetAdministrationShell); } }