/* * Copyright (c) 2010-2015 Evolveum * * 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 com.evolveum.midpoint.web.page.admin.configuration.dto; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import org.apache.commons.lang.StringUtils; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.schema.util.SystemConfigurationTypeUtil; import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto; import com.evolveum.midpoint.xml.ns._public.common.common_3.AppenderConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPoliciesType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FileAppenderConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ProjectionPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RichHyperlinkType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ValuePolicyType; /** * @author lazyman */ public class SystemConfigurationDto implements Serializable { public static final String F_AEP_LEVEL = "aepLevel"; public static final String F_AUDIT_CLEANUP = "auditCleanupValue"; public static final String F_TASK_CLEANUP = "taskCleanupValue"; public static final String F_PASSWORD_POLICY = "passPolicyDto"; public static final String F_SECURITY_POLICY = "securityPolicyDto"; public static final String F_OBJECT_TEMPLATE = "objectTemplateDto"; public static final String F_OBJECT_POLICY_LIST = "objectPolicyList"; public static final String F_NOTIFICATION_CONFIGURATION = "notificationConfig"; public static final String F_ENABLE_EXPERIMENTAL_CODE = "enableExperimentalCode"; public static final String F_USER_DASHBOARD_LINK = "userDashboardLink"; public static final String F_ADDITIONAL_MENU_LINK = "additionalMenuLink"; private AEPlevel aepLevel; private String auditCleanupValue; private String taskCleanupValue; private Boolean enableExperimentalCode; private ObjectViewDto<ValuePolicyType> passPolicyDto; private ObjectViewDto<SecurityPolicyType> securityPolicyDto; private List<ObjectPolicyConfigurationTypeDto> objectPolicyList; private NotificationConfigurationDto notificationConfig; private List<RichHyperlinkType> userDashboardLink; private List<RichHyperlinkType> additionalMenuLink; private LoggingDto loggingConfig; private ProfilingDto profilingDto; private SystemConfigurationType oldObject; private List<AppenderConfiguration> appenders = new ArrayList<>(); public SystemConfigurationDto() { this(null); } public SystemConfigurationDto(PrismObject<SystemConfigurationType> config) { oldObject = config.clone().asObjectable(); init(config.asObjectable()); } private void init(SystemConfigurationType config) { if (config == null) { return; } if (config.getGlobalAccountSynchronizationSettings() != null) { AssignmentPolicyEnforcementType globalAEP = config.getGlobalAccountSynchronizationSettings() .getAssignmentPolicyEnforcement(); aepLevel = AEPlevel.fromAEPLevelType(globalAEP); } CleanupPolicyType auditCleanup = config.getCleanupPolicy().getAuditRecords(); CleanupPolicyType taskCleanup = config.getCleanupPolicy().getClosedTasks(); auditCleanupValue = auditCleanup.getMaxAge().toString(); taskCleanupValue = taskCleanup.getMaxAge().toString(); passPolicyDto = loadPasswordPolicy(config); securityPolicyDto = loadSecurityPolicy(config); objectPolicyList = new ArrayList<>(); List<ObjectPolicyConfigurationType> objectPolicies = config.getDefaultObjectPolicyConfiguration(); if (objectPolicies != null && !objectPolicies.isEmpty()) { for (ObjectPolicyConfigurationType policy : objectPolicies) { objectPolicyList.add(new ObjectPolicyConfigurationTypeDto(policy)); } } else { objectPolicyList.add(new ObjectPolicyConfigurationTypeDto()); } // NOTIFICATIONS if (config.getNotificationConfiguration() != null) { notificationConfig = new NotificationConfigurationDto(config.getNotificationConfiguration()); } else { notificationConfig = new NotificationConfigurationDto(); } // LOGGING LoggingConfigurationType logging = config.getLogging(); if (logging != null) { for (AppenderConfigurationType appender : logging.getAppender()) { if (appender instanceof FileAppenderConfigurationType) { appenders.add(new FileAppenderConfig((FileAppenderConfigurationType) appender)); } else { appenders.add(new AppenderConfiguration(appender)); } } Collections.sort(appenders); loggingConfig = new LoggingDto(config.getLogging()); } else { loggingConfig = new LoggingDto(); } loggingConfig.setAppenders(appenders); // PROFILING if (config.getProfilingConfiguration() != null) { List<ClassLoggerConfigurationType> classLoggerConfig = config.getLogging() != null ? config.getLogging().getClassLogger() : null; profilingDto = new ProfilingDto(config.getProfilingConfiguration(), classLoggerConfig); } else { profilingDto = new ProfilingDto(); } profilingDto.setAppenders(appenders); enableExperimentalCode = SystemConfigurationTypeUtil.isExperimentalCodeEnabled(config); userDashboardLink = loadUserDashboardLink(config); additionalMenuLink = loadAdditionalMenuItem(config); } public SystemConfigurationType getOldObject() { return oldObject; } public SystemConfigurationType getNewObject() throws DatatypeConfigurationException { SystemConfigurationType newObject = oldObject.clone(); if (StringUtils.isNotBlank(getPassPolicyDto().getOid())) { ObjectReferenceType globalPassPolicyRef = ObjectTypeUtil .createObjectRef(getPassPolicyDto().getOid(), ObjectTypes.PASSWORD_POLICY); newObject.setGlobalPasswordPolicyRef(globalPassPolicyRef); } else { newObject.setGlobalPasswordPolicyRef(null); } if (StringUtils.isNotBlank(getSecurityPolicyDto().getOid())) { ObjectReferenceType globalSecurityPolicyRef = ObjectTypeUtil.createObjectRef( getSecurityPolicyDto().getOid(), WebComponentUtil.createPolyFromOrigString(getSecurityPolicyDto().getName()), ObjectTypes.SECURITY_POLICY); newObject.setGlobalSecurityPolicyRef(globalSecurityPolicyRef); } else { newObject.setGlobalSecurityPolicyRef(null); } AssignmentPolicyEnforcementType globalAEP = AEPlevel.toAEPValueType(getAepLevel()); if (globalAEP != null) { ProjectionPolicyType projectionPolicy = new ProjectionPolicyType(); projectionPolicy.setAssignmentPolicyEnforcement(globalAEP); newObject.setGlobalAccountSynchronizationSettings(projectionPolicy); } Duration auditCleanupDuration = DatatypeFactory.newInstance().newDuration(getAuditCleanupValue()); Duration cleanupTaskDuration = DatatypeFactory.newInstance().newDuration(getTaskCleanupValue()); CleanupPolicyType auditCleanup = new CleanupPolicyType(); CleanupPolicyType taskCleanup = new CleanupPolicyType(); auditCleanup.setMaxAge(auditCleanupDuration); taskCleanup.setMaxAge(cleanupTaskDuration); CleanupPoliciesType cleanupPolicies = new CleanupPoliciesType(); cleanupPolicies.setAuditRecords(auditCleanup); cleanupPolicies.setClosedTasks(taskCleanup); newObject.setCleanupPolicy(cleanupPolicies); SystemConfigurationTypeUtil.setEnableExperimentalCode(newObject, getEnableExperimentalCode()); newObject.setLogging(loggingConfig.getNewObject()); newObject.setNotificationConfiguration(notificationConfig.getNewObject(newObject)); newObject.setProfilingConfiguration(profilingDto.getNewObject()); ClassLoggerConfigurationType profilingClassLogger = profilingDto.getProfilingClassLogerConfig(); if (newObject.getLogging() != null) { newObject.getLogging().getClassLogger().add(profilingClassLogger); } else { LoggingConfigurationType profLogging = new LoggingConfigurationType(); profLogging.getClassLogger().add(profilingClassLogger); newObject.setLogging(profLogging); } return newObject; } public static List<RichHyperlinkType> loadUserDashboardLink(SystemConfigurationType config) { List<RichHyperlinkType> links = new ArrayList<>(); if (config == null || config.getInternals() == null || config.getInternals().isEnableExperimentalCode() == null) { return links; } if (config.getAdminGuiConfiguration() != null) { links.addAll(config.getAdminGuiConfiguration().getUserDashboardLink()); } return links; } public static List<RichHyperlinkType> loadAdditionalMenuItem(SystemConfigurationType config) { List<RichHyperlinkType> links = new ArrayList<>(); if (config == null || config.getInternals() == null || config.getInternals().isEnableExperimentalCode() == null) { return links; } if (config.getAdminGuiConfiguration() != null) { links.addAll(config.getAdminGuiConfiguration().getAdditionalMenuLink()); } return links; } private ObjectViewDto<ValuePolicyType> loadPasswordPolicy(SystemConfigurationType config) { ValuePolicyType passPolicy = config.getGlobalPasswordPolicy(); if (passPolicy != null) { passPolicyDto = new ObjectViewDto<>(passPolicy.getOid(), passPolicy.getName().getOrig()); } else { passPolicyDto = new ObjectViewDto<>(); } passPolicyDto.setType(ValuePolicyType.class); return passPolicyDto; } private ObjectViewDto<SecurityPolicyType> loadSecurityPolicy(SystemConfigurationType config) { ObjectReferenceType securityPolicy = config.getGlobalSecurityPolicyRef(); if (securityPolicy != null) { securityPolicyDto = new ObjectViewDto<SecurityPolicyType>(securityPolicy.getOid(), WebComponentUtil.getName(securityPolicy)); } else { securityPolicyDto = new ObjectViewDto<SecurityPolicyType>(); } securityPolicyDto.setType(SecurityPolicyType.class); return securityPolicyDto; } public String getAuditCleanupValue() { return auditCleanupValue; } public void setAuditCleanupValue(String auditCleanupValue) { this.auditCleanupValue = auditCleanupValue; } public String getTaskCleanupValue() { return taskCleanupValue; } public void setTaskCleanupValue(String taskCleanupValue) { this.taskCleanupValue = taskCleanupValue; } public AEPlevel getAepLevel() { return aepLevel; } public void setAepLevel(AEPlevel aepLevel) { this.aepLevel = aepLevel; } public ObjectViewDto<ValuePolicyType> getPassPolicyDto() { return passPolicyDto; } public void setPassPolicyDto(ObjectViewDto<ValuePolicyType> passPolicyDto) { this.passPolicyDto = passPolicyDto; } public ObjectViewDto<SecurityPolicyType> getSecurityPolicyDto() { return securityPolicyDto; } public void setSecurityPolicyDto(ObjectViewDto<SecurityPolicyType> securityPolicyDto) { this.securityPolicyDto = securityPolicyDto; } public NotificationConfigurationDto getNotificationConfig() { return notificationConfig; } public void setNotificationConfig(NotificationConfigurationDto notificationConfig) { this.notificationConfig = notificationConfig; } public LoggingDto getLoggingConfig() { return loggingConfig; } public void setLoggingConfig(LoggingDto loggingConfig) { this.loggingConfig = loggingConfig; } public ProfilingDto getProfilingDto() { return profilingDto; } public void setProfilingDto(ProfilingDto profilingDto) { this.profilingDto = profilingDto; } public List<ObjectPolicyConfigurationTypeDto> getObjectPolicyList() { return objectPolicyList; } public void setObjectPolicyList(List<ObjectPolicyConfigurationTypeDto> objectPolicyList) { this.objectPolicyList = objectPolicyList; } public Boolean getEnableExperimentalCode() { return enableExperimentalCode; } public void setEnableExperimentalCode(Boolean enableExperimentalCode) { this.enableExperimentalCode = enableExperimentalCode; } public List<RichHyperlinkType> getUserDashboardLink() { return userDashboardLink; } public void setUserDashboardLink(List<RichHyperlinkType> userDashboardLink) { this.userDashboardLink = userDashboardLink; } public List<RichHyperlinkType> getAdditionalMenuLink() { return additionalMenuLink; } public void setAdditionalMenuLink(List<RichHyperlinkType> additionalMenuLink) { this.additionalMenuLink = additionalMenuLink; } }