KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sleepycat > persist > model > SecondaryKeyMetadata


1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2002,2006 Oracle. All rights reserved.
5  *
6  * $Id: SecondaryKeyMetadata.java,v 1.13 2006/12/05 01:35:37 mark Exp $
7  */

8
9 package com.sleepycat.persist.model;
10
11
12 /**
13  * The metadata for a secondary key field. A secondary key may be specified
14  * with the {@link SecondaryKey} annotation.
15  *
16  * <p>{@code SecondaryKeyMetadata} objects are thread-safe. Multiple threads
17  * may safely call the methods of a shared {@code SecondaryKeyMetadata}
18  * object.</p>
19  *
20  * @author Mark Hayes
21  */

22 public class SecondaryKeyMetadata extends FieldMetadata {
23
24     private static final long serialVersionUID = 8118924993396722502L;
25
26     private String JavaDoc keyName;
27     private Relationship relationship;
28     private String JavaDoc elementClassName;
29     private String JavaDoc relatedEntity;
30     private DeleteAction deleteAction;
31
32     /**
33      * Used by an {@code EntityModel} to construct secondary key metadata.
34      */

35     public SecondaryKeyMetadata(String JavaDoc name,
36                                 String JavaDoc className,
37                                 String JavaDoc declaringClassName,
38                                 String JavaDoc elementClassName,
39                                 String JavaDoc keyName,
40                                 Relationship relationship,
41                                 String JavaDoc relatedEntity,
42                                 DeleteAction deleteAction) {
43         super(name, className, declaringClassName);
44         this.elementClassName = elementClassName;
45         this.keyName = keyName;
46         this.relationship = relationship;
47         this.relatedEntity = relatedEntity;
48         this.deleteAction = deleteAction;
49     }
50
51     /**
52      * Returns the class name of the array or collection element for a {@link
53      * Relationship#ONE_TO_MANY ONE_TO_MANY} or {@link
54      * Relationship#MANY_TO_MANY MANY_TO_MANY} relationship, or null for a
55      * Relationship#ONE_TO_ONE ONE_TO_ONE} or {@link Relationship#MANY_TO_ONE
56      * MANY_TO_ONE} relationship.
57      */

58     public String JavaDoc getElementClassName() {
59         return elementClassName;
60     }
61
62     /**
63      * Returns the key name, which may be different from the field name.
64      */

65     public String JavaDoc getKeyName() {
66         return keyName;
67     }
68
69     /**
70      * Returns the relationship between instances of the entity class and the
71      * secondary keys. This may be specified using the {@link
72      * SecondaryKey#relate} annotation.
73      */

74     public Relationship getRelationship() {
75         return relationship;
76     }
77
78     /**
79      * Returns the class name of the related (foreign) entity, for which
80      * foreign key constraints are specified using the {@link
81      * SecondaryKey#relatedEntity} annotation.
82      */

83     public String JavaDoc getRelatedEntity() {
84         return relatedEntity;
85     }
86
87     /**
88      * Returns the action to take when a related entity is deleted having a
89      * primary key value that exists as a secondary key value for this entity.
90      * This may be specified using the {@link
91      * SecondaryKey#onRelatedEntityDelete} annotation.
92      */

93     public DeleteAction getDeleteAction() {
94         return deleteAction;
95     }
96
97     @Override JavaDoc
98     public boolean equals(Object JavaDoc other) {
99         if (other instanceof SecondaryKeyMetadata) {
100             SecondaryKeyMetadata o = (SecondaryKeyMetadata) other;
101             return super.equals(o) &&
102                    relationship == o.relationship &&
103                    deleteAction == o.deleteAction &&
104                    ClassMetadata.nullOrEqual(keyName, o.keyName) &&
105                    ClassMetadata.nullOrEqual(elementClassName,
106                                              o.elementClassName) &&
107                    ClassMetadata.nullOrEqual(relatedEntity, o.relatedEntity);
108         } else {
109             return false;
110         }
111     }
112
113     @Override JavaDoc
114     public int hashCode() {
115         return super.hashCode() +
116                relationship.hashCode() +
117                deleteAction.hashCode() +
118                ClassMetadata.hashCode(keyName) +
119                ClassMetadata.hashCode(elementClassName) +
120                ClassMetadata.hashCode(relatedEntity);
121     }
122 }
123
Popular Tags