View Javadoc

1   package org.apache.ojb.broker;
2   
3   /* Copyright 2002-2005 The Apache Software Foundation
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  import org.apache.ojb.broker.metadata.ClassDescriptor;
19  
20  /**
21   * Builds {@link org.apache.ojb.broker.Identity} objects to identify persistence capable objects within OJB.
22   * In many cases the primary key (based on metadata declaration) of an object is known
23   * and the whole object should be materialized (e.g. findByPrimaryKey(...) calls).
24   * This class make available a bunch of methods help to create {@link org.apache.ojb.broker.Identity}
25   * objects based on
26   * <ul>
27   *    <li>the persistence capable object itself</li>
28   *    <li>the primary key values of a persistence capable object</li>
29   * </ul>
30   * NOTE:
31   * <br/>
32   * It is possible to create transient {@link Identity} objects for transient,
33   * "new created" persistence capable objects. But keep in mind that this transient
34   * {@link Identity} object is only valid till the persistence capable object was written
35   * to datastore. After this the {@link Identity} have to be renewed by calling
36   * <code>IdentityFactory.buildIdentity(...)</code> again (then the transient Identity
37   * will be replaced by the persistent Identity).
38   *
39   * @version $Id: IdentityFactory.java,v 1.1 2007-08-24 22:17:36 ewestfal Exp $
40   */
41  public interface IdentityFactory
42  {
43      /**
44       * Build a unique {@link org.apache.ojb.broker.Identity} for the given
45       * persistence capable object.
46       *
47       * @param obj The object to build the {@link Identity} for
48       * @return The new <em>Identity</em> object
49       */
50      Identity buildIdentity(Object obj);
51  
52      /**
53       * Build a unique {@link org.apache.ojb.broker.Identity} for the given
54       * persistence capable object.
55       *
56       * @param cld The {@link org.apache.ojb.broker.metadata.ClassDescriptor} of the object
57       * @param obj The object to build the {@link Identity} for
58       * @return The new <em>Identity</em> object.
59       */
60      Identity buildIdentity(ClassDescriptor cld, Object obj);
61  
62      /**
63       * Build a unique {@link org.apache.ojb.broker.Identity}
64       * for the given primary key values (composite PK's) of a
65       * persistence capable object.
66       *
67       * @param realClass     The class of the associated object
68       * @param topLevelClass The top-level class of the associated object
69       * @param pkFieldName   The field names of the PK fields
70       * @param pkValues      The PK values
71       * @return The new <em>Identity</em> object
72       */
73      Identity buildIdentity(Class realClass, Class topLevelClass, String[] pkFieldName, Object[] pkValues);
74  
75      /**
76       * Convenience shortcut method for
77       * {@link #buildIdentity(java.lang.Class, java.lang.Class, java.lang.String[], java.lang.Object[])}.
78       * 
79       * @param realClass     The class of the associated object
80       * @param pkFieldName   The field names of the PK fields
81       * @param pkValues      The PK values
82       * @return The new <em>Identity</em> object
83       */
84      Identity buildIdentity(Class realClass, String[] pkFieldName, Object[] pkValues);
85  
86      /**
87       * Convenience method for persistent objects with single primary key.
88       * NOTE: Do not use for objects with composed PK!
89       *
90       * @param realClass The class of the associated object
91       * @param pkValue   The PK value
92       * @return The new <em>Identity</em> object
93       * @see #buildIdentity(java.lang.Class, java.lang.String[], java.lang.Object[])
94       */
95      Identity buildIdentity(Class realClass, Object pkValue);
96  
97      /**
98       * Create a new {@link Identity} object based on given arguments - NOTE: There
99       * will be no check to resolve the order of the PK values. This method expect
100      * the correct order based on the declaration of the {@link org.apache.ojb.broker.metadata.FieldDescriptor}
101      * in the mapping file.
102      *
103      * @param realClass     The class of the associated object
104      * @param topLevelClass The top-level class of the associated object
105      * @param pkValues      The PK values
106      * @return The new <em>Identity</em> object
107      */
108     Identity buildIdentity(Class realClass, Class topLevelClass, Object[] pkValues);
109 }