001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 */
016package org.opends.server.admin.std.meta;
017
018
019
020import java.util.Collection;
021import java.util.SortedSet;
022import org.forgerock.opendj.ldap.DN;
023import org.forgerock.opendj.ldap.schema.AttributeType;
024import org.opends.server.admin.AdministratorAction;
025import org.opends.server.admin.AttributeTypePropertyDefinition;
026import org.opends.server.admin.BooleanPropertyDefinition;
027import org.opends.server.admin.ClassPropertyDefinition;
028import org.opends.server.admin.client.AuthorizationException;
029import org.opends.server.admin.client.CommunicationException;
030import org.opends.server.admin.client.ConcurrentModificationException;
031import org.opends.server.admin.client.ManagedObject;
032import org.opends.server.admin.client.MissingMandatoryPropertiesException;
033import org.opends.server.admin.client.OperationRejectedException;
034import org.opends.server.admin.DefaultBehaviorProvider;
035import org.opends.server.admin.DefinedDefaultBehaviorProvider;
036import org.opends.server.admin.DNPropertyDefinition;
037import org.opends.server.admin.EnumPropertyDefinition;
038import org.opends.server.admin.ManagedObjectAlreadyExistsException;
039import org.opends.server.admin.ManagedObjectDefinition;
040import org.opends.server.admin.PropertyOption;
041import org.opends.server.admin.PropertyProvider;
042import org.opends.server.admin.server.ConfigurationChangeListener;
043import org.opends.server.admin.server.ServerManagedObject;
044import org.opends.server.admin.std.client.EntityTagVirtualAttributeCfgClient;
045import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.ConflictBehavior;
046import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.Scope;
047import org.opends.server.admin.std.server.EntityTagVirtualAttributeCfg;
048import org.opends.server.admin.std.server.VirtualAttributeCfg;
049import org.opends.server.admin.StringPropertyDefinition;
050import org.opends.server.admin.Tag;
051
052
053
054/**
055 * An interface for querying the Entity Tag Virtual Attribute managed
056 * object definition meta information.
057 * <p>
058 * The Entity Tag Virtual Attribute ensures that all entries contain
059 * an "entity tag" or "Etag" as defined in section 3.11 of RFC 2616.
060 */
061public final class EntityTagVirtualAttributeCfgDefn extends ManagedObjectDefinition<EntityTagVirtualAttributeCfgClient, EntityTagVirtualAttributeCfg> {
062
063  // The singleton configuration definition instance.
064  private static final EntityTagVirtualAttributeCfgDefn INSTANCE = new EntityTagVirtualAttributeCfgDefn();
065
066
067
068  /**
069   * Defines the set of permissable values for the "checksum-algorithm" property.
070   * <p>
071   * The algorithm which should be used for calculating the entity tag
072   * checksum value.
073   */
074  public static enum ChecksumAlgorithm {
075
076    /**
077     * The Adler-32 checksum algorithm which is almost as reliable as
078     * a CRC-32 but can be computed much faster.
079     */
080    ADLER_32("adler-32"),
081
082
083
084    /**
085     * The CRC-32 checksum algorithm.
086     */
087    CRC_32("crc-32");
088
089
090
091    // String representation of the value.
092    private final String name;
093
094
095
096    // Private constructor.
097    private ChecksumAlgorithm(String name) { this.name = name; }
098
099
100
101    /**
102     * {@inheritDoc}
103     */
104    public String toString() { return name; }
105
106  }
107
108
109
110  // The "attribute-type" property definition.
111  private static final AttributeTypePropertyDefinition PD_ATTRIBUTE_TYPE;
112
113
114
115  // The "checksum-algorithm" property definition.
116  private static final EnumPropertyDefinition<ChecksumAlgorithm> PD_CHECKSUM_ALGORITHM;
117
118
119
120  // The "conflict-behavior" property definition.
121  private static final EnumPropertyDefinition<ConflictBehavior> PD_CONFLICT_BEHAVIOR;
122
123
124
125  // The "excluded-attribute" property definition.
126  private static final AttributeTypePropertyDefinition PD_EXCLUDED_ATTRIBUTE;
127
128
129
130  // The "java-class" property definition.
131  private static final ClassPropertyDefinition PD_JAVA_CLASS;
132
133
134
135  // Build the "attribute-type" property definition.
136  static {
137      AttributeTypePropertyDefinition.Builder builder = AttributeTypePropertyDefinition.createBuilder(INSTANCE, "attribute-type");
138      builder.setOption(PropertyOption.MANDATORY);
139      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "attribute-type"));
140      DefaultBehaviorProvider<AttributeType> provider = new DefinedDefaultBehaviorProvider<AttributeType>("etag");
141      builder.setDefaultBehaviorProvider(provider);
142      PD_ATTRIBUTE_TYPE = builder.getInstance();
143      INSTANCE.registerPropertyDefinition(PD_ATTRIBUTE_TYPE);
144  }
145
146
147
148  // Build the "checksum-algorithm" property definition.
149  static {
150      EnumPropertyDefinition.Builder<ChecksumAlgorithm> builder = EnumPropertyDefinition.createBuilder(INSTANCE, "checksum-algorithm");
151      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "checksum-algorithm"));
152      DefaultBehaviorProvider<ChecksumAlgorithm> provider = new DefinedDefaultBehaviorProvider<ChecksumAlgorithm>("adler-32");
153      builder.setDefaultBehaviorProvider(provider);
154      builder.setEnumClass(ChecksumAlgorithm.class);
155      PD_CHECKSUM_ALGORITHM = builder.getInstance();
156      INSTANCE.registerPropertyDefinition(PD_CHECKSUM_ALGORITHM);
157  }
158
159
160
161  // Build the "conflict-behavior" property definition.
162  static {
163      EnumPropertyDefinition.Builder<ConflictBehavior> builder = EnumPropertyDefinition.createBuilder(INSTANCE, "conflict-behavior");
164      builder.setOption(PropertyOption.ADVANCED);
165      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "conflict-behavior"));
166      DefaultBehaviorProvider<ConflictBehavior> provider = new DefinedDefaultBehaviorProvider<ConflictBehavior>("real-overrides-virtual");
167      builder.setDefaultBehaviorProvider(provider);
168      builder.setEnumClass(ConflictBehavior.class);
169      PD_CONFLICT_BEHAVIOR = builder.getInstance();
170      INSTANCE.registerPropertyDefinition(PD_CONFLICT_BEHAVIOR);
171  }
172
173
174
175  // Build the "excluded-attribute" property definition.
176  static {
177      AttributeTypePropertyDefinition.Builder builder = AttributeTypePropertyDefinition.createBuilder(INSTANCE, "excluded-attribute");
178      builder.setOption(PropertyOption.MULTI_VALUED);
179      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "excluded-attribute"));
180      DefaultBehaviorProvider<AttributeType> provider = new DefinedDefaultBehaviorProvider<AttributeType>("ds-sync-hist");
181      builder.setDefaultBehaviorProvider(provider);
182      PD_EXCLUDED_ATTRIBUTE = builder.getInstance();
183      INSTANCE.registerPropertyDefinition(PD_EXCLUDED_ATTRIBUTE);
184  }
185
186
187
188  // Build the "java-class" property definition.
189  static {
190      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
191      builder.setOption(PropertyOption.MANDATORY);
192      builder.setOption(PropertyOption.ADVANCED);
193      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "java-class"));
194      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.extensions.EntityTagVirtualAttributeProvider");
195      builder.setDefaultBehaviorProvider(provider);
196      builder.addInstanceOf("org.opends.server.api.VirtualAttributeProvider");
197      PD_JAVA_CLASS = builder.getInstance();
198      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
199  }
200
201
202
203  // Register the tags associated with this managed object definition.
204  static {
205    INSTANCE.registerTag(Tag.valueOf("core-server"));
206  }
207
208
209
210  /**
211   * Get the Entity Tag Virtual Attribute configuration definition
212   * singleton.
213   *
214   * @return Returns the Entity Tag Virtual Attribute configuration
215   *         definition singleton.
216   */
217  public static EntityTagVirtualAttributeCfgDefn getInstance() {
218    return INSTANCE;
219  }
220
221
222
223  /**
224   * Private constructor.
225   */
226  private EntityTagVirtualAttributeCfgDefn() {
227    super("entity-tag-virtual-attribute", VirtualAttributeCfgDefn.getInstance());
228  }
229
230
231
232  /**
233   * {@inheritDoc}
234   */
235  public EntityTagVirtualAttributeCfgClient createClientConfiguration(
236      ManagedObject<? extends EntityTagVirtualAttributeCfgClient> impl) {
237    return new EntityTagVirtualAttributeCfgClientImpl(impl);
238  }
239
240
241
242  /**
243   * {@inheritDoc}
244   */
245  public EntityTagVirtualAttributeCfg createServerConfiguration(
246      ServerManagedObject<? extends EntityTagVirtualAttributeCfg> impl) {
247    return new EntityTagVirtualAttributeCfgServerImpl(impl);
248  }
249
250
251
252  /**
253   * {@inheritDoc}
254   */
255  public Class<EntityTagVirtualAttributeCfg> getServerConfigurationClass() {
256    return EntityTagVirtualAttributeCfg.class;
257  }
258
259
260
261  /**
262   * Get the "attribute-type" property definition.
263   * <p>
264   * Specifies the attribute type for the attribute whose values are
265   * to be dynamically assigned by the virtual attribute.
266   *
267   * @return Returns the "attribute-type" property definition.
268   */
269  public AttributeTypePropertyDefinition getAttributeTypePropertyDefinition() {
270    return PD_ATTRIBUTE_TYPE;
271  }
272
273
274
275  /**
276   * Get the "base-dn" property definition.
277   * <p>
278   * Specifies the base DNs for the branches containing entries that
279   * are eligible to use this virtual attribute.
280   * <p>
281   * If no values are given, then the server generates virtual
282   * attributes anywhere in the server.
283   *
284   * @return Returns the "base-dn" property definition.
285   */
286  public DNPropertyDefinition getBaseDNPropertyDefinition() {
287    return VirtualAttributeCfgDefn.getInstance().getBaseDNPropertyDefinition();
288  }
289
290
291
292  /**
293   * Get the "checksum-algorithm" property definition.
294   * <p>
295   * The algorithm which should be used for calculating the entity tag
296   * checksum value.
297   *
298   * @return Returns the "checksum-algorithm" property definition.
299   */
300  public EnumPropertyDefinition<ChecksumAlgorithm> getChecksumAlgorithmPropertyDefinition() {
301    return PD_CHECKSUM_ALGORITHM;
302  }
303
304
305
306  /**
307   * Get the "conflict-behavior" property definition.
308   * <p>
309   * Specifies the behavior that the server is to exhibit for entries
310   * that already contain one or more real values for the associated
311   * attribute.
312   *
313   * @return Returns the "conflict-behavior" property definition.
314   */
315  public EnumPropertyDefinition<ConflictBehavior> getConflictBehaviorPropertyDefinition() {
316    return PD_CONFLICT_BEHAVIOR;
317  }
318
319
320
321  /**
322   * Get the "enabled" property definition.
323   * <p>
324   * Indicates whether the Entity Tag Virtual Attribute is enabled for
325   * use.
326   *
327   * @return Returns the "enabled" property definition.
328   */
329  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
330    return VirtualAttributeCfgDefn.getInstance().getEnabledPropertyDefinition();
331  }
332
333
334
335  /**
336   * Get the "excluded-attribute" property definition.
337   * <p>
338   * The list of attributes which should be ignored when calculating
339   * the entity tag checksum value.
340   * <p>
341   * Certain attributes like "ds-sync-hist" may vary between replicas
342   * due to different purging schedules and should not be included in
343   * the checksum.
344   *
345   * @return Returns the "excluded-attribute" property definition.
346   */
347  public AttributeTypePropertyDefinition getExcludedAttributePropertyDefinition() {
348    return PD_EXCLUDED_ATTRIBUTE;
349  }
350
351
352
353  /**
354   * Get the "filter" property definition.
355   * <p>
356   * Specifies the search filters to be applied against entries to
357   * determine if the virtual attribute is to be generated for those
358   * entries.
359   * <p>
360   * If no values are given, then any entry is eligible to have the
361   * value generated. If one or more filters are specified, then only
362   * entries that match at least one of those filters are allowed to
363   * have the virtual attribute.
364   *
365   * @return Returns the "filter" property definition.
366   */
367  public StringPropertyDefinition getFilterPropertyDefinition() {
368    return VirtualAttributeCfgDefn.getInstance().getFilterPropertyDefinition();
369  }
370
371
372
373  /**
374   * Get the "group-dn" property definition.
375   * <p>
376   * Specifies the DNs of the groups whose members can be eligible to
377   * use this virtual attribute.
378   * <p>
379   * If no values are given, then group membership is not taken into
380   * account when generating the virtual attribute. If one or more
381   * group DNs are specified, then only members of those groups are
382   * allowed to have the virtual attribute.
383   *
384   * @return Returns the "group-dn" property definition.
385   */
386  public DNPropertyDefinition getGroupDNPropertyDefinition() {
387    return VirtualAttributeCfgDefn.getInstance().getGroupDNPropertyDefinition();
388  }
389
390
391
392  /**
393   * Get the "java-class" property definition.
394   * <p>
395   * Specifies the fully-qualified name of the virtual attribute
396   * provider class that generates the attribute values.
397   *
398   * @return Returns the "java-class" property definition.
399   */
400  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
401    return PD_JAVA_CLASS;
402  }
403
404
405
406  /**
407   * Get the "scope" property definition.
408   * <p>
409   * Specifies the LDAP scope associated with base DNs for entries
410   * that are eligible to use this virtual attribute.
411   *
412   * @return Returns the "scope" property definition.
413   */
414  public EnumPropertyDefinition<Scope> getScopePropertyDefinition() {
415    return VirtualAttributeCfgDefn.getInstance().getScopePropertyDefinition();
416  }
417
418
419
420  /**
421   * Managed object client implementation.
422   */
423  private static class EntityTagVirtualAttributeCfgClientImpl implements
424    EntityTagVirtualAttributeCfgClient {
425
426    // Private implementation.
427    private ManagedObject<? extends EntityTagVirtualAttributeCfgClient> impl;
428
429
430
431    // Private constructor.
432    private EntityTagVirtualAttributeCfgClientImpl(
433        ManagedObject<? extends EntityTagVirtualAttributeCfgClient> impl) {
434      this.impl = impl;
435    }
436
437
438
439    /**
440     * {@inheritDoc}
441     */
442    public AttributeType getAttributeType() {
443      return impl.getPropertyValue(INSTANCE.getAttributeTypePropertyDefinition());
444    }
445
446
447
448    /**
449     * {@inheritDoc}
450     */
451    public void setAttributeType(AttributeType value) {
452      impl.setPropertyValue(INSTANCE.getAttributeTypePropertyDefinition(), value);
453    }
454
455
456
457    /**
458     * {@inheritDoc}
459     */
460    public SortedSet<DN> getBaseDN() {
461      return impl.getPropertyValues(INSTANCE.getBaseDNPropertyDefinition());
462    }
463
464
465
466    /**
467     * {@inheritDoc}
468     */
469    public void setBaseDN(Collection<DN> values) {
470      impl.setPropertyValues(INSTANCE.getBaseDNPropertyDefinition(), values);
471    }
472
473
474
475    /**
476     * {@inheritDoc}
477     */
478    public ChecksumAlgorithm getChecksumAlgorithm() {
479      return impl.getPropertyValue(INSTANCE.getChecksumAlgorithmPropertyDefinition());
480    }
481
482
483
484    /**
485     * {@inheritDoc}
486     */
487    public void setChecksumAlgorithm(ChecksumAlgorithm value) {
488      impl.setPropertyValue(INSTANCE.getChecksumAlgorithmPropertyDefinition(), value);
489    }
490
491
492
493    /**
494     * {@inheritDoc}
495     */
496    public ConflictBehavior getConflictBehavior() {
497      return impl.getPropertyValue(INSTANCE.getConflictBehaviorPropertyDefinition());
498    }
499
500
501
502    /**
503     * {@inheritDoc}
504     */
505    public void setConflictBehavior(ConflictBehavior value) {
506      impl.setPropertyValue(INSTANCE.getConflictBehaviorPropertyDefinition(), value);
507    }
508
509
510
511    /**
512     * {@inheritDoc}
513     */
514    public Boolean isEnabled() {
515      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
516    }
517
518
519
520    /**
521     * {@inheritDoc}
522     */
523    public void setEnabled(boolean value) {
524      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
525    }
526
527
528
529    /**
530     * {@inheritDoc}
531     */
532    public SortedSet<AttributeType> getExcludedAttribute() {
533      return impl.getPropertyValues(INSTANCE.getExcludedAttributePropertyDefinition());
534    }
535
536
537
538    /**
539     * {@inheritDoc}
540     */
541    public void setExcludedAttribute(Collection<AttributeType> values) {
542      impl.setPropertyValues(INSTANCE.getExcludedAttributePropertyDefinition(), values);
543    }
544
545
546
547    /**
548     * {@inheritDoc}
549     */
550    public SortedSet<String> getFilter() {
551      return impl.getPropertyValues(INSTANCE.getFilterPropertyDefinition());
552    }
553
554
555
556    /**
557     * {@inheritDoc}
558     */
559    public void setFilter(Collection<String> values) {
560      impl.setPropertyValues(INSTANCE.getFilterPropertyDefinition(), values);
561    }
562
563
564
565    /**
566     * {@inheritDoc}
567     */
568    public SortedSet<DN> getGroupDN() {
569      return impl.getPropertyValues(INSTANCE.getGroupDNPropertyDefinition());
570    }
571
572
573
574    /**
575     * {@inheritDoc}
576     */
577    public void setGroupDN(Collection<DN> values) {
578      impl.setPropertyValues(INSTANCE.getGroupDNPropertyDefinition(), values);
579    }
580
581
582
583    /**
584     * {@inheritDoc}
585     */
586    public String getJavaClass() {
587      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
588    }
589
590
591
592    /**
593     * {@inheritDoc}
594     */
595    public void setJavaClass(String value) {
596      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
597    }
598
599
600
601    /**
602     * {@inheritDoc}
603     */
604    public Scope getScope() {
605      return impl.getPropertyValue(INSTANCE.getScopePropertyDefinition());
606    }
607
608
609
610    /**
611     * {@inheritDoc}
612     */
613    public void setScope(Scope value) {
614      impl.setPropertyValue(INSTANCE.getScopePropertyDefinition(), value);
615    }
616
617
618
619    /**
620     * {@inheritDoc}
621     */
622    public ManagedObjectDefinition<? extends EntityTagVirtualAttributeCfgClient, ? extends EntityTagVirtualAttributeCfg> definition() {
623      return INSTANCE;
624    }
625
626
627
628    /**
629     * {@inheritDoc}
630     */
631    public PropertyProvider properties() {
632      return impl;
633    }
634
635
636
637    /**
638     * {@inheritDoc}
639     */
640    public void commit() throws ManagedObjectAlreadyExistsException,
641        MissingMandatoryPropertiesException, ConcurrentModificationException,
642        OperationRejectedException, AuthorizationException,
643        CommunicationException {
644      impl.commit();
645    }
646
647
648
649    /** {@inheritDoc} */
650    public String toString() {
651      return impl.toString();
652    }
653  }
654
655
656
657  /**
658   * Managed object server implementation.
659   */
660  private static class EntityTagVirtualAttributeCfgServerImpl implements
661    EntityTagVirtualAttributeCfg {
662
663    // Private implementation.
664    private ServerManagedObject<? extends EntityTagVirtualAttributeCfg> impl;
665
666    // The value of the "attribute-type" property.
667    private final AttributeType pAttributeType;
668
669    // The value of the "base-dn" property.
670    private final SortedSet<DN> pBaseDN;
671
672    // The value of the "checksum-algorithm" property.
673    private final ChecksumAlgorithm pChecksumAlgorithm;
674
675    // The value of the "conflict-behavior" property.
676    private final ConflictBehavior pConflictBehavior;
677
678    // The value of the "enabled" property.
679    private final boolean pEnabled;
680
681    // The value of the "excluded-attribute" property.
682    private final SortedSet<AttributeType> pExcludedAttribute;
683
684    // The value of the "filter" property.
685    private final SortedSet<String> pFilter;
686
687    // The value of the "group-dn" property.
688    private final SortedSet<DN> pGroupDN;
689
690    // The value of the "java-class" property.
691    private final String pJavaClass;
692
693    // The value of the "scope" property.
694    private final Scope pScope;
695
696
697
698    // Private constructor.
699    private EntityTagVirtualAttributeCfgServerImpl(ServerManagedObject<? extends EntityTagVirtualAttributeCfg> impl) {
700      this.impl = impl;
701      this.pAttributeType = impl.getPropertyValue(INSTANCE.getAttributeTypePropertyDefinition());
702      this.pBaseDN = impl.getPropertyValues(INSTANCE.getBaseDNPropertyDefinition());
703      this.pChecksumAlgorithm = impl.getPropertyValue(INSTANCE.getChecksumAlgorithmPropertyDefinition());
704      this.pConflictBehavior = impl.getPropertyValue(INSTANCE.getConflictBehaviorPropertyDefinition());
705      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
706      this.pExcludedAttribute = impl.getPropertyValues(INSTANCE.getExcludedAttributePropertyDefinition());
707      this.pFilter = impl.getPropertyValues(INSTANCE.getFilterPropertyDefinition());
708      this.pGroupDN = impl.getPropertyValues(INSTANCE.getGroupDNPropertyDefinition());
709      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
710      this.pScope = impl.getPropertyValue(INSTANCE.getScopePropertyDefinition());
711    }
712
713
714
715    /**
716     * {@inheritDoc}
717     */
718    public void addEntityTagChangeListener(
719        ConfigurationChangeListener<EntityTagVirtualAttributeCfg> listener) {
720      impl.registerChangeListener(listener);
721    }
722
723
724
725    /**
726     * {@inheritDoc}
727     */
728    public void removeEntityTagChangeListener(
729        ConfigurationChangeListener<EntityTagVirtualAttributeCfg> listener) {
730      impl.deregisterChangeListener(listener);
731    }
732    /**
733     * {@inheritDoc}
734     */
735    public void addChangeListener(
736        ConfigurationChangeListener<VirtualAttributeCfg> listener) {
737      impl.registerChangeListener(listener);
738    }
739
740
741
742    /**
743     * {@inheritDoc}
744     */
745    public void removeChangeListener(
746        ConfigurationChangeListener<VirtualAttributeCfg> listener) {
747      impl.deregisterChangeListener(listener);
748    }
749
750
751
752    /**
753     * {@inheritDoc}
754     */
755    public AttributeType getAttributeType() {
756      return pAttributeType;
757    }
758
759
760
761    /**
762     * {@inheritDoc}
763     */
764    public SortedSet<DN> getBaseDN() {
765      return pBaseDN;
766    }
767
768
769
770    /**
771     * {@inheritDoc}
772     */
773    public ChecksumAlgorithm getChecksumAlgorithm() {
774      return pChecksumAlgorithm;
775    }
776
777
778
779    /**
780     * {@inheritDoc}
781     */
782    public ConflictBehavior getConflictBehavior() {
783      return pConflictBehavior;
784    }
785
786
787
788    /**
789     * {@inheritDoc}
790     */
791    public boolean isEnabled() {
792      return pEnabled;
793    }
794
795
796
797    /**
798     * {@inheritDoc}
799     */
800    public SortedSet<AttributeType> getExcludedAttribute() {
801      return pExcludedAttribute;
802    }
803
804
805
806    /**
807     * {@inheritDoc}
808     */
809    public SortedSet<String> getFilter() {
810      return pFilter;
811    }
812
813
814
815    /**
816     * {@inheritDoc}
817     */
818    public SortedSet<DN> getGroupDN() {
819      return pGroupDN;
820    }
821
822
823
824    /**
825     * {@inheritDoc}
826     */
827    public String getJavaClass() {
828      return pJavaClass;
829    }
830
831
832
833    /**
834     * {@inheritDoc}
835     */
836    public Scope getScope() {
837      return pScope;
838    }
839
840
841
842    /**
843     * {@inheritDoc}
844     */
845    public Class<? extends EntityTagVirtualAttributeCfg> configurationClass() {
846      return EntityTagVirtualAttributeCfg.class;
847    }
848
849
850
851    /**
852     * {@inheritDoc}
853     */
854    public DN dn() {
855      return impl.getDN();
856    }
857
858
859
860    /** {@inheritDoc} */
861    public String toString() {
862      return impl.toString();
863    }
864  }
865}