001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2008
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.shared.workflow;
034:
035: import com.flexive.shared.AbstractSelectableObjectWithLabel;
036: import com.flexive.shared.exceptions.FxInvalidParameterException;
037: import com.flexive.shared.value.FxString;
038:
039: import java.io.Serializable;
040:
041: /**
042: * Definition of a workflow step.
043: *
044: * @author Daniel Lichtenberger (daniel.lichtenberger@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
045: */
046: public class StepDefinition extends AbstractSelectableObjectWithLabel
047: implements Serializable {
048: private static final long serialVersionUID = 7468501311030816400L;
049:
050: /**
051: * The id of the LIVE step.
052: */
053: public static final long LIVE_STEP_ID = 1;
054:
055: /**
056: * The id of the EDIT step.
057: */
058: public static final long EDIT_STEP_ID = 2;
059:
060: protected FxString label = null;
061: protected String description = null;
062: protected long uniqueTargetId = -1;
063: protected long id = -1;
064:
065: /**
066: * StepDefinition Constructor.
067: *
068: * @param label the unique label of the step
069: * @param description the description of the step
070: * @param id the unique id of the step
071: * @param uniqueTargetId the unique target id (-1 if it there is no unique target)
072: */
073: public StepDefinition(long id, FxString label, String description,
074: long uniqueTargetId) {
075: this .label = label;
076: this .description = description;
077: this .id = id;
078: if (uniqueTargetId >= 0 && id == uniqueTargetId) {
079: throw new FxInvalidParameterException("UNIQUETARGET",
080: "ex.stepdefinition.uniqueTarget.circular.self",
081: this .label + " (Id: " + this .id + ")")
082: .asRuntimeException();
083: }
084: this .uniqueTargetId = (uniqueTargetId < 0) ? -1
085: : uniqueTargetId;
086: }
087:
088: /**
089: * StepDefinition Constructor.
090: *
091: * @param label the unique name of the step
092: * @param description the description of the step
093: * @param uniqueTargetId the unique target id (-1 if it there is no unique target)
094: */
095: public StepDefinition(FxString label, String description,
096: long uniqueTargetId) {
097: this (-1, label, description, uniqueTargetId);
098: }
099:
100: /**
101: * Returns an editable step definition object.
102: *
103: * @return this step definition as an editable object.
104: */
105: public StepDefinitionEdit asEditable() {
106: return new StepDefinitionEdit(this );
107: }
108:
109: /**
110: * Default constructor.
111: */
112: protected StepDefinition() {
113: }
114:
115: /**
116: * Returns the name of the step definition.
117: *
118: * @return the name of the step definition.
119: */
120: public FxString getLabel() {
121: return this .label;
122: }
123:
124: /**
125: * Returns the description of the step definition.
126: *
127: * @return the description of the step definition.
128: */
129: public String getDescription() {
130: return this .description;
131: }
132:
133: /**
134: * Returns the id of the step definition
135: *
136: * @return the id of the step definition
137: */
138: public long getId() {
139: return this .id;
140: }
141:
142: /**
143: * Returns true if only one version of a entry may be in a step using this step definition.
144: *
145: * @return true if only one version of a entry may be in a step using this step definition.
146: */
147: public boolean isUnique() {
148: return (this .uniqueTargetId != -1);
149: }
150:
151: /**
152: * Returns the stepDefinition used as target by the unique flag.
153: *
154: * @return the stepDefinition used as target by the unique flag.
155: */
156: public long getUniqueTargetId() {
157: return this .uniqueTargetId;
158: }
159:
160: /**
161: * Returns true if the step definition is needed by the system and can not be deleted.
162: *
163: * @return true if the step definition is needed by the system and can not be deleted.
164: */
165: public boolean isSystemStepDefinition() {
166: return (id == LIVE_STEP_ID || id == EDIT_STEP_ID);
167: }
168:
169: /**
170: * {@inheritDoc}
171: */
172: @Override
173: public String toString() {
174: return "StepDefinition[id=" + id + "]";
175: }
176:
177: }
|