View Javadoc
1   /*
2    * Copyright 2008 Lukas Lang
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   */
17  package org.exolab.castor.builder.info.nature.relation;
18  
19  import java.util.List;
20  
21  import org.castor.core.nature.BaseNature;
22  import org.exolab.castor.builder.info.FieldInfo;
23  
24  /**
25   * A {@link JDOOneToOneNature} defines a one-to-one relation between two
26   * {@link FieldInfo}s.
27   * 
28   * @author Lukas Lang, Filip Hianik
29   */
30  public final class JDOOneToOneNature extends BaseNature {
31  
32      /**
33       * Property key for foreign key.
34       */
35      private static final String FOREIGN_KEY = "foreignkey";
36      /**
37       * Property key for the property read only.
38       */
39      private static final String READONLY = "readonly";
40      /**
41       * Property key for the property dirty.
42       */
43      private static final String DIRTY = "dirty";
44      
45      /**
46       * Constructor taking a {@link FieldInfo}.
47       * 
48       * @param field
49       *            The field.
50       */
51      public JDOOneToOneNature(final FieldInfo field) {
52          super(field);
53      }
54  
55      /**
56       * Returns the Nature Id.
57       * 
58       * @see org.castor.core.nature.Nature#getId()
59       * @return The fully qualified {@link Class} name.
60       */
61      public String getId() {
62          return getClass().getName();
63      }
64      
65      /**
66       * Returns true if no update on the column can be performed, false
67       * otherwise. Default value is false.
68       * 
69       * @return true if readonly, false if not or not set.
70       */
71      public boolean isReadOnly() {
72          return getBooleanPropertyDefaultFalse(READONLY);
73      }
74  
75      /**
76       * Sets the column read only.
77       * 
78       * @param readOnly
79       *            true if read only.
80       */
81      public void setReadOnly(final boolean readOnly) {
82          setProperty(READONLY, new Boolean(readOnly));
83      }
84      
85      /**
86       * Returns true if field will NOT be checked against the database for
87       * modification, otherwise false. Default value is false.
88       * 
89       * @return true if field is not updated, false if not or not set.
90       */
91      public boolean isDirty() {
92          return getBooleanPropertyDefaultFalse(DIRTY);
93      }
94  
95      /**
96       * If set true, field will NOT be checked against the database for
97       * modification, otherwise set false.
98       * 
99       * @param dirty
100      *            true if field should not be updated.
101      */
102     public void setDirty(final boolean dirty) {
103         setProperty(DIRTY, new Boolean(dirty));
104     }
105 
106     /**
107      * Returns a List of {@String}s holding the columns of the foreign key.
108      * Keep in mind that by contract of
109      * <code>addPrimaryKey(String foreignKey)</code> the order is not
110      * guaranteed.
111      * 
112      * @return the names of the foreign key's columns or null if no keys added
113      *         before.
114      */
115     @SuppressWarnings("unchecked")
116     public List<String> getForeignKeys() {
117         return (List<String>) this.getProperty(FOREIGN_KEY);
118     }
119 
120     /**
121      * Adds a column to the foreign key. By contract, the order of the key
122      * columns is not guaranteed and depends on the returned List implementation 
123      * the {@link BaseNature} is using.
124      * 
125      * @param column
126      *            The column name.
127      */
128     @SuppressWarnings("unchecked")
129     public void addForeignKey(final String column) {
130         List<String> foreignKey = getPropertyAsList(FOREIGN_KEY);
131         foreignKey.add(column);
132     }
133 
134 }