package de.cinovo.cloudconductor.server.web.impl; import java.util.HashSet; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import de.cinovo.cloudconductor.server.ServerTaskHelper; import de.cinovo.cloudconductor.server.dao.IAdditionalLinksDAO; import de.cinovo.cloudconductor.server.dao.ITemplateDAO; import de.cinovo.cloudconductor.server.model.EAdditionalLinks; import de.cinovo.cloudconductor.server.model.EServerOptions; import de.cinovo.cloudconductor.server.model.ETemplate; import de.cinovo.cloudconductor.server.util.ICCProperties; import de.cinovo.cloudconductor.server.util.exception.FormErrorException; import de.cinovo.cloudconductor.server.web.CSViewModel; import de.cinovo.cloudconductor.server.web.helper.AWebPage; import de.cinovo.cloudconductor.server.web.helper.AjaxAnswer; import de.cinovo.cloudconductor.server.web.helper.AjaxAnswer.AjaxAnswerType; import de.cinovo.cloudconductor.server.web.helper.NavbarHardLinks; import de.cinovo.cloudconductor.server.web.helper.NavbarRegistry; import de.cinovo.cloudconductor.server.web.interfaces.IServerOptions; import de.cinovo.cloudconductor.server.web.interfaces.IWebPath; import de.taimos.cxf_renderer.model.RenderedUI; import de.taimos.restutils.RESTAssert; /** * Copyright 2014 Cinovo AG<br> * <br> * * @author psigloch * */ public class ServerOptionsImpl extends AWebPage implements IServerOptions { @Autowired protected IAdditionalLinksDAO dLinks; @Autowired protected ITemplateDAO dTemplate; @Autowired protected NavbarRegistry navReg; @Autowired protected ServerTaskHelper taskHelper; @Override protected String getTemplateFolder() { return "options"; } @Override protected void init() { // nothing to do } @Override protected String getNavElementName() { return "Options"; } @Override @Transactional public RenderedUI view() { final CSViewModel modal = this.createModal("mOptions"); EServerOptions options = this.dServerOptions.get(); modal.addModel("options", options); modal.addModel("timeUnits", TimeUnit.values()); modal.addModel("indexScanAvailable", System.getProperty(ICCProperties.REPO_SCAN, "false")); StringBuilder disallowUninstall = new StringBuilder(); for (String string : options.getDisallowUninstall()) { disallowUninstall.append(string); disallowUninstall.append(System.lineSeparator()); } modal.addModel("disallowUninstall", disallowUninstall.toString()); return modal.render(); } @Override public RenderedUI viewLinks() { final CSViewModel modal = this.createModal("mLinks"); modal.addModel("links", this.dLinks.findList()); return modal.render(); } @Override @Transactional public AjaxAnswer saveOptions(String name, String bgcolor, String autoUpdate, String descr, String needsapproval, String hostCleanUpTimer, String hostCleanUpTimerUnit, String indexScanTimer, String indexScanTimerUnit, String pageRefreshTimer, String pageRefreshTimerUnit, String disallowUninstall) throws FormErrorException { FormErrorException error = null; error = this.assertNotEmpty(name, error, "name"); error = this.assertNotEmpty(bgcolor, error, "bgcolor"); error = this.assertNotEmpty(hostCleanUpTimer, error, "hostCleanUpTimer"); error = this.assertNotEmpty(hostCleanUpTimerUnit, error, "hostCleanUpTimerUnit"); error = this.assertNotEmpty(pageRefreshTimer, error, "pageRefreshTimer"); error = this.assertNotEmpty(pageRefreshTimerUnit, error, "pageRefreshTimerUnit"); if (System.getProperty(ICCProperties.REPO_SCAN, "false").equals("true")) { error = this.assertNotEmpty(indexScanTimer, error, "indexScanTimer"); error = this.assertNotEmpty(indexScanTimerUnit, error, "indexScanTimerUnit"); } if (error != null) { // add the currently entered values to the answer error.addFormParam("name", name); error.addFormParam("bgcolor", bgcolor); error.addFormParam("allowautoupdate", autoUpdate); error.addFormParam("needsapproval", needsapproval); error.addFormParam("hostCleanUpTimer", hostCleanUpTimer); error.addFormParam("hostCleanUpTimerUnit", hostCleanUpTimerUnit); error.addFormParam("indexScanTimer", indexScanTimer); error.addFormParam("indexScanTimerUnit", indexScanTimerUnit); error.addFormParam("pageRefreshTimer", pageRefreshTimer); error.addFormParam("pageRefreshTimerUnit", pageRefreshTimerUnit); error.addFormParam("disallowUninstall", disallowUninstall); error.addFormParam("description", descr); error.setParentUrl(IServerOptions.ROOT); throw error; } EServerOptions options = this.dServerOptions.get(); EServerOptions oldOptions = options; options.setName(name); options.setBgcolor(bgcolor); options.setAllowautoupdate(autoUpdate == null ? false : true); options.setNeedsApproval(needsapproval == null ? false : true); options.setDescription(descr); options.setHostCleanUpTimer(Integer.valueOf(hostCleanUpTimer)); options.setHostCleanUpTimerUnit(TimeUnit.valueOf(hostCleanUpTimerUnit)); if ((indexScanTimer != null) && !indexScanTimer.isEmpty()) { options.setIndexScanTimer(Integer.valueOf(indexScanTimer)); options.setIndexScanTimerUnit(TimeUnit.valueOf(indexScanTimerUnit)); } options.setPageRefreshTimer(Integer.valueOf(pageRefreshTimer)); options.setPageRefreshTimerUnit(TimeUnit.valueOf(pageRefreshTimerUnit)); Set<String> disallowed = new HashSet<>(); for (String string : disallowUninstall.split(System.lineSeparator())) { if (!string.trim().isEmpty()) { disallowed.add(string); } } options.setDisallowUninstall(disallowed); options = this.dServerOptions.save(options); this.handleGlobalDisableAutoUpdate(options); this.taskHelper.updateTasks(oldOptions); AjaxAnswer ajaxRedirect = new AjaxAnswer(IWebPath.WEBROOT + IServerOptions.ROOT, AjaxAnswerType.GET); ajaxRedirect.setInfo("Successfully saved"); return ajaxRedirect; } private void handleGlobalDisableAutoUpdate(EServerOptions options) { if (!options.isAllowautoupdate()) { for (ETemplate t : this.dTemplate.findList()) { if (t.getAutoUpdate()) { t.setAutoUpdate(false); this.dTemplate.save(t); } } } } @Override public RenderedUI addLinkView() { final CSViewModel modal = this.createModal("mAddLink"); return modal.render(); } @Override public AjaxAnswer addLink(String label, String link) throws FormErrorException { FormErrorException error = null; error = this.assertNotEmpty(label, error, "label"); error = this.assertNotEmpty(link, error, "link"); if (error != null) { // add the currently entered values to the answer error.addFormParam("label", label); error.addFormParam("link", link); error.setParentUrl(IServerOptions.ROOT, IServerOptions.ADD_LINK); throw error; } EAdditionalLinks add = new EAdditionalLinks(); add.setLabel(label); add.setUrl(link); add = this.dLinks.save(add); this.navReg.registerSubMenu(NavbarHardLinks.links, add.getLabel(), add.getUrl()); AjaxAnswer ajaxRedirect = new AjaxAnswer(IWebPath.WEBROOT + IServerOptions.ROOT + IServerOptions.LINKS_ROOT, AjaxAnswerType.GET); ajaxRedirect.setInfo("Successfully saved"); return ajaxRedirect; } @Override public RenderedUI deleteLinkView(String label) { EAdditionalLinks link = this.dLinks.findByLabel(label); RESTAssert.assertNotNull(link); final CSViewModel modal = this.createModal("mDeleteLink"); modal.addModel("link", link); return modal.render(); } @Override public AjaxAnswer deleteLink(String label) { EAdditionalLinks link = this.dLinks.findByLabel(label); RESTAssert.assertNotNull(link); this.dLinks.delete(link); this.navReg.unregisterSubMenu(NavbarHardLinks.links, link.getLabel()); AjaxAnswer ajaxRedirect = new AjaxAnswer(IWebPath.WEBROOT + IServerOptions.ROOT + IServerOptions.LINKS_ROOT, AjaxAnswerType.GET); ajaxRedirect.setInfo("The link " + label + " has been deleted."); return ajaxRedirect; } }