package com.psddev.cms.tool.page; import com.psddev.cms.db.ReferentialTextMarker; import com.psddev.cms.db.StandardImageSize; import com.psddev.cms.db.ToolUi; import com.psddev.cms.tool.PageServlet; import com.psddev.cms.tool.ToolPageContext; import com.psddev.dari.db.Application; import com.psddev.dari.db.Query; import com.psddev.dari.db.Recordable; import com.psddev.dari.db.State; import com.psddev.dari.db.WebResourceOverride; import com.psddev.dari.util.RoutingFilter; import javax.servlet.ServletException; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @RoutingFilter.Path(application = "cms", value = "admin/settings.jsp") public class AdminSettings extends PageServlet { @Override protected String getPermissionId() { return "area/admin/adminSettings"; } @Override protected void doService(ToolPageContext page) throws IOException, ServletException { // --- Logic --- if (page.requirePermission("area/admin/adminSettings")) { return; } Object selected = Query.findById(Object.class, page.uuidParam("id")); if (selected == null) { if (page.uuidParam("typeId") != null) { selected = page.findOrReserve(StandardImageSize.class); } else { selected = page.getCmsTool(); } } if (selected != null && page.tryStandardUpdate(selected)) { return; } // --- Presentation --- page.writeHeader(); page.writeStart("div", "class", "withLeftNav"); writeLeftNavHtml(page, selected); writeMainHtml(page, selected); page.writeEnd(); page.writeFooter(); } private void writeLeftNavHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("div", "class", "leftNav"); page.writeStart("div", "class", "widget"); page.writeStart("h1", "class", "icon icon-cogs"); page.writeHtml(page.localize("com.psddev.cms.tool.page.admin.Settings", "title")); page.writeEnd(); writeApplicationsListHtml(page, selected); writeImageSizesListHtml(page, selected); writeReferentialTextMarkersListHtml(page, selected); writeWebResourceOverridesListHtml(page, selected); page.writeEnd(); page.writeEnd(); } private void writeApplicationsListHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("h2"); page.writeHtml(page.localize("com.psddev.cms.tool.page.admin.Settings", "subtitle.applications")); page.writeEnd(); page.writeStart("ul", "class", "links"); writeListItemsHtml(page, Query.from(Application.class).where("name != missing").sortAscending("name").selectAll() .stream() .filter(app -> !app.getState().getType().as(ToolUi.class).isHidden()) .collect(Collectors.toList()), selected); page.writeEnd(); } private void writeImageSizesListHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("h2"); page.writeHtml(page.localize("com.psddev.cms.tool.page.admin.Settings", "subtitle.imageSizes")); page.writeEnd(); writeListHtml(page, StandardImageSize.class, Query.from(StandardImageSize.class).sortAscending("displayName"), selected); } private void writeReferentialTextMarkersListHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("h2"); page.writeHtml(page.localize("com.psddev.cms.tool.page.admin.Settings", "subtitle.refTextMarkers")); page.writeEnd(); writeListHtml(page, ReferentialTextMarker.class, Query.from(ReferentialTextMarker.class).sortAscending("displayName"), selected); } private void writeWebResourceOverridesListHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("h2"); page.writeHtml(page.localize("com.psddev.cms.tool.page.admin.Settings", "subtitle.webResourceOverrides")); page.writeEnd(); page.writeStart("ul", "class", "links"); writeListHtml(page, WebResourceOverride.class, Query.from(WebResourceOverride.class).sortAscending("path"), selected); page.writeEnd(); } private void writeMainHtml(ToolPageContext page, Object selected) throws IOException, ServletException { page.writeStart("div", "class", "main"); page.writeStart("div", "class", "widget"); if (selected != null) { page.writeStandardForm(selected); } page.writeEnd(); page.writeEnd(); } private void writeListHtml(ToolPageContext page, Class<? extends Recordable> recordableClass, Query query, Object selected) throws IOException, ServletException { State selectedState = State.getInstance(selected); page.writeStart("ul", "class", "links"); page.writeStart("li", "class", "new" + (recordableClass.isInstance(selected) && selectedState.isNew() ? " selected" : "")); page.writeStart("a", "href", page.typeUrl(null, recordableClass)); page.writeHtml(page.localize(recordableClass, "action.newType")); page.writeEnd(); page.writeEnd(); writeListItemsHtml(page, query.selectAll(), selected); page.writeEnd(); } private void writeListItemsHtml(ToolPageContext page, List<?> items, Object selected) throws IOException, ServletException { for (Object object : items) { page.writeStart("li", "class", object.equals(selected) ? "selected" : ""); page.writeStart("a", "href", page.objectUrl(null, object)); page.writeObjectLabel(object); page.writeEnd(); page.writeEnd(); } } }