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 021 package org.apache.directory.shared.dsmlv2.reponse; 022 023 024 import org.apache.directory.shared.dsmlv2.DsmlDecorator; 025 import org.apache.directory.shared.dsmlv2.ParserUtils; 026 import org.apache.directory.shared.ldap.codec.MessageTypeEnum; 027 import org.apache.directory.shared.ldap.codec.search.SearchResultEntryCodec; 028 import org.apache.directory.shared.ldap.entry.Entry; 029 import org.apache.directory.shared.ldap.entry.EntryAttribute; 030 import org.apache.directory.shared.ldap.entry.Value; 031 import org.apache.directory.shared.ldap.name.DN; 032 import org.dom4j.Element; 033 import org.dom4j.Namespace; 034 import org.dom4j.QName; 035 036 037 /** 038 * DSML Decorator for SearchResultEntry 039 * 040 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 041 * @version $Rev$, $Date$ 042 */ 043 public class SearchResultEntryDsml extends LdapResponseDecorator implements DsmlDecorator 044 { 045 /** 046 * Creates a new instance of SearchResultEntryDsml. 047 */ 048 public SearchResultEntryDsml() 049 { 050 super( new SearchResultEntryCodec() ); 051 } 052 053 054 /** 055 * Creates a new instance of SearchResultEntryDsml. 056 * 057 * @param ldapMessage 058 * the message to decorate 059 */ 060 public SearchResultEntryDsml( SearchResultEntryCodec ldapMessage ) 061 { 062 super( ldapMessage ); 063 } 064 065 066 /* (non-Javadoc) 067 * @see org.apache.directory.shared.dsmlv2.reponse.LdapMessageDecorator#getMessageType() 068 */ 069 public MessageTypeEnum getMessageType() 070 { 071 return instance.getMessageType(); 072 } 073 074 075 /* (non-Javadoc) 076 * @see org.apache.directory.shared.dsmlv2.reponse.DsmlDecorator#toDsml(org.dom4j.Element) 077 */ 078 public Element toDsml( Element root ) 079 { 080 Element element = root.addElement( "searchResultEntry" ); 081 SearchResultEntryCodec searchResultEntry = ( SearchResultEntryCodec ) instance; 082 element.addAttribute( "dn", searchResultEntry.getObjectName().getName() ); 083 084 Entry entry = searchResultEntry.getEntry(); 085 for ( EntryAttribute attribute : entry ) 086 { 087 088 Element attributeElement = element.addElement( "attr" ); 089 attributeElement.addAttribute( "name", attribute.getId() ); 090 091 for ( Value<?> value : attribute ) 092 { 093 if ( ParserUtils.needsBase64Encoding( value.get() ) ) 094 { 095 Namespace xsdNamespace = new Namespace( ParserUtils.XSD, ParserUtils.XML_SCHEMA_URI ); 096 Namespace xsiNamespace = new Namespace( ParserUtils.XSI, ParserUtils.XML_SCHEMA_INSTANCE_URI ); 097 attributeElement.getDocument().getRootElement().add( xsdNamespace ); 098 attributeElement.getDocument().getRootElement().add( xsiNamespace ); 099 100 Element valueElement = attributeElement.addElement( "value" ).addText( 101 ParserUtils.base64Encode( value.get() ) ); 102 valueElement.addAttribute( new QName( "type", xsiNamespace ), ParserUtils.XSD + ":" 103 + ParserUtils.BASE64BINARY ); 104 } 105 else 106 { 107 attributeElement.addElement( "value" ).addText( value.getString() ); 108 } 109 } 110 } 111 112 return element; 113 } 114 115 116 /** 117 * Get the entry DN 118 * 119 * @return Returns the objectName. 120 */ 121 public DN getObjectName() 122 { 123 return ( ( SearchResultEntryCodec ) instance ).getObjectName(); 124 } 125 126 127 /** 128 * Set the entry DN 129 * 130 * @param objectName The objectName to set. 131 */ 132 public void setObjectName( DN objectName ) 133 { 134 ( ( SearchResultEntryCodec ) instance ).setObjectName( objectName ); 135 } 136 137 138 /** 139 * Get the entry. 140 * 141 * @return Returns the entry. 142 */ 143 public Entry getEntry() 144 { 145 return ( ( SearchResultEntryCodec ) instance ).getEntry(); 146 } 147 148 149 /** 150 * Initialize the entry. 151 * 152 * @param entry the entry 153 */ 154 public void setEntry( Entry entry ) 155 { 156 ( ( SearchResultEntryCodec ) instance ).setEntry( entry ); 157 } 158 159 160 /** 161 * Create a new attributeValue 162 * 163 * @param type The attribute's name 164 */ 165 public void addAttributeValues( String type ) 166 { 167 ( ( SearchResultEntryCodec ) instance ).addAttributeValues( type ); 168 } 169 170 171 /** 172 * Add a new value to the current attribute 173 * 174 * @param value 175 */ 176 public void addAttributeValue( Object value ) 177 { 178 ( ( SearchResultEntryCodec ) instance ).addAttributeValue( value ); 179 } 180 181 182 /** 183 * @return Returns the currentAttributeValue. 184 */ 185 public String getCurrentAttributeValueType() 186 { 187 return ( ( SearchResultEntryCodec ) instance ).getCurrentAttributeValueType(); 188 } 189 }