KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > map > DbJoin


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.map;
57
58 import org.apache.commons.lang.builder.ToStringBuilder;
59 import org.objectstyle.cayenne.CayenneRuntimeException;
60 import org.objectstyle.cayenne.util.XMLEncoder;
61 import org.objectstyle.cayenne.util.XMLSerializable;
62
63 /**
64  * Defines a join between two attributes of a given relationship.
65  *
66  * @since 1.1
67  * @author Andrei Adamchik
68  */

69 public class DbJoin implements XMLSerializable {
70
71     protected DbRelationship relationship;
72     protected String JavaDoc sourceName;
73     protected String JavaDoc targetName;
74
75     protected DbJoin() {
76     }
77
78     public DbJoin(DbRelationship relationship) {
79         this.relationship = relationship;
80     }
81
82     public DbJoin(DbRelationship relationship, String JavaDoc sourceName, String JavaDoc targetName) {
83         this.relationship = relationship;
84         this.sourceName = sourceName;
85         this.targetName = targetName;
86     }
87
88     /**
89      * Returns a "reverse" join. Join source relationship is not set and must be
90      * initialized by the caller.
91      */

92     public DbJoin createReverseJoin() {
93         DbJoin reverse = new DbJoin();
94         reverse.setTargetName(sourceName);
95         reverse.setSourceName(targetName);
96         return reverse;
97     }
98
99     /**
100      * Returns DbAttribute on on the left side of the join.
101      */

102     public DbAttribute getSource() {
103         if (sourceName == null) {
104             return null;
105         }
106
107         Relationship r = getNonNullRelationship();
108         Entity entity = r.getSourceEntity();
109         if (entity == null) {
110             return null;
111         }
112
113         return (DbAttribute) entity.getAttribute(sourceName);
114     }
115
116     public DbAttribute getTarget() {
117         if (targetName == null) {
118             return null;
119         }
120
121         Relationship r = getNonNullRelationship();
122         Entity entity = r.getTargetEntity();
123         if (entity == null) {
124             return null;
125         }
126
127         return (DbAttribute) entity.getAttribute(targetName);
128     }
129
130     /**
131      * Prints itself as XML to the provided XMLEncoder.
132      */

133     public void encodeAsXML(XMLEncoder encoder) {
134         encoder.print("<db-attribute-pair");
135
136         // sanity check
137
if (getSourceName() != null) {
138             encoder.print(" source=\"");
139             encoder.print(getSourceName());
140             encoder.print("\"");
141         }
142
143         if (getTargetName() != null) {
144             encoder.print(" target=\"");
145             encoder.print(getTargetName());
146             encoder.print("\"");
147         }
148
149         encoder.println("/>");
150     }
151
152     public DbRelationship getRelationship() {
153         return relationship;
154     }
155
156     public String JavaDoc getSourceName() {
157         return sourceName;
158     }
159
160     public String JavaDoc getTargetName() {
161         return targetName;
162     }
163
164     public void setRelationship(DbRelationship relationship) {
165         this.relationship = relationship;
166     }
167
168     public void setSourceName(String JavaDoc string) {
169         sourceName = string;
170     }
171
172     public void setTargetName(String JavaDoc string) {
173         targetName = string;
174     }
175
176     private final DbRelationship getNonNullRelationship() {
177         if (relationship == null) {
178             throw new CayenneRuntimeException("Join has no parent Relationship.");
179         }
180
181         return relationship;
182     }
183
184     public String JavaDoc toString() {
185         ToStringBuilder builder = new ToStringBuilder(this);
186         builder.append("source", getSourceName());
187         builder.append("target", getTargetName());
188         return builder.toString();
189     }
190 }
Popular Tags