01: /*
02:
03: This software is OSI Certified Open Source Software.
04: OSI Certified is a certification mark of the Open Source Initiative.
05:
06: The license (Mozilla version 1.0) can be read at the MMBase site.
07: See http://www.MMBase.org/license
08:
09: */
10:
11: package org.mmbase.util.functions;
12:
13: /**
14: * If there is no Parameter definition array available you could try it with this specialization, which does not need one.
15: * You loose al checking on type and availability. It should only be used as a last fall back and accompanied by warnings.
16: *
17: * @author Michiel Meeuwissen
18: * @since MMBase-1.7
19: * @version $Id: AutodefiningParameters.java,v 1.13 2007/11/25 18:25:49 nklasens Exp $
20: * @see Parameter
21: */
22:
23: public class AutodefiningParameters extends Parameters {
24: //private static Logger log = Logging.getLoggerInstance(AutodefiningParameters.class);
25:
26: public AutodefiningParameters(Parameter<?>[] base) {
27: super (base);
28: }
29:
30: public AutodefiningParameters() {
31: super (new Parameter[0]);
32: }
33:
34: public boolean containsParameter(Parameter<?> param) {
35: return true;
36: }
37:
38: protected int define(Parameter param) {
39: Parameter<Object>[] newDef = new Parameter[definition.length + 1];
40: for (int i = 0; i < definition.length; i++) {
41: newDef[i] = definition[i];
42: }
43: newDef[newDef.length - 1] = param;
44: definition = newDef;
45: toIndex++;
46: return definition.length - 1;
47: }
48:
49: protected int define(String param) {
50: return define(new Parameter<Object>(param, Object.class));
51: }
52:
53: public int indexOfParameter(Parameter parameter) {
54: int index = super .indexOfParameter(parameter);
55: if (index == -1) {
56: return define(parameter);
57: } else {
58: return index;
59: }
60: }
61:
62: public int indexOfParameter(String parameterName) {
63: int index = super .indexOfParameter(parameterName);
64: if (index == -1) {
65: return define(parameterName);
66: } else {
67: return index;
68: }
69: }
70:
71: public static void main(String[] args) {
72: AutodefiningParameters pars = new AutodefiningParameters();
73: for (String arg : args) {
74: pars.setIfDefined(arg, "");
75: }
76:
77: System.out.println("" + pars);
78: for (String arg : args) {
79: System.out.println(" " + arg + ": "
80: + pars.indexOfParameter(arg));
81: }
82: for (String arg : args) {
83: pars.set(arg, "X");
84: }
85:
86: for (String arg : args) {
87: System.out.println(" " + arg + ": "
88: + pars.indexOfParameter(arg));
89: }
90:
91: }
92:
93: }
|