1 /* 2 * Copyright 2008 Lukas Lang, Filip Hianik 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 JDOOneToManyNature} defines typed properties needed in the context a 26 * one-to-many relation between two {@link FieldInfo}s. 27 * 28 * @author Lukas Lang, Filip Hianik 29 * @since 1.2.1 30 */ 31 public class JDOOneToManyNature extends BaseNature { 32 33 /** 34 * Property key for foreign key. 35 */ 36 private static final String MANY_KEY = "manykey"; 37 /** 38 * Property key for the property read only. 39 */ 40 private static final String READONLY = "readonly"; 41 /** 42 * Property key for the property dirty. 43 */ 44 private static final String DIRTY = "dirty"; 45 46 /** 47 * Constructor taking a {@link FieldInfo}. 48 * 49 * @param field 50 * The field. 51 */ 52 public JDOOneToManyNature(final FieldInfo field) { 53 super(field); 54 } 55 56 /** 57 * Returns the Nature Id. 58 * 59 * @see org.castor.core.nature.Nature#getId() 60 * @return The fully qualified {@link Class} name. 61 */ 62 public String getId() { 63 return getClass().getName(); 64 } 65 66 /** 67 * Returns true if no update on the column can be performed, false 68 * otherwise. Default value is false. 69 * 70 * @return true if readonly, false if not or not set. 71 */ 72 public boolean isReadOnly() { 73 return getBooleanPropertyDefaultFalse(READONLY); 74 } 75 76 /** 77 * Sets the column read only. 78 * 79 * @param readOnly 80 * true if read only. 81 */ 82 public void setReadOnly(final boolean readOnly) { 83 setProperty(READONLY, new Boolean(readOnly)); 84 } 85 86 /** 87 * Returns true if field will NOT be checked against the database for 88 * modification, otherwise false. Default value is false. 89 * 90 * @return true if field is not updated, false if not or not set. 91 */ 92 public boolean isDirty() { 93 return getBooleanPropertyDefaultFalse(DIRTY); 94 } 95 96 /** 97 * If set true, field will NOT be checked against the database for 98 * modification, otherwise set false. 99 * 100 * @param dirty 101 * true if field should not be updated. 102 */ 103 public void setDirty(final boolean dirty) { 104 setProperty(DIRTY, new Boolean(dirty)); 105 } 106 107 /** 108 * Returns a List of {@String}s holding the columns of the foreign 109 * key. Keep in mind that by contract of 110 * <code>addPrimaryKey(String foreignKey)</code> the order is not 111 * guaranteed. 112 * 113 * @return the names of the foreign key's columns or null if no keys added 114 * before. 115 */ 116 public List<String> getForeignKeys() { 117 return (List<String>) this.getProperty(MANY_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 public void addForeignKey(final String column) { 129 List<String> foreignKey = getPropertyAsList(MANY_KEY); 130 foreignKey.add(column); 131 } 132 133 }