Skip to content

Commit 6c9ced8

Browse files
committed
* try fixing mix of main and
this branch w.r.t. to package management
1 parent 9bf42da commit 6c9ced8

File tree

2 files changed

+91
-88
lines changed

2 files changed

+91
-88
lines changed

src/AasxCsharpLibrary/AdminShellPackageEnv.cs

+88-87
Original file line numberDiff line numberDiff line change
@@ -328,18 +328,26 @@ public void SetEnvironment(AasCore.Aas3_0.Environment environment)
328328
_aasEnv = environment;
329329
}
330330

331-
private static IEnumerable<PackageRelationship> FindAllRelationships(Package package, string[] relTypes)
331+
private class FindRelTuple
332332
{
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; }
336335
}
337336

338-
private static IEnumerable<PackageRelationship> FindAllRelationships(PackagePart part, string[] relTypes)
337+
private static IEnumerable<FindRelTuple> FindAllRelationships(Package package, string[] relTypes)
339338
{
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 };
343351
}
344352

345353
private static AasCore.Aas3_0.Environment LoadXml(string fn)
@@ -419,10 +427,10 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn,
419427
// get the origin from the package
420428
PackagePart originPart = null;
421429
foreach (var x in FindAllRelationships(package, relTypesOrigin))
422-
if (x.SourceUri.ToString() == "/")
430+
if (x.Rel.SourceUri.ToString() == "/")
423431
{
424432
//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);
426434
if (package.PartExists(absoluteURI))
427435
{
428436
originPart = package.GetPart(absoluteURI);
@@ -440,7 +448,7 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn,
440448
foreach (var x in FindAllRelationships(originPart, relTypesSpec))
441449
{
442450
//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);
444452
if (package.PartExists(absoluteURI))
445453
{
446454
specPart = package.GetPart(absoluteURI);
@@ -689,29 +697,6 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
689697

690698
try
691699
{
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
715700
var jsonWriterOptions = new System.Text.Json.JsonWriterOptions
716701
{
717702
Indented = true
@@ -790,23 +775,28 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
790775
// get the origin from the package
791776
PackagePart originPart = null;
792777
foreach (var x in FindAllRelationships(package, relTypesOrigin))
793-
if (x.SourceUri.ToString() == "/")
778+
if (x.Rel.SourceUri.ToString() == "/")
794779
{
795780
//originPart = package.GetPart(x.TargetUri);
796781

797-
var absoluteURI = PackUriHelper.ResolvePartUri(x.SourceUri, x.TargetUri);
782+
var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri);
798783
if (package.PartExists(absoluteURI))
799784
{
800785
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+
}
801799
}
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;
810800
}
811801

812802
// MIHO, 2024-05-29
@@ -839,26 +829,29 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
839829
PackageRelationship specRel = null;
840830
foreach (var x in FindAllRelationships(originPart, relTypesSpec))
841831
{
842-
specRel = x;
832+
specRel = x.Rel;
843833
//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);
845835
if (package.PartExists(absoluteURI))
846836
{
847837
specPart = package.GetPart(absoluteURI);
848838
}
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+
}
858853
}
859854

860-
861-
862855
// check, if we have to change the spec part
863856
if (specPart != null && specRel != null)
864857
{
@@ -943,21 +936,18 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
943936
//Need to check/test in detail, with thumbnails as well
944937
if(specPart != null)
945938
{
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())
948940
{
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))
950945
{
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+
958948
//delete old type, because its not according to spec or something
959949
//then replace with the current type
960-
specPart.DeleteRelationship(x.Id);
950+
specPart.DeleteRelationship(x.Rel.Id);
961951
specPart.CreateRelationship(
962952
filePart.Uri, TargetMode.Internal,
963953
"http://admin-shell.io/aasx/relationships/aas-suppl");
@@ -974,21 +964,21 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
974964

975965
// normal files
976966
foreach (var x in FindAllRelationships(specPart, relTypesSuppl))
977-
if (x.TargetUri == psfDel.Uri)
967+
if (x.Rel.TargetUri == psfDel.Uri)
978968
{
979969
// try to delete
980-
specPart.DeleteRelationship(x.Id);
970+
specPart.DeleteRelationship(x.Rel.Id);
981971
package.DeletePart(psfDel.Uri);
982972
found = true;
983973
break;
984974
}
985975

986976
// thumbnails
987977
foreach (var x in FindAllRelationships(package, relTypesThumb))
988-
if (x.TargetUri == psfDel.Uri)
978+
if (x.Rel.TargetUri == psfDel.Uri)
989979
{
990980
// try to delete
991-
package.DeleteRelationship(x.Id);
981+
package.DeleteRelationship(x.Rel.Id);
992982
package.DeletePart(psfDel.Uri);
993983
found = true;
994984
break;
@@ -1021,10 +1011,10 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
10211011
if (psfAdd.SpecialHandling == AdminShellPackageSupplementaryFile.SpecialHandlingType.None)
10221012
{
10231013
foreach (var x in FindAllRelationships(specPart, relTypesSuppl))
1024-
if (x.TargetUri == psfAdd.Uri)
1014+
if (x.Rel.TargetUri == psfAdd.Uri)
10251015
{
10261016
//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);
10281018
if (package.PartExists(absoluteURI))
10291019
{
10301020
filePart = package.GetPart(absoluteURI);
@@ -1043,10 +1033,10 @@ public bool SaveAs(string fn, bool writeFreshly = false, SerializationFormat pre
10431033
AdminShellPackageSupplementaryFile.SpecialHandlingType.EmbedAsThumbnail)
10441034
{
10451035
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)
10471037
{
10481038
//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);
10501040
if (package.PartExists(absoluteURI))
10511041
{
10521042
filePart = package.GetPart(absoluteURI);
@@ -1152,6 +1142,7 @@ public void TemporarilySaveCloseAndReOpenPackage(
11521142
string.Format("Could not temporarily close and re-open AASX {0}, because package" +
11531143
"not open as expected!", Filename)));
11541144

1145+
// try-catch for the steps before the lambda
11551146
try
11561147
{
11571148
// save (it will be open, still)
@@ -1160,7 +1151,17 @@ public void TemporarilySaveCloseAndReOpenPackage(
11601151
// close
11611152
_openPackage.Flush();
11621153
_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+
}
11631161

1162+
// try-catch for the lambda
1163+
try
1164+
{
11641165
// execute lambda
11651166
lambda?.Invoke();
11661167
}
@@ -1176,8 +1177,7 @@ public void TemporarilySaveCloseAndReOpenPackage(
11761177
if (Filename.ToLower().EndsWith(".aasx"))
11771178
{
11781179
_openPackage = Package.Open(Filename, FileMode.OpenOrCreate);
1179-
1180-
}
1180+
}
11811181
}
11821182
}
11831183

@@ -1454,15 +1454,15 @@ public Stream GetLocalThumbnailStream(ref Uri thumbUri)
14541454
// get the thumbnail over the relationship
14551455
PackagePart thumbPart = null;
14561456
foreach (var x in FindAllRelationships(_openPackage, relTypesThumb))
1457-
if (x.SourceUri.ToString() == "/")
1457+
if (x.Rel.SourceUri.ToString() == "/")
14581458
{
14591459
//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);
14611461
if (_openPackage.PartExists(absoluteURI))
14621462
{
14631463
thumbPart = _openPackage.GetPart(absoluteURI);
14641464
}
1465-
thumbUri = x.TargetUri;
1465+
thumbUri = x.Rel.TargetUri;
14661466
break;
14671467
}
14681468
if (thumbPart == null)
@@ -1507,21 +1507,21 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
15071507
{
15081508
// get the thumbnail(s) from the package
15091509
foreach (var x in FindAllRelationships(_openPackage, relTypesThumb))
1510-
if (x.SourceUri.ToString() == "/")
1510+
if (x.Rel.SourceUri.ToString() == "/")
15111511
{
15121512
result.Add(new AdminShellPackageSupplementaryFile(
1513-
x.TargetUri,
1513+
x.Rel.TargetUri,
15141514
location: AdminShellPackageSupplementaryFile.LocationType.InPackage,
15151515
specialHandling: AdminShellPackageSupplementaryFile.SpecialHandlingType.EmbedAsThumbnail));
15161516
}
15171517

15181518
// get the origin from the package
15191519
PackagePart originPart = null;
15201520
foreach (var x in FindAllRelationships(_openPackage, relTypesOrigin))
1521-
if (x.SourceUri.ToString() == "/")
1521+
if (x.Rel.SourceUri.ToString() == "/")
15221522
{
15231523
//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);
15251525
if (_openPackage.PartExists(absoluteURI))
15261526
{
15271527
originPart = _openPackage.GetPart(absoluteURI);
@@ -1536,7 +1536,7 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
15361536
foreach (var x in FindAllRelationships(originPart, relTypesSpec))
15371537
{
15381538
//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);
15401540
if (_openPackage.PartExists(absoluteURI))
15411541
{
15421542
specPart = _openPackage.GetPart(absoluteURI);
@@ -1551,7 +1551,8 @@ public ListOfAasSupplementaryFile GetListOfSupplementaryFiles()
15511551
{
15521552
result.Add(
15531553
new AdminShellPackageSupplementaryFile(
1554-
x.TargetUri, location: AdminShellPackageSupplementaryFile.LocationType.InPackage));
1554+
x.Rel.TargetUri,
1555+
location: AdminShellPackageSupplementaryFile.LocationType.InPackage));
15551556
}
15561557
}
15571558
}

0 commit comments

Comments
 (0)