Skip to content

Commit 8b590e9

Browse files
committed
* continue softening empty
lists (supplSemId, Qualifiers, Extensions)
1 parent c62bb84 commit 8b590e9

File tree

4 files changed

+88
-83
lines changed

4 files changed

+88
-83
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
Copyright (c) 2018-2023 Festo SE & Co. KG <https://www.festo.com/net/de_de/Forms/web/contact_international>
3+
Author: Michael Hoffmeister
4+
5+
This source code is licensed under the Apache License 2.0 (see LICENSE.txt).
6+
7+
This source code may use other Open Source software components (see LICENSE.txt).
8+
*/
9+
using System;
10+
using System.Collections.Generic;
11+
using System.Text.RegularExpressions;
12+
13+
namespace Extensions
14+
{
15+
public static class ExtendExtension
16+
{
17+
18+
public static bool IsValid(this List<IExtension> elems)
19+
{
20+
if (elems == null || elems.Count < 1)
21+
return false;
22+
foreach (var q in elems)
23+
if (q?.Name == null || q.Name.Trim().Length < 1)
24+
return false;
25+
return true;
26+
}
27+
28+
}
29+
}

src/AasxPackageLogic/DispEditHelperEntities.cs

+10-6
Original file line numberDiff line numberDiff line change
@@ -1487,7 +1487,8 @@ public void DisplayOrEditAasEntityAas(
14871487
// Referable
14881488
this.DisplayOrEditEntityReferable(
14891489
env, stack,
1490-
parentContainer: null, referable: aas, indexPosition: 0);
1490+
parentContainer: null, referable: aas, indexPosition: 0,
1491+
superMenu: superMenu);
14911492

14921493
// Identifiable
14931494
this.DisplayOrEditEntityIdentifiable(
@@ -2140,7 +2141,8 @@ public void DisplayOrEditAasEntitySubmodelOrRef(
21402141
this.DisplayOrEditEntityReferable(
21412142
env, stack,
21422143
parentContainer: null, referable: submodel, indexPosition: 0,
2143-
hideExtensions: true);
2144+
hideExtensions: true,
2145+
superMenu: superMenu);
21442146

21452147
// Identifiable
21462148
this.DisplayOrEditEntityIdentifiable(
@@ -2236,7 +2238,7 @@ public void DisplayOrEditAasEntitySubmodelOrRef(
22362238
this.DisplayOrEditEntityReferableContinue(
22372239
env, stack,
22382240
parentContainer: null, referable: submodel, indexPosition: 0,
2239-
hideExtensions: true);
2241+
hideExtensions: true, superMenu: superMenu);
22402242

22412243
}
22422244

@@ -2315,6 +2317,7 @@ public void DisplayOrEditAasEntityConceptDescription(
23152317
env, stack, parentContainer: parentContainer, referable: cd,
23162318
indexPosition: 0,
23172319
hideExtensions: hideExtensions,
2320+
superMenu: superMenu,
23182321
injectToIdShort: new DispEditHelperModules.DispEditInjectAction(
23192322
new[] { "Sync" },
23202323
new[] { "Copy (if target is empty) idShort to preferredName and SubmodelElement idShort." },
@@ -2532,7 +2535,7 @@ public void DisplayOrEditAasEntityConceptDescription(
25322535
DisplayOrEditEntityListOfExtension(
25332536
stack: stack, extensions: cd.Extensions,
25342537
setOutput: (v) => { cd.Extensions = v; },
2535-
relatedReferable: cd);
2538+
relatedReferable: cd, superMenu: superMenu);
25362539

25372540
lambdaEDS(true);
25382541
}
@@ -2545,7 +2548,7 @@ public void DisplayOrEditAasEntityConceptDescription(
25452548
DisplayOrEditEntityListOfExtension(
25462549
stack: stack, extensions: cd.Extensions,
25472550
setOutput: (v) => { cd.Extensions = v; },
2548-
relatedReferable: cd);
2551+
relatedReferable: cd, superMenu: superMenu);
25492552

25502553
lambdaEDS(false);
25512554
lambdaSammExt();
@@ -3465,6 +3468,7 @@ public void DisplayOrEditAasEntitySubmodelElement(
34653468
env, stack,
34663469
parentContainer: parentContainer, referable: sme, indexPosition: indexPosition,
34673470
hideExtensions: true,
3471+
superMenu: superMenu,
34683472
injectToIdShort: new DispEditHelperModules.DispEditInjectAction(
34693473
auxTitles: new[] { "Sync" },
34703474
auxToolTips: new[] { "Copy (if target is empty) idShort " +
@@ -3524,7 +3528,7 @@ public void DisplayOrEditAasEntitySubmodelElement(
35243528
this.DisplayOrEditEntityReferableContinue(
35253529
env, stack,
35263530
parentContainer: null, referable: sme, indexPosition: 0,
3527-
hideExtensions: true);
3531+
hideExtensions: true, superMenu: superMenu);
35283532

35293533
//
35303534
// ConceptDescription <- via semantic ID ?!

src/AasxPackageLogic/DispEditHelperMiniModules.cs

+35-19
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,7 @@ public void QualifierHelper(
256256
{
257257
if (qualifiers.Count > 0)
258258
qualifiers.RemoveAt(qualifiers.Count - 1);
259-
260-
if (qualifiers.Count < 1)
259+
else
261260
setQualifiersNull?.Invoke();
262261
}
263262

@@ -852,7 +851,8 @@ public void ExtensionHelper(
852851
AnyUiStackPanel stack, ModifyRepo repo,
853852
List<Aas.IExtension> extensions,
854853
Action<List<Aas.IExtension>> setOutput,
855-
Aas.IReferable relatedReferable = null)
854+
Aas.IReferable relatedReferable = null,
855+
AasxMenu superMenu = null)
856856
{
857857
// access
858858
if (extensions == null)
@@ -861,12 +861,32 @@ public void ExtensionHelper(
861861
// header
862862
if (editMode)
863863
{
864+
// some hints
865+
this.AddHintBubble(
866+
stack, hintMode,
867+
new[] {
868+
new HintCheck(
869+
() => extensions?.IsValid() != true,
870+
"According to the specification, an existing list of elements shall contain " +
871+
"at least one element and for each element all mandatory fields shall be " +
872+
"not empty.")
873+
});
874+
864875
// let the user control the number of elements
865876
AddActionPanel(
866877
stack, "Extension entities:",
867-
new[] { "Add blank", "Add preset", "Add from clipboard", "Delete last" },
868-
repo,
869-
(buttonNdx) =>
878+
repo: repo,
879+
superMenu: superMenu,
880+
ticketMenu: new AasxMenu()
881+
.AddAction("extension-blank", "Add blank",
882+
"Adds an empty extension.")
883+
.AddAction("extension-preset", "Add preset",
884+
"Adds an extension given from the list of presets.")
885+
.AddAction("extension-clipboard", "Add from clipboard",
886+
"Adds an extension from parsed clipboard data (JSON).")
887+
.AddAction("extension-del", "Delete last",
888+
"Deletes last extension in the list."),
889+
ticketAction: (buttonNdx, ticket) =>
870890
{
871891
if (buttonNdx == 0)
872892
{
@@ -972,6 +992,11 @@ public void ExtensionHelper(
972992
{
973993
case 0:
974994
extensions.Remove(extension);
995+
if (extensions.Count < 1)
996+
{
997+
extensions = null;
998+
setOutput?.Invoke(null);
999+
}
9751000
action = true;
9761001
break;
9771002
case 1:
@@ -1097,17 +1122,6 @@ public void ExtensionHelper(
10971122
//TODO (jtikekar, 0000-00-00): change
10981123
comboBoxItems: ExtendStringification.DataTypeXsdToStringArray().ToArray(),
10991124
comboBoxMinWidth: 190,
1100-
// dead-csharp off
1101-
//new string[] {
1102-
//"anyURI", "base64Binary",
1103-
//"boolean", "date", "dateTime",
1104-
//"dateTimeStamp", "decimal", "integer", "long", "int", "short", "byte", "nonNegativeInteger",
1105-
//"positiveInteger",
1106-
//"unsignedLong", "unsignedInt", "unsignedShort", "unsignedByte",
1107-
//"nonPositiveInteger", "negativeInteger",
1108-
//"double", "duration",
1109-
//"dayTimeDuration", "yearMonthDuration", "float", "hexBinary", "string", "langString", "time" },
1110-
// dead-csharp on
11111125
setValue: v =>
11121126
{
11131127
var vt = Aas.Stringification.DataTypeDefXsdFromString((string)v);
@@ -1151,7 +1165,9 @@ public void ExtensionHelper(
11511165
substack, this.repo, extension.RefersTo, "refersTo:", "Create data element!",
11521166
v =>
11531167
{
1154-
extension.RefersTo = new List<IReference>() { new Aas.Reference(Aas.ReferenceTypes.ModelReference, new List<Aas.IKey>()) };
1168+
extension.RefersTo = new List<IReference>() {
1169+
Options.Curr.GetDefaultEmptyReference(),
1170+
};
11551171
this.AddDiaryEntry(relatedReferable, new DiaryEntryStructChange());
11561172
return new AnyUiLambdaActionRedrawEntity();
11571173
}))
@@ -1168,7 +1184,7 @@ public void ExtensionHelper(
11681184
{
11691185
if (extension.RefersTo == null)
11701186
extension.RefersTo = new List<IReference>();
1171-
extension.RefersTo.Add(new Aas.Reference(Aas.ReferenceTypes.ModelReference, new List<Aas.IKey>()));
1187+
extension.RefersTo.Add(Options.Curr.GetDefaultEmptyReference());
11721188
}
11731189

11741190
if (buttonNdx == 1 && extension.RefersTo != null)

src/AasxPackageLogic/DispEditHelperModules.cs

+14-58
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ public void DisplayOrEditEntityReferable(
113113
Aas.IReferable referable,
114114
int indexPosition,
115115
DispEditInjectAction injectToIdShort = null,
116-
bool hideExtensions = false)
116+
bool hideExtensions = false,
117+
AasxMenu superMenu = null)
117118
{
118119
// access
119120
if (stack == null || referable == null)
@@ -290,40 +291,6 @@ public void DisplayOrEditEntityReferable(
290291
setNullList: () => referable.Description = null);
291292
}
292293

293-
// Checksum
294-
#if OLD
295-
this.AddHintBubble(stack, hintMode, new[] {
296-
new HintCheck(
297-
() => referable.Checksum?.HasContent() == true,
298-
"The Checksum is deprecated. Do not plan to use this information in new developments.",
299-
breakIfTrue: true,
300-
severityLevel: HintCheck.Severity.Notice) });
301-
AddKeyValueExRef(
302-
stack, "checksum", referable, referable.Checksum, null, repo,
303-
v =>
304-
{
305-
var dr = new DiaryReference(referable);
306-
referable.Checksum = v as string;
307-
this.AddDiaryEntry(referable, new DiaryEntryStructChange(), diaryReference: dr);
308-
return new AnyUiLambdaActionNone();
309-
},
310-
auxButtonTitles: new[] { "Generate" },
311-
auxButtonToolTips: new[] { "Generate a SHA256 hashcode over this Referable" },
312-
auxButtonLambda: (i) =>
313-
{
314-
if (i == 0)
315-
{
316-
//checksum= referable.ComputeHashcode();
317-
//TODO (jtikekar, 0000-00-00): support attributes
318-
this.AddDiaryEntry(referable, new DiaryEntryStructChange());
319-
return new AnyUiLambdaActionRedrawEntity();
320-
}
321-
322-
return new AnyUiLambdaActionNone();
323-
}
324-
);
325-
#endif
326-
327294
if (!hideExtensions)
328295
{
329296
// before extension, some helpful records
@@ -336,7 +303,7 @@ public void DisplayOrEditEntityReferable(
336303
DisplayOrEditEntityListOfExtension(
337304
stack: stack, extensions: referable.Extensions,
338305
setOutput: (v) => { referable.Extensions = v; },
339-
relatedReferable: referable);
306+
relatedReferable: referable, superMenu: superMenu);
340307
}
341308
}
342309

@@ -346,7 +313,8 @@ public void DisplayOrEditEntityReferableContinue(
346313
Aas.IReferable referable,
347314
int indexPosition,
348315
DispEditInjectAction injectToIdShort = null,
349-
bool hideExtensions = false)
316+
bool hideExtensions = false,
317+
AasxMenu superMenu = null)
350318
{
351319
// access
352320
if (stack == null || referable == null)
@@ -365,7 +333,7 @@ public void DisplayOrEditEntityReferableContinue(
365333
DisplayOrEditEntityListOfExtension(
366334
stack: stack, extensions: referable.Extensions,
367335
setOutput: (v) => { referable.Extensions = v; },
368-
relatedReferable: referable);
336+
relatedReferable: referable, superMenu: superMenu);
369337
}
370338

371339
//
@@ -375,7 +343,8 @@ public void DisplayOrEditEntityReferableContinue(
375343
public void DisplayOrEditEntityListOfExtension(AnyUiStackPanel stack,
376344
List<Aas.IExtension> extensions,
377345
Action<List<Aas.IExtension>> setOutput,
378-
Aas.IReferable relatedReferable = null)
346+
Aas.IReferable relatedReferable = null,
347+
AasxMenu superMenu = null)
379348
{
380349
// access
381350
if (stack == null)
@@ -388,12 +357,16 @@ public void DisplayOrEditEntityListOfExtension(AnyUiStackPanel stack,
388357
stack, repo, extensions, "extensions:", "Create empty list of Extensions!",
389358
v =>
390359
{
391-
setOutput?.Invoke(new List<Aas.IExtension>());
360+
setOutput?.Invoke(new List<Aas.IExtension>(new[] { new Aas.Extension("") }));
392361
this.AddDiaryEntry(relatedReferable, new DiaryEntryStructChange());
393362
return new AnyUiLambdaActionRedrawEntity();
394363
}))
395364
{
396-
this.ExtensionHelper(stack, repo, extensions, setOutput, relatedReferable: relatedReferable);
365+
this.ExtensionHelper(
366+
stack, repo,
367+
extensions,
368+
setOutput,
369+
relatedReferable: relatedReferable, superMenu: superMenu);
397370
}
398371

399372
}
@@ -1172,11 +1145,6 @@ public void DisplayOrEditEntitySemanticId(AnyUiStackPanel stack,
11721145
this.AddHintBubble(
11731146
stack, hintMode,
11741147
new[] {
1175-
new HintCheck(
1176-
() => semElem.SemanticId != null && semElem.SemanticId.IsValid() != true,
1177-
"According to the specification, an existing list of elements shall contain " +
1178-
"at least one element and for each element all mandatory fields shall be " +
1179-
"not empty."),
11801148
new HintCheck(
11811149
() => { return semElem.SemanticId == null
11821150
|| semElem.SemanticId.IsEmpty(); },
@@ -1293,18 +1261,6 @@ public void DisplayOrEditEntitySemanticId(AnyUiStackPanel stack,
12931261
// lambda
12941262
var localI = i;
12951263

1296-
// hint?
1297-
this.AddHintBubble(
1298-
stack, hintMode,
1299-
new[] {
1300-
new HintCheck(
1301-
() => semElem.SupplementalSemanticIds[i] != null
1302-
&& semElem.SupplementalSemanticIds[i].IsValid() != true,
1303-
"According to the specification, an existing list of elements shall contain " +
1304-
"at least one element and for each element all mandatory fields shall be " +
1305-
"not empty.")
1306-
});
1307-
13081264
// edit field
13091265
AddKeyReference(
13101266
stack, String.Format("Suppl.Sem.Id[{0}]", i),

0 commit comments

Comments
 (0)