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.preference;
017    
018    import java.util.ArrayList;
019    import java.util.Iterator;
020    import java.util.List;
021    
022    import org.springframework.richclient.application.ApplicationServicesLocator;
023    import org.springframework.richclient.application.config.ApplicationObjectConfigurer;
024    import org.springframework.richclient.core.DefaultMessage;
025    import org.springframework.richclient.core.Severity;
026    import org.springframework.richclient.dialog.MessageDialog;
027    import org.springframework.richclient.settings.SettingsException;
028    import org.springframework.richclient.settings.SettingsManager;
029    
030    /**
031     * Manages the PreferenceStore and the PreferenceDialog.
032     * 
033     * @author Peter De Bruycker
034     */
035    public class PreferenceManager {
036    
037        private PreferenceDialog dialog;
038    
039        private List preferencePages = new ArrayList();
040    
041        private SettingsManager settingsManager;
042    
043        private ApplicationObjectConfigurer objectConfigurer;
044    
045        public void showDialog() {
046            if (dialog == null) {
047                dialog = createDialog();
048    
049                for (Iterator iter = preferencePages.iterator(); iter.hasNext();) {
050                    PreferencePage page = (PreferencePage) iter.next();
051                    if (page.getParent() == null) {
052                        dialog.addPreferencePage(page);
053                    } else {
054                        dialog.addPreferencePage(page.getParent(), page);
055                    }
056                }
057    
058                try {
059                    dialog.setSettings(settingsManager.getUserSettings());
060                } catch (SettingsException e) {
061                    new MessageDialog("Error", new DefaultMessage(e.getMessage(), Severity.ERROR)).showDialog();
062                    e.printStackTrace();
063                }
064            }
065    
066            // dialog creation can fail
067            if (dialog != null) {
068                dialog.showDialog();
069            }
070        }
071    
072        /**
073         * @return
074         */
075        protected PreferenceDialog createDialog() {
076            PreferenceDialog dialog = new PreferenceDialog();
077            getObjectConfigurer().configure(dialog, "preferenceDialog");
078            return dialog;
079        }
080    
081        public ApplicationObjectConfigurer getObjectConfigurer() {
082            if (objectConfigurer == null) {
083                objectConfigurer = (ApplicationObjectConfigurer) ApplicationServicesLocator.services().getService(
084                        ApplicationObjectConfigurer.class);
085            }
086            return objectConfigurer;
087        }
088    
089        public void setObjectConfigurer(ApplicationObjectConfigurer objectConfigurer) {
090            this.objectConfigurer = objectConfigurer;
091        }
092    
093        public void setPreferencePages(List pages) {
094            preferencePages = pages;
095        }
096    
097        public SettingsManager getSettingsManager() {
098            return settingsManager;
099        }
100    
101        public void setSettingsManager(SettingsManager settingsManager) {
102            this.settingsManager = settingsManager;
103        }
104    }