mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
06.18.2014 bccd35904bb6c244e7eae5b7ddb28e5c295e856b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 */
package org.opends.server.admin;
 
/**
 * A default behavior provider which retrieves default values from a parent
 * managed object. It should be used by properties which inherit their default
 * value(s) from properties held in an other managed object.
 *
 * @param <T>
 *            The type of values represented by this provider.
 */
public final class RelativeInheritedDefaultBehaviorProvider<T> extends DefaultBehaviorProvider<T> {
 
    // The type of managed object expected at the relative offset.
    private final AbstractManagedObjectDefinition<?, ?> d;
 
    // The relative offset (where 1 = parent, 2 = grandparent) of the
    // managed object containing the property.
    private final int offset;
 
    // The name of the property containing the inherited default values.
    private final String propertyName;
 
    /**
     * Create a relative inherited default behavior provider associated with a
     * parent managed object.
     *
     * @param d
     *            The type of parent managed object expected at the relative
     *            location.
     * @param propertyName
     *            The name of the property containing the inherited default
     *            values.
     * @param offset
     *            The relative location of the parent managed object (where 0 is
     *            the managed object itself, 1 is the parent, and 2 is the
     *            grand-parent).
     * @throws IllegalArgumentException
     *             If the offset is less than 0.
     */
    public RelativeInheritedDefaultBehaviorProvider(AbstractManagedObjectDefinition<?, ?> d, String propertyName,
        int offset) {
        // We do not decode the property name now because the property
        // might not have been constructed at this point (e.g. when the
        // offset is 0).
        if (offset < 0) {
            throw new IllegalArgumentException("Negative offset");
        }
        this.d = d;
        this.propertyName = propertyName;
        this.offset = offset;
    }
 
    /**
     * {@inheritDoc}
     */
    public <R, P> R accept(DefaultBehaviorProviderVisitor<T, R, P> v, P p) {
        return v.visitRelativeInherited(this, p);
    }
 
    /**
     * Get the definition of the parent managed object containing the inherited
     * default values.
     *
     * @return Returns the definition of the parent managed object containing
     *         the inherited default values.
     */
    public AbstractManagedObjectDefinition<?, ?> getManagedObjectDefinition() {
        return d;
    }
 
    /**
     * Get the absolute path of the managed object containing the property which
     * has the default values.
     *
     * @param path
     *            The path of the current managed object from which the relative
     *            path should be determined.
     * @return Returns the absolute path of the managed object containing the
     *         property which has the default values.
     */
    public ManagedObjectPath<?, ?> getManagedObjectPath(ManagedObjectPath<?, ?> path) {
        return path.parent(offset);
    }
 
    /**
     * Gets the name of the property containing the inherited default values.
     *
     * @return Returns the name of the property containing the inherited default
     *         values.
     */
    public String getPropertyName() {
        return propertyName;
    }
 
    /**
     * Get the relative location of the parent managed object.
     *
     * @return Returns the relative location of the parent managed object (where
     *         0 is the managed object itself, 1 is the parent, and 2 is the
     *         grand-parent).
     */
    public int getRelativeOffset() {
        return offset;
    }
}