1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2002,2008 Oracle.  All rights reserved.
5 *
6 * $Id: FieldMetadata.java,v 1.1 2008/02/07 17:12:28 mark Exp $
7 */
8
9package com.sleepycat.persist.model;
10
11import java.io.Serializable;
12
13/**
14 * The metadata for a key field.  This class defines common properties for
15 * singular and composite key fields.
16 *
17 * <p>{@code FieldMetadata} objects are thread-safe.  Multiple threads may
18 * safely call the methods of a shared {@code FieldMetadata} object.</p>
19 *
20 * @author Mark Hayes
21 */
22public class FieldMetadata implements Serializable {
23
24    private static final long serialVersionUID = -9037650229184174279L;
25
26    private String name;
27    private String className;
28    private String declaringClassName;
29
30    /**
31     * Used by an {@code EntityModel} to construct field metadata.
32     */
33    public FieldMetadata(String name,
34                         String className,
35                         String declaringClassName) {
36        this.name = name;
37        this.className = className;
38        this.declaringClassName = declaringClassName;
39    }
40
41    /**
42     * Returns the field name.
43     */
44    public String getName() {
45        return name;
46    }
47
48    /**
49     * Returns the class name of the field type.
50     */
51    public String getClassName() {
52        return className;
53    }
54
55    /**
56     * Returns the name of the class where the field is declared.
57     */
58    public String getDeclaringClassName() {
59        return declaringClassName;
60    }
61
62    @Override
63    public boolean equals(Object other) {
64        if (other instanceof FieldMetadata) {
65            FieldMetadata o = (FieldMetadata) other;
66            return ClassMetadata.nullOrEqual(name, o.name) &&
67                   ClassMetadata.nullOrEqual(className, o.className) &&
68                   ClassMetadata.nullOrEqual(declaringClassName,
69                                             o.declaringClassName);
70        } else {
71            return false;
72        }
73    }
74
75    @Override
76    public int hashCode() {
77        return ClassMetadata.hashCode(name) +
78               ClassMetadata.hashCode(className) +
79               ClassMetadata.hashCode(declaringClassName);
80    }
81}
82