import org.onap.appc.exceptions.APPCException;
import org.onap.appc.seqgen.SequenceGenerator;
import org.onap.appc.seqgen.impl.SequenceGeneratorFactory;
+import org.onap.appc.seqgen.objects.CapabilityModel;
import org.onap.appc.seqgen.objects.Constants;
+import org.onap.appc.seqgen.objects.Constants.Action;
import org.onap.appc.seqgen.objects.PreCheckOption;
import org.onap.appc.seqgen.objects.RequestInfo;
import org.onap.appc.seqgen.objects.RequestInfoBuilder;
.createSequenceGenerator(VNFOperation.findByString(input.getRequestInfo().getAction().name()));
SequenceGeneratorInput seqGenInput = buildSeqGenInput(input);
List<Transaction> transactions = seqGenerator.generateSequence(seqGenInput);
- rpcResult = buildSuccessResponse(transactions);
+ if (transactions.isEmpty()) {
+ rpcResult = buildFailureResponse("Request is not supported", 450);
+ } else {
+ rpcResult = buildSuccessResponse(transactions);
+ }
} catch (Exception e) {
log.error("Error Generating Sequence",e);
- rpcResult = buildFailureResponse(e.getMessage());
+ rpcResult = buildFailureResponse(e.getMessage(), 0);
}
return Futures.immediateFuture(rpcResult);
}
return precheckOptions;
}
private List<Responses> getResponses(Transaction transaction) {
+ log.info("Building response from the Transaction");
List<Responses> responseList = new LinkedList<>();
for(Response resp : transaction.getResponses()){
Map<String,String> responseActions = resp.getResponseAction();
validateInventoryModelWithDependencyModel(dependencyModel, inventoryModel);
}
+ CapabilityModel capModel = buildCapabilitiesForSeqGenInput(input);
+
SequenceGeneratorInputBuilder builder = new SequenceGeneratorInputBuilder()
.requestInfo(requestInfo)
.inventoryModel(inventoryModel)
- .dependendcyModel(dependencyModel);
-
- builder = buildCapabilitiesForSeqGenInput(input, builder);
+ .dependendcyModel(dependencyModel)
+ .capabilityModel(capModel);
builder = buildTunableParamsForSeqGenInput(input, builder);
return builder;
}
- private SequenceGeneratorInputBuilder buildCapabilitiesForSeqGenInput(GenerateSequenceInput input, SequenceGeneratorInputBuilder builder) {
+ public CapabilityModel buildCapabilitiesForSeqGenInput(GenerateSequenceInput input) {
log.info("Initializing capabilities based on YANG object.");
- if(input.getCapabilities() != null){
- if(input.getCapabilities().getVnf() != null){
- builder = builder.capability("vnf", input.getCapabilities().getVnf());
+
+ List<String> vnfCapabilities = null;
+ List<String> vfModuleCapabilities = null;
+ Map<String, List<String>> vmCapabilities = null;
+ List<String> vnfcCapabilities = null;
+
+ if(input.getCapabilities()!=null){
+ if(input.getCapabilities().getVnf()!=null){
+ vnfCapabilities = input.getCapabilities().getVnf();
}
- if(input.getCapabilities().getVnfc() != null){
- builder = builder.capability("vnfc", input.getCapabilities().getVnfc());
+ if(input.getCapabilities().getVnfc()!=null){
+ vfModuleCapabilities = input.getCapabilities().getVnfc();
}
- if(input.getCapabilities().getVm() != null){
- builder = builder.capability("vm", input.getCapabilities().getVm());
+ if(input.getCapabilities().getVm()!=null){
+ vmCapabilities = new HashMap<String, List<String>>();
+ vmCapabilities.put(Action.ATTACH_VOLUME.getActionType(), input.getCapabilities().getVm().getAttachVolume());
+ vmCapabilities.put(Action.DETACH_VOLUME.getActionType(), input.getCapabilities().getVm().getDetachVolume());
+ vmCapabilities.put(Action.EVACUATE.getActionType(), input.getCapabilities().getVm().getEvacuate());
+ vmCapabilities.put(Action.MIGRATE.getActionType(), input.getCapabilities().getVm().getMigrate());
+ vmCapabilities.put(Action.REBOOT.getActionType(), input.getCapabilities().getVm().getReboot());
+ vmCapabilities.put(Action.REBUILD.getActionType(), input.getCapabilities().getVm().getRebuild());
+ vmCapabilities.put(Action.RESTART.getActionType(), input.getCapabilities().getVm().getRestart());
+ vmCapabilities.put(Action.SNAPSHOT.getActionType(), input.getCapabilities().getVm().getSnapshot());
+ vmCapabilities.put(Action.START.getActionType(), input.getCapabilities().getVm().getStart());
+ vmCapabilities.put(Action.STOP.getActionType(), input.getCapabilities().getVm().getStop());
}
- if(input.getCapabilities().getVfModule() != null){
- builder = builder.capability("vf-module", input.getCapabilities().getVfModule());
+ if(input.getCapabilities().getVfModule()!=null){
+ vnfcCapabilities = input.getCapabilities().getVfModule();
}
}
-
- return builder;
+ return new CapabilityModel(vnfCapabilities, vfModuleCapabilities, vmCapabilities, vnfcCapabilities);
}
private void validateInventoryModelWithDependencyModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws APPCException {
Vnfc vfc = new Vnfc();
vfc.setVnfcName(vm.getVnfc().getVnfcName());
vfc.setVnfcType(vm.getVnfc().getVnfcType());
+ vfc.setVnfcFunctionCode(vm.getVnfc().getVnfcFunctionCode());
vserver.setVnfc(vfc);
List<Vserver> vms = map.get(vfc);
if(vms ==null) {
return vnf;
}
- private RpcResult<GenerateSequenceOutput> buildFailureResponse(String errorMessage){
+ private RpcResult<GenerateSequenceOutput> buildFailureResponse(String errorMessage, int errorCode){
GenerateSequenceOutputBuilder sequenceGeneratorOutputBuilder=new GenerateSequenceOutputBuilder();
StatusBuilder statusBuilder = new StatusBuilder();
- statusBuilder.setCode(401);
+ statusBuilder.setCode((errorCode != 0)? errorCode : 401);
statusBuilder.setMessage(errorMessage);
sequenceGeneratorOutputBuilder.setStatus(statusBuilder.build());
return RpcResultBuilder