1 24 package org.riotfamily.components.render; 25 26 import java.io.IOException ; 27 import java.util.ArrayList ; 28 import java.util.List ; 29 30 import javax.servlet.http.HttpServletRequest ; 31 import javax.servlet.http.HttpServletResponse ; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.riotfamily.common.web.util.ServletUtils; 36 import org.riotfamily.components.ComponentList; 37 import org.riotfamily.components.ComponentRepository; 38 import org.riotfamily.components.ComponentVersion; 39 import org.riotfamily.components.Location; 40 import org.riotfamily.components.VersionContainer; 41 import org.riotfamily.components.config.ComponentListConfiguration; 42 import org.riotfamily.components.context.PageRequestUtils; 43 import org.riotfamily.components.dao.ComponentDao; 44 45 public class EditModeRenderStrategy extends PreviewModeRenderStrategy { 46 47 private static final Log log = LogFactory.getLog(EditModeRenderStrategy.class); 48 49 public EditModeRenderStrategy(ComponentDao dao, 50 ComponentRepository repository, ComponentListConfiguration config, 51 HttpServletRequest request, HttpServletResponse response) 52 throws IOException { 53 54 super(dao, repository, config, request, response); 55 } 56 57 public void renderComponentVersion(ComponentVersion version) 58 throws IOException { 59 60 VersionContainer c = version.getContainer(); 61 List components = getComponentsToRender(c.getList()); 62 int position = components.indexOf(c); 63 boolean last = position == components.size() - 1; 64 renderComponentVersion(version, getPositionalClassName(position, last)); 65 } 66 67 72 protected void renderComponentList(ComponentList list) throws IOException { 73 boolean renderOuterDiv = PageRequestUtils.createAndStoreContext( 74 request, list.getId(), 120000); 75 76 if (renderOuterDiv) { 77 out.print("<div riot:listId=\""); 78 out.print(list.getId()); 79 out.print("\" riot:controllerId=\""); 80 String uri = ServletUtils.getIncludeUri(request); 81 uri = uri.substring(request.getContextPath().length()); 82 out.print(uri); 83 out.print('"'); 84 if (config.getMinComponents() != null) { 85 out.print(" riot:minComponents=\""); 86 out.print(config.getMinComponents()); 87 out.print('"'); 88 } 89 if (config.getMaxComponents() != null) { 90 out.print(" riot:maxComponents=\""); 91 out.print(config.getMaxComponents()); 92 out.print('"'); 93 } 94 if (list.isDirty()) { 95 out.print(" riot:dirty=\"true\""); 96 } 97 out.print(" class=\"riot-components riot-component-list\">"); 98 super.renderComponentList(list); 99 out.print("</div>"); 100 } 101 else { 102 super.renderComponentList(list); 103 } 104 } 105 106 112 protected ComponentList getComponentList(Location location) { 113 ComponentList list = super.getComponentList(location); 114 if (list == null) { 115 list = createNewList(location); 116 } 117 return list; 118 } 119 120 124 protected ComponentList createNewList(Location location) { 125 ComponentList list = new ComponentList(); 126 list.setLocation(new Location(location)); 127 list.setParent(parent); 128 String [] initialTypes = config.getInitialComponentTypes(); 129 if (initialTypes != null) { 130 List containers = new ArrayList (); 131 for (int i = 0; i < initialTypes.length; i++) { 132 VersionContainer container = new VersionContainer(); 133 ComponentVersion live = new ComponentVersion(initialTypes[i]); 134 live.setContainer(container); 135 container.setList(list); 136 container.setLiveVersion(live); 137 containers.add(container); 138 } 139 list.setLiveContainers(containers); 140 } 141 dao.saveComponentList(list); 142 log.debug("New ComponentList created: " + list); 143 return list; 144 } 145 146 152 protected void renderContainer(VersionContainer container, 153 String positionClassName) throws IOException { 154 155 ComponentVersion version = getVersionToRender(container); 156 out.print("<div riot:containerId=\""); 157 out.print(container.getId()); 158 out.print("\" riot:componentType=\""); 159 out.print(version.getType()); 160 out.print('"'); 161 162 String type = version.getType(); 163 String formUrl = repository.getFormUrl(type, container.getId()); 164 if (formUrl != null) { 165 out.print(" riot:form=\""); 166 out.print(formUrl); 167 out.print('"'); 168 } 169 170 out.print(" class=\"riot-component riot-component-"); 171 out.print(version.getType()); 172 out.print("\">"); 173 renderComponentVersion(version, positionClassName); 174 out.print("</div>"); 175 } 176 177 protected RenderStrategy getStrategyForParentList() throws IOException { 178 return new InheritingRenderStrategy(dao, repository, config, 179 request, response); 180 } 181 182 } 183 | Popular Tags |