aboutsummaryrefslogtreecommitdiffstats
path: root/champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java
diff options
context:
space:
mode:
Diffstat (limited to 'champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java')
-rw-r--r--champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java b/champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java
new file mode 100644
index 0000000..81b97bd
--- /dev/null
+++ b/champ-lib/champ-core/src/main/java/org/onap/aai/champcore/model/ChampSchema.java
@@ -0,0 +1,148 @@
+/**
+ * ============LICENSE_START==========================================
+ * org.onap.aai
+ * ===================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017 Amdocs
+ * ===================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.champcore.model;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+
+import org.onap.aai.champcore.model.fluent.schema.CreateChampSchemable;
+import org.onap.aai.champcore.model.fluent.schema.impl.CreateChampSchemableImpl;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
+@JsonDeserialize(builder = ChampSchema.Builder.class)
+public final class ChampSchema {
+
+ private final Map<String, ChampObjectConstraint> objectConstraints;
+ private final Map<String, ChampRelationshipConstraint> relationshipConstraints;
+
+ private ChampSchema() {
+ throw new RuntimeException("Cannot call ChampSchema() constructor");
+ }
+
+ private ChampSchema(Builder builder) {
+ this.objectConstraints = builder.objectConstraints;
+ this.relationshipConstraints = builder.relationshipConstraints;
+ }
+
+ public static CreateChampSchemable create() {
+ return new CreateChampSchemableImpl();
+ }
+
+ public Optional<ChampObjectConstraint> getObjectConstraint(String type) {
+ if (!getObjectConstraints().containsKey(type)) return Optional.empty();
+
+ return Optional.of(getObjectConstraints().get(type));
+ }
+
+ public Optional<ChampRelationshipConstraint> getRelationshipConstraint(String type) {
+ if (!getRelationshipConstraints().containsKey(type)) return Optional.empty();
+
+ return Optional.of(getRelationshipConstraints().get(type));
+ }
+
+ public Map<String, ChampObjectConstraint> getObjectConstraints() {
+ return objectConstraints;
+ }
+
+ public Map<String, ChampRelationshipConstraint> getRelationshipConstraints() {
+ return relationshipConstraints;
+ }
+
+ @JsonPOJOBuilder(buildMethodName = "build", withPrefix = "")
+ public static class Builder {
+ private Map<String, ChampObjectConstraint> objectConstraints = new HashMap<String, ChampObjectConstraint> ();
+ private Map<String, ChampRelationshipConstraint> relationshipConstraints = new HashMap<String, ChampRelationshipConstraint> ();
+
+ public Builder() {}
+
+ public Builder(ChampSchema schema) {
+ objectConstraints.putAll(schema.getObjectConstraints());
+ relationshipConstraints.putAll(schema.getRelationshipConstraints());
+ }
+
+ public Builder objectConstraints(Map<String, ChampObjectConstraint> objectConstraints) {
+ this.objectConstraints.putAll(objectConstraints);
+ return this;
+ }
+
+ public Builder relationshipConstraints(Map<String, ChampRelationshipConstraint> relationshipConstraints) {
+ this.relationshipConstraints.putAll(relationshipConstraints);
+ return this;
+ }
+
+ @JsonIgnore
+ public Builder constraint(ChampObjectConstraint objConstraint) {
+ objectConstraints.put(objConstraint.getType(), objConstraint);
+ return this;
+ }
+
+ @JsonIgnore
+ public Builder constraint(ChampRelationshipConstraint relConstraint) {
+ relationshipConstraints.put(relConstraint.getType(), relConstraint);
+ return this;
+ }
+
+ public ChampSchema build() {
+ return new ChampSchema(this);
+ }
+ }
+
+ @Override
+ public boolean equals(Object schema) {
+ if (schema instanceof ChampSchema) {
+
+ for (Entry<String, ChampObjectConstraint> objConstraint : getObjectConstraints().entrySet()) {
+ final Optional<ChampObjectConstraint> champObjConstraint = ((ChampSchema) schema).getObjectConstraint(objConstraint.getKey());
+
+ if (!champObjConstraint.isPresent() ||
+ !champObjConstraint.get().equals(objConstraint.getValue())) return false;
+ }
+
+ for (Entry<String, ChampRelationshipConstraint> relConstraint : getRelationshipConstraints().entrySet()) {
+ final Optional<ChampRelationshipConstraint> champRelConstraint = ((ChampSchema) schema).getRelationshipConstraint(relConstraint.getKey());
+
+ if (!champRelConstraint.isPresent() ||
+ !champRelConstraint.get().equals(relConstraint.getValue())) return false;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "{objectConstraints: " + getObjectConstraints() +
+ ", relationshipConstraints: " + getRelationshipConstraints() +
+ "}";
+ }
+
+ public static ChampSchema emptySchema() {
+ return new ChampSchema.Builder().build();
+ }
+}