/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.applications.managementtool.actions; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.infoglue.cms.applications.common.actions.InfoGluePropertiesAbstractAction; import org.infoglue.cms.controllers.kernel.impl.simple.ServerNodeController; import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy; import org.infoglue.cms.entities.management.ServerNodeVO; import org.infoglue.cms.exception.SystemException; import org.infoglue.cms.security.InfoGlueAuthenticationFilter; import org.infoglue.cms.util.CmsPropertyHandler; import org.infoglue.cms.util.NotificationMessage; import org.infoglue.cms.util.RemoteCacheUpdater; import org.infoglue.deliver.util.CacheController; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.module.propertyset.PropertySetManager; /** * This class implements the action class for viewServerNodeProperties. * The use-case lets the user see all extra-properties for a serverNode * * @author Mattias Bogeblad */ public class ViewServerNodePropertiesAction extends InfoGluePropertiesAbstractAction { private static final long serialVersionUID = 1L; private ServerNodeVO serverNodeVO = new ServerNodeVO(); private PropertySet propertySet = null; private List serverNodeVOList = new ArrayList(); private String key = null; private String activeDivId = "commonSettings"; public ViewServerNodePropertiesAction() { } protected void initialize(Integer serverNodeId) throws Exception { if(serverNodeId != null && serverNodeId.intValue() > -1) this.serverNodeVO = ServerNodeController.getController().getServerNodeVOWithId(serverNodeId); else { this.serverNodeVO.setName("Default"); } Map args = new HashMap(); args.put("globalKey", "infoglue"); this.propertySet = PropertySetManager.getInstance("jdbc", args); } /** * The main method that fetches the Value-objects for this use-case */ public String doExecute() throws Exception { this.serverNodeVOList = ServerNodeController.getController().getServerNodeVOList(); this.initialize(getServerNodeId()); return "success"; } private void populate(PropertySet ps, String key) { String value = this.getRequest().getParameter(key); if(value != null && !value.equals("")) ps.setString("serverNode_" + this.getServerNodeId() + "_" + key, value); } private void populateData(PropertySet ps, String key) { try { String value = this.getRequest().getParameter(key); if(value != null && !value.equals("")) ps.setData("serverNode_" + this.getServerNodeId() + "_" + key, value.getBytes("utf-8")); } catch(Exception e) { e.printStackTrace(); } } /** * This method saves all application settings by grabbing the stated parameter values from the request. */ public String doSave() throws Exception { validateSecurityCode(); Map args = new HashMap(); args.put("globalKey", "infoglue"); PropertySet ps = PropertySetManager.getInstance("jdbc", args); populate(ps, "isPageCacheOn"); populate(ps, "useSelectivePageCacheUpdate"); populate(ps, "expireCacheAutomatically"); populate(ps, "cacheExpireInterval"); populate(ps, "deliverRequestTimeout"); populate(ps, "liveDeliverRequestTimeout"); populate(ps, "killLiveRequestWhichTimedout"); populate(ps, "useHighLoadLimiter"); populate(ps, "maxActiveRequests"); populate(ps, "maxRequestTime"); populate(ps, "session.timeout"); populate(ps, "compressPageCache"); populate(ps, "compressPageResponse"); populate(ps, "disableDecoratedFinalRendering"); populate(ps, "siteNodesToRecacheOnPublishing"); populate(ps, "recachePublishingMethod"); populate(ps, "recacheUrl"); populate(ps, "useUpdateSecurity"); populate(ps, "allowXForwardedIPCheck"); populate(ps, "allowedAdminIP"); String allowedAdminIP = this.getRequest().getParameter("allowedAdminIP"); if(allowedAdminIP != null && !allowedAdminIP.equals("")) ServerNodeController.getController().setAllowedAdminIP(allowedAdminIP); populate(ps, "pageKey"); populate(ps, "componentKey"); populateData(ps, "cacheSettings"); populateData(ps, "generalSettings"); populateData(ps, "workingGeneralSettings"); populateData(ps, "extraPublicationPersistentCacheNames"); populate(ps, "cmsBaseUrl"); populate(ps, "cmsFullBaseUrl"); populate(ps, "componentEditorUrl"); populate(ps, "componentRendererUrl"); populate(ps, "componentRendererAction"); populate(ps, "editOnSiteUrl"); populate(ps, "useFreeMarker"); populate(ps, "webServerAddress"); populate(ps, "applicationBaseAction"); populate(ps, "digitalAssetBaseUrl"); populate(ps, "imagesBaseUrl"); populate(ps, "digitalAssetPath"); populate(ps, "urlFormatting"); populate(ps, "enableNiceURI"); populate(ps, "enableNiceURIInWorking"); populate(ps, "enableNiceURIForLanguage"); populate(ps, "enableDiskAssets"); populate(ps, "disableAssetDeletionInWorkThread"); populate(ps, "disableAssetDeletionInLiveThread"); populate(ps, "niceURIEncoding"); populate(ps, "niceURIAttributeName"); populate(ps, "niceURIFallbackAttributeName"); populateData(ps, "niceURICharacterReplacingMapping"); populate(ps, "niceURIUseLowerCase"); populate(ps, "niceURIDefaultReplacementCharacter"); populate(ps, "niceURIDisableNiceURIForContent"); populate(ps, "niceURIDefaultReplacementCharacterForContent"); populate(ps, "redirectUsingSystemRedirect"); populate(ps, "orderRedirectsByLength"); populate(ps, "duplicateAssetsBetweenVersions"); populate(ps, "requestArgumentDelimiter"); populate(ps, "errorHandling"); populate(ps, "errorUrl"); populate(ps, "errorBusyUrl"); populate(ps, "externalThumbnailGeneration"); populate(ps, "digitalAssetOptimizer"); populate(ps, "URIEncoding"); populate(ps, "workflowEncoding"); populate(ps, "formsEncoding"); populate(ps, "uploadFromEncoding"); populate(ps, "uploadToEncoding"); populate(ps, "assetKeyFromEncoding"); populate(ps, "assetKeyToEncoding"); populate(ps, "enableCustomCharactersParsing"); populate(ps, "customCharactersForConversion"); populate(ps, "useShortTableNames"); populate(ps, "useImprovedContentCategorySearch"); populate(ps, "logDatabaseMessages"); populate(ps, "statistics.enabled"); populate(ps, "statisticsLogPath"); populate(ps, "statisticsLogOneFilePerDay"); populate(ps, "statisticsLogger"); populate(ps, "contactPersonEmailMetaInfoAttribute"); populate(ps, "notifyResponsibleOnReferenceChange"); populate(ps, "enablePortal"); populate(ps, "portletBase"); populate(ps, "mail.smtp.host"); populate(ps, "mail.smtp.port"); populate(ps, "mail.smtp.auth"); populate(ps, "mail.smtp.user"); populate(ps, "mail.smtp.password"); populate(ps, "mail.contentType"); populate(ps, "systemEmailSender"); populate(ps, "warningEmailReceiver"); populate(ps, "emailRecipientLimit"); populate(ps, "loginUrl"); populate(ps, "logoutUrl"); populate(ps, "invalidLoginUrl"); populate(ps, "successLoginBaseUrl"); populate(ps, "authenticatorClass"); populate(ps, "authorizerClass"); populate(ps, "serverName"); populate(ps, "authConstraint"); populate(ps, "extraParametersFile"); populateData(ps, "extraSecurityParameters"); populate(ps, "casValidateUrl"); populate(ps, "casProxyValidateUrl"); populate(ps, "casServiceUrl"); populate(ps, "casLogoutUrl"); populate(ps, "casCookiesBeforeRedirect"); populate(ps, "useBrowserLanguage"); populate(ps, "ipAddressesToFallbackToBasicAuth"); populate(ps, "forceHTTPProtocol"); populate(ps, "deliver_loginUrl"); populate(ps, "deliver_logoutUrl"); populate(ps, "deliver_invalidLoginUrl"); populate(ps, "deliver_successLoginBaseUrl"); populate(ps, "deliver_authenticatorClass"); populate(ps, "deliver_authorizerClass"); populate(ps, "deliver_serverName"); populate(ps, "deliver_authConstraint"); populate(ps, "deliver_extraParametersFile"); populateData(ps, "deliver_extraSecurityParameters"); populate(ps, "deliver_security.anonymous.username"); populate(ps, "deliver_security.anonymous.password"); populate(ps, "deliver_casValidateUrl"); populate(ps, "deliver_casProxyValidateUrl"); populate(ps, "deliver_casServiceUrl"); populate(ps, "deliver_casLogoutUrl"); populate(ps, "workingStyleInformation"); populate(ps, "finalStyleInformation"); populate(ps, "publishStyleInformation"); populate(ps, "publishedStyleInformation"); populateData(ps, "customContentTypeIcons"); populateData(ps, "shortcuts"); populateData(ps, "WYSIWYGToolbarComboPreviewCSS"); populateData(ps, "WYSIWYGEditorAreaCSS"); populate(ps, "disableImageEditor"); populate(ps, "hideProtectedProperties"); populate(ps, "protectContentTypes"); populate(ps, "protectWorkflows"); populate(ps, "protectCategories"); populate(ps, "internalSearchEngine"); populate(ps, "allowOverrideModifyer"); populate(ps, "skipVersionComment"); populate(ps, "useSimpleComponentDialog"); populate(ps, "hideAccessRightsIfNotAllowedToManage"); populate(ps, "onlyAllowFolderType"); populate(ps, "allowedFolderContentTypeNames"); populate(ps, "skipResultDialogIfPossible"); populate(ps, "maxRows"); populate(ps, "maxNumberOfAssetInSearches"); populate(ps, "gaCode"); populate(ps, "w3cValidationServiceUrl"); populate(ps, "componentBindningAssetBrowser"); populate(ps, "wysiwygEditor"); populate(ps, "prefferedWYSIWYG"); populate(ps, "contentVersionEditorFlavour"); populate(ps, "defaultNumberOfYearsBeforeExpire"); populate(ps, "defaultNumberOfMonthsBeforeRedirectExpire"); populate(ps, "defaultNumberOfMonthsBeforeSystemRedirectExpire"); populate(ps, "enableDateTimeDirectEditing"); populate(ps, "showContentVersionFirst"); populate(ps, "tree"); populate(ps, "treemode"); populate(ps, "disableCustomIcons"); populate(ps, "showComponentsFirst"); populate(ps, "showAllWorkflows"); populate(ps, "editOnSight"); populate(ps, "disableEditOnSightToolbar"); populate(ps, "showInlinePropertiesIcon"); populate(ps, "useDoubleClickOnTextToInlineEdit"); populate(ps, "previewDeliveryUrl"); populate(ps, "stagingDeliveryUrl"); populateData(ps, "internalDeliveryUrls"); populateData(ps, "publicDeliveryUrls"); populateData(ps, "toolLanguages"); populateData(ps, "deploymentServers"); populateData(ps, "vcServers"); populate(ps, "decoratedPageInvoker"); populate(ps, "defaultRepositoryAccessRoles"); populate(ps, "edition.pageSize"); populate(ps, "content.tree.sort"); populate(ps, "structure.tree.sort"); populate(ps, "structure.tree.isHidden"); populate(ps, "content.tree.hideForbidden"); populate(ps, "structure.tree.hideForbidden"); populate(ps, "enforceRigidContentAccess"); populate(ps, "disableEmptyUrls"); populate(ps, "cacheUpdateAction"); populate(ps, "logPath"); populate(ps, "logTransactions"); populate(ps, "enableExtranetCookies"); populate(ps, "useAlternativeBrowserLanguageCheck"); populate(ps, "caseSensitiveRedirects"); populate(ps, "useDNSNameInURI"); populate(ps, "extranetCookieTimeout"); populate(ps, "webServicesBaseUrl"); populate(ps, "livePublicationThreadClass"); populate(ps, "publicationThreadDelay"); populate(ps, "pathsToRecacheOnPublishing"); populate(ps, "disableTemplateDebug"); populate(ps, "exportFormat"); populate(ps, "dbRelease"); populate(ps, "dbUser"); populate(ps, "dbPassword"); populate(ps, "masterServer"); populate(ps, "slaveServer"); populate(ps, "buildName"); populate(ps, "adminToolsPath"); populate(ps, "dbScriptPath"); populate(ps, "digitalAssetUploadPath"); populate(ps, "inputCharacterEncoding"); populate(ps, "deliver_inputCharacterEncoding"); populate(ps, "protectDeliverWorking"); populate(ps, "protectDeliverPreview"); populate(ps, "forceIdentityCheck"); populate(ps, "allowCrossSiteSubmitToPublish"); populate(ps, "usePasswordEncryption"); populate(ps, "helpUrl"); populate(ps, "infoButtonLabel"); populate(ps, "switchInfoButtonLabelToThisHelpUrl"); populate(ps, "contextBasedHelpUrlBase"); populate(ps, "useContextBasedHelp"); populateData(ps, "headerHTML"); populateData(ps, "aboutHTML"); populate(ps, "sendToolbarKeyAsParameter"); populate(ps, "errorTitle"); populateData(ps, "errorHTML"); populate(ps, "enableIfModifiedHeaders"); populate(ps, "allowPublicationEventFilter"); populate(ps, "defaultPublicationEventFilter"); populate(ps, "numberOfVersionsToKeepDuringClean"); populate(ps, "keepOnlyOldPublishedVersionsDuringClean"); populate(ps, "minimumTimeBetweenVersionsDuringClean"); populateData(ps, "assetUploadTransformationsSettings"); populate(ps, "setDerivedLastModifiedInLive"); populate(ps, "standardResponseHeaders"); populate(ps, "maxNumberOfVersionsForDerivedLastModifiedInLive"); populate(ps, "allowInternalCallsBasedOnIP"); populate(ps, "assetFileNameForm"); populate(ps, "viewInheritedAssetsInContentDialog"); populate(ps, "deriveProtocolWhenUsingProtocolRedirects"); populate(ps, "useAccessBasedProtocolRedirects"); populate(ps, "unprotectedProtocolName"); populate(ps, "protectedProtocolName"); populate(ps, "unprotectedProtocolPort"); populate(ps, "protectedProtocolPort"); populate(ps, "accessBasedProtocolRedirectHTTPCode"); populate(ps, "redirectStatusCode"); populate(ps, "responseMethodOnFullErrorURL"); populate(ps, "showRepositoriesByDefaultIfNoAccessRightsAreDefined"); populate(ps, "doubleCheckComponentEditorRights"); populate(ps, "enableDiskBasedDeployment"); populate(ps, "diskBasedDeploymentBasePath"); System.out.println("CmsPropertyHandler.getEnableDiskBasedDeployment()......"); System.out.println("CmsPropertyHandler.getEnableDiskBasedDeployment():" + CmsPropertyHandler.getEnableDiskBasedDeployment()); if(CmsPropertyHandler.getEnableDiskBasedDeployment()) { System.out.println("Starting disk sync area"); org.infoglue.cms.filesync.DevelopmentResourcesSyncService.getInstance(true); } populate(ps, "indexDigitalAssetContent"); populate(ps, "allowedDirectLoginNames"); populate(ps, "onlyShowReferenceIfLatestVersion"); populate(ps, "registryContactMailLanguage"); populate(ps, "useApprovalFlow"); populate(ps, "autoShowApprovalButtons"); populate(ps, "metaInfoAttributesToShowInCreatePageDialog"); populate(ps, "defaultSystemTheme"); populate(ps, "doNotUseTrashcanForRepositories"); populate(ps, "useGlobalRepositoryChange"); populate(ps, "reloadStructureOnActivation"); populate(ps, "useWriteForAccessControlInWorking"); populate(ps, "cleanReferencesAfterDelete"); populate(ps, "optionalContentMode"); populate(ps, "optionalContentHashSlotName"); populate(ps, "optionalContentHashPropertyName"); try { UserControllerProxy.getController().updateAnonymousUserPassword(); } catch (SystemException e) { e.printStackTrace(); } try { CacheController.clearServerNodeProperty(true); InfoGlueAuthenticationFilter.initializeCMSProperties(); } catch (SystemException e) { e.printStackTrace(); } NotificationMessage notificationMessage = new NotificationMessage("ViewServerNodePropertiesAction.doSave():", "ServerNodeProperties", this.getInfoGluePrincipal().getName(), NotificationMessage.SYSTEM, "0", "ServerNodeProperties"); RemoteCacheUpdater.getSystemNotificationMessages().add(notificationMessage); return "save"; } /** * The main method that fetches the Value-objects for this use-case */ public String doDeleteProperty() throws Exception { validateSecurityCode(); Map args = new HashMap(); args.put("globalKey", "infoglue"); PropertySet ps = PropertySetManager.getInstance("jdbc", args); ps.remove("serverNode_" + this.getServerNodeId() + "_" + key); try { CacheController.clearServerNodeProperty(true); InfoGlueAuthenticationFilter.initializeCMSProperties(); } catch (SystemException e) { e.printStackTrace(); } NotificationMessage notificationMessage = new NotificationMessage("ViewServerNodePropertiesAction.doSave():", "ServerNodeProperties", this.getInfoGluePrincipal().getName(), NotificationMessage.SYSTEM, "0", "ServerNodeProperties"); //ChangeNotificationController.getInstance().addNotificationMessage(notificationMessage); RemoteCacheUpdater.getSystemNotificationMessages().add(notificationMessage); return "save"; } /** * The main method that fetches the Value-objects for this use-case */ public String doSaveAndExit() throws Exception { doSave(); return "saveAndExit"; } public java.lang.Integer getServerNodeId() { return this.serverNodeVO.getServerNodeId(); } public void setServerNodeId(java.lang.Integer serverNodeId) throws Exception { this.serverNodeVO.setServerNodeId(serverNodeId); } public ServerNodeVO getServerNodeVO() { return serverNodeVO; } public PropertySet getPropertySet() { return propertySet; } public String getPropertyValue(String prefix, String key) { String value = propertySet.getString("serverNode_" + this.getServerNodeId() + "_" + prefix + "_" + key); return (value != null ? value : ""); } public String getPropertyValue(String key) { String value = propertySet.getString("serverNode_" + this.getServerNodeId() + "_" + key); return (value != null ? value : ""); } public String getDataPropertyValue(String key) throws Exception { byte[] valueBytes = propertySet.getData("serverNode_" + this.getServerNodeId() + "_" + key); return (valueBytes != null ? new String(valueBytes, "utf-8") : ""); } public String getDataPropertyValue(String prefix, String key) throws Exception { byte[] valueBytes = propertySet.getData("serverNode_" + this.getServerNodeId() + "_" + prefix + "_" + key); return (valueBytes != null ? new String(valueBytes, "utf-8") : ""); } public CmsPropertyHandler getCmsPropertyHandler() { return new CmsPropertyHandler(); } public List getServerNodeVOList() { return serverNodeVOList; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getActiveDivId() { return activeDivId; } public void setActiveDivId(String activeDivId) { this.activeDivId = activeDivId; } }