diff options
Diffstat (limited to 'appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/onap/appc/lifecyclemanager/impl/LifecycleManagerImpl.java')
-rw-r--r-- | appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/onap/appc/lifecyclemanager/impl/LifecycleManagerImpl.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/onap/appc/lifecyclemanager/impl/LifecycleManagerImpl.java b/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/onap/appc/lifecyclemanager/impl/LifecycleManagerImpl.java new file mode 100644 index 000000000..12c48b481 --- /dev/null +++ b/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/onap/appc/lifecyclemanager/impl/LifecycleManagerImpl.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 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. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.lifecyclemanager.impl; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.att.eelf.i18n.EELFResourceManager; +import org.onap.appc.exceptions.InvalidInputException; +import org.onap.appc.i18n.Msg; +import org.onap.appc.lifecyclemanager.LifecycleManager; +import org.onap.appc.lifecyclemanager.objects.LifecycleException; +import org.onap.appc.lifecyclemanager.objects.NoTransitionDefinedException; +import org.onap.appc.statemachine.StateMachine; +import org.onap.appc.statemachine.StateMetaDataReader; +import org.onap.appc.statemachine.impl.StateMachineFactory; +import org.onap.appc.statemachine.impl.readers.AppcOamMetaDataReader; +import org.onap.appc.statemachine.impl.readers.VnfMetaDataReader; +import org.onap.appc.statemachine.objects.*; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class LifecycleManagerImpl implements LifecycleManager{ + + private StateMetaDataReader metadataReader; + private static Map<String,StateMachine> stateMachineMap = new ConcurrentHashMap<>(); + private final EELFLogger logger = EELFManager.getInstance().getLogger(LifecycleManagerImpl.class); + private final EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger(); + + @Override + public String getNextState(String vnfType, String currentState, String event) throws NoTransitionDefinedException,LifecycleException{ + if (logger.isTraceEnabled()) { + logger.trace("Entering to getNextState with vnfType = "+ vnfType + ", currentState = " + currentState + ", event = " + event); + } + + State nextState; + StateMachine machine; + StateMachineResponse response; + try { + machine = this.getStateMachine(vnfType); + response = machine.handleEvent(new State(currentState),new Event(event)); + if(Response.NO_TRANSITION_DEFINED.equals(response.getResponse())){ + errorLogger.error(EELFResourceManager.format(Msg.VF_ILLEGAL_COMMAND, vnfType,event,currentState)); + throw new NoTransitionDefinedException("No Transition Defined for currentState = " + currentState + ", event = " + event,currentState,event); + } + nextState = response.getNextState(); + } catch (InvalidInputException e) { + logger.error(e.getMessage()); + throw new LifecycleException(e,currentState,event); + } + if (logger.isTraceEnabled()) { + logger.trace("Exiting from getNextState with (nextState = " + nextState.getStateName() + ")"); + } + return nextState.getStateName(); + } + + private StateMachine getStateMachine(String vnfType){ + if (logger.isTraceEnabled()) { + logger.trace("Entering to getNextState with vnfType = "+ vnfType); + } + if(vnfType == null){ + vnfType = "DEFAULT"; + } + StateMachine machine = stateMachineMap.get(vnfType); + if(machine == null){ + metadataReader = getMetadataReader(vnfType); + StateMachineMetadata metadata = metadataReader.readMetadata(); + machine = StateMachineFactory.getStateMachine(metadata); + stateMachineMap.put(vnfType,machine); + } + + logger.trace("Exiting getStateMachine with StateMachine = " + stateMachineMap.get(vnfType).toString()); + return stateMachineMap.get(vnfType); + } + + private StateMetaDataReader getMetadataReader(String vnfType) { + return vnfType.equals("APPC") ? new AppcOamMetaDataReader() : new VnfMetaDataReader(); + } + +} |