/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.riotfamily.components.view;
import java.io.StringWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.riotfamily.common.web.support.CapturingResponseWrapper;
import org.riotfamily.components.config.ComponentListConfig;
import org.riotfamily.components.model.Component;
import org.riotfamily.components.model.ContentMap;
import org.riotfamily.components.render.component.ComponentRenderer;
import org.riotfamily.components.render.list.ComponentListRenderer;
import org.riotfamily.components.support.EditModeUtils;
/**
* @author Felix Gnass [fgnass at neteye dot de]
* @since 6.5
*/
public class InplaceMacroHelper {
private HttpServletRequest request;
private HttpServletResponse response;
private List<String> toolbarScripts;
private List<DynamicToolbarScript> dynamicToolbarScripts;
private ComponentListRenderer componentListRenderer;
private ComponentRenderer componentRenderer;
public InplaceMacroHelper(HttpServletRequest request,
HttpServletResponse response,
List<String> toolbarScripts,
List<DynamicToolbarScript> dynamicToolbarScripts,
ComponentListRenderer componentListRenderer,
ComponentRenderer componentRenderer) {
this.request = request;
this.response = response;
this.toolbarScripts = toolbarScripts;
this.dynamicToolbarScripts = dynamicToolbarScripts;
this.componentListRenderer = componentListRenderer;
this.componentRenderer = componentRenderer;
}
public boolean isEditMode() {
return EditModeUtils.isEditMode(request);
}
public boolean isPreviewMode() {
return EditModeUtils.isPreviewMode(request);
}
public boolean isLiveMode() {
return EditModeUtils.isLiveMode(request);
}
public boolean isEditable(ContentMap contentMap) {
return EditModeUtils.isEditable("edit",
contentMap.getContent().getContainer().getOwner(), request);
}
public List<String> getToolbarScripts() {
return this.toolbarScripts;
}
public String getInitScript() {
StringBuffer sb = new StringBuffer();
for (DynamicToolbarScript script : dynamicToolbarScripts) {
String js = script.generateJavaScript(request);
if (js != null) {
sb.append(js).append('\n');
}
}
return sb.toString();
}
public String renderComponents(ContentMap contentMap,
String key, Integer minComponents, Integer maxComponents,
List<String> initalComponentTypes,
List<?> validComponentTypes, int x, int y)
throws Exception {
ComponentListConfig config = new ComponentListConfig(minComponents,
maxComponents, initalComponentTypes, validComponentTypes, x, y);
return componentListRenderer.renderComponents(contentMap, key, config,
request, response);
}
public String renderComponent(Component component) throws Exception {
StringWriter sw = new StringWriter();
if (component != null) {
request.setAttribute("readOnlyComponent", true);
componentRenderer.render(component, request, new CapturingResponseWrapper(response, sw));
request.removeAttribute("readOnlyComponent");
}
return sw.toString();
}
}