001    /*--------------------------------------------------------------------------+
002    $Id: ParameterizedElement.java 26285 2010-02-18 11:22:54Z juergens $
003    |                                                                          |
004    | Copyright 2005-2010 Technische Universitaet Muenchen                     |
005    |                                                                          |
006    | Licensed under the Apache License, Version 2.0 (the "License");          |
007    | you may not use this file except in compliance with the License.         |
008    | You may obtain a copy of the License at                                  |
009    |                                                                          |
010    |    http://www.apache.org/licenses/LICENSE-2.0                            |
011    |                                                                          |
012    | Unless required by applicable law or agreed to in writing, software      |
013    | distributed under the License is distributed on an "AS IS" BASIS,        |
014    | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
015    | See the License for the specific language governing permissions and      |
016    | limitations under the License.                                           |
017    +--------------------------------------------------------------------------*/
018    package edu.tum.cs.simulink.model;
019    
020    import java.util.HashMap;
021    import java.util.HashSet;
022    import java.util.Set;
023    
024    import edu.tum.cs.commons.collections.CollectionUtils;
025    import edu.tum.cs.commons.collections.UnmodifiableSet;
026    
027    /**
028     * This class usually serves as base class for all classes that have a
029     * key-value-mechanism for parameters. It supports a default parameter mechanism
030     * that is often found withing the Simulink library.
031     * 
032     * @author deissenb
033     * @author $Author: juergens $
034     * @version $Rev: 26285 $
035     * @levd.rating GREEN Hash: 42160170C7EA0692A401E240FBD54FE5
036     */
037    public class ParameterizedElement {
038    
039            /** The parameters map. */
040            private final HashMap<String, String> parameters = new HashMap<String, String>();
041    
042            /** Create new element. */
043            protected ParameterizedElement() {
044                    // nothing to do
045            }
046    
047            /**
048             * Creates new element from another parameterized element. This copies all
049             * parameters.
050             */
051            protected ParameterizedElement(ParameterizedElement other) {
052                    parameters.putAll(other.parameters);
053            }
054    
055            /**
056             * Get parameter specified by name. This does <em>not</em> take default
057             * parameters into account.
058             */
059            public String getDeclaredParameter(String name) {
060                    return parameters.get(name);
061            }
062    
063            /**
064             * Get parameter names. This does <em>not</em> take default parameters
065             * into account.
066             */
067            public UnmodifiableSet<String> getDeclaredParameterNames() {
068                    return CollectionUtils.asUnmodifiable(parameters.keySet());
069            }
070    
071            /**
072             * Get parameter specified by name. This takes default parameters into
073             * account.
074             */
075            public String getParameter(String name) {
076                    String value = parameters.get(name);
077                    if (value != null) {
078                            return value;
079                    }
080                    return getDefaultParameter(name);
081            }
082    
083            /**
084             * Get the names of all parameters. This takes default parameters into
085             * account.
086             */
087            public UnmodifiableSet<String> getParameterNames() {
088                    if (getDefaultParameterNames().isEmpty()) {
089                            return CollectionUtils.asUnmodifiable(parameters.keySet());
090                    }
091                    HashSet<String> parametersNames = new HashSet<String>(
092                                    getDefaultParameterNames());
093                    parametersNames.addAll(parameters.keySet());
094                    return CollectionUtils.asUnmodifiable(parametersNames);
095            }
096    
097            /**
098             * Add a parameter.
099             */
100            public void setParameter(String name, String value) {
101                    parameters.put(name.intern(), value.intern());
102            }
103    
104            /**
105             * Get default parameter. This implementation always returns
106             * <code>null</code>.
107             */
108            /* package */String getDefaultParameter(
109                            @SuppressWarnings("unused") String name) {
110                    return null;
111            }
112    
113            /**
114             * Get names of default parameters. This implementation always returns an
115             * empty set.
116             */
117            /* package */Set<String> getDefaultParameterNames() {
118                    return CollectionUtils.emptySet();
119            }
120    }