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 */ 020 package org.apache.directory.shared.ldap.schema; 021 022 023 import java.util.HashSet; 024 import java.util.Set; 025 026 import org.apache.directory.shared.ldap.util.StringTools; 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 * @version $Rev: 655151 $ 038 */ 039 public class AttributeTypeOptions 040 { 041 /** The attributeType */ 042 private AttributeType attributeType; 043 044 /** The options, if any */ 045 private Set<String> options; 046 047 048 /** 049 * Creates a new instance of AttributeTypeOptions, containing an attributeType, 050 * but no options. 051 * 052 * @param attributeType The associated AttributeType 053 */ 054 public AttributeTypeOptions( AttributeType attributeType ) 055 { 056 this.attributeType = attributeType; 057 } 058 059 060 /** 061 * Creates a new instance of AttributeTypeOptions, containing an attributeType, 062 * and options. 063 * 064 * @param attributeType the associated AttributeType 065 * @param options the associated options 066 */ 067 public AttributeTypeOptions( AttributeType attributeType, Set<String> options ) 068 { 069 this.attributeType = attributeType; 070 this.options = options; 071 } 072 073 074 /** 075 * @return the inner attributeType 076 */ 077 public AttributeType getAttributeType() 078 { 079 return attributeType; 080 } 081 082 083 /** 084 * @return the associated options 085 */ 086 public Set<String> getOptions() 087 { 088 return options; 089 } 090 091 092 /** 093 * @return <code>true</code> if the attributeType has at least one option 094 */ 095 public boolean hasOption() 096 { 097 return ( options != null ) && ( options.size() != 0 ); 098 } 099 100 101 /** 102 * @param option the option to check 103 * @return <code>true</code> if the attributeType has the given option 104 */ 105 public boolean hasOption( String option ) 106 { 107 if ( hasOption() ) 108 { 109 return options.contains( StringTools.toLowerCase( StringTools.trim( option ) ) ); 110 } 111 else 112 { 113 return false; 114 } 115 } 116 117 118 /** 119 * Add a new option to the option set for this attributeType. 120 * 121 * @param option the option to add 122 */ 123 public void addOption( String option ) 124 { 125 if ( options == null ) 126 { 127 options = new HashSet<String>(); 128 } 129 130 options.add( StringTools.toLowerCase( StringTools.trim( option ) ) ); 131 } 132 133 134 /** 135 * Add a set of optionS to the option set for this attributeType. 136 * 137 * @param options the options to add 138 */ 139 public void addOptions( Set<String> options ) 140 { 141 if ( this.options == null ) 142 { 143 this.options = options; 144 } 145 else 146 { 147 this.options.addAll( options ); 148 } 149 } 150 151 152 public String toString() 153 { 154 StringBuilder sb = new StringBuilder(); 155 156 sb.append( "<" ).append( attributeType.getName() ); 157 158 if ( hasOption() ) 159 { 160 for ( String option:options ) 161 { 162 sb.append( ";" ).append( option ); 163 } 164 } 165 166 return sb.append( ">" ).toString(); 167 } 168 }