summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/onap/clamp/clds/Application.java2
-rw-r--r--src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java1
-rw-r--r--src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java2
-rw-r--r--src/main/java/org/onap/clamp/configuration/CamelGsonConfiguration.java63
-rw-r--r--src/main/java/org/onap/clamp/loop/Loop.java (renamed from src/main/java/org/onap/clamp/dao/model/Loop.java)56
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopController.java70
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopService.java91
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopState.java (renamed from src/main/java/org/onap/clamp/dao/model/LoopState.java)2
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopsRepository.java (renamed from src/main/java/org/onap/clamp/dao/LoopsRepository.java)7
-rw-r--r--src/main/java/org/onap/clamp/loop/log/LogType.java (renamed from src/main/java/org/onap/clamp/dao/model/LogType.java)2
-rw-r--r--src/main/java/org/onap/clamp/loop/log/LoopLog.java (renamed from src/main/java/org/onap/clamp/dao/model/LoopLog.java)3
-rw-r--r--src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java (renamed from src/main/java/org/onap/clamp/dao/LoopLogRepository.java)3
-rw-r--r--src/main/java/org/onap/clamp/policy/Policy.java35
-rw-r--r--src/main/java/org/onap/clamp/policy/PolicyService.java36
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java (renamed from src/main/java/org/onap/clamp/dao/model/MicroServicePolicy.java)21
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java (renamed from src/main/java/org/onap/clamp/dao/MicroServicePolicyRepository.java)5
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java79
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java (renamed from src/main/java/org/onap/clamp/dao/model/OperationalPolicy.java)32
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java (renamed from src/main/java/org/onap/clamp/dao/OperationalPolicyRepository.java)7
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java66
-rw-r--r--src/main/resources/clds/camel/rest/clamp-api-v2.xml34
-rw-r--r--src/main/resources/clds/camel/rest/clds-services.xml56
-rw-r--r--src/test/java/org/onap/clamp/clds/it/HttpsItCase.java2
-rw-r--r--src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java (renamed from src/test/java/org/onap/clamp/it/dao/model/LoopRepositoriesItCase.java)45
-rw-r--r--src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java270
-rw-r--r--src/test/java/org/onap/clamp/loop/LoopToJsonTest.java (renamed from src/test/java/org/onap/clamp/dao/model/LoopToJsonTest.java)33
26 files changed, 899 insertions, 124 deletions
diff --git a/src/main/java/org/onap/clamp/clds/Application.java b/src/main/java/org/onap/clamp/clds/Application.java
index 920b0f28c..7e78504ff 100644
--- a/src/main/java/org/onap/clamp/clds/Application.java
+++ b/src/main/java/org/onap/clamp/clds/Application.java
@@ -108,7 +108,7 @@ public class Application extends SpringBootServletInitializer {
eelfLogger.info(ResourceFileUtil.getResourceAsString("boot-message.txt") + "(v"
+ ClampVersioning.getCldsVersionFromProps() + ")" + System.getProperty("line.separator"));
ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(),
- "/restservices/clds/v1/*");
+ "/restservices/clds/*");
registration.setName("CamelServlet");
return registration;
}
diff --git a/src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java b/src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java
index 8bc6f69dc..c91494df5 100644
--- a/src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java
+++ b/src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java
@@ -58,6 +58,7 @@ public class AAFConfiguration {
registration.addUrlPatterns("/restservices/clds/v1/tosca/*");
registration.addUrlPatterns("/restservices/clds/v1/dictionary/*");
registration.addUrlPatterns("/restservices/clds/v1/user/*");
+ registration.addUrlPatterns("/restservices/clds/v2/loop/*");
//registration.addUrlPatterns("*");
registration.setName("cadiFilter");
registration.setOrder(0);
diff --git a/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java b/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java
index 45c945c4f..f10565049 100644
--- a/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java
+++ b/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java
@@ -36,7 +36,7 @@ public class CamelConfiguration extends RouteBuilder {
// turn on swagger api-doc
.apiContextPath("api-doc").apiVendorExtension(true).apiProperty("api.title", "Clamp Rest API")
.apiProperty("api.version", ClampVersioning.getCldsVersionFromProps())
- .apiProperty("base.path", "/restservices/clds/v1/");
+ .apiProperty("base.path", "/restservices/clds/");
// .apiProperty("cors", "true");
}
}
diff --git a/src/main/java/org/onap/clamp/configuration/CamelGsonConfiguration.java b/src/main/java/org/onap/clamp/configuration/CamelGsonConfiguration.java
new file mode 100644
index 000000000..f71d2f091
--- /dev/null
+++ b/src/main/java/org/onap/clamp/configuration/CamelGsonConfiguration.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.configuration;
+
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+import com.google.gson.annotations.Expose;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.apache.camel.component.gson.GsonDataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class CamelGsonConfiguration {
+
+ @Bean
+ public List<DataFormatCustomizer<GsonDataFormat>> provideGsonCustomizers() {
+ DataFormatCustomizer<GsonDataFormat> dataFormatCustomizer = dataformat ->
+ dataformat.setExclusionStrategies(
+ Collections.singletonList(new ExcludeFieldsWithoutExposedAnnotation())
+ );
+ return Collections.singletonList(dataFormatCustomizer);
+ }
+
+ private static class ExcludeFieldsWithoutExposedAnnotation implements ExclusionStrategy {
+
+ @Override
+ public boolean shouldSkipField(FieldAttributes f) {
+ return Optional.ofNullable(f.getAnnotation(Expose.class))
+ .map(expose -> !expose.serialize())
+ .orElse(true);
+ }
+
+ @Override
+ public boolean shouldSkipClass(Class<?> clazz) {
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/org/onap/clamp/dao/model/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java
index 78175cc52..910c5aad3 100644
--- a/src/main/java/org/onap/clamp/dao/model/Loop.java
+++ b/src/main/java/org/onap/clamp/loop/Loop.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.loop;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
@@ -46,6 +46,9 @@ import javax.persistence.Table;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
+import org.onap.clamp.loop.log.LoopLog;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
@Entity
@@ -75,7 +78,6 @@ public class Loop implements Serializable {
@Column(name = "dcae_blueprint_id")
private String dcaeBlueprintId;
- @Expose
@Column(name = "svg_representation")
private String svgRepresentation;
@@ -84,7 +86,6 @@ public class Loop implements Serializable {
@Column(columnDefinition = "json", name = "global_properties_json")
private JsonObject globalPropertiesJson;
- @Expose
@Column(nullable = false, name = "blueprint_yaml")
private String blueprint;
@@ -106,11 +107,22 @@ public class Loop implements Serializable {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop")
private Set<LoopLog> loopLogs = new HashSet<>();
+ public Loop() {
+ }
+
+ public Loop(String name, String blueprint, String svgRepresentation) {
+ this.name = name;
+ this.svgRepresentation = svgRepresentation;
+ this.blueprint = blueprint;
+ this.lastComputedState = LoopState.DESIGN;
+ this.globalPropertiesJson = new JsonObject();
+ }
+
public String getName() {
return name;
}
- public void setName(String name) {
+ void setName(String name) {
this.name = name;
}
@@ -118,7 +130,7 @@ public class Loop implements Serializable {
return dcaeDeploymentId;
}
- public void setDcaeDeploymentId(String dcaeDeploymentId) {
+ void setDcaeDeploymentId(String dcaeDeploymentId) {
this.dcaeDeploymentId = dcaeDeploymentId;
}
@@ -126,7 +138,7 @@ public class Loop implements Serializable {
return dcaeDeploymentStatusUrl;
}
- public void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) {
+ void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) {
this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl;
}
@@ -134,7 +146,7 @@ public class Loop implements Serializable {
return svgRepresentation;
}
- public void setSvgRepresentation(String svgRepresentation) {
+ void setSvgRepresentation(String svgRepresentation) {
this.svgRepresentation = svgRepresentation;
}
@@ -142,61 +154,61 @@ public class Loop implements Serializable {
return blueprint;
}
- public void setBlueprint(String blueprint) {
+ void setBlueprint(String blueprint) {
this.blueprint = blueprint;
}
- public LoopState getLastComputedState() {
+ LoopState getLastComputedState() {
return lastComputedState;
}
- public void setLastComputedState(LoopState lastComputedState) {
+ void setLastComputedState(LoopState lastComputedState) {
this.lastComputedState = lastComputedState;
}
- public Set<OperationalPolicy> getOperationalPolicies() {
+ Set<OperationalPolicy> getOperationalPolicies() {
return operationalPolicies;
}
- public void setOperationalPolicies(Set<OperationalPolicy> operationalPolicies) {
+ void setOperationalPolicies(Set<OperationalPolicy> operationalPolicies) {
this.operationalPolicies = operationalPolicies;
}
- public Set<MicroServicePolicy> getMicroServicePolicies() {
+ Set<MicroServicePolicy> getMicroServicePolicies() {
return microServicePolicies;
}
- public void setMicroServicePolicies(Set<MicroServicePolicy> microServicePolicies) {
+ void setMicroServicePolicies(Set<MicroServicePolicy> microServicePolicies) {
this.microServicePolicies = microServicePolicies;
}
- public JsonObject getGlobalPropertiesJson() {
+ JsonObject getGlobalPropertiesJson() {
return globalPropertiesJson;
}
- public void setGlobalPropertiesJson(JsonObject globalPropertiesJson) {
+ void setGlobalPropertiesJson(JsonObject globalPropertiesJson) {
this.globalPropertiesJson = globalPropertiesJson;
}
- public Set<LoopLog> getLoopLogs() {
+ Set<LoopLog> getLoopLogs() {
return loopLogs;
}
- public void setLoopLogs(Set<LoopLog> loopLogs) {
+ void setLoopLogs(Set<LoopLog> loopLogs) {
this.loopLogs = loopLogs;
}
- public void addOperationalPolicy(OperationalPolicy opPolicy) {
- opPolicy.setLoop(this);
+ void addOperationalPolicy(OperationalPolicy opPolicy) {
operationalPolicies.add(opPolicy);
+ opPolicy.setLoop(this);
}
- public void addMicroServicePolicy(MicroServicePolicy microServicePolicy) {
+ void addMicroServicePolicy(MicroServicePolicy microServicePolicy) {
microServicePolicies.add(microServicePolicy);
microServicePolicy.getUsedByLoops().add(this);
}
- public void addLog(LoopLog log) {
+ void addLog(LoopLog log) {
loopLogs.add(log);
log.setLoop(this);
}
diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java
new file mode 100644
index 000000000..eeb6105b1
--- /dev/null
+++ b/src/main/java/org/onap/clamp/loop/LoopController.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import com.google.gson.JsonArray;
+import com.google.gson.reflect.TypeToken;
+import java.lang.reflect.Type;
+import java.util.List;
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+
+
+@Controller
+public class LoopController {
+
+ private final LoopService loopService;
+ private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {
+ }.getType();
+ private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {
+ }.getType();
+
+ @Autowired
+ public LoopController(LoopService loopService) {
+ this.loopService = loopService;
+ }
+
+ public List<String> getLoopNames() {
+ return loopService.getClosedLoopNames();
+ }
+
+ public Loop getLoop(String loopName) {
+ return loopService.getLoop(loopName);
+ }
+
+ public Loop updateOperationalPolicies(String loopName, JsonArray operationalPoliciesJson) {
+ List<OperationalPolicy> operationalPolicies = JsonUtils.GSON
+ .fromJson(operationalPoliciesJson, OPERATIONAL_POLICY_TYPE);
+ return loopService.updateOperationalPolicies(loopName, operationalPolicies);
+ }
+
+ public Loop updateMicroservicePolicies(String loopName, JsonArray microServicePoliciesJson) {
+ List<MicroServicePolicy> microservicePolicies = JsonUtils.GSON
+ .fromJson(microServicePoliciesJson, MICROSERVICE_POLICY_TYPE);
+ return loopService.updateMicroservicePolicies(loopName, microservicePolicies);
+ }
+}
diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java
new file mode 100644
index 000000000..7b79c112e
--- /dev/null
+++ b/src/main/java/org/onap/clamp/loop/LoopService.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import java.util.List;
+import java.util.Set;
+import javax.persistence.EntityNotFoundException;
+import org.onap.clamp.policy.microservice.MicroservicePolicyService;
+import org.onap.clamp.policy.operational.OperationalPolicyService;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LoopService {
+
+ private final LoopsRepository loopsRepository;
+ private final MicroservicePolicyService microservicePolicyService;
+ private final OperationalPolicyService operationalPolicyService;
+
+ public LoopService(LoopsRepository loopsRepository,
+ MicroservicePolicyService microservicePolicyService,
+ OperationalPolicyService operationalPolicyService) {
+ this.loopsRepository = loopsRepository;
+ this.microservicePolicyService = microservicePolicyService;
+ this.operationalPolicyService = operationalPolicyService;
+ }
+
+ Loop addNewLoop(Loop loop) {
+ return loopsRepository.save(loop);
+ }
+
+ List<String> getClosedLoopNames() {
+ return loopsRepository.getAllLoopNames();
+ }
+
+ Loop getLoop(String loopName){
+ return loopsRepository
+ .findById(loopName)
+ .orElse(null);
+ }
+
+ String getClosedLoopModelSVG(String loopName) {
+ Loop closedLoopByName = findClosedLoopByName(loopName);
+ return closedLoopByName.getSvgRepresentation();
+ }
+
+ Loop updateOperationalPolicies(String loopName, List<OperationalPolicy> newOperationalPolicies) {
+ Loop loop = findClosedLoopByName(loopName);
+ Set<OperationalPolicy> newPolicies = operationalPolicyService
+ .updatePolicies(loop, newOperationalPolicies);
+
+ loop.setOperationalPolicies(newPolicies);
+ return loopsRepository.save(loop);
+ }
+
+ Loop updateMicroservicePolicies(String loopName, List<MicroServicePolicy> newMicroservicePolicies) {
+ Loop loop = findClosedLoopByName(loopName);
+ Set<MicroServicePolicy> newPolicies = microservicePolicyService
+ .updatePolicies(loop, newMicroservicePolicies);
+
+ loop.setMicroServicePolicies(newPolicies);
+ return loopsRepository.save(loop);
+ }
+
+ private Loop findClosedLoopByName(String loopName) {
+ return loopsRepository.findById(loopName)
+ .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName));
+ }
+}
diff --git a/src/main/java/org/onap/clamp/dao/model/LoopState.java b/src/main/java/org/onap/clamp/loop/LoopState.java
index 1cde0aa9e..4707730ce 100644
--- a/src/main/java/org/onap/clamp/dao/model/LoopState.java
+++ b/src/main/java/org/onap/clamp/loop/LoopState.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.loop;
public enum LoopState {
DESIGN, SUBMITTED, DEPLOYED, RUNNING, STOPPED, IN_ERROR, WAITING;
diff --git a/src/main/java/org/onap/clamp/dao/LoopsRepository.java b/src/main/java/org/onap/clamp/loop/LoopsRepository.java
index 51019baac..37c47622f 100644
--- a/src/main/java/org/onap/clamp/dao/LoopsRepository.java
+++ b/src/main/java/org/onap/clamp/loop/LoopsRepository.java
@@ -21,13 +21,16 @@
*
*/
-package org.onap.clamp.dao;
+package org.onap.clamp.loop;
-import org.onap.clamp.dao.model.Loop;
+import java.util.List;
+import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface LoopsRepository extends CrudRepository<Loop, String> {
+ @Query("SELECT loop.name FROM Loop as loop")
+ List<String> getAllLoopNames();
}
diff --git a/src/main/java/org/onap/clamp/dao/model/LogType.java b/src/main/java/org/onap/clamp/loop/log/LogType.java
index 1a8ed36cd..13d9dccf8 100644
--- a/src/main/java/org/onap/clamp/dao/model/LogType.java
+++ b/src/main/java/org/onap/clamp/loop/log/LogType.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.loop.log;
public enum LogType {
INFO, WARNING, ERROR;
diff --git a/src/main/java/org/onap/clamp/dao/model/LoopLog.java b/src/main/java/org/onap/clamp/loop/log/LoopLog.java
index ba88bbee4..7b7fe1b1c 100644
--- a/src/main/java/org/onap/clamp/dao/model/LoopLog.java
+++ b/src/main/java/org/onap/clamp/loop/log/LoopLog.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.loop.log;
import com.google.gson.annotations.Expose;
@@ -40,6 +40,7 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
+import org.onap.clamp.loop.Loop;
/**
*
diff --git a/src/main/java/org/onap/clamp/dao/LoopLogRepository.java b/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java
index 199a25e87..103341fa5 100644
--- a/src/main/java/org/onap/clamp/dao/LoopLogRepository.java
+++ b/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java
@@ -21,9 +21,8 @@
*
*/
-package org.onap.clamp.dao;
+package org.onap.clamp.loop.log;
-import org.onap.clamp.dao.model.LoopLog;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java
new file mode 100644
index 000000000..13ba1a9f1
--- /dev/null
+++ b/src/main/java/org/onap/clamp/policy/Policy.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+
+package org.onap.clamp.policy;
+
+import com.google.gson.JsonObject;
+
+public interface Policy {
+
+ String getName();
+
+ JsonObject getJsonRepresentation();
+
+}
diff --git a/src/main/java/org/onap/clamp/policy/PolicyService.java b/src/main/java/org/onap/clamp/policy/PolicyService.java
new file mode 100644
index 000000000..05785c045
--- /dev/null
+++ b/src/main/java/org/onap/clamp/policy/PolicyService.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy;
+
+import java.util.List;
+import java.util.Set;
+import org.onap.clamp.loop.Loop;
+
+public interface PolicyService<T extends Policy> {
+
+ Set<T> updatePolicies(Loop loop,
+ List<T> newMicroservicePolicies);
+
+ boolean isExisting(String policyName);
+}
diff --git a/src/main/java/org/onap/clamp/dao/model/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
index 8ea6d2650..e5b333dbb 100644
--- a/src/main/java/org/onap/clamp/dao/model/MicroServicePolicy.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.policy.microservice;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
@@ -39,12 +39,14 @@ import javax.persistence.Table;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
+import org.onap.clamp.loop.Loop;
+import org.onap.clamp.policy.Policy;
import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
@Entity
@Table(name = "micro_service_policies")
@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) })
-public class MicroServicePolicy implements Serializable {
+public class MicroServicePolicy implements Serializable, Policy {
/**
*
*/
@@ -76,12 +78,21 @@ public class MicroServicePolicy implements Serializable {
@ManyToMany(mappedBy = "microServicePolicies")
private Set<Loop> usedByLoops = new HashSet<>();
- public String getName() {
- return name;
+ public MicroServicePolicy() {
+ //serialization
}
- public void setName(String name) {
+ public MicroServicePolicy(String name, String policyTosca, Boolean shared, JsonObject jsonRepresentation,
+ Set<Loop> usedByLoops) {
this.name = name;
+ this.policyTosca = policyTosca;
+ this.shared = shared;
+ this.jsonRepresentation = jsonRepresentation;
+ this.usedByLoops = usedByLoops;
+ }
+
+ public String getName() {
+ return name;
}
public JsonObject getProperties() {
diff --git a/src/main/java/org/onap/clamp/dao/MicroServicePolicyRepository.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java
index 1bdaf3e5e..f658aacc3 100644
--- a/src/main/java/org/onap/clamp/dao/MicroServicePolicyRepository.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java
@@ -21,13 +21,12 @@
*
*/
-package org.onap.clamp.dao;
+package org.onap.clamp.policy.microservice;
-import org.onap.clamp.dao.model.MicroServicePolicy;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
-public interface MicroServicePolicyRepository extends CrudRepository<MicroServicePolicy, String> {
+interface MicroServicePolicyRepository extends CrudRepository<MicroServicePolicy, String> {
}
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java
new file mode 100644
index 000000000..91794b754
--- /dev/null
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java
@@ -0,0 +1,79 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.microservice;
+
+import com.google.common.collect.Sets;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.onap.clamp.policy.PolicyService;
+import org.onap.clamp.loop.Loop;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class MicroservicePolicyService implements PolicyService<MicroServicePolicy> {
+
+ private final MicroServicePolicyRepository repository;
+
+ @Autowired
+ public MicroservicePolicyService(MicroServicePolicyRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ @Transactional
+ public Set<MicroServicePolicy> updatePolicies(Loop loop,
+ List<MicroServicePolicy> newMicroservicePolicies) {
+ return newMicroservicePolicies
+ .stream()
+ .map(policy ->
+ getAndUpdateMicroServicePolicy(loop, policy))
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public boolean isExisting(String policyName) {
+ return repository.existsById(policyName);
+ }
+
+ private MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) {
+ return repository
+ .findById(policy.getName())
+ .map(p -> updateMicroservicePolicyProperties(p, policy, loop))
+ .orElse(new MicroServicePolicy(policy.getName(), policy.getPolicyTosca(),
+ policy.getShared(), policy.getJsonRepresentation(),
+ Sets.newHashSet(loop)));
+ }
+
+ private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy,
+ MicroServicePolicy newPolicy, Loop loop) {
+ oldPolicy.setJsonRepresentation(newPolicy.getJsonRepresentation());
+ if (oldPolicy.getUsedByLoops().contains(loop)) {
+ oldPolicy.getUsedByLoops().add(loop);
+ }
+ return oldPolicy;
+ }
+}
diff --git a/src/main/java/org/onap/clamp/dao/model/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
index ba2c442c7..033b53972 100644
--- a/src/main/java/org/onap/clamp/dao/model/OperationalPolicy.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
@@ -21,37 +21,38 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.policy.operational;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
-
import java.io.Serializable;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
-
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
+import org.onap.clamp.loop.Loop;
+import org.onap.clamp.policy.Policy;
import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
@Entity
@Table(name = "operational_policies")
@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) })
-public class OperationalPolicy implements Serializable {
+public class OperationalPolicy implements Serializable, Policy {
/**
*
*/
private static final long serialVersionUID = 6117076450841538255L;
- @Expose
@Id
+ @Expose
@Column(nullable = false, name = "name", unique = true)
private String name;
@@ -64,20 +65,31 @@ public class OperationalPolicy implements Serializable {
@JoinColumn(name = "loop_id", nullable = false)
private Loop loop;
- public Loop getLoop() {
- return loop;
+ public OperationalPolicy() {
+ //Serialization
}
- public void setLoop(Loop loop) {
+ public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) {
+ this.name = name;
this.loop = loop;
+ this.configurationsJson = configurationsJson;
}
public String getName() {
return name;
}
- public void setName(String name) {
- this.name = name;
+ public void setLoop(Loop loopName) {
+ this.loop = loopName;
+ }
+
+ public Loop getLoop(){
+ return loop;
+ }
+
+ @Override
+ public JsonObject getJsonRepresentation() {
+ return configurationsJson;
}
public JsonObject getConfigurationsJson() {
diff --git a/src/main/java/org/onap/clamp/dao/OperationalPolicyRepository.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java
index cf03a812e..97b183f72 100644
--- a/src/main/java/org/onap/clamp/dao/OperationalPolicyRepository.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java
@@ -21,13 +21,12 @@
*
*/
-package org.onap.clamp.dao;
+package org.onap.clamp.policy.operational;
-import org.onap.clamp.dao.model.OperationalPolicy;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
-public interface OperationalPolicyRepository extends CrudRepository<OperationalPolicy, String> {
-
+interface OperationalPolicyRepository extends CrudRepository<OperationalPolicy, String> {
+ void deleteByName(String policyName);
}
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java
new file mode 100644
index 000000000..b24a2db11
--- /dev/null
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.operational;
+
+import com.google.gson.JsonObject;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.onap.clamp.policy.PolicyService;
+import org.onap.clamp.loop.Loop;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class OperationalPolicyService implements PolicyService<OperationalPolicy> {
+
+ private final OperationalPolicyRepository repository;
+
+ @Autowired
+ public OperationalPolicyService(OperationalPolicyRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ public Set<OperationalPolicy> updatePolicies(Loop loop, List<OperationalPolicy> operationalPolicies) {
+ return operationalPolicies
+ .stream()
+ .map(policy ->
+ repository
+ .findById(policy.getName())
+ .map(p -> setConfigurationJson(p, policy.getConfigurationsJson()))
+ .orElse(new OperationalPolicy(policy.getName(), loop, policy.getConfigurationsJson())))
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public boolean isExisting(String policyName) {
+ return repository.existsById(policyName);
+ }
+
+ private OperationalPolicy setConfigurationJson(OperationalPolicy policy, JsonObject configurationsJson) {
+ policy.setConfigurationsJson(configurationsJson);
+ return policy;
+ }
+}
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
new file mode 100644
index 000000000..0a72a0c12
--- /dev/null
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -0,0 +1,34 @@
+<rests xmlns="http://camel.apache.org/schema/spring" >
+ <rest >
+ <get uri="/v2/loop/getAllNames"
+ outType="java.lang.String[]"
+ produces="application/json">
+ <to
+ uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
+ </get>
+ <get uri="/v2/loop/{loopName}"
+ outType="org.onap.clamp.loop.Loop"
+
+ produces="application/json">
+ <to
+ uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+ </get>
+ <post uri="/v2/loop/updateOperationalPolicies/{loopName}"
+ type="com.google.gson.JsonArray"
+ consumes="application/json"
+ outType="org.onap.clamp.loop.Loop"
+ produces="application/json">
+ <to
+ uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${body})" />
+ </post>
+ <post uri="/v2/loop/updateMicroservicePolicies/{loopName}"
+ type="com.google.gson.JsonArray"
+ consumes="application/json"
+ outType="org.onap.clamp.loop.Loop"
+ produces="application/json">
+ <to
+ uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicies(${header.loopName},${body})" />
+ </post>
+ </rest>
+</rests>
+
diff --git a/src/main/resources/clds/camel/rest/clds-services.xml b/src/main/resources/clds/camel/rest/clds-services.xml
index 7abffd35d..d4baa09a9 100644
--- a/src/main/resources/clds/camel/rest/clds-services.xml
+++ b/src/main/resources/clds/camel/rest/clds-services.xml
@@ -1,36 +1,36 @@
<rests xmlns="http://camel.apache.org/schema/spring">
- <rest>
- <get uri="/clds/cldsDetails"
+ <rest >
+ <get uri="/v1/clds/cldsDetails"
outType="org.onap.clamp.clds.model.CldsMonitoringDetails"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getCldsDetails()" />
</get>
- <get uri="/clds/cldsInfo"
+ <get uri="/v1/clds/cldsInfo"
outType="org.onap.clamp.clds.model.CldsInfo"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getCldsInfo()" />
</get>
- <get uri="/healthcheck" produces="application/json">
+ <get uri="/v1/healthcheck" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsHealthcheckService?method=gethealthcheck()" />
</get>
- <get uri="/clds/model/bpmn/{modelName}" produces="text/xml">
+ <get uri="/v1/clds/model/bpmn/{modelName}" produces="text/xml">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getBpmnXml(${header.modelName})" />
</get>
- <get uri="/clds/model/image/{modelName}" produces="text/xml">
+ <get uri="/v1/clds/model/image/{modelName}" produces="text/xml">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getImageXml(${header.modelName})" />
</get>
- <get uri="/clds/model/{modelName}"
+ <get uri="/v1/clds/model/{modelName}"
outType="org.onap.clamp.clds.model.CldsModel"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getModel(${header.modelName})" />
</get>
- <put uri="/clds/model/{modelName}"
+ <put uri="/v1/clds/model/{modelName}"
type="org.onap.clamp.clds.model.CldsModel"
consumes="application/json"
outType="org.onap.clamp.clds.model.CldsModel"
@@ -38,35 +38,35 @@
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=putModel(${header.modelName},${body})" />
</put>
- <get uri="/clds/model-names"
+ <get uri="/v1/clds/model-names"
outType="org.onap.clamp.clds.model.ValueItem"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getModelNames()" />
</get>
- <put uri="/clds/action/{action}/{modelName}?test={test}"
+ <put uri="/v1/clds/action/{action}/{modelName}?test={test}"
type="org.onap.clamp.clds.model.CldsModel"
consumes="application/json" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=putModelAndProcessAction(${header.action},${header.modelName},${header.test},${body})" />
</put>
- <post uri="/clds/dcae/event?test={test}"
+ <post uri="/v1/clds/dcae/event?test={test}"
type="org.onap.clamp.clds.model.DcaeEvent"
consumes="application/json" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=postDcaeEvent(${header.test},${body})" />
</post>
- <get uri="/clds/properties" produces="application/json">
+ <get uri="/v1/clds/properties" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcProperties()" />
</get>
- <put uri="/clds/deploy/{modelName}"
+ <put uri="/v1/clds/deploy/{modelName}"
type="org.onap.clamp.clds.model.CldsModel"
consumes="application/json" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsService?method=deployModel(${header.modelName},${body})" />
</put>
- <put uri="/clds/undeploy/{modelName}"
+ <put uri="/v1/clds/undeploy/{modelName}"
type="org.onap.clamp.clds.model.CldsModel"
consumes="application/json" produces="application/json">
<to
@@ -76,23 +76,23 @@
- <get uri="/cldsTempate/template/bpmn/{templateName}"
+ <get uri="/v1/cldsTempate/template/bpmn/{templateName}"
produces="text/xml">
<to
uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getBpmnTemplate(${header.templateName})" />
</get>
- <get uri="/cldsTempate/template/image/{templateName}"
+ <get uri="/v1/cldsTempate/template/image/{templateName}"
produces="text/xml">
<to
uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getImageXml(${header.templateName})" />
</get>
- <get uri="/cldsTempate/template/{templateName}"
+ <get uri="/v1/cldsTempate/template/{templateName}"
outType="org.onap.clamp.clds.model.CldsTemplate"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getTemplate(${header.templateName})" />
</get>
- <put uri="/cldsTempate/template/{templateName}"
+ <put uri="/v1/cldsTempate/template/{templateName}"
type="org.onap.clamp.clds.model.CldsTemplate"
consumes="application/json"
outType="org.onap.clamp.clds.model.CldsTemplate"
@@ -100,7 +100,7 @@
<to
uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=putTemplate(${header.templateName},${body})" />
</put>
- <get uri="/cldsTempate/template-names"
+ <get uri="/v1/cldsTempate/template-names"
outType="org.onap.clamp.clds.model.ValueItem"
produces="application/json">
<to
@@ -108,25 +108,25 @@
</get>
- <put uri="/tosca/models/{toscaModelName}"
+ <put uri="/v1/tosca/models/{toscaModelName}"
type="org.onap.clamp.clds.model.CldsToscaModel"
consumes="application/json" produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=parseToscaModelAndSave(${header.toscaModelName},${body})" />
</put>
- <get uri="/tosca/models/policyType/{policyType}"
+ <get uri="/v1/tosca/models/policyType/{policyType}"
outType="org.onap.clamp.clds.model.CldsToscaModel"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=getToscaModelsByPolicyType(${header.policyType})" />
</get>
- <get uri="/tosca/models"
+ <get uri="/v1/tosca/models"
outType="org.onap.clamp.clds.model.CldsToscaModel"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=getAllToscaModels()" />
</get>
- <get uri="/tosca/models/{toscaModelName}"
+ <get uri="/v1/tosca/models/{toscaModelName}"
outType="org.onap.clamp.clds.model.CldsToscaModel"
produces="application/json">
<to
@@ -134,7 +134,7 @@
</get>
- <put uri="/dictionary/{dictionaryName}"
+ <put uri="/v1/dictionary/{dictionaryName}"
type="org.onap.clamp.clds.model.CldsDictionary"
outType="org.onap.clamp.clds.model.CldsDictionary"
consumes="application/json" produces="application/json">
@@ -142,14 +142,14 @@
uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=createOrUpdateDictionary(${header.dictionaryName},${body})" />
</put>
- <get uri="/dictionary"
+ <get uri="/v1/dictionary"
outType="org.onap.clamp.clds.model.CldsDictionary"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=getAllDictionaryNames()" />
</get>
- <put uri="/dictionary/{dictionaryName}/items"
+ <put uri="/v1/dictionary/{dictionaryName}/items"
type="org.onap.clamp.clds.model.CldsDictionaryItem"
outType="org.onap.clamp.clds.model.CldsDictionaryItem"
consumes="application/json" produces="application/json">
@@ -157,14 +157,14 @@
uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=createOrUpdateDictionaryElements(${header.dictionaryName},${body})" />
</put>
- <get uri="/dictionary/{dictionaryName}/items"
+ <get uri="/v1/dictionary/{dictionaryName}/items"
outType="org.onap.clamp.clds.model.CldsDictionary"
produces="application/json">
<to
uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=getDictionaryElementsByName(${header.dictionaryName})" />
</get>
- <get uri="/user/getUser" produces="text/plain">
+ <get uri="/v1/user/getUser" produces="text/plain">
<to
uri="bean:org.onap.clamp.clds.service.UserService?method=getUser()" />
</get>
diff --git a/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java b/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java
index 81b6b835b..57dbcf7a4 100644
--- a/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java
@@ -130,7 +130,7 @@ public class HttpsItCase {
});
template.setRequestFactory(factory);
ResponseEntity<String> httpsEntity = template
- .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/v1/api-doc", String.class);
+ .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/api-doc", String.class);
assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(httpsEntity.getBody()).contains("swagger");
FileUtils.writeStringToFile(
diff --git a/src/test/java/org/onap/clamp/it/dao/model/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java
index 8a523fc0f..c524eec39 100644
--- a/src/test/java/org/onap/clamp/it/dao/model/LoopRepositoriesItCase.java
+++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.it.dao.model;
+package org.onap.clamp.loop;
import static org.assertj.core.api.Assertions.assertThat;
@@ -31,19 +31,17 @@ import com.google.gson.JsonObject;
import java.time.Instant;
+import java.util.HashSet;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.onap.clamp.clds.Application;
-import org.onap.clamp.dao.LoopLogRepository;
-import org.onap.clamp.dao.LoopsRepository;
-import org.onap.clamp.dao.MicroServicePolicyRepository;
-import org.onap.clamp.dao.OperationalPolicyRepository;
-import org.onap.clamp.dao.model.LogType;
-import org.onap.clamp.dao.model.Loop;
-import org.onap.clamp.dao.model.LoopLog;
-import org.onap.clamp.dao.model.LoopState;
-import org.onap.clamp.dao.model.MicroServicePolicy;
-import org.onap.clamp.dao.model.OperationalPolicy;
+import org.onap.clamp.loop.log.LogType;
+import org.onap.clamp.loop.log.LoopLog;
+import org.onap.clamp.loop.log.LoopLogRepository;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.microservice.MicroservicePolicyService;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.onap.clamp.policy.operational.OperationalPolicyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -59,19 +57,16 @@ public class LoopRepositoriesItCase {
private LoopsRepository loopRepository;
@Autowired
- private MicroServicePolicyRepository microServicePolicyRepository;
+ private MicroservicePolicyService microServicePolicyService;
@Autowired
- private OperationalPolicyRepository operationalPolicyRepository;
+ private OperationalPolicyService operationalPolicyService;
@Autowired
private LoopLogRepository loopLogRepository;
private OperationalPolicy getOperationalPolicy(String configJson, String name) {
- OperationalPolicy opPolicy = new OperationalPolicy();
- opPolicy.setName(name);
- opPolicy.setConfigurationsJson(new Gson().fromJson(configJson, JsonObject.class));
- return opPolicy;
+ return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class));
}
private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson,
@@ -90,13 +85,9 @@ public class LoopRepositoriesItCase {
private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String policyTosca,
String jsonProperties, boolean shared) {
- MicroServicePolicy µService = new MicroServicePolicy();
- µService.setJsonRepresentation(new Gson().fromJson(jsonRepresentation, JsonObject.class));
- µService.setPolicyTosca(policyTosca);
+ MicroServicePolicy µService = new MicroServicePolicy(name, policyTosca, shared,
+ gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class));
- µService.setShared(shared);
-
- µService.setName(name);
return µService;
}
@@ -129,8 +120,8 @@ public class LoopRepositoriesItCase {
assertThat(loopInDb).isEqualToComparingFieldByField(loopTest);
assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(true);
- assertThat(operationalPolicyRepository.existsById(opPolicy.getName())).isEqualTo(true);
- assertThat(microServicePolicyRepository.existsById(microServicePolicy.getName())).isEqualTo(true);
+ assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(true);
+ assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true);
assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(true);
// Now attempt to read from database
@@ -152,8 +143,8 @@ public class LoopRepositoriesItCase {
// Attempt to delete the object and check it has well been cascaded
loopRepository.delete(loopInDbRetrieved);
assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(false);
- assertThat(operationalPolicyRepository.existsById(opPolicy.getName())).isEqualTo(false);
- assertThat(microServicePolicyRepository.existsById(microServicePolicy.getName())).isEqualTo(false);
+ assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(false);
+ assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(false);
assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(false);
}
diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
new file mode 100644
index 000000000..a9c308737
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
@@ -0,0 +1,270 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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============================================
+ * ===================================================================
+ *
+ */
+
+
+package org.onap.clamp.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.JsonObject;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.assertj.core.util.Lists;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.Application;
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = Application.class)
+public class LoopServiceTestItCase {
+
+ private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest";
+ private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}";
+
+ @Autowired
+ LoopService loopService;
+
+ @Autowired
+ LoopsRepository loopsRepository;
+
+ @After
+ public void tearDown() {
+ loopsRepository.deleteAll();
+ }
+
+ @Test
+ public void shouldCreateEmptyLoop() {
+ //given
+ String loopBlueprint = "blueprint";
+ String loopSvg = "representation";
+ Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, loopBlueprint, loopSvg);
+ testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+ testLoop.setLastComputedState(LoopState.DESIGN);
+
+ //when
+ Loop actualLoop = loopService.addNewLoop(testLoop);
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get());
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ assertThat(actualLoop.getBlueprint()).isEqualTo(loopBlueprint);
+ assertThat(actualLoop.getSvgRepresentation()).isEqualTo(loopSvg);
+ assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString())
+ .isEqualTo("testValue");
+ }
+
+ @Test
+ public void shouldAddOperationalPolicyToLoop() {
+ //given
+ saveTestLoopToDb();
+ JsonObject confJson = JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class);
+ String policyName = "policyName";
+ OperationalPolicy operationalPolicy = new OperationalPolicy(policyName, null, confJson);
+
+ //when
+ Loop actualLoop = loopService
+ .updateOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
+ assertThat(savedPolicies).hasSize(1);
+ assertThat(savedPolicies)
+ .usingElementComparatorIgnoringFields("loop")
+ .contains(operationalPolicy);
+ OperationalPolicy savedPolicy = savedPolicies.iterator().next();
+ assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+
+ }
+
+ @Test
+ public void shouldAddMicroservicePolicyToLoop() {
+ //given
+ saveTestLoopToDb();
+ JsonObject confJson = JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class);
+ String policyName = "policyName";
+ String policyTosca = "policyTosca";
+ MicroServicePolicy microServicePolicy = new MicroServicePolicy(policyName, policyTosca, false, confJson, null);
+
+ //when
+ Loop actualLoop = loopService
+ .updateMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
+ assertThat(savedPolicies).hasSize(1);
+ assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
+ .containsExactly(microServicePolicy);
+ assertThat(savedPolicies).extracting("usedByLoops")
+ .hasSize(1);
+
+ }
+
+ @Test
+ @Transactional
+ public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() {
+ //given
+ saveTestLoopToDb();
+ String firstPolicyName = "firstPolicyName";
+ JsonObject newJsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
+ String secondPolicyName = "secondPolicyName";
+ String secondPolicyTosca = "secondPolicyTosca";
+ MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "policyTosca",
+ false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
+ loopService.updateMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
+
+ MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, secondPolicyTosca, true,
+ newJsonRepresentation, null);
+
+ //when
+ firstMicroServicePolicy.setJsonRepresentation(newJsonRepresentation);
+ Loop actualLoop = loopService.updateMicroservicePolicies(EXAMPLE_LOOP_NAME,
+ Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
+ assertThat(savedPolicies).hasSize(2);
+ assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
+ .containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy);
+
+ }
+
+ private void saveTestLoopToDb() {
+ Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation");
+ testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+ loopService.addNewLoop(testLoop);
+ }
+
+ @Test
+ public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() {
+ //given
+ saveTestLoopToDb();
+
+ JsonObject jsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
+ String firstPolicyName = "firstPolicyName";
+ String secondPolicyName = "policyName";
+ String secondPolicyTosca = "secondPolicyTosca";
+ MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "policyTosca",
+ false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
+ loopService.updateMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
+
+ MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, secondPolicyTosca, true,
+ jsonRepresentation, null);
+
+ //when
+ Loop actualLoop = loopService
+ .updateMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(secondMicroServicePolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
+ assertThat(savedPolicies).hasSize(1);
+ assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
+ .containsExactly(secondMicroServicePolicy);
+
+ }
+
+ @Test
+ @Transactional
+ public void shouldCreateNewOperationalPolicyAndUpdateJsonRepresentationOfOldOne() {
+ //given
+ saveTestLoopToDb();
+
+ String firstPolicyName = "firstPolicyName";
+ JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class);
+ String secondPolicyName = "secondPolicyName";
+ OperationalPolicy firstOperationalPolicy = new OperationalPolicy(firstPolicyName, null,
+ JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+ loopService.updateOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
+
+ OperationalPolicy secondOperationalPolicy = new OperationalPolicy(secondPolicyName, null, newJsonConfiguration);
+
+ //when
+ firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration);
+ Loop actualLoop = loopService.updateOperationalPolicies(EXAMPLE_LOOP_NAME,
+ Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
+ assertThat(savedPolicies).hasSize(2);
+ assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop")
+ .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy);
+ Set<String> policiesLoops = Lists.newArrayList(savedPolicies).stream()
+ .map(OperationalPolicy::getLoop)
+ .map(Loop::getName)
+ .collect(Collectors.toSet());
+ assertThat(policiesLoops)
+ .containsExactly(EXAMPLE_LOOP_NAME);
+ }
+
+ @Test
+ public void shouldRemoveOldOperationalPolicyIfNotInUpdatedList() {
+ //given
+ saveTestLoopToDb();
+
+ JsonObject jsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class);
+ String firstPolicyName = "firstPolicyName";
+ String secondPolicyName = "policyName";
+ OperationalPolicy firstOperationalPolicy = new OperationalPolicy(firstPolicyName, null,
+ JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+ loopService.updateOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
+
+ OperationalPolicy secondOperationalPolicy = new OperationalPolicy(secondPolicyName, null, jsonRepresentation);
+
+ //when
+ Loop actualLoop = loopService
+ .updateOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(secondOperationalPolicy));
+
+ //then
+ assertThat(actualLoop).isNotNull();
+ assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+ Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
+ assertThat(savedPolicies).hasSize(1);
+ assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop")
+ .containsExactly(secondOperationalPolicy);
+ OperationalPolicy savedPolicy = savedPolicies.iterator().next();
+ assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
+
+ }
+
+ private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) {
+ return new Loop(loopName, loopBlueprint, loopSvg);
+ }
+} \ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/dao/model/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java
index 2d9bfd2dc..92a0e14cf 100644
--- a/src/test/java/org/onap/clamp/dao/model/LoopToJsonTest.java
+++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java
@@ -21,7 +21,7 @@
*
*/
-package org.onap.clamp.dao.model;
+package org.onap.clamp.loop;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
@@ -29,26 +29,27 @@ import static org.junit.Assert.assertNotNull;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
+import java.util.HashSet;
import java.util.Random;
import org.junit.Test;
+import org.onap.clamp.loop.log.LogType;
+import org.onap.clamp.loop.log.LoopLog;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
import org.onap.clamp.clds.util.JsonUtils;
public class LoopToJsonTest {
+ private Gson gson = new Gson();
+
private OperationalPolicy getOperationalPolicy(String configJson, String name) {
- OperationalPolicy opPolicy = new OperationalPolicy();
- opPolicy.setName(name);
- opPolicy.setConfigurationsJson(new Gson().fromJson(configJson, JsonObject.class));
- return opPolicy;
+ return new OperationalPolicy(name, null, gson.fromJson(configJson, JsonObject.class));
}
private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson,
String dcaeId, String dcaeUrl, String dcaeBlueprintId) {
- Loop loop = new Loop();
- loop.setName(name);
- loop.setSvgRepresentation(svgRepresentation);
- loop.setBlueprint(blueprint);
+ Loop loop = new Loop(name, blueprint, svgRepresentation);
loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class));
loop.setLastComputedState(LoopState.DESIGN);
loop.setDcaeDeploymentId(dcaeId);
@@ -59,13 +60,10 @@ public class LoopToJsonTest {
private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String policyTosca,
String jsonProperties, boolean shared) {
- MicroServicePolicy µService = new MicroServicePolicy();
- µService.setJsonRepresentation(new Gson().fromJson(jsonRepresentation, JsonObject.class));
- µService.setPolicyTosca(policyTosca);
+ MicroServicePolicy µService = new MicroServicePolicy(name, policyTosca, shared,
+ gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class));
- µService.setShared(shared);
- µService.setName(name);
return µService;
}
@@ -94,7 +92,12 @@ public class LoopToJsonTest {
System.out.println(jsonSerialized);
Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class);
assertNotNull(loopTestDeserialized);
- assertThat(loopTestDeserialized).isEqualToComparingFieldByField(loopTest);
+ assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint");
+
+ //svg and blueprint not exposed so wont be deserialized
+ assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null);
+ assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null);
+
assertThat(loopTestDeserialized.getOperationalPolicies()).containsExactly(opPolicy);
assertThat(loopTestDeserialized.getMicroServicePolicies()).containsExactly(microServicePolicy);
assertThat(loopTestDeserialized.getLoopLogs()).containsExactly(loopLog);