001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     Julien Anguenot
011 *     Florent Guillaume
012 */
013
014package org.nuxeo.ecm.core.lifecycle.impl;
015
016import java.util.Collection;
017import java.util.Collections;
018
019import org.nuxeo.ecm.core.lifecycle.LifeCycle;
020import org.nuxeo.ecm.core.lifecycle.LifeCycleState;
021import org.nuxeo.ecm.core.lifecycle.LifeCycleTransition;
022
023/**
024 * Life cycle implementation.
025 *
026 * @see org.nuxeo.ecm.core.lifecycle.LifeCycle
027 * @author Julien Anguenot
028 * @author Florent Guillaume
029 */
030public class LifeCycleImpl implements LifeCycle {
031
032    private final String name;
033
034    private final String defaultInitialStateName;
035
036    private final Collection<String> initialStateNames;
037
038    private final Collection<LifeCycleState> states;
039
040    private final Collection<LifeCycleTransition> transitions;
041
042    public LifeCycleImpl(String name, String defaultInitialStateName, Collection<String> initialStateNames,
043            Collection<LifeCycleState> states, Collection<LifeCycleTransition> transitions) {
044        this.name = name;
045        this.defaultInitialStateName = defaultInitialStateName;
046        this.initialStateNames = initialStateNames;
047        this.states = states;
048        this.transitions = transitions;
049    }
050
051    @Override
052    public String getDefaultInitialStateName() {
053        return defaultInitialStateName;
054    }
055
056    @Override
057    public Collection<String> getInitialStateNames() {
058        return initialStateNames;
059    }
060
061    @Override
062    public String getName() {
063        return name;
064    }
065
066    @Override
067    public Collection<LifeCycleState> getStates() {
068        return states;
069    }
070
071    @Override
072    public LifeCycleState getStateByName(String stateName) {
073        LifeCycleState lifeCycleState = null;
074        for (LifeCycleState state : states) {
075            if (state.getName().equals(stateName)) {
076                lifeCycleState = state;
077                break;
078            }
079        }
080        return lifeCycleState;
081    }
082
083    @Override
084    public Collection<String> getAllowedStateTransitionsFrom(String stateName) {
085        LifeCycleState lifeCycleState = getStateByName(stateName);
086        if (lifeCycleState != null) {
087            return lifeCycleState.getAllowedStateTransitions();
088        } else {
089            return Collections.emptyList();
090        }
091    }
092
093    @Override
094    public Collection<LifeCycleTransition> getTransitions() {
095        return transitions;
096    }
097
098    @Override
099    public LifeCycleTransition getTransitionByName(String transitionName) {
100        LifeCycleTransition lifeCycleTransition = null;
101        for (LifeCycleTransition itransition : transitions) {
102            if (itransition.getName().equals(transitionName)) {
103                lifeCycleTransition = itransition;
104                break;
105            }
106        }
107        return lifeCycleTransition;
108    }
109
110}