/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.workflow.kaleo.definition;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Michael C. Han
*/
public class Definition {
public Definition(
String name, String description, String content, int version) {
_name = name;
_description = description;
_content = content;
_version = version;
}
public void addNode(Node node) {
if (_nodesMap.containsKey(node.getName())) {
throw new IllegalArgumentException(
"Duplicate node " + node.getName());
}
_nodesMap.put(node.getName(), node);
if (node instanceof State) {
State state = (State)node;
if (state.isInitial()) {
_initialState = state;
}
}
else if (node instanceof Fork) {
_forks.add((Fork)node);
}
else if (node instanceof Join) {
_joins.add((Join)node);
}
}
public String getContent() {
return _content;
}
public String getDescription() {
return _description;
}
public List<Fork> getForks() {
return Collections.unmodifiableList(_forks);
}
public int getForksCount() {
return _forks.size();
}
public State getInitialState() {
return _initialState;
}
public List<Join> getJoins() {
return Collections.unmodifiableList(_joins);
}
public int getJoinsCount() {
return _joins.size();
}
public String getName() {
return _name;
}
public Node getNode(String name) {
return _nodesMap.get(name);
}
public Collection<Node> getNodes() {
return Collections.unmodifiableCollection(_nodesMap.values());
}
public List<State> getTerminalStates() {
if (_terminalStates == null) {
_terminalStates = new ArrayList<>();
for (Node node : _nodesMap.values()) {
if (node instanceof State) {
State state = (State)node;
if (state.isTerminal()) {
_terminalStates.add(state);
}
}
}
}
return Collections.unmodifiableList(_terminalStates);
}
public int getVersion() {
return _version;
}
public boolean hasNode(String name) {
return _nodesMap.containsKey(name);
}
private final String _content;
private final String _description;
private final List<Fork> _forks = new ArrayList<>();
private State _initialState;
private final List<Join> _joins = new ArrayList<>();
private final String _name;
private final Map<String, Node> _nodesMap = new HashMap<>();
private List<State> _terminalStates;
private final int _version;
}