summaryrefslogtreecommitdiffstats
path: root/tags/java-stable-20060304/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java
blob: c2d312b56d7a56ad09b347d7d6b7d013bf7223b3 (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
/**
*
*  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.generator.impl;

import java.util.Collection;
import java.util.Iterator;

import org.apache.tuscany.das.rdb.Converter;
import org.apache.tuscany.das.rdb.Parameter;
import org.apache.tuscany.das.rdb.SDODataTypes;
import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
import org.apache.tuscany.das.rdb.impl.DeleteCommandImpl;
import org.apache.tuscany.das.rdb.impl.ParameterImpl;
import org.apache.tuscany.das.rdb.util.DebugUtil;

public class DeleteGenerator {

	public static final DeleteGenerator instance = new DeleteGenerator();

	private static final boolean debug = false;

	public DeleteGenerator() {
		super();
	}

	public String getDeleteStatement(Table t) {
		TableWrapper table = new TableWrapper(t);

		StringBuffer statement = new StringBuffer();
		statement.append("delete from ");
		statement.append(t.getName());
		statement.append(" where ");

		Iterator names = table.getPrimaryKeyNames().iterator();
		Iterator properties = table.getPrimaryKeyProperties().iterator();
		while (names.hasNext() && properties.hasNext()) {
			String name = (String) names.next();
			statement.append(name);
			statement.append(" = ?");
			if (names.hasNext() && properties.hasNext())
				statement.append(" and ");
		}

		DebugUtil.debugln(getClass(), debug, statement.toString());
		return statement.toString();
	}

	public Collection getDeleteParameters(Table table) {
		TableWrapper wrapper = new TableWrapper(table);
		return wrapper.getPrimaryKeyProperties();
	}

	public DeleteCommandImpl getDeleteCommand(Table t) {
		DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(t));
		
		Iterator i = getDeleteParameters(t).iterator();
		for(int idx=1; i.hasNext(); idx++) {
			String property = (String) i.next();
			Parameter p = new ParameterImpl();
			p.setName(property);
			p.setType(SDODataTypes.OBJECT);
			p.setConverter(getConverter(t, property));
			p.setIndex(idx);
			deleteCommand.addParameter(p);
		}
		return deleteCommand;
	}
	
	private Converter getConverter(Table t, String name) {
		TableWrapper tw = new TableWrapper(t);
		String converter = tw.getConverter(name);
		if ( converter != null ) {
			try {
				return (Converter) Class.forName(converter).newInstance();
			} catch (Exception ex) {
				throw new RuntimeException(ex);
			}
		}
		return null;
	}

}