001/*
002 * (C) Copyright 2011-2015 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     tdelprat, jcarsique
016 *
017 */
018
019package org.nuxeo.wizard.context;
020
021import java.util.ArrayList;
022import java.util.Arrays;
023import java.util.Enumeration;
024import java.util.HashMap;
025import java.util.List;
026import java.util.Map;
027
028import javax.servlet.http.HttpServletRequest;
029
030import org.nuxeo.launcher.config.ConfigurationGenerator;
031
032/**
033 * Manages all the parameters entered by User to configure his Nuxeo server
034 *
035 * @author Tiry (tdelprat@nuxeo.com)
036 * @since 5.4.2
037 */
038public class ParamCollector {
039
040    public static final String Key = "collector";
041
042    private static final String SKIP_SECTIONS_KEY = "nuxeo.wizard.skippedsections";
043
044    private List<String> sectionsToSkip;
045
046    private ConfigurationGenerator configurationGenerator;
047
048    public ConfigurationGenerator getConfigurationGenerator() {
049        return configurationGenerator;
050    }
051
052    protected Map<String, String> configurationParams = new HashMap<>();
053
054    protected Map<String, String> connectParams = new HashMap<>();
055
056    public ParamCollector() {
057        configurationGenerator = new ConfigurationGenerator();
058        configurationGenerator.init();
059        String skipSections = configurationGenerator.getUserConfig().getProperty(SKIP_SECTIONS_KEY, "");
060        sectionsToSkip = Arrays.asList(skipSections.split(","));
061    }
062
063    public boolean isSectionSkipped(String section) {
064        return sectionsToSkip.contains(section);
065    }
066
067    public void addConfigurationParam(String name, String value) {
068        if (value == null) {
069            configurationParams.remove(name);
070        } else {
071            configurationParams.put(name, value);
072        }
073    }
074
075    public void addConnectParam(String name, String value) {
076        configurationParams.put(name, value);
077    }
078
079    public Map<String, String> getConfigurationParams() {
080        return configurationParams;
081    }
082
083    public Map<String, String> getChangedParameters() {
084        return configurationGenerator.getChangedParameters(configurationParams);
085    }
086
087    public String getConfigurationParam(String name) {
088        String param = configurationParams.get(name);
089        if (param == null) {
090            param = configurationGenerator.getUserConfig().getProperty(name, "");
091        }
092        return param;
093    }
094
095    public String getConfigurationParamValue(String name) {
096        return configurationParams.get(name);
097    }
098
099    public Map<String, String> getConnectParams() {
100        return connectParams;
101    }
102
103    public void collectConfigurationParams(HttpServletRequest req) {
104        Enumeration<String> names = req.getParameterNames();
105        while (names.hasMoreElements()) {
106            String name = names.nextElement();
107            if (name.startsWith("org.nuxeo.") || name.startsWith("nuxeo.") || name.startsWith("mail.")) {
108                String value = req.getParameter(name);
109                if (!value.isEmpty() || (value.isEmpty() && configurationParams.containsKey(name))) {
110                    addConfigurationParam(name, value);
111                }
112            }
113        }
114    }
115
116    /**
117     * @see ConfigurationGenerator#changeDBTemplate(String)
118     * @param templateName database template to use
119     */
120    public void changeDBTemplate(String templateName) {
121        List<String> keys = new ArrayList<>();
122        configurationGenerator.changeDBTemplate(templateName);
123        for (String key : configurationParams.keySet()) {
124            if (key.startsWith("nuxeo.db")) {
125                keys.add(key);
126            }
127        }
128        for (String key : keys) {
129            configurationParams.remove(key);
130        }
131    }
132
133}