blob: f4c26eec373d5e44dbe6ae74199eef9b25e0b114 [file] [log] [blame]
package wicked.markup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Markup implements IFragmentCollector {
private List<Fragment> fragments;
private Map<String, Fragment> pathToFrag = new HashMap<String, Fragment>();
public List<Fragment> getFragments() {
return fragments;
}
public ComponentFragment getComponentFragment(String path) {
Fragment frag = pathToFrag.get(path);
if (frag == null) {
throw new RuntimeException("component fragment for path [" + path
+ "] not found in markup");
}
if (frag.getType() != MarkupType.COMPONENT) {
throw new RuntimeException(
"component fragment has invalid markup type ["
+ frag.getType().toString() + "]");
}
return (ComponentFragment)frag;
}
public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
public void addFragment(Fragment frag) {
if (fragments == null) {
fragments = new ArrayList<Fragment>();
}
fragments.add(frag);
}
public void init() {
if (fragments != null) {
for (Fragment frag : fragments) {
if (frag.getType() == MarkupType.COMPONENT) {
initHelper((ComponentFragment) frag, null);
}
}
}
}
private void initHelper(ComponentFragment frag, String parentPath) {
String path = (parentPath == null) ? frag.getId() : parentPath + ":"
+ frag.getId();
pathToFrag.put(path, frag);
if (frag.getFragments() != null) {
for (Fragment child : frag.getFragments()) {
if (child.getType() == MarkupType.COMPONENT) {
initHelper((ComponentFragment) child, path);
}
}
}
}
public String toString() {
StringBuilder builder = new StringBuilder(512);
if (fragments != null) {
for (Fragment frag : fragments) {
builder.append(frag.toString());
}
}
return builder.toString();
}
}