@@ -328,18 +328,26 @@ public void SetEnvironment(AasCore.Aas3_0.Environment environment)
328
328
_aasEnv = environment ;
329
329
}
330
330
331
- private static IEnumerable < PackageRelationship > FindAllRelationships ( Package package , string [ ] relTypes )
331
+ private class FindRelTuple
332
332
{
333
- foreach ( var rt in relTypes )
334
- foreach ( var x in package . GetRelationshipsByType ( rt ) )
335
- yield return x ;
333
+ public bool Deprecated { get ; set ; }
334
+ public PackageRelationship Rel { get ; set ; }
336
335
}
337
336
338
- private static IEnumerable < PackageRelationship > FindAllRelationships ( PackagePart part , string [ ] relTypes )
337
+ private static IEnumerable < FindRelTuple > FindAllRelationships ( Package package , string [ ] relTypes )
339
338
{
340
- foreach ( var rt in relTypes )
341
- foreach ( var x in part . GetRelationshipsByType ( rt ) )
342
- yield return x ;
339
+ for ( int i = 0 ; i < relTypes . Length ; i ++ )
340
+ foreach ( var x in package . GetRelationshipsByType ( relTypes [ i ] ) )
341
+ yield return new FindRelTuple ( ) { Deprecated = ( i > 0 ) , Rel = x } ;
342
+ }
343
+
344
+ private static IEnumerable < FindRelTuple > FindAllRelationships (
345
+ PackagePart part , string [ ] relTypes ,
346
+ bool onlyDeprecated = false )
347
+ {
348
+ for ( int i = ( onlyDeprecated ? 1 : 0 ) ; i < relTypes . Length ; i ++ )
349
+ foreach ( var x in part . GetRelationshipsByType ( relTypes [ i ] ) )
350
+ yield return new FindRelTuple ( ) { Deprecated = ( i > 0 ) , Rel = x } ;
343
351
}
344
352
345
353
private static AasCore . Aas3_0 . Environment LoadXml ( string fn )
@@ -419,10 +427,10 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn,
419
427
// get the origin from the package
420
428
PackagePart originPart = null ;
421
429
foreach ( var x in FindAllRelationships ( package , relTypesOrigin ) )
422
- if ( x . SourceUri . ToString ( ) == "/" )
430
+ if ( x . Rel . SourceUri . ToString ( ) == "/" )
423
431
{
424
432
//originPart = package.GetPart(x.TargetUri);
425
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
433
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
426
434
if ( package . PartExists ( absoluteURI ) )
427
435
{
428
436
originPart = package . GetPart ( absoluteURI ) ;
@@ -440,7 +448,7 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn,
440
448
foreach ( var x in FindAllRelationships ( originPart , relTypesSpec ) )
441
449
{
442
450
//specPart = package.GetPart(x.TargetUri);
443
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
451
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
444
452
if ( package . PartExists ( absoluteURI ) )
445
453
{
446
454
specPart = package . GetPart ( absoluteURI ) ;
@@ -689,29 +697,6 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
689
697
690
698
try
691
699
{
692
- // dead-csharp off
693
- //// TODO (Michael Hoffmeister, 2020-08-01): use a unified function to create a serializer
694
- //JsonSerializer serializer = new JsonSerializer()
695
- //{
696
- // NullValueHandling = NullValueHandling.Ignore,
697
- // ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
698
- // Formatting = Newtonsoft.Json.Formatting.Indented
699
- //};
700
-
701
- //var sw = new StreamWriter(s);
702
- //var writer = new JsonTextWriter(sw);
703
-
704
- //serializer.Serialize(writer, _aasEnv);
705
- //writer.Flush();
706
- //sw.Flush();
707
- //s.Flush();
708
-
709
- //if (useMemoryStream == null)
710
- //{
711
- // writer.Close();
712
- // sw.Close();
713
- //}
714
- // dead-csharp on
715
700
var jsonWriterOptions = new System . Text . Json . JsonWriterOptions
716
701
{
717
702
Indented = true
@@ -790,23 +775,28 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
790
775
// get the origin from the package
791
776
PackagePart originPart = null ;
792
777
foreach ( var x in FindAllRelationships ( package , relTypesOrigin ) )
793
- if ( x . SourceUri . ToString ( ) == "/" )
778
+ if ( x . Rel . SourceUri . ToString ( ) == "/" )
794
779
{
795
780
//originPart = package.GetPart(x.TargetUri);
796
781
797
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
782
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
798
783
if ( package . PartExists ( absoluteURI ) )
799
784
{
800
785
originPart = package . GetPart ( absoluteURI ) ;
786
+
787
+ // check if it a deprecated URI
788
+ if ( x . Deprecated )
789
+ {
790
+ //delete old type, because its not according to spec or something
791
+ //then replace with the current type
792
+ package . DeleteRelationship ( x . Rel . Id ) ;
793
+ package . CreateRelationship (
794
+ originPart . Uri , TargetMode . Internal ,
795
+ relTypesOrigin . FirstOrDefault ( ) ) ;
796
+ originPart = null ;
797
+ break ;
798
+ }
801
799
}
802
- //delete old type, because its not according to spec or something
803
- //then replace with the current type
804
- package . DeleteRelationship ( x . Id ) ;
805
- package . CreateRelationship (
806
- originPart . Uri , TargetMode . Internal ,
807
- "http://admin-shell.io/aasx/relationships/aasx-origin" ) ;
808
- originPart = null ;
809
- break ;
810
800
}
811
801
812
802
// MIHO, 2024-05-29
@@ -839,26 +829,29 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
839
829
PackageRelationship specRel = null ;
840
830
foreach ( var x in FindAllRelationships ( originPart , relTypesSpec ) )
841
831
{
842
- specRel = x ;
832
+ specRel = x . Rel ;
843
833
//specPart = package.GetPart(x.TargetUri);
844
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
834
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
845
835
if ( package . PartExists ( absoluteURI ) )
846
836
{
847
837
specPart = package . GetPart ( absoluteURI ) ;
848
838
}
849
- //delete old type, because its not according to spec or something
850
- //then replace with the current type
851
- originPart . DeleteRelationship ( x . Id ) ;
852
- originPart . CreateRelationship (
853
- specPart . Uri , TargetMode . Internal ,
854
- "http://admin-shell.io/aasx/relationships/aas-spec" ) ;
855
- specPart = null ;
856
- specRel = null ;
857
- break ;
839
+
840
+ // check if it a deprecated URI
841
+ if ( x . Deprecated )
842
+ {
843
+ //delete old type, because its not according to spec or something
844
+ //then replace with the current type
845
+ package . DeleteRelationship ( x . Rel . Id ) ;
846
+ package . CreateRelationship (
847
+ specPart . Uri , TargetMode . Internal ,
848
+ relTypesSpec . FirstOrDefault ( ) ) ;
849
+ specPart = null ;
850
+ specRel = null ;
851
+ break ;
852
+ }
858
853
}
859
854
860
-
861
-
862
855
// check, if we have to change the spec part
863
856
if ( specPart != null && specRel != null )
864
857
{
@@ -943,21 +936,18 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
943
936
//Need to check/test in detail, with thumbnails as well
944
937
if ( specPart != null )
945
938
{
946
- var xs = specPart . GetRelationshipsByType ( "http://www.admin-shell.io/aasx/relationships/aas-suppl" ) ;
947
- if ( xs != null )
939
+ foreach ( var x in FindAllRelationships ( specPart , relTypesSuppl , onlyDeprecated : true ) . ToList ( ) )
948
940
{
949
- foreach ( var x in xs . ToList ( ) )
941
+ var uri = x . Rel . TargetUri ;
942
+ PackagePart filePart = null ;
943
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
944
+ if ( package . PartExists ( absoluteURI ) )
950
945
{
951
- var uri = x . TargetUri ;
952
- PackagePart filePart = null ;
953
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
954
- if ( package . PartExists ( absoluteURI ) )
955
- {
956
- filePart = package . GetPart ( absoluteURI ) ;
957
- }
946
+ filePart = package . GetPart ( absoluteURI ) ;
947
+
958
948
//delete old type, because its not according to spec or something
959
949
//then replace with the current type
960
- specPart . DeleteRelationship ( x . Id ) ;
950
+ specPart . DeleteRelationship ( x . Rel . Id ) ;
961
951
specPart . CreateRelationship (
962
952
filePart . Uri , TargetMode . Internal ,
963
953
"http://admin-shell.io/aasx/relationships/aas-suppl" ) ;
@@ -974,21 +964,21 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
974
964
975
965
// normal files
976
966
foreach ( var x in FindAllRelationships ( specPart , relTypesSuppl ) )
977
- if ( x . TargetUri == psfDel . Uri )
967
+ if ( x . Rel . TargetUri == psfDel . Uri )
978
968
{
979
969
// try to delete
980
- specPart . DeleteRelationship ( x . Id ) ;
970
+ specPart . DeleteRelationship ( x . Rel . Id ) ;
981
971
package . DeletePart ( psfDel . Uri ) ;
982
972
found = true ;
983
973
break ;
984
974
}
985
975
986
976
// thumbnails
987
977
foreach ( var x in FindAllRelationships ( package , relTypesThumb ) )
988
- if ( x . TargetUri == psfDel . Uri )
978
+ if ( x . Rel . TargetUri == psfDel . Uri )
989
979
{
990
980
// try to delete
991
- package . DeleteRelationship ( x . Id ) ;
981
+ package . DeleteRelationship ( x . Rel . Id ) ;
992
982
package . DeletePart ( psfDel . Uri ) ;
993
983
found = true ;
994
984
break ;
@@ -1021,10 +1011,10 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
1021
1011
if ( psfAdd . SpecialHandling == AdminShellPackageSupplementaryFile . SpecialHandlingType . None )
1022
1012
{
1023
1013
foreach ( var x in FindAllRelationships ( specPart , relTypesSuppl ) )
1024
- if ( x . TargetUri == psfAdd . Uri )
1014
+ if ( x . Rel . TargetUri == psfAdd . Uri )
1025
1015
{
1026
1016
//filePart = package.GetPart(x.TargetUri);
1027
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
1017
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
1028
1018
if ( package . PartExists ( absoluteURI ) )
1029
1019
{
1030
1020
filePart = package . GetPart ( absoluteURI ) ;
@@ -1043,10 +1033,10 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
1043
1033
AdminShellPackageSupplementaryFile . SpecialHandlingType . EmbedAsThumbnail )
1044
1034
{
1045
1035
foreach ( var x in FindAllRelationships ( package , relTypesThumb ) )
1046
- if ( x . SourceUri . ToString ( ) == "/" && x . TargetUri == psfAdd . Uri )
1036
+ if ( x . Rel . SourceUri . ToString ( ) == "/" && x . Rel . TargetUri == psfAdd . Uri )
1047
1037
{
1048
1038
//filePart = package.GetPart(x.TargetUri);
1049
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
1039
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
1050
1040
if ( package . PartExists ( absoluteURI ) )
1051
1041
{
1052
1042
filePart = package . GetPart ( absoluteURI ) ;
@@ -1152,6 +1142,7 @@ public void TemporarilySaveCloseAndReOpenPackage(
1152
1142
string . Format ( "Could not temporarily close and re-open AASX {0}, because package" +
1153
1143
"not open as expected!" , Filename ) ) ) ;
1154
1144
1145
+ // try-catch for the steps before the lambda
1155
1146
try
1156
1147
{
1157
1148
// save (it will be open, still)
@@ -1160,7 +1151,17 @@ public void TemporarilySaveCloseAndReOpenPackage(
1160
1151
// close
1161
1152
_openPackage . Flush ( ) ;
1162
1153
_openPackage . Close ( ) ;
1154
+ }
1155
+ catch ( Exception ex )
1156
+ {
1157
+ throw ( new Exception (
1158
+ string . Format ( "While temporarily close and re-open AASX {0} at {1} gave: {2}" ,
1159
+ Filename , AdminShellUtil . ShortLocation ( ex ) , ex . Message ) ) ) ;
1160
+ }
1163
1161
1162
+ // try-catch for the lambda
1163
+ try
1164
+ {
1164
1165
// execute lambda
1165
1166
lambda ? . Invoke ( ) ;
1166
1167
}
@@ -1176,8 +1177,7 @@ public void TemporarilySaveCloseAndReOpenPackage(
1176
1177
if ( Filename . ToLower ( ) . EndsWith ( ".aasx" ) )
1177
1178
{
1178
1179
_openPackage = Package . Open ( Filename , FileMode . OpenOrCreate ) ;
1179
-
1180
- }
1180
+ }
1181
1181
}
1182
1182
}
1183
1183
@@ -1454,15 +1454,15 @@ public Stream GetLocalThumbnailStream(ref Uri thumbUri)
1454
1454
// get the thumbnail over the relationship
1455
1455
PackagePart thumbPart = null ;
1456
1456
foreach ( var x in FindAllRelationships ( _openPackage , relTypesThumb ) )
1457
- if ( x . SourceUri . ToString ( ) == "/" )
1457
+ if ( x . Rel . SourceUri . ToString ( ) == "/" )
1458
1458
{
1459
1459
//thumbPart = _openPackage.GetPart(x.TargetUri);
1460
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
1460
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
1461
1461
if ( _openPackage . PartExists ( absoluteURI ) )
1462
1462
{
1463
1463
thumbPart = _openPackage . GetPart ( absoluteURI ) ;
1464
1464
}
1465
- thumbUri = x . TargetUri ;
1465
+ thumbUri = x . Rel . TargetUri ;
1466
1466
break ;
1467
1467
}
1468
1468
if ( thumbPart == null )
@@ -1507,21 +1507,21 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
1507
1507
{
1508
1508
// get the thumbnail(s) from the package
1509
1509
foreach ( var x in FindAllRelationships ( _openPackage , relTypesThumb ) )
1510
- if ( x . SourceUri . ToString ( ) == "/" )
1510
+ if ( x . Rel . SourceUri . ToString ( ) == "/" )
1511
1511
{
1512
1512
result . Add ( new AdminShellPackageSupplementaryFile (
1513
- x . TargetUri ,
1513
+ x . Rel . TargetUri ,
1514
1514
location : AdminShellPackageSupplementaryFile . LocationType . InPackage ,
1515
1515
specialHandling : AdminShellPackageSupplementaryFile . SpecialHandlingType . EmbedAsThumbnail ) ) ;
1516
1516
}
1517
1517
1518
1518
// get the origin from the package
1519
1519
PackagePart originPart = null ;
1520
1520
foreach ( var x in FindAllRelationships ( _openPackage , relTypesOrigin ) )
1521
- if ( x . SourceUri . ToString ( ) == "/" )
1521
+ if ( x . Rel . SourceUri . ToString ( ) == "/" )
1522
1522
{
1523
1523
//originPart = _openPackage.GetPart(x.TargetUri);
1524
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
1524
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
1525
1525
if ( _openPackage . PartExists ( absoluteURI ) )
1526
1526
{
1527
1527
originPart = _openPackage . GetPart ( absoluteURI ) ;
@@ -1536,7 +1536,7 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
1536
1536
foreach ( var x in FindAllRelationships ( originPart , relTypesSpec ) )
1537
1537
{
1538
1538
//specPart = _openPackage.GetPart(x.TargetUri);
1539
- var absoluteURI = PackUriHelper . ResolvePartUri ( x . SourceUri , x . TargetUri ) ;
1539
+ var absoluteURI = PackUriHelper . ResolvePartUri ( x . Rel . SourceUri , x . Rel . TargetUri ) ;
1540
1540
if ( _openPackage . PartExists ( absoluteURI ) )
1541
1541
{
1542
1542
specPart = _openPackage . GetPart ( absoluteURI ) ;
@@ -1551,7 +1551,8 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
1551
1551
{
1552
1552
result . Add (
1553
1553
new AdminShellPackageSupplementaryFile (
1554
- x . TargetUri , location : AdminShellPackageSupplementaryFile . LocationType . InPackage ) ) ;
1554
+ x . Rel . TargetUri ,
1555
+ location : AdminShellPackageSupplementaryFile . LocationType . InPackage ) ) ;
1555
1556
}
1556
1557
}
1557
1558
}
0 commit comments