001: /*
002: * Copyright 1999-2002 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.jndi.ldap;
027:
028: import java.io.IOException;
029:
030: /**
031: * This class implements the LDAPv3 Request Control for the persistent search
032: * mechanism as defined in
033: * <a href="http://www.ietf.org/internet-drafts/draft-ietf-ldapext-psearch-02.txt">draft-ietf-ldapext-psearch-02.txt</a>.
034: *
035: * The control's value has the following ASN.1 definition:
036: * <pre>
037: *
038: * PersistentSearch ::= SEQUENCE {
039: * changeTypes INTEGER,
040: * changesOnly BOOLEAN,
041: * returnECs BOOLEAN
042: * }
043: *
044: * </pre>
045: *
046: * @see EntryChangeResponseControl
047: * @author Vincent Ryan
048: */
049: final public class PersistentSearchControl extends BasicControl {
050:
051: /**
052: * The persistent search control's assigned object identifier
053: * is 2.16.840.1.113730.3.4.3.
054: */
055: public static final String OID = "2.16.840.1.113730.3.4.3";
056:
057: /**
058: * Indicates interest in entries which have been added.
059: */
060: public static final int ADD = 1;
061:
062: /**
063: * Indicates interest in entries which have been deleted.
064: */
065: public static final int DELETE = 2;
066:
067: /**
068: * Indicates interest in entries which have been modified.
069: */
070: public static final int MODIFY = 4;
071:
072: /**
073: * Indicates interest in entries which have been renamed.
074: */
075: public static final int RENAME = 8;
076:
077: /**
078: * Indicates interest in entries which have been added, deleted,
079: * modified or renamed.
080: */
081: public static final int ANY = ADD | DELETE | MODIFY | RENAME;
082:
083: /**
084: * The change types of interest. All changes, by default.
085: *
086: * @serial
087: */
088: private int changeTypes = ANY;
089:
090: /**
091: * Return original entries and changed entries or only changed entries.
092: *
093: * @serial
094: */
095: private boolean changesOnly = false;
096:
097: /**
098: * Return entry change controls.
099: *
100: * @serial
101: */
102: private boolean returnControls = true;
103:
104: private static final long serialVersionUID = 6335140491154854116L;
105:
106: /**
107: * Constructs a persistent search non-critical control.
108: * The original entries, any changed entries (additions,
109: * deletions, modifications or renames) and entry change
110: * controls are requested.
111: *
112: * @exception IOException If a BER encoding error occurs.
113: */
114: public PersistentSearchControl() throws IOException {
115: super (OID);
116: super .value = setEncodedValue();
117: }
118:
119: /**
120: * Constructs a persistent search control.
121: *
122: * @param changeTypes The change types of interest.
123: * @param changesOnly Return original entries and changed entries
124: * or only the changed entries.
125: * @param returnControls Return entry change controls.
126: * @param criticality The control's criticality.
127: * @exception IOException If a BER encoding error occurs.
128: */
129: public PersistentSearchControl(int changeTypes,
130: boolean changesOnly, boolean returnControls,
131: boolean criticality) throws IOException {
132:
133: super (OID, criticality, null);
134: this .changeTypes = changeTypes;
135: this .changesOnly = changesOnly;
136: this .returnControls = returnControls;
137: super .value = setEncodedValue();
138: }
139:
140: /*
141: * Sets the ASN.1 BER encoded value of the persistent search control.
142: * The result is the raw BER bytes including the tag and length of
143: * the control's value. It does not include the controls OID or criticality.
144: *
145: * @return A possibly null byte array representing the ASN.1 BER encoded
146: * value of the LDAP persistent search control.
147: * @exception IOException If a BER encoding error occurs.
148: */
149: private byte[] setEncodedValue() throws IOException {
150:
151: // build the ASN.1 encoding
152: BerEncoder ber = new BerEncoder(32);
153:
154: ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
155: ber.encodeInt(changeTypes);
156: ber.encodeBoolean(changesOnly);
157: ber.encodeBoolean(returnControls);
158: ber.endSeq();
159:
160: return ber.getTrimmedBuf();
161: }
162: }
|