001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2008
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.shared.configuration;
034:
035: /**
036: * Configuration parameter interface.
037: *
038: * @author Daniel Lichtenberger (daniel.lichtenberger@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
039: * @param <T> parameter value type
040: */
041: public interface Parameter<T> {
042: /**
043: * Returns the data object containing path and key for the parameter.
044: * @return the data object containing path and key for the parameter.
045: */
046: ParameterData<T> getData();
047:
048: /**
049: * Convert the given database value (in string representation) to
050: * an object of type <code>T</code>.
051: *
052: * @param dbValue the value to be converted
053: * @return dbValue as type <code>T</code>.
054: */
055: T getValue(Object dbValue);
056:
057: /**
058: * Convert the given value to a string that will be stored in the
059: * configuration.
060: *
061: * @param value the parameter value to be stored
062: * @return the value's string representation
063: * @see Parameter#getValue(Object)
064: */
065: String getDatabaseValue(T value);
066:
067: /**
068: * Returns true if the given value is a valid configuration value
069: * (e.g. primitive parameters may not be null).
070: *
071: * @param value the value to be checked
072: * @return true if the given value is a valid configuration value
073: */
074: boolean isValid(T value);
075:
076: /**
077: * Return the parameter's default value or null if it is not set.
078: * @return the parameter's default value or null if it is not set.
079: */
080: T getDefaultValue();
081:
082: /**
083: * Return the parameter's path (including its scope).
084: * @return the parameter's path (including its scope).
085: */
086: ParameterPath getPath();
087:
088: /**
089: * Return the parameter's scope.
090: * @return the parameter's scope.
091: */
092: ParameterScope getScope();
093:
094: /**
095: * Return the parameter's key.
096: * @return the parameter's key.
097: */
098: String getKey();
099:
100: /**
101: * Sets the data for this parameter. Only works if the parameter instance
102: * is not frozen yet (see {@link #freeze()}).
103: *
104: * @param data the parameter data beans
105: * @return this
106: */
107: Parameter<T> setData(ParameterData<T> data);
108:
109: /**
110: * Freeze the parameter configuration. The parameter data cannot be modified
111: * on this instance after calling this method.
112: *
113: * @return this
114: */
115: Parameter<T> freeze();
116:
117: /**
118: * Return a copy of this parameter instance. If this instance was frozen, the
119: * new object will be "unfrozen". The {@link ParameterData} instance will not be
120: * cloned, however you can replace it with a new instance, e.g. to update the parameter key.
121: *
122: * @return a copy of this parameter instance
123: */
124: Parameter<T> copy();
125: }
|