/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: SubmissionBuilder.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.uwyn.rife.engine.BeanDeclaration;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
public class SubmissionBuilder
{
private ElementInfoBuilder mElementInfoBuilder = null;
private String mName = null;
private LinkedHashMap<String, String[]> mParameters = null;
private ArrayList<String> mParametersRegexp = null;
private LinkedHashMap<BeanDeclaration, String> mBeans = null;
private ArrayList<String> mFiles = null;
private ArrayList<String> mFilesRegexp = null;
private Scope mScope = null;
private boolean mCancelContinuations = false;
SubmissionBuilder(ElementInfoBuilder elementInfoBuilder, String name)
{
assert elementInfoBuilder != null;
assert name != null;
mElementInfoBuilder = elementInfoBuilder;
mName = name;
return;
}
Submission getSubmission(ElementInfo elementInfo)
{
Submission submission = new Submission();
elementInfo.addSubmission(mName, submission);
submission.setCancelContinuations(mCancelContinuations);
submission.setScope(mScope);
if (mParameters != null)
{
for (Map.Entry<String, String[]> parameter : mParameters.entrySet())
{
submission.addParameter(parameter.getKey(), parameter.getValue());
}
}
if (mParametersRegexp != null)
{
for (String pattern : mParametersRegexp)
{
submission.addParameterRegexp(pattern);
}
}
if (mBeans != null)
{
for (Map.Entry<BeanDeclaration, String> bean : mBeans.entrySet())
{
submission.addBean(bean.getKey(), bean.getValue());
}
}
if (mFiles != null)
{
for (String name : mFiles)
{
submission.addFile(name);
}
}
if (mFilesRegexp != null)
{
for (String pattern : mFilesRegexp)
{
submission.addFileRegexp(pattern);
}
}
return submission;
}
public SubmissionBuilder cancelContinuations(boolean cancelContinuations)
{
mCancelContinuations = cancelContinuations;
return this;
}
public SubmissionBuilder setScope(Scope scope)
{
mScope = scope;
return this;
}
public SubmissionBuilder addParameter(String name)
{
return addParameter(name, null);
}
public SubmissionBuilder addParameter(String name, String[] defaultValues)
{
if (null == mParameters)
{
mParameters = new LinkedHashMap<String, String[]>();
}
mParameters.put(name, defaultValues);
return this;
}
public SubmissionBuilder addParameterRegexp(String pattern)
{
if (null == mParametersRegexp)
{
mParametersRegexp = new ArrayList<String>();
}
mParametersRegexp.add(pattern);
return this;
}
public SubmissionBuilder addBean(String classname)
{
return addBean(classname, null, null, null);
}
public SubmissionBuilder addBean(String classname, String prefix)
{
return addBean(classname, prefix, null, null);
}
public SubmissionBuilder addBean(String classname, String prefix, String name)
{
return addBean(classname, prefix, name, null);
}
public SubmissionBuilder addBean(String classname, String prefix, String name, String groupName)
{
if (prefix != null && 0 == prefix.length()) prefix = null;
if (name != null && 0 == name.length()) name = null;
if (groupName != null && 0 == groupName.length()) groupName = null;
if (null == mBeans)
{
mBeans = new LinkedHashMap<BeanDeclaration, String>();
}
mBeans.put(new BeanDeclaration(classname, prefix, groupName), name);
return this;
}
public SubmissionBuilder addBean(Class klass)
{
return addBean(klass, null, null, null);
}
public SubmissionBuilder addBean(Class klass, String prefix)
{
return addBean(klass, prefix, null, null);
}
public SubmissionBuilder addBean(Class klass, String prefix, String name)
{
return addBean(klass, prefix, name, null);
}
public SubmissionBuilder addBean(Class klass, String prefix, String name, String groupName)
{
return addBean(new BeanDeclaration(klass, prefix, groupName), name);
}
private SubmissionBuilder addBean(BeanDeclaration beanDeclaration, String name)
{
if (null == mBeans)
{
mBeans = new LinkedHashMap<BeanDeclaration, String>();
}
mBeans.put(beanDeclaration, name);
return this;
}
public SubmissionBuilder addFile(String name)
{
if (null == mFiles)
{
mFiles = new ArrayList<String>();
}
mFiles.add(name);
return this;
}
public SubmissionBuilder addFileRegexp(String pattern)
{
if (null == mFilesRegexp)
{
mFilesRegexp = new ArrayList<String>();
}
mFilesRegexp.add(pattern);
return this;
}
public ElementInfoBuilder leaveSubmission()
{
return mElementInfoBuilder;
}
}