You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2011/01/27 04:24:15 UTC
svn commit: r1063973 - in
/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls:
./ EntryChange.java PagedResults.java SimpleEntryChange.java
SimplePagedResults.java
Author: akarasulu
Date: Thu Jan 27 03:24:15 2011
New Revision: 1063973
URL: http://svn.apache.org/viewvc?rev=1063973&view=rev
Log:
moving cleaned up control interfaces and simple implementations to model
Added:
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/EntryChange.java
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/PagedResults.java
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimpleEntryChange.java
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimplePagedResults.java
Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/EntryChange.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/EntryChange.java?rev=1063973&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/EntryChange.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/EntryChange.java Thu Jan 27 03:24:15 2011
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.model.message.controls;
+
+
+import org.apache.directory.shared.ldap.codec.search.controls.ChangeType;
+import org.apache.directory.shared.ldap.model.message.Control;
+import org.apache.directory.shared.ldap.model.name.Dn;
+
+
+/**
+ * A response control that may be returned by Persistent Search entry responses.
+ * It contains addition change information to describe the exact change that
+ * occurred to an entry. The exact details of this control are covered in section
+ * 5 of this (yes) expired draft: <a
+ * href="http://www3.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt">
+ * Persistent Search Draft v03</a> which is printed out below for convenience:
+ *
+ * <pre>
+ * 5. Entry Change Notification Control
+ *
+ * This control provides additional information about the change the caused
+ * a particular entry to be returned as the result of a persistent search.
+ * The controlType is "2.16.840.1.113730.3.4.7". If the client set the
+ * returnECs boolean to TRUE in the PersistentSearch control, servers MUST
+ * include an EntryChangeNotification control in the Controls portion of
+ * each SearchResultEntry that is returned due to an entry being added,
+ * deleted, or modified.
+ *
+ * EntryChangeNotification ::= SEQUENCE
+ * {
+ * changeType ENUMERATED
+ * {
+ * add (1),
+ * delete (2),
+ * modify (4),
+ * modDN (8)
+ * },
+ * previousDN LDAPDN OPTIONAL, -- modifyDN ops. only
+ * changeNumber INTEGER OPTIONAL -- if supported
+ * }
+ *
+ * changeType indicates what LDAP operation caused the entry to be
+ * returned.
+ *
+ * previousDN is present only for modifyDN operations and gives the Dn of
+ * the entry before it was renamed and/or moved. Servers MUST include this
+ * optional field only when returning change notifications as a result of
+ * modifyDN operations.
+ *
+ * changeNumber is the change number [CHANGELOG] assigned by a server for
+ * the change. If a server supports an LDAP Change Log it SHOULD include
+ * this field.
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public interface EntryChange extends Control
+{
+ int UNDEFINED_CHANGE_NUMBER = -1;
+
+ /** The EntryChange control */
+ String OID = "2.16.840.1.113730.3.4.7";
+
+
+ /**
+ * @return The ChangeType
+ */
+ ChangeType getChangeType();
+
+
+ /**
+ * Set the ChangeType
+ *
+ * @param changeType Add, Delete; Modify or ModifyDN
+ */
+ void setChangeType( ChangeType changeType );
+
+
+ Dn getPreviousDn();
+
+
+ void setPreviousDn( Dn previousDn );
+
+
+ long getChangeNumber();
+
+
+ void setChangeNumber( long changeNumber );
+}
Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/PagedResults.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/PagedResults.java?rev=1063973&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/PagedResults.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/PagedResults.java Thu Jan 27 03:24:15 2011
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.model.message.controls;
+
+
+import org.apache.directory.shared.ldap.model.message.Control;
+
+
+/**
+ * A request/response control used to implement a simple paging of search
+ * results. This is an implementation of RFC 2696 :
+ * <a href="http://www.faqs.org/rfcs/rfc2696.html">LDAP Control Extension for Simple Paged Results Manipulation</a>
+ * <br/>
+ * <pre>
+ * This control is included in the searchRequest and searchResultDone
+ * messages as part of the controls field of the LDAPMessage, as defined
+ * in Section 4.1.12 of [LDAPv3]. The structure of this control is as
+ * follows:
+ *
+ * pagedResultsControl ::= SEQUENCE {
+ * controlType 1.2.840.113556.1.4.319,
+ * criticality BOOLEAN DEFAULT FALSE,
+ * controlValue searchControlValue
+ * }
+ *
+ * The searchControlValue is an OCTET STRING wrapping the BER-encoded
+ * version of the following SEQUENCE:
+ *
+ * realSearchControlValue ::= SEQUENCE {
+ * size INTEGER (0..maxInt),
+ * -- requested page size from client
+ * -- result set size estimate from server
+ * cookie OCTET STRING
+ * }
+ *
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public interface PagedResults extends Control
+{
+ /** The Paged Search Control OID */
+ String OID = "1.2.840.113556.1.4.319";
+
+
+ /**
+ * @return The requested or returned number of entries
+ */
+ int getSize();
+
+ /**
+ * Set the number of entry requested or returned
+ *
+ * @param size The number of entries
+ */
+ void setSize( int size );
+
+ /**
+ * @return The stored cookie
+ */
+ byte[] getCookie();
+
+ /**
+ * Set the cookie
+ *
+ * @param cookie The cookie to store in this control
+ */
+ void setCookie( byte[] cookie );
+
+ /**
+ * @return The integer value for the current cookie
+ */
+ int getCookieValue();
+}
Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimpleEntryChange.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimpleEntryChange.java?rev=1063973&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimpleEntryChange.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimpleEntryChange.java Thu Jan 27 03:24:15 2011
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.model.message.controls;
+
+
+import org.apache.directory.shared.ldap.codec.controls.BasicControlImpl;
+import org.apache.directory.shared.ldap.codec.search.controls.ChangeType;
+import org.apache.directory.shared.ldap.model.name.Dn;
+
+
+/**
+ * A simple implementation of the EntryChange response control.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SimpleEntryChange extends BasicControlImpl implements EntryChange
+{
+
+ private ChangeType changeType = ChangeType.ADD;
+
+ private long changeNumber = UNDEFINED_CHANGE_NUMBER;
+
+ /** The previous Dn */
+ private Dn previousDn = null;
+
+
+ /**
+ *
+ * Creates a new instance of EntryChangeControl.
+ *
+ */
+ public SimpleEntryChange()
+ {
+ super( OID );
+ }
+
+
+ public ChangeType getChangeType()
+ {
+ return changeType;
+ }
+
+
+ public void setChangeType( ChangeType changeType )
+ {
+ this.changeType = changeType;
+ }
+
+
+ public Dn getPreviousDn()
+ {
+ return previousDn;
+ }
+
+
+ public void setPreviousDn( Dn previousDn )
+ {
+ this.previousDn = previousDn;
+ }
+
+
+ public long getChangeNumber()
+ {
+ return changeNumber;
+ }
+
+
+ public void setChangeNumber( long changeNumber )
+ {
+ this.changeNumber = changeNumber;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( !super.equals( o ) )
+ {
+ return false;
+ }
+
+ EntryChange otherControl = ( EntryChange ) o;
+
+ return ( changeNumber == otherControl.getChangeNumber() ) &&
+ ( changeType == otherControl.getChangeType() ) &&
+ ( previousDn.equals( otherControl.getPreviousDn() ) );
+ }
+
+
+ /**
+ * Return a String representing this EntryChangeControl.
+ */
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append( " Entry Change Control\n" );
+ sb.append( " oid : " ).append( getOid() ).append( '\n' );
+ sb.append( " critical : " ).append( isCritical() ).append( '\n' );
+ sb.append( " changeType : '" ).append( changeType ).append( "'\n" );
+ sb.append( " previousDN : '" ).append( previousDn ).append( "'\n" );
+
+ if ( changeNumber == UNDEFINED_CHANGE_NUMBER )
+ {
+ sb.append( " changeNumber : '" ).append( "UNDEFINED" ).append( "'\n" );
+ }
+ else
+ {
+ sb.append( " changeNumber : '" ).append( changeNumber ).append( "'\n" );
+ }
+
+ return sb.toString();
+ }
+}
Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimplePagedResults.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimplePagedResults.java?rev=1063973&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimplePagedResults.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/controls/SimplePagedResults.java Thu Jan 27 03:24:15 2011
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.model.message.controls;
+
+
+import org.apache.directory.shared.ldap.codec.controls.BasicControlImpl;
+import org.apache.directory.shared.util.StringConstants;
+import org.apache.directory.shared.util.Strings;
+
+import java.util.Arrays;
+
+
+/**
+ * A request/response control used to implement a simple paging of search
+ * results. This is an implementation of RFC 2696 :
+ * <a href="http://www.faqs.org/rfcs/rfc2696.html">LDAP Control Extension for Simple Paged Results Manipulation</a>
+ * <br/>
+ * <pre>
+ * This control is included in the searchRequest and searchResultDone
+ * messages as part of the controls field of the LDAPMessage, as defined
+ * in Section 4.1.12 of [LDAPv3]. The structure of this control is as
+ * follows:
+ *
+ * pagedResultsControl ::= SEQUENCE {
+ * controlType 1.2.840.113556.1.4.319,
+ * criticality BOOLEAN DEFAULT FALSE,
+ * controlValue searchControlValue
+ * }
+ *
+ * The searchControlValue is an OCTET STRING wrapping the BER-encoded
+ * version of the following SEQUENCE:
+ *
+ * realSearchControlValue ::= SEQUENCE {
+ * size INTEGER (0..maxInt),
+ * -- requested page size from client
+ * -- result set size estimate from server
+ * cookie OCTET STRING
+ * }
+ *
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SimplePagedResults extends BasicControlImpl implements PagedResults
+{
+
+ /** The number of entries to return, or returned */
+ private int size;
+
+ /** The exchanged cookie */
+ private byte[] cookie = StringConstants.EMPTY_BYTES;
+
+
+ /**
+ * Creates a new instance of PagedResultsDecorator.
+ */
+ public SimplePagedResults()
+ {
+ super( OID );
+ }
+
+
+ public int getSize()
+ {
+ return size;
+ }
+
+
+ public void setSize( int size )
+ {
+ this.size = size;
+ }
+
+
+ public byte[] getCookie()
+ {
+ return cookie;
+ }
+
+
+ public void setCookie( byte[] cookie )
+ {
+ this.cookie = cookie;
+ }
+
+
+ public int getCookieValue()
+ {
+ int value = 0;
+
+ switch ( cookie.length )
+ {
+ case 1:
+ value = cookie[0] & 0x00FF;
+ break;
+
+ case 2:
+ value = ( ( cookie[0] & 0x00FF ) << 8 ) + ( cookie[1] & 0x00FF );
+ break;
+
+ case 3:
+ value = ( ( cookie[0] & 0x00FF ) << 16 ) + ( ( cookie[1] & 0x00FF ) << 8 ) + ( cookie[2] & 0x00FF );
+ break;
+
+ case 4:
+ value = ( ( cookie[0] & 0x00FF ) << 24 ) + ( ( cookie[1] & 0x00FF ) << 16 )
+ + ( ( cookie[2] & 0x00FF ) << 8 ) + ( cookie[3] & 0x00FF );
+ break;
+
+ }
+
+ return value;
+ }
+
+
+ /**
+ * @see Object#equals(Object)
+ */
+ @SuppressWarnings( { "EqualsWhichDoesntCheckParameterClass" } )
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( !super.equals( o ) )
+ {
+ return false;
+ }
+
+ PagedResults otherControl = ( PagedResults ) o;
+
+ return ( size == otherControl.getSize() ) && Arrays.equals( cookie, otherControl.getCookie() );
+ }
+
+
+ /**
+ * Return a String representing this PagedSearchControl.
+ */
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append( " Paged Search Control\n" );
+ sb.append( " oid : " ).append( getOid() ).append( '\n' );
+ sb.append( " critical : " ).append( isCritical() ).append( '\n' );
+ sb.append( " size : '" ).append( size ).append( "'\n" );
+ sb.append( " cookie : '" ).append( Strings.dumpBytes(cookie) ).append( "'\n" );
+
+ return sb.toString();
+ }
+}