12
12
import org .lfenergy .compas .sct .commons .util .ActiveStatus ;
13
13
14
14
import java .util .ArrayList ;
15
- import java .util .Collection ;
16
15
import java .util .List ;
17
16
import java .util .Optional ;
18
17
import java .util .function .Predicate ;
25
24
@ Slf4j
26
25
public class LnService implements LnEditor {
27
26
27
+ private static final DoLinkedToDaFilter DAI_FILTER_MOD_STVAL = DoLinkedToDaFilter .from (MOD_DO_NAME , STVAL_DA_NAME );
28
+
28
29
public Stream <TAnyLN > getAnylns (TLDevice tlDevice ) {
29
30
return Stream .concat (Stream .of (tlDevice .getLN0 ()), tlDevice .getLN ().stream ());
30
31
}
@@ -60,33 +61,29 @@ public Optional<TLN> findLn(TLDevice tlDevice, Predicate<TLN> lnPredicate) {
60
61
* @return the Lnode Status
61
62
*/
62
63
public ActiveStatus getLnStatus (TAnyLN tAnyLN , LN0 ln0 ) {
63
- Optional <ActiveStatus > ln0Status = getDaiModStval (ln0 );
64
- return getDaiModStval (tAnyLN ).filter (ActiveStatus .OFF ::equals ).orElseGet (() -> ln0Status .orElse (ActiveStatus .OFF ));
64
+ Optional <ActiveStatus > ln0Status = getDaiModStValValue (ln0 );
65
+ return getDaiModStValValue (tAnyLN ).filter (ActiveStatus .OFF ::equals ).orElseGet (() -> ln0Status .orElse (ActiveStatus .OFF ));
65
66
}
66
67
67
- public Optional <ActiveStatus > getDaiModStval (TAnyLN tAnyLN ) {
68
- return tAnyLN
69
- .getDOI ()
68
+ public Optional <ActiveStatus > getDaiModStValValue (TAnyLN tAnyLN ) {
69
+ return getDaiModStVal (tAnyLN )
70
70
.stream ()
71
- .filter (tdoi -> MOD_DO_NAME .equals (tdoi .getName ()))
71
+ .flatMap (tdai -> tdai .getVal ().stream ())
72
+ .map (TVal ::getValue )
72
73
.findFirst ()
73
- .flatMap (tdoi -> tdoi .getSDIOrDAI ()
74
- .stream ()
75
- .filter (dai -> dai .getClass ().equals (TDAI .class ))
76
- .map (TDAI .class ::cast )
77
- .filter (tdai -> STVAL_DA_NAME .equals (tdai .getName ()))
78
- .map (TDAI ::getVal )
79
- .flatMap (Collection ::stream )
80
- .findFirst ()
81
- .map (TVal ::getValue ))
82
74
.map (ActiveStatus ::fromValue );
83
75
}
76
+
77
+ public Optional <TDAI > getDaiModStVal (TAnyLN tAnyLN ) {
78
+ return getDOAndDAInstances (tAnyLN , DAI_FILTER_MOD_STVAL );
79
+ }
80
+
84
81
public Stream <TAnyLN > getActiveLns (TLDevice tlDevice ) {
85
82
LN0 ln0 = tlDevice .getLN0 ();
86
83
Stream <TLN > tlnStream = tlDevice .getLN ()
87
84
.stream ()
88
85
.filter (tln -> ActiveStatus .ON .equals (getLnStatus (tln , ln0 )));
89
- Stream <LN0 > ln0Stream = Stream .of (ln0 ).filter (ln02 -> getDaiModStval (ln02 ).map (ActiveStatus .ON ::equals ).orElse (false ));
86
+ Stream <LN0 > ln0Stream = Stream .of (ln0 ).filter (ln02 -> getDaiModStValValue (ln02 ).map (ActiveStatus .ON ::equals ).orElse (false ));
90
87
return Stream .concat (ln0Stream , tlnStream );
91
88
}
92
89
@@ -99,7 +96,7 @@ public Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi
99
96
return tAnyLN .getDOI ().stream ().filter (doi -> doi .getName ().equals (doLinkedToDaFilter .doName ()))
100
97
.findFirst ()
101
98
.flatMap (doi -> {
102
- if (structNamesList .size () > 1 ) {
99
+ if (structNamesList .size () > 1 ) {
103
100
String firstSDIName = structNamesList .removeFirst ();
104
101
return this .getSdiByName (doi , firstSDIName )
105
102
.map (intermediateSdi -> findSDIByStructName (intermediateSdi , structNamesList ))
@@ -116,7 +113,7 @@ public Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi
116
113
return Optional .empty ();
117
114
})
118
115
.stream ().findFirst ();
119
- } else if (structNamesList .size () == 1 ){
116
+ } else if (structNamesList .size () == 1 ) {
120
117
return doi .getSDIOrDAI ().stream ()
121
118
.filter (unNaming -> unNaming .getClass ().equals (TDAI .class ))
122
119
.map (TDAI .class ::cast )
@@ -138,7 +135,7 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT
138
135
.ifPresentOrElse (tVal -> tVal .setValue (value ),
139
136
() -> tdai .getVal ().add (newVal (value )));
140
137
} else {
141
- for (DaVal daVal : daiVals ) {
138
+ for (DaVal daVal : daiVals ) {
142
139
tdai .getVal ().stream ()
143
140
.filter (tValElem -> tValElem .isSetSGroup () && tValElem .getSGroup () == daVal .settingGroup ())
144
141
.findFirst ()
@@ -198,22 +195,22 @@ private Optional<TDAI> createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject
198
195
199
196
TDOI doi = tAnyLN .getDOI ().stream ().filter (doi1 -> doi1 .getName ().equals (dataObject .getDoName ()))
200
197
.findFirst ()
201
- .orElseGet (()-> {
198
+ .orElseGet (() -> {
202
199
TDOI newDOI = new TDOI ();
203
200
newDOI .setName (dataObject .getDoName ());
204
201
tAnyLN .getDOI ().add (newDOI );
205
202
return newDOI ;
206
203
});
207
- if (structInstances .size () > 1 ){
204
+ if (structInstances .size () > 1 ) {
208
205
TSDI firstSDI = findOrCreateSDIFromDOI (doi , structInstances .getFirst ());
209
206
TSDI lastSDI = findOrCreateSDIByStructName (firstSDI , structInstances );
210
- if (structInstances .size () == 1 ){
207
+ if (structInstances .size () == 1 ) {
211
208
return lastSDI .getSDIOrDAI ().stream ()
212
209
.filter (tUnNaming -> tUnNaming .getClass ().equals (TDAI .class ))
213
210
.map (TDAI .class ::cast )
214
211
.filter (tdai -> tdai .getName ().equals (structInstances .getFirst ()))
215
212
.map (tdai -> {
216
- if (tdai .isSetValImport ()) {
213
+ if (tdai .isSetValImport ()) {
217
214
tdai .setValImport (dataAttribute .isValImport ());
218
215
}
219
216
return tdai ;
@@ -226,13 +223,13 @@ private Optional<TDAI> createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject
226
223
return Optional .of (newDAI );
227
224
});
228
225
}
229
- } else if (structInstances .size () == 1 ){
226
+ } else if (structInstances .size () == 1 ) {
230
227
return doi .getSDIOrDAI ().stream ()
231
228
.filter (tUnNaming -> tUnNaming .getClass ().equals (TDAI .class ))
232
229
.map (TDAI .class ::cast )
233
230
.filter (tdai -> tdai .getName ().equals (structInstances .getFirst ()))
234
231
.map (tdai -> {
235
- if (tdai .isSetValImport ()) tdai .setValImport (dataAttribute .isValImport ());
232
+ if (tdai .isSetValImport ()) tdai .setValImport (dataAttribute .isValImport ());
236
233
return tdai ;
237
234
})
238
235
.findFirst ()
@@ -247,7 +244,7 @@ private Optional<TDAI> createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject
247
244
}
248
245
249
246
private TSDI findSDIByStructName (TSDI tsdi , List <String > sdiNames ) {
250
- if (sdiNames .isEmpty ()) return tsdi ;
247
+ if (sdiNames .isEmpty ()) return tsdi ;
251
248
return this .getSdiByName (tsdi , sdiNames .getFirst ())
252
249
.map (sdi1 -> {
253
250
sdiNames .removeFirst ();
@@ -294,14 +291,13 @@ private Optional<TSDI> getSdiByName(TSDI sdi, String sdiName) {
294
291
}
295
292
296
293
/**
297
- *
298
- * @param sdi TSDI
294
+ * @param sdi TSDI
299
295
* @param structName list start with sdi name
300
296
* @return already existing TSDI or newly created TSDI from given TSDI
301
297
*/
302
298
private TSDI findOrCreateSDIByStructName (TSDI sdi , List <String > structName ) {
303
299
structName .removeFirst ();
304
- if (structName .isEmpty () || structName .size () == 1 ) return sdi ;
300
+ if (structName .isEmpty () || structName .size () == 1 ) return sdi ;
305
301
return findOrCreateSDIByStructName (findOrCreateSDIFromSDI (sdi , structName .getFirst ()), structName );
306
302
}
307
303
0 commit comments