summaryrefslogtreecommitdiffstats
path: root/tags/java-M1-20060518/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java
blob: 4ea42f41b283ceb82cd2fa01e4fd1ed3f41272ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**
 *
 *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.apache.tuscany.das.rdb.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.tuscany.das.rdb.Parameter;
import org.apache.tuscany.das.rdb.SDODataTypes;
import org.apache.tuscany.das.rdb.util.DebugUtil;

import commonj.sdo.Type;

public class Parameters {

	private ArrayList parameters = new ArrayList();

	private ArrayList inParams = new ArrayList();

	private ArrayList outParams = new ArrayList();

	private HashMap parametersByName = new HashMap();

	private static boolean debug = false;

	public Parameters() {
		super();
	}

	public Parameter get(String name) {
		return (Parameter) parametersByName.get(name);
	}

	public Parameter get(int index) {
		return (Parameter) parameters.get(index);
	}

	public List outParams() {
		return outParams;
	}

	public List inParams() {
		return inParams;
	}

	private void addParameter(Parameter param) {
		if (param.getDirection() == Parameter.IN)
			inParams.add(param);
		else if ((param.getDirection() == Parameter.OUT)
				|| (param.getDirection() == Parameter.IN_OUT))
			outParams.add(param);

		this.parameters.add(param);
		parametersByName.put(param.getName(), param);
	}

	public void add(Parameter param) {
		addParameter(param);
	}

	public Parameter findOrCreateParameterNamed(String name) {
		Parameter param = get(name);
		if (param == null) {
			param = new ParameterImpl(name);
			addParameter(param);
		}
		return param;
	}

	public Parameter findOrCreateParameterWithIndex(int index, int direction,
			Type sdoType) {
		Iterator i = parameters.iterator();
		while (i.hasNext()) {
			Parameter param = (Parameter) i.next();

			if (param.getIndex() == index)
				return param;
		}
		DebugUtil.debugln(getClass(), debug,
				"Creating new parameter with index " + index);
		Parameter newParam = new ParameterImpl(index);
		newParam.setDirection(direction);
		newParam.setType(sdoType);
		addParameter(newParam);
		return newParam;
	}

	public List parameterList() {
		return parameters;
	}

	public Parameter findOrCreateParameterWithIndex(int index) {
		return findOrCreateParameterWithIndex(index, Parameter.IN,
				SDODataTypes.OBJECT);
	}

	public void setParameter(int index, Object value) {
		Parameter param = findOrCreateParameterWithIndex(index);
		param.setValue(value);
	}

	public void setParameter(String name, Object value) {
		if (name == null)
			throw new RuntimeException("Null parameter name not allowed");
		Parameter param = findOrCreateParameterNamed(name);
		param.setValue(value);
	}

	public void setParameterWithType(String name, Type sdoType) {
		if (name == null)
			throw new RuntimeException("Null parameter name not allowed");
		Parameter p = findOrCreateParameterNamed(name);
		p.setType(sdoType);
	}

    public void setParameterWithType(int index, Type sdoType) {
        if (index == 0)
            throw new RuntimeException("Null parameter index not allowed");
        Parameter p = findOrCreateParameterWithIndex(index);
        p.setType(sdoType);
    }
    
    public Parameter parameterWithIndex(int index) {
		Iterator i = parameters.iterator();
		while (i.hasNext()) {
			Parameter param = (Parameter) i.next();

			if (param.getIndex() == index)
				return param;
		}
		return null;
	}

}