1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.directory.server.core.entry;
20
21
22 import javax.naming.NamingException;
23 import javax.naming.directory.InvalidAttributeValueException;
24
25 import org.apache.directory.shared.ldap.entry.EntryAttribute;
26 import org.apache.directory.shared.ldap.entry.client.ClientAttribute;
27 import org.apache.directory.shared.ldap.schema.AttributeType;
28
29
30 /**
31 * The server specific interface extending the EntryAttribute interface. It adds
32 * three more methods which are Server side.
33 *
34 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
35 * @version $Rev$, $Date$
36 */
37 public interface ServerAttribute extends ClientAttribute
38 {
39 /**
40 * Get the attribute type associated with this ServerAttribute.
41 *
42 * @return the attributeType associated with this entry attribute
43 */
44 AttributeType getAttributeType();
45
46
47 /**
48 * <p>
49 * Set the attribute type associated with this ServerAttribute.
50 * </p>
51 * <p>
52 * The current attributeType will be replaced. It is the responsibility of
53 * the caller to insure that the existing values are compatible with the new
54 * AttributeType
55 * </p>
56 *
57 * @param attributeType the attributeType associated with this entry attribute
58 */
59 void setAttributeType( AttributeType attributeType );
60
61
62 /**
63 * <p>
64 * Check if the current attribute type is of the expected attributeType
65 * </p>
66 * <p>
67 * This method won't tell if the current attribute is a descendant of
68 * the attributeType. For instance, the "CN" serverAttribute will return
69 * false if we ask if it's an instance of "Name".
70 * </p>
71 *
72 * @param attributeId The AttributeType ID to check
73 * @return True if the current attribute is of the expected attributeType
74 * @throws InvalidAttributeValueException If there is no AttributeType
75 */
76 boolean instanceOf( String attributeId ) throws InvalidAttributeValueException;
77
78
79 /**
80 * <p>
81 * Set the user provided ID. If we have none, the upId is assigned
82 * the attributetype's name. If it does not have any name, we will
83 * use the OID.
84 * </p>
85 * <p>
86 * If we have an upId and an AttributeType, they must be compatible. :
87 * - if the upId is an OID, it must be the AttributeType's OID
88 * - otherwise, its normalized form must be equals to ones of
89 * the attributeType's names.
90 * </p>
91 * <p>
92 * In any case, the ATtributeType will be changed. The caller is responsible for
93 * the present values to be compatoble with the new AttributeType.
94 * </p>
95 *
96 * @param upId The attribute ID
97 * @param attributeType The associated attributeType
98 */
99 void setUpId( String upId, AttributeType attributeType );
100
101
102 /**
103 * <p>
104 * Checks to see if this attribute is valid along with the values it contains.
105 * </p>
106 * <p>
107 * An attribute is valid if :
108 * <li>All of its values are valid with respect to the attributeType's syntax checker</li>
109 * <li>If the attributeType is SINGLE-VALUE, then no more than a value should be present</li>
110 *</p>
111 * @return true if the attribute and it's values are valid, false otherwise
112 * @throws NamingException if there is a failure to check syntaxes of values
113 */
114 boolean isValid() throws NamingException;
115
116
117 /**
118 * Convert the ServerAttribute to a ClientAttribute
119 *
120 * @return An instance of ClientAttribute
121 */
122 EntryAttribute toClientAttribute();
123 }