![JAR search and dependency download from the Maven repository](/logo.png)
fitlibrary.definedAction.DefinedActionsRepositoryStandard Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitlibrary Show documentation
Show all versions of fitlibrary Show documentation
FitLibrary provides general-purpose fixtures (and runners) for storytests with Fit and FitNesse.
The newest version!
/*
* Copyright (c) 2009 Rick Mugridge, www.RimuResearch.com
* Released under the terms of the GNU General Public License version 2 or later.
*/
package fitlibrary.definedAction;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import fitlibrary.exception.FitLibraryException;
import fitlibrary.global.TemporaryPlugBoardForRuntime;
import fitlibrary.runtime.RuntimeContext;
import fitlibrary.table.Row;
import fitlibrary.table.Tables;
import fitlibrary.traverse.Evaluator;
import fitlibrary.traverse.workflow.caller.ValidCall;
// This could easily be split into separate repositories.
// But I suspect the map for camel approach may disappear
public class DefinedActionsRepositoryStandard implements DefinedActionsRepository {
private Map definedActionMapForPlainText = new ConcurrentHashMap();
private Map> classMapForPlainText = new ConcurrentHashMap>();
private Map definedActionMapForCamel = new ConcurrentHashMap();
private Map> classMapForCamel = new ConcurrentHashMap>();
private Map definedMultiActionMap = new ConcurrentHashMap();
private Map> classMultiActionMap = new ConcurrentHashMap>();
public void define(Row parametersRow, String wikiClassName,
ParameterSubstitution parameterSubstitution, Evaluator evaluator,
String absoluteFileName) {
defineCamel(parametersRow, wikiClassName, parameterSubstitution,
evaluator, absoluteFileName);
definePlain(parametersRow, wikiClassName, parameterSubstitution,
evaluator, absoluteFileName);
}
public ParameterSubstitution lookupByCamel(String name, int argCount) {
return definedActionMapForCamel.get(new DefinedAction(name, argCount));
}
public ParameterSubstitution lookupByClassByCamel(String className,
String name, int argCount, RuntimeContext variables) {
DefinedAction macro = new DefinedAction(name, argCount);
Map map = classMapForCamel
.get(className);
if (map != null) {
ParameterSubstitution macroSubstitution = map.get(macro);
if (macroSubstitution != null)
return macroSubstitution;
}
String superClass = variables.dynamicVariables().getAsString(
(className + ".super"));
if (superClass != null && !"".equals(superClass))
return TemporaryPlugBoardForRuntime
.definedActionsRepository()
.lookupByClassByCamel(superClass, name, argCount, variables);
return definedActionMapForCamel.get(macro);
}
public void findPlainTextCall(String textCall, List results) {
for (DefinedAction action : definedActionMapForPlainText.keySet())
action.findCall(textCall, results);
}
public void defineMultiDefinedAction(String name, ArrayList formalParameters,
Tables body, String absoluteFileName) {
definedMultiActionMap.put(new DefinedMultiAction(name),
new MultiParameterSubstitution(formalParameters, body,
absoluteFileName));
}
public MultiParameterSubstitution lookupMulti(String name) {
return definedMultiActionMap.get(new DefinedMultiAction(name));
}
public void clear() {
definedActionMapForPlainText.clear();
classMapForPlainText.clear();
definedActionMapForCamel.clear();
classMapForCamel.clear();
definedMultiActionMap.clear();
classMultiActionMap.clear();
}
protected void definePlain(Row parametersRow, String wikiClassName,
ParameterSubstitution parameterSubstitution, Evaluator evaluator, String absoluteFileName) {
String name = parametersRow.methodNameForPlain(evaluator);
DefinedAction definedAction = new DefinedAction(name, parametersRow
.argumentCount());
Map map = getClassMapForPlain(wikiClassName);
if (map.get(definedAction) != null)
throw new FitLibraryException("Duplicate defined action: " + name
+ " defined in " + absoluteFileName
+ " but already defined in "
+ map.get(definedAction).getAbsoluteFileName());
map.put(definedAction, parameterSubstitution);
}
protected void defineCamel(Row parametersRow, String wikiClassName,
ParameterSubstitution parameterSubstitution, Evaluator evaluator, String absoluteFileName) {
String name = parametersRow.methodNameForCamel(evaluator);
DefinedAction definedAction = new DefinedAction(name, parametersRow
.argumentCount());
Map map = getClassMapForCamel(wikiClassName);
if (map.get(definedAction) != null)
throw new FitLibraryException("Duplicate defined action: " + name
+ "/" + parametersRow.argumentCount() + " defined in "
+ absoluteFileName + " but already defined in "
+ map.get(definedAction).getAbsoluteFileName());
map.put(definedAction, parameterSubstitution);
}
protected Map getClassMapForPlain(String wikiClassName) {
Map currentMap = definedActionMapForPlainText;
if (wikiClassBased(wikiClassName)) {
currentMap = classMapForPlainText.get(wikiClassName);
if (currentMap == null) {
currentMap = new ConcurrentHashMap();
classMapForPlainText.put(wikiClassName, currentMap);
}
}
return currentMap;
}
protected Map getClassMapForCamel(String wikiClassName) {
Map currentMap = definedActionMapForCamel;
if (wikiClassBased(wikiClassName)) {
currentMap = classMapForCamel.get(wikiClassName);
if (currentMap == null) {
currentMap = new ConcurrentHashMap();
classMapForCamel.put(wikiClassName, currentMap);
}
}
return currentMap;
}
protected boolean wikiClassBased(String wikiClassName) {
return !"".equals(wikiClassName);
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append("Plain Text:\n");
for (DefinedAction action : definedActionMapForPlainText.keySet()) {
s.append(action.toString());
s.append("\n");
}
s.append("\n\nCamel:\n");
for (DefinedAction action : definedActionMapForCamel.keySet()) {
s.append(action.toString());
s.append("\n");
}
return s.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy