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