001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.directory.api.ldap.model.schema; 021 022 023import java.util.HashSet; 024import java.util.Set; 025 026import org.apache.directory.api.util.Strings; 027 028 029/** 030 * An structure containing a couple of attributeType and options. A search request 031 * can contain a list of attribute to return, those attribute could be associated 032 * with options. 033 * 034 * Those options are stored into a Set. 035 * 036 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 037 */ 038public class AttributeTypeOptions 039{ 040 /** The attributeType */ 041 private AttributeType attributeType; 042 043 /** The options, if any */ 044 private Set<String> options; 045 046 047 /** 048 * Creates a new instance of AttributeTypeOptions, containing an attributeType, 049 * but no options. 050 * 051 * @param attributeType The associated AttributeType 052 */ 053 public AttributeTypeOptions( AttributeType attributeType ) 054 { 055 this.attributeType = attributeType; 056 } 057 058 059 /** 060 * Creates a new instance of AttributeTypeOptions, containing an attributeType, 061 * and options. 062 * 063 * @param attributeType the associated AttributeType 064 * @param options the associated options 065 */ 066 public AttributeTypeOptions( AttributeType attributeType, Set<String> options ) 067 { 068 this.attributeType = attributeType; 069 this.options = options; 070 } 071 072 073 /** 074 * @return the inner attributeType 075 */ 076 public AttributeType getAttributeType() 077 { 078 return attributeType; 079 } 080 081 082 /** 083 * @return the associated options 084 */ 085 public Set<String> getOptions() 086 { 087 return options; 088 } 089 090 091 /** 092 * @return <code>true</code> if the attributeType has at least one option 093 */ 094 public boolean hasOption() 095 { 096 return ( options != null ) && ( options.size() != 0 ); 097 } 098 099 100 /** 101 * @param option the option to check 102 * @return <code>true</code> if the attributeType has the given option 103 */ 104 public boolean hasOption( String option ) 105 { 106 if ( hasOption() ) 107 { 108 return options.contains( Strings.toLowerCase( Strings.trim( option ) ) ); 109 } 110 else 111 { 112 return false; 113 } 114 } 115 116 117 /** 118 * Add a new option to the option set for this attributeType. 119 * 120 * @param option the option to add 121 */ 122 public void addOption( String option ) 123 { 124 if ( options == null ) 125 { 126 options = new HashSet<String>(); 127 } 128 129 options.add( Strings.toLowerCase( Strings.trim( option ) ) ); 130 } 131 132 133 /** 134 * Add a set of optionS to the option set for this attributeType. 135 * 136 * @param optionsToAdd the options to add 137 */ 138 public void addOptions( Set<String> optionsToAdd ) 139 { 140 if ( this.options == null ) 141 { 142 this.options = optionsToAdd; 143 } 144 else 145 { 146 this.options.addAll( optionsToAdd ); 147 } 148 } 149 150 151 /** 152 * @see Object#hashCode() 153 */ 154 public int hashCode() 155 { 156 return attributeType.hashCode(); 157 } 158 159 160 /** 161 * @see Object#equals(Object) 162 */ 163 public boolean equals( Object o ) 164 { 165 // Short circuit 166 if ( this == o ) 167 { 168 return true; 169 } 170 171 if ( !( o instanceof AttributeTypeOptions ) ) 172 { 173 return false; 174 } 175 176 AttributeTypeOptions that = ( AttributeTypeOptions ) o; 177 178 return attributeType.equals( that.attributeType ); 179 } 180 181 /** 182 * {@inheritDoc} 183 */ 184 public String toString() 185 { 186 StringBuilder sb = new StringBuilder(); 187 188 sb.append( "<" ).append( attributeType.getName() ); 189 190 if ( hasOption() ) 191 { 192 for ( String option : options ) 193 { 194 sb.append( ";" ).append( option ); 195 } 196 } 197 198 return sb.append( ">" ).toString(); 199 } 200}