package com.xrosstools.xunit.impl; import java.util.HashMap; import java.util.Map; import com.xrosstools.xunit.Branch; import com.xrosstools.xunit.Context; import com.xrosstools.xunit.Locator; import com.xrosstools.xunit.Unit; public class BranchImpl extends BaseCompositeImpl implements Branch { private Locator locator; private Map<String, Unit> unitMap = new HashMap<String, Unit>(); public void setLocator(Locator locator){ this.locator = locator; } public void add(String key, Unit unit){ unitMap.put(key, unit); } protected Unit locateUnit(Context ctx){ String key = locator.locate(ctx); Unit unit = unitMap.get(key); if(unit != null) return unit; return unitMap.get(locator.getDefaultKey()); } public void process(Context ctx){ process(locateUnit(ctx), ctx); } public Context convert(Context inputCtx) { return convert(locateUnit(inputCtx), inputCtx); } }