KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > modeler > dialog > DbJoinTableModel


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.modeler.dialog;
57
58 import java.util.ArrayList JavaDoc;
59
60 import org.objectstyle.cayenne.map.DbEntity;
61 import org.objectstyle.cayenne.map.DbJoin;
62 import org.objectstyle.cayenne.map.DbRelationship;
63 import org.objectstyle.cayenne.modeler.ProjectController;
64 import org.objectstyle.cayenne.modeler.util.CayenneTableModel;
65
66 /** Model for editing DbAttributePair-s. Changes in the join attributes
67  * don't take place until commit() is called. Creation of the new
68  * DbAttributes is not allowed - user should choose from the existing ones.
69 */

70 public class DbJoinTableModel extends CayenneTableModel {
71
72     // Columns
73
static final int SOURCE = 0;
74     static final int TARGET = 1;
75
76     protected DbRelationship relationship;
77     protected DbEntity source;
78     protected DbEntity target;
79
80     /** Is the table editable. */
81     private boolean editable;
82
83     public DbJoinTableModel(
84         DbRelationship relationship,
85         ProjectController mediator,
86         Object JavaDoc src) {
87
88         super(mediator, src, new ArrayList JavaDoc(relationship.getJoins()));
89         this.relationship = relationship;
90         this.source = (DbEntity) relationship.getSourceEntity();
91         this.target = (DbEntity) relationship.getTargetEntity();
92     }
93
94     public DbJoinTableModel(
95         DbRelationship relationship,
96         ProjectController mediator,
97         Object JavaDoc src,
98         boolean editable) {
99
100         this(relationship, mediator, src);
101         this.editable = editable;
102     }
103
104     public Class JavaDoc getElementsClass() {
105         return DbJoin.class;
106     }
107
108     /** Mode new attribute pairs from list to the DbRelationship. */
109     public void commit() {
110         relationship.setJoins(getObjectList());
111     }
112
113     /**
114      * Returns null to disable ordering.
115      */

116     public String JavaDoc getOrderingKey() {
117         return null;
118     }
119
120     public int getColumnCount() {
121         return 2;
122     }
123
124     public String JavaDoc getColumnName(int column) {
125         if (column == SOURCE)
126             return "Source";
127         else if (column == TARGET)
128             return "Target";
129         else
130             return "";
131     }
132
133     public DbJoin getJoin(int row) {
134         return (row >= 0 && row < objectList.size())
135             ? (DbJoin) objectList.get(row)
136             : null;
137     }
138
139     public Object JavaDoc getValueAt(int row, int column) {
140         DbJoin join = getJoin(row);
141         if (join == null) {
142             return null;
143         }
144
145         if (column == SOURCE) {
146             return join.getSourceName();
147         }
148         else if (column == TARGET) {
149             return join.getTargetName();
150         }
151         else {
152             return null;
153         }
154
155     }
156
157     public void setUpdatedValueAt(Object JavaDoc aValue, int row, int column) {
158         DbJoin join = getJoin(row);
159         if (join == null) {
160             return;
161         }
162
163         String JavaDoc value = (String JavaDoc) aValue;
164         if (column == SOURCE) {
165             if (source == null || source.getAttribute(value) == null) {
166                 value = null;
167             }
168
169             join.setSourceName(value);
170         }
171         else if (column == TARGET) {
172             if (target == null || target.getAttribute(value) == null) {
173                 value = null;
174             }
175
176             join.setTargetName(value);
177         }
178         
179         fireTableRowsUpdated(row, row);
180     }
181
182     public boolean isCellEditable(int row, int col) {
183         if (col == SOURCE) {
184             return relationship.getSourceEntity() != null && editable;
185         }
186         else if (col == TARGET) {
187             return relationship.getTargetEntity() != null && editable;
188         }
189
190         return false;
191     }
192 }
193
Popular Tags