01: /*
02: * Created on Aug 8, 2005
03: */
04: package uk.org.ponder.rsf.components;
05:
06: /**
07: * UIBranchContainer represents a "branch point" in the IKAT rendering process.
08: * At a branch point, the renderer may either branch to another part of the
09: * current template, or a different template, to a point with the same RSF ID. This
10: * kind of branch may also form a loop, where there are sibling branches with the
11: * same ID. A "forced branch" can be made to a tag with a different ID by using
12: * a {@link UIJointContainer}.
13: * <p>
14: * UIBranchContainer has responsibility for managing naming of child components.
15: * The key to the child map is the ID prefix - if the ID has no suffix,
16: * the value is the single component with that ID at this level.
17: * If the ID has a suffix, indicating a repetitive domain, the value is an
18: * ordered list of components provided by the producer which will drive
19: * the rendering at this recursion level.
20: *
21: * @author Antranig Basman (antranig@caret.cam.ac.uk)
22: */
23:
24: public class UIBranchContainer extends UIContainer {
25: /**
26: * Constructs a "repeating" BranchContainer, uniquely identified by the
27: * "localID" passed as the 3rd argument. Suitable, for example, for creating a
28: * table row.
29: *
30: * @param parent The parent container to which the returned branch should be
31: * added.
32: * @param ID The RSF ID for the branch (must contain a colon character)
33: * @param localID The local ID identifying this branch instance (must be
34: * unique for each branch with the same ID in this branch)
35: */
36: public static UIBranchContainer make(UIContainer parent, String ID,
37: String localID) {
38: if (ID.indexOf(':') == -1) {
39: throw new IllegalArgumentException(
40: "Branch container ID must contain a colon character :");
41: }
42: UIBranchContainer togo = new UIBranchContainer();
43: togo.ID = ID;
44: togo.localID = localID;
45: parent.addComponent(togo);
46: return togo;
47: }
48:
49: /**
50: * Constructs a simple BranchContainer, used to group components or to cause a
51: * rendering switch. Suitable where there will be just one branch with this ID
52: * within its container. Where BranchContainers are created in a loop, they will
53: * have the <code>localID</code> automatically assigned in an integer sequence.
54: *
55: * @see #make(UIContainer, String, String)
56: */
57: public static UIBranchContainer make(UIContainer parent, String ID) {
58: return make(parent, ID, "");
59: }
60:
61: }
|