1 /*
2 * Portions of this software was developed by employees of the National Institute
3 * of Standards and Technology (NIST), an agency of the Federal Government and is
4 * being made available as a public service. Pursuant to title 17 United States
5 * Code Section 105, works of NIST employees are not subject to copyright
6 * protection in the United States. This software may be subject to foreign
7 * copyright. Permission in the United States and in foreign countries, to the
8 * extent that NIST may hold copyright, to use, copy, modify, create derivative
9 * works, and distribute this software and its documentation without fee is hereby
10 * granted on a non-exclusive basis, provided that this notice and disclaimer
11 * of warranty appears in all copies.
12 *
13 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER
14 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY
15 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM
17 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE
18 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT
19 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT,
20 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM,
21 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY,
22 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR
23 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT
24 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
25 */
26
27 package gov.nist.secauto.metaschema.core.metapath.item.node;
28
29 import gov.nist.secauto.metaschema.core.metapath.format.IPathFormatter;
30 import gov.nist.secauto.metaschema.core.metapath.item.IAtomicValuedItem;
31 import gov.nist.secauto.metaschema.core.model.IFlagDefinition;
32 import gov.nist.secauto.metaschema.core.model.IFlagInstance;
33
34 import java.net.URI;
35 import java.util.Collection;
36 import java.util.Collections;
37 import java.util.List;
38 import java.util.stream.Stream;
39
40 import edu.umd.cs.findbugs.annotations.NonNull;
41 import edu.umd.cs.findbugs.annotations.Nullable;
42
43 public interface IFlagNodeItem
44 extends IDefinitionNodeItem<IFlagDefinition, IFlagInstance>, IAtomicValuedItem {
45 @Override
46 default NodeItemType getNodeItemType() {
47 return NodeItemType.FLAG;
48 }
49
50 @Override
51 default IFlagNodeItem getNodeItem() {
52 return this;
53 }
54
55 @Override
56 IFlagDefinition getDefinition();
57
58 @Override
59 IFlagInstance getInstance();
60
61 @Override
62 @Nullable
63 default URI getBaseUri() {
64 INodeItem parent = getParentNodeItem();
65 return parent == null ? null : parent.getBaseUri();
66 }
67
68 /**
69 * FlagContainer do not have flag items. This call should return an empty
70 * collection.
71 */
72 @SuppressWarnings("null")
73 @Override
74 default Collection<? extends IFlagNodeItem> getFlags() {
75 // a flag does not have flags
76 return Collections.emptyList();
77 }
78
79 /**
80 * FlagContainer do not have flag items. This call should return {@code null}.
81 */
82 @Override
83 default IFlagNodeItem getFlagByName(@NonNull String name) {
84 // a flag does not have flags
85 return null;
86 }
87
88 /**
89 * FlagContainer do not have flag items. This call should return an empty
90 * stream.
91 */
92 @SuppressWarnings("null")
93 @Override
94 default @NonNull Stream<? extends IFlagNodeItem> flags() {
95 // a flag does not have flags
96 return Stream.empty();
97 }
98
99 /**
100 * FlagContainer do not have model items. This call should return an empty
101 * collection.
102 */
103 @SuppressWarnings("null")
104 @Override
105 default @NonNull Collection<? extends List<? extends IModelNodeItem<?, ?>>> getModelItems() {
106 // a flag does not have model items
107 return Collections.emptyList();
108 }
109
110 /**
111 * FlagContainer do not have model items. This call should return an empty list.
112 */
113 @SuppressWarnings("null")
114 @Override
115 default List<? extends IModelNodeItem<?, ?>> getModelItemsByName(String name) {
116 // a flag does not have model items
117 return Collections.emptyList();
118 }
119
120 /**
121 * FlagContainer do not have model items. This call should return an empty
122 * stream.
123 */
124 @SuppressWarnings("null")
125 @NonNull
126 @Override
127 default Stream<? extends IModelNodeItem<?, ?>> modelItems() {
128 // a flag does not have model items
129 return Stream.empty();
130 }
131
132 @Override
133 default @NonNull String format(@NonNull IPathFormatter formatter) {
134 return formatter.formatFlag(this);
135 }
136
137 @Override
138 default <RESULT, CONTEXT> RESULT accept(@NonNull INodeItemVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
139 return visitor.visitFlag(this, context);
140 }
141 }