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}