/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: FlowLinkBuilder.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.engine; import com.uwyn.rife.engine.exceptions.EngineException; import com.uwyn.rife.engine.exceptions.FlowLinkAmbiguousTargetException; import com.uwyn.rife.engine.exceptions.FlowLinkTargetRequiredException; public class FlowLinkBuilder { private ElementInfoBuilder mElementInfoBuilder = null; private String mSrcExit = null; private String mDestId = null; private boolean mSnapback = false; private boolean mCancelInheritance = false; private boolean mCancelEmbedding = false; private boolean mRedirect = false; private boolean mCancelContinuations = false; private FlowLinkDeclaration mDeclaration = null; public FlowLinkBuilder(ElementInfoBuilder elementInfoBuilder, String srcExit) { mElementInfoBuilder = elementInfoBuilder; mSrcExit = srcExit; } public FlowLinkBuilder destId(String destId) { if (destId != null && 0 == destId.length()) destId = null; mDestId = destId; return this; } public FlowLinkBuilder snapback(boolean snapback) { mSnapback = snapback; return this; } public FlowLinkBuilder cancelInheritance(boolean cancelInheritance) { mCancelInheritance = cancelInheritance; return this; } public FlowLinkBuilder cancelEmbedding(boolean cancelEmbedding) { mCancelEmbedding = cancelEmbedding; return this; } public FlowLinkBuilder redirect(boolean redirect) { mRedirect = redirect; return this; } public FlowLinkBuilder cancelContinuations(boolean cancelContinuations) { mCancelContinuations = cancelContinuations; return this; } public FlowLinkBuilder addDataLink(String srcOutput, String destInput) throws EngineException { addDataLink(srcOutput, null, false, destInput, null); return this; } public FlowLinkBuilder addSnapbackDataLink(String srcOutput, String destInput) throws EngineException { addDataLink(srcOutput, null, true, destInput, null); return this; } public FlowLinkBuilder addDataLinkBean(String srcOutbean, String destInbean) throws EngineException { addDataLink(null, srcOutbean, false, null, destInbean); return this; } public FlowLinkBuilder addSnapbackDataLinkBean(String srcOutbean, String destInbean) throws EngineException { addDataLink(null, srcOutbean, true, null, destInbean); return this; } public FlowLinkBuilder addDataLink(String srcOutput, String srcOutbean, boolean snapback, String destInput, String destInbean) throws EngineException { String dest_id = null; if (!snapback) { dest_id = mDestId; } mElementInfoBuilder.addDataLink(srcOutput, srcOutbean, dest_id, snapback, destInput, destInbean, this); return this; } public ElementInfoBuilder leaveFlowLink() { mElementInfoBuilder.addFlowLinkDeclaration(getFlowLinkDeclaration()); return mElementInfoBuilder; } String getSrcExit() { return mSrcExit; } FlowLinkDeclaration getFlowLinkDeclaration() throws EngineException { if (mDeclaration != null) { return mDeclaration; } if (null == mDestId && !mSnapback) { throw new FlowLinkTargetRequiredException(mElementInfoBuilder.getSiteBuilder().getDeclarationName(), mElementInfoBuilder.getElementDeclaration().getId(), mSrcExit); } if (mDestId != null && mSnapback) { throw new FlowLinkAmbiguousTargetException(mElementInfoBuilder.getSiteBuilder().getDeclarationName(), mElementInfoBuilder.getElementDeclaration().getId(), mSrcExit); } mDeclaration = new FlowLinkDeclaration(mElementInfoBuilder.getSiteBuilder(), mSrcExit, mDestId, mSnapback, mCancelInheritance, mCancelEmbedding, mRedirect, mCancelContinuations); return mDeclaration; } ElementInfoBuilder getElementInfoBuilder() { return mElementInfoBuilder; } }