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