package com.psddev.cms.tool.page;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.psddev.cms.db.PageFilter;
import com.psddev.cms.db.Schedule;
import com.psddev.cms.db.ToolUser;
import com.psddev.cms.tool.AuthenticationFilter;
import com.psddev.cms.tool.CmsTool;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.Query;
import com.psddev.dari.db.State;
import com.psddev.dari.util.RoutingFilter;
@RoutingFilter.Path(application = "cms", value = "inlineEditor")
public class InlineEditor extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
ToolUser user = AuthenticationFilter.Static.getInsecureToolUser(request);
if (user == null) {
throw new IllegalStateException();
}
@SuppressWarnings("resource")
ToolPageContext page = new ToolPageContext(getServletContext(), request, response);
UUID mainId = page.param(UUID.class, "id");
Object mainObject = Query
.fromAll()
.where("_id = ?", mainId)
.first();
if (mainObject == null) {
throw new IllegalArgumentException(String.format(
"No object with ID! [%s]",
mainId));
}
page.getResponse().setContentType("text/html");
page.writeHeader(null, false);
page.writeStart("script", "type", "text/javascript");
page.writeRaw("var CONTEXT_PATH = '");
page.writeRaw(page.js(page.fullyQualifiedToolUrl(CmsTool.class, "/")));
page.writeRaw("';");
page.writeEnd();
page.writeStart("style", "type", "text/css");
page.writeCss(".toolBroadcast, .toolHeader, .toolBackground, .toolFooter", "display", "none");
page.writeCss("body, .toolContent", "background", "transparent");
page.writeCss("body", "margin-top", "75px !important");
page.writeCss(".toolContent", "position", "static");
page.writeEnd();
page.writeStart("div", "class", "InlineEditorMainObject");
page.writeStart("a",
"class", "InlineEditorMainObject-logo",
"target", "_blank",
"href", page.fullyQualifiedToolUrl(CmsTool.class, "/"));
page.writeElement("img",
"src", page.cmsUrl("/style/brightspot.png"),
"alt", "Brightspot",
"width", 104,
"height", 14);
page.writeEnd();
Schedule currentSchedule = user.getCurrentSchedule();
if (currentSchedule != null) {
page.writeStart("a",
"class", "InlineEditorMainObject-schedule",
"target", "_blank",
"href", page.fullyQualifiedToolUrl(CmsTool.class, "/scheduleEdit", "id", currentSchedule.getId()));
page.writeHtml("Current Schedule: ");
page.writeObjectLabel(currentSchedule);
page.writeEnd();
}
page.writeStart("a",
"class", "InlineEditorMainObject-edit",
"target", "_blank",
"href", page.fullyQualifiedToolUrl(CmsTool.class, "/content/edit.jsp", "id", State.getInstance(mainObject).getId()));
page.writeHtml("Edit ");
page.writeTypeObjectLabel(mainObject);
page.writeEnd();
if (Boolean.TRUE.equals(request.getAttribute(".persistentPreview"))) {
page.writeStart("a",
"class", "InlineEditorMainObject-preview",
"target", "_blank",
"href", page.url("", "_clearPreview", true));
page.writeHtml("(Previewing - View Live Instead)");
page.writeEnd();
}
page.writeStart("a",
"class", "InlineEditorMainObject-close",
"href", "#");
page.writeHtml("Close");
page.writeEnd();
page.writeEnd();
page.writeStart("script",
"type", "text/javascript",
"src", page.cmsUrl("/script/v3/InlineEditorMain.js"));
page.writeEnd();
if (PageFilter.Static.isInlineEditingAllContents(page.getRequest())) {
page.writeStart("script",
"type", "text/javascript",
"src", page.cmsUrl("/script/v3/InlineEditorAll.js"));
page.writeEnd();
}
page.writeFooter();
}
}