+ private static final Logger logger = LoggerFactory.getLogger(ExtractPojosForBB.class);
+
+ public <T> T extractByKey(BuildingBlockExecution execution, ResourceKey key) throws BBObjectNotFoundException {
+ return extractByKey(execution, key, execution.getLookupMap().get(key));
+ }
+
+ protected <T> T extractByKey(BuildingBlockExecution execution, ResourceKey key, String value)
+ throws BBObjectNotFoundException {
+
+ Optional<T> result = Optional.empty();
+ GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+ try {
+ ServiceInstance serviceInstance;
+ GenericVnf vnf;
+ switch (key) {
+ case SERVICE_INSTANCE_ID:
+ result = lookupObjectInList(gBBInput.getCustomer().getServiceSubscription().getServiceInstances(),
+ value);
+ break;
+ case GENERIC_VNF_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getVnfs(), value);
+ break;
+ case NETWORK_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getNetworks(), value);
+ break;
+ case VOLUME_GROUP_ID:
+ vnf = extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+ result = lookupObjectInList(vnf.getVolumeGroups(), value);
+ break;
+ case VF_MODULE_ID:
+ vnf = extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+ result = lookupObjectInList(vnf.getVfModules(), value);
+ break;
+ case ALLOTTED_RESOURCE_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getAllottedResources(), value);
+ break;
+ case CONFIGURATION_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getConfigurations(), value);
+ break;
+ case VPN_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(gBBInput.getCustomer().getVpnBindings(), value);
+ break;
+ case VPN_BONDING_LINK_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getVpnBondingLinks(), value);
+ break;
+ case INSTANCE_GROUP_ID:
+ serviceInstance = extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
+ result = lookupObjectInList(serviceInstance.getInstanceGroups(), value);
+ break;
+ default:
+ throw new BBObjectNotFoundException(key, value);
+ }
+ } catch (BBObjectNotFoundException e) { // re-throw parent object not found
+ throw e;
+ } catch (Exception e) { // convert all other exceptions to object not found
+ logger.warn("BBObjectNotFoundException in ExtractPojosForBB",
+ "BBObject " + key + " was not found in " + "gBBInput using reference value: " + value);
+ throw new BBObjectNotFoundException(key, value);
+ }
+
+ if (result.isPresent()) {
+ return result.get();
+ } else {
+ throw new BBObjectNotFoundException(key, value);
+ }
+ }
+
+ protected <T> Optional<T> lookupObject(Object obj, String value) throws IllegalAccessException,
+ IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ return findValue(obj, value);
+ }
+
+ protected <T> Optional<T> lookupObjectInList(List<?> list, String value) throws IllegalAccessException,
+ IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ Optional<T> result = Optional.empty();
+ for (Object obj : list) {
+ result = findValue(obj, value);
+ if (result.isPresent()) {
+ break;
+ }
+ }
+ return result;
+
+ }