--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs\r
+ * =============================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.openecomp.appc.lifecyclemanager.impl;\r
+\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+import com.att.eelf.i18n.EELFResourceManager;\r
+import org.openecomp.appc.exceptions.InvalidInputException;\r
+import org.openecomp.appc.i18n.Msg;\r
+import org.openecomp.appc.lifecyclemanager.LifecycleManager;\r
+import org.openecomp.appc.lifecyclemanager.objects.LifecycleException;\r
+import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;\r
+import org.openecomp.appc.statemachine.StateMachine;\r
+import org.openecomp.appc.statemachine.StateMetaDataReader;\r
+import org.openecomp.appc.statemachine.impl.StateMachineFactory;\r
+import org.openecomp.appc.statemachine.impl.readers.AppcOamMetaDataReader;\r
+import org.openecomp.appc.statemachine.impl.readers.VnfMetaDataReader;\r
+import org.openecomp.appc.statemachine.objects.*;\r
+\r
+import java.util.Map;\r
+import java.util.concurrent.ConcurrentHashMap;\r
+\r
+public class LifecycleManagerImpl implements LifecycleManager{\r
+\r
+ private StateMetaDataReader metadataReader;\r
+ private static Map<String,StateMachine> stateMachineMap = new ConcurrentHashMap<>();\r
+ private final EELFLogger logger = EELFManager.getInstance().getLogger(LifecycleManagerImpl.class);\r
+ private final EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger();\r
+\r
+ @Override\r
+ public String getNextState(String vnfType, String currentState, String event) throws NoTransitionDefinedException,LifecycleException{\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Entering to getNextState with vnfType = "+ vnfType + ", currentState = " + currentState + ", event = " + event);\r
+ }\r
+\r
+ State nextState;\r
+ StateMachine machine;\r
+ StateMachineResponse response;\r
+ try {\r
+ machine = this.getStateMachine(vnfType);\r
+ response = machine.handleEvent(new State(currentState),new Event(event));\r
+ if(Response.NO_TRANSITION_DEFINED.equals(response.getResponse())){\r
+ errorLogger.error(EELFResourceManager.format(Msg.VF_ILLEGAL_COMMAND, vnfType,event,currentState));\r
+ throw new NoTransitionDefinedException("No Transition Defined for currentState = " + currentState + ", event = " + event,currentState,event);\r
+ }\r
+ nextState = response.getNextState();\r
+ } catch (InvalidInputException e) {\r
+ logger.error(e.getMessage());\r
+ throw new LifecycleException(e,currentState,event);\r
+ }\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Exiting from getNextState with (nextState = " + nextState.getStateName() + ")");\r
+ }\r
+ return nextState.getStateName();\r
+ }\r
+\r
+ private StateMachine getStateMachine(String vnfType){\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Entering to getNextState with vnfType = "+ vnfType);\r
+ }\r
+ if(vnfType == null){\r
+ vnfType = "DEFAULT";\r
+ }\r
+ StateMachine machine = stateMachineMap.get(vnfType);\r
+ if(machine == null){\r
+ metadataReader = getMetadataReader(vnfType);\r
+ StateMachineMetadata metadata = metadataReader.readMetadata();\r
+ machine = StateMachineFactory.getStateMachine(metadata);\r
+ stateMachineMap.put(vnfType,machine);\r
+ }\r
+\r
+ logger.trace("Exiting getStateMachine with StateMachine = " + stateMachineMap.get(vnfType).toString());\r
+ return stateMachineMap.get(vnfType);\r
+ }\r
+\r
+ private StateMetaDataReader getMetadataReader(String vnfType) {\r
+ return vnfType.equals("APPC") ? new AppcOamMetaDataReader() : new VnfMetaDataReader();\r
+ }\r
+\r
+}\r