001: /*
002: * Copyright 2006 Assaf Arkin, Ralf Joachim
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.exolab.castor.mapping;
017:
018: /**
019: * Describes the properties of a field. Implementations will extend this inteface to
020: * provide additional properties.
021: *
022: * @author <a href="mailto:arkin AT intalio DOT com">Assaf Arkin</a>
023: * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
024: * @version $Revision: 6907 $ $Date: 2005-12-06 14:55:28 -0700 (Tue, 06 Dec 2005) $
025: */
026: public interface FieldDescriptor {
027: //--------------------------------------------------------------------------
028:
029: /**
030: * Set the class descriptor which contains this field.
031: *
032: * @param parent The class descriptor which contains this field.
033: */
034: void setContainingClassDescriptor(ClassDescriptor parent);
035:
036: /**
037: * Get the class descriptor which contains this field.
038: *
039: * @return The class descriptor which contains this field.
040: */
041: ClassDescriptor getContainingClassDescriptor();
042:
043: /**
044: * Returns the name of the field. The field must have a name, even if set through
045: * accessor methods.
046: *
047: * @return Field name.
048: */
049: String getFieldName();
050:
051: /**
052: * Returns the Java type of the field.
053: *
054: * @return Field type.
055: */
056: Class getFieldType();
057:
058: /**
059: * Returns the class descriptor related to the field type. If the field type is a
060: * class for which a descriptor exists, this descriptor is returned. If the field
061: * type is a class for which no mapping is provided, null is returned.
062: *
063: * @return The class descriptor of the field type, or null.
064: */
065: ClassDescriptor getClassDescriptor();
066:
067: /**
068: * Returns the handler of the field. In order to persist or marshal a field
069: * descriptor will be associated with a handler.
070: *
071: * @return The field handler.
072: */
073: FieldHandler getHandler();
074:
075: /**
076: * Returns true if the field is transient. Transient fields are never persisted or
077: * marshalled.
078: *
079: * @return True if transient field.
080: */
081: boolean isTransient();
082:
083: /**
084: * Returns true if the field type is immutable.
085: *
086: * @return True if the field type is immutable.
087: */
088: boolean isImmutable();
089:
090: /**
091: * Returns true if the field type is required.
092: *
093: * @return True if the field type is required.
094: */
095: boolean isRequired();
096:
097: /**
098: * Returns true if the field is multivalued (a collection).
099: *
100: * @return True if the field is multivalued.
101: */
102: boolean isMultivalued();
103:
104: //--------------------------------------------------------------------------
105: }
|