001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.settings;
017    
018    import java.io.IOException;
019    import java.io.InputStream;
020    import java.io.OutputStream;
021    
022    /**
023     * Facade for working with <code>Settings</code>. Provides methods for
024     * <code>Settings</code> creation, export, import, ...
025     * <p>
026     * Creation of <code>Settings</code> is delegated to a
027     * <code>SettingsFactory</code>.
028     * <p>
029     * The export and import of <code>Settings</code> is done with xml files
030     * 
031     * @author Peter De Bruycker
032     */
033    public class SettingsManager {
034            private SettingsFactory settingsFactory = new TransientSettingsFactory();
035    
036            private Settings internalSettings;
037    
038            private Settings userSettings;
039    
040            public static final String INTERNAL = "internal";
041    
042            public static final String USER = "user";
043    
044            /**
045             * Returns the internal settings, i.e. the settings used for storing ui
046             * state, and other settings normally not visible and configurable to the
047             * user.
048             * 
049             * @return the internal <code>Settings</code>
050             * @throws SettingsException
051             */
052            public Settings getInternalSettings() throws SettingsException {
053                    if (internalSettings == null) {
054                            internalSettings = createSettings(INTERNAL);
055                    }
056                    return internalSettings;
057            }
058    
059            /**
060             * Returns the user settings, i.e. the settings used for the user
061             * preferences, normally these settings can be changed by the user, and
062             * affect the applications appearance and behaviour. These settings can also
063             * be exported/imported.
064             * 
065             * @return the user <code>Settings</code>
066             * @throws SettingsException
067             */
068            public Settings getUserSettings() throws SettingsException {
069                    if (userSettings == null) {
070                            userSettings = createSettings(USER);
071                    }
072                    return userSettings;
073            }
074    
075            /**
076             * Returns the <code>Settings</code> for the given key. This method should
077             * not be called directly, use <code>{@link #getInternalSettings()}</code>
078             * or <code>{@link #getUserSettings()}</code> instead.
079             * 
080             * @param key
081             *            the key
082             * @return the Settings
083             * @throws SettingsException
084             *             if the <code>Settings</code> could not be created
085             */
086            public Settings createSettings(String key) throws SettingsException {
087                    return settingsFactory.createSettings(key);
088            }
089    
090            /**
091             * Set the settings factory. If the factory is set to <code>null</code>,
092             * the TransientSettingsFactory will be used.
093             * 
094             * @param factory
095             *            the factory
096             */
097            public void setSettingsFactory(SettingsFactory factory) {
098                    settingsFactory = factory;
099                    if (settingsFactory == null) {
100                            settingsFactory = new TransientSettingsFactory();
101                    }
102            }
103    
104            /**
105             * Returns the settings factory.
106             * 
107             * @return the factory
108             */
109            public SettingsFactory getSettingsFactory() {
110                    return settingsFactory;
111            }
112    
113            /**
114             * Export <code>settings</code> to an <code>OutputStream</code>
115             * 
116             * @param settings
117             *            the <code>settings</code>
118             * @param out
119             *            the <code>OutputStream</code>
120             * @throws IOException
121             *             if the settings could not be exported
122             */
123            public void exportSettings(Settings settings, OutputStream out) throws IOException {
124                    throw new UnsupportedOperationException("Not yet implemented");
125            }
126    
127            /**
128             * Import <code>settings</code> from an <code>InputStream</code>
129             * 
130             * @param settings
131             *            the <code>settings</code>
132             * @param in
133             *            the <code>InputStream</code>
134             * @throws IOException
135             *             if the settings could not be imported
136             */
137            public void importSettings(Settings settings, InputStream in) throws IOException {
138                    throw new UnsupportedOperationException("Not yet implemented");
139            }
140    }