1 24 package org.riotfamily.forms; 25 26 import java.io.PrintWriter ; 27 import java.util.ArrayList ; 28 import java.util.Iterator ; 29 import java.util.List ; 30 31 import org.riotfamily.common.markup.Html; 32 import org.riotfamily.common.markup.TagWriter; 33 import org.riotfamily.forms.request.FormRequest; 34 35 36 43 public abstract class CompositeElement extends AbstractEditorBase { 44 45 private List components = new ArrayList (); 46 47 private boolean surroundBySpan; 48 49 52 public CompositeElement() { 53 } 54 55 56 protected List getComponents() { 57 return components; 58 } 59 60 68 protected void addComponent(Element element) { 69 components.add(element); 70 element.setParent(this); 71 if (getForm() != null) { 72 initComponent(element); 73 } 74 } 75 76 80 protected void removeComponent(Element element) { 81 components.remove(element); 82 } 83 84 public boolean isEmpty() { 85 return components.isEmpty(); 86 } 87 88 92 protected final void afterFormSet() { 93 Iterator it = components.iterator(); 94 while (it.hasNext()) { 95 Element element = (Element) it.next(); 96 initComponent(element); 97 } 98 initCompositeElement(); 99 } 100 101 108 protected void initCompositeElement() { 109 } 110 111 115 public void processRequest(FormRequest request) { 116 processRequestInternal(request); 117 processRequestCompontents(request); 118 revalidate(); 119 } 120 121 protected final void revalidate() { 122 ErrorUtils.removeErrors(this); 123 validate(); 124 } 125 126 protected void validate() { 127 } 128 129 132 protected final void processRequestCompontents(FormRequest request) { 133 List tempList = new ArrayList (components); 135 Iterator it = tempList.iterator(); 136 while (it.hasNext()) { 137 Element element = (Element) it.next(); 138 log.debug("Processing component: " + element); 139 element.processRequest(request); 140 } 141 } 142 143 149 protected void initComponent(Element element) { 150 if (getForm() == null) { 151 throw new IllegalStateException ("Form not set"); 152 } 153 getForm().registerElement(element); 154 } 155 156 161 protected void processRequestInternal(FormRequest request) { 162 } 163 164 protected boolean isSurroundBySpan() { 165 return this.surroundBySpan; 166 } 167 168 protected void setSurroundBySpan(boolean surroundBySpan) { 169 this.surroundBySpan = surroundBySpan; 170 } 171 172 protected void renderInternal(PrintWriter writer) { 173 if (surroundBySpan) { 174 TagWriter spanTag = new TagWriter(writer); 175 spanTag.start(Html.SPAN).attribute(Html.COMMON_ID, getId()).body(); 176 renderComponents(writer); 177 spanTag.end(); 178 } 179 else { 180 renderComponents(writer); 181 } 182 } 183 184 protected void renderComponents(PrintWriter writer) { 185 Iterator it = components.iterator(); 186 while (it.hasNext()) { 187 Element element = (Element) it.next(); 188 log.debug("Rendering component " + element); 189 element.render(writer); 190 } 191 } 192 193 196 public void focus() { 197 if (!components.isEmpty()) { 198 ((Element) components.get(0)).focus(); 199 } 200 } 201 202 206 public boolean isCompositeElement() { 207 return true; 208 } 209 } | Popular Tags |