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.opends.server.admin.AdministratorAction;
024import org.opends.server.admin.BooleanPropertyDefinition;
025import org.opends.server.admin.ClassPropertyDefinition;
026import org.opends.server.admin.client.AuthorizationException;
027import org.opends.server.admin.client.CommunicationException;
028import org.opends.server.admin.client.ConcurrentModificationException;
029import org.opends.server.admin.client.ManagedObject;
030import org.opends.server.admin.client.MissingMandatoryPropertiesException;
031import org.opends.server.admin.client.OperationRejectedException;
032import org.opends.server.admin.DefaultBehaviorProvider;
033import org.opends.server.admin.DefinedDefaultBehaviorProvider;
034import org.opends.server.admin.DurationPropertyDefinition;
035import org.opends.server.admin.EnumPropertyDefinition;
036import org.opends.server.admin.ManagedObjectAlreadyExistsException;
037import org.opends.server.admin.ManagedObjectDefinition;
038import org.opends.server.admin.PropertyOption;
039import org.opends.server.admin.PropertyProvider;
040import org.opends.server.admin.server.ConfigurationChangeListener;
041import org.opends.server.admin.server.ServerManagedObject;
042import org.opends.server.admin.std.client.ProfilerPluginCfgClient;
043import org.opends.server.admin.std.meta.PluginCfgDefn.PluginType;
044import org.opends.server.admin.std.server.PluginCfg;
045import org.opends.server.admin.std.server.ProfilerPluginCfg;
046import org.opends.server.admin.StringPropertyDefinition;
047import org.opends.server.admin.Tag;
048import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
049
050
051
052/**
053 * An interface for querying the Profiler Plugin managed object
054 * definition meta information.
055 * <p>
056 * The Profiler plug-in captures profiling information about
057 * operations performed inside the JVM while the OpenDJ directory
058 * server is running.
059 */
060public final class ProfilerPluginCfgDefn extends ManagedObjectDefinition<ProfilerPluginCfgClient, ProfilerPluginCfg> {
061
062  // The singleton configuration definition instance.
063  private static final ProfilerPluginCfgDefn INSTANCE = new ProfilerPluginCfgDefn();
064
065
066
067  /**
068   * Defines the set of permissable values for the "profile-action" property.
069   * <p>
070   * Specifies the action that should be taken by the profiler.
071   * <p>
072   * A value of "start" causes the profiler thread to start collecting
073   * data if it is not already active. A value of "stop" causes the
074   * profiler thread to stop collecting data and write it to disk, and
075   * a value of "cancel" causes the profiler thread to stop collecting
076   * data and discard anything that has been captured. These operations
077   * occur immediately.
078   */
079  public static enum ProfileAction {
080
081    /**
082     * Stop collecting profile data and discard what has been
083     * captured.
084     */
085    CANCEL("cancel"),
086
087
088
089    /**
090     * Do not take any action.
091     */
092    NONE("none"),
093
094
095
096    /**
097     * Start collecting profile data.
098     */
099    START("start"),
100
101
102
103    /**
104     * Stop collecting profile data and write what has been captured
105     * to a file in the profile directory.
106     */
107    STOP("stop");
108
109
110
111    // String representation of the value.
112    private final String name;
113
114
115
116    // Private constructor.
117    private ProfileAction(String name) { this.name = name; }
118
119
120
121    /**
122     * {@inheritDoc}
123     */
124    public String toString() { return name; }
125
126  }
127
128
129
130  // The "enable-profiling-on-startup" property definition.
131  private static final BooleanPropertyDefinition PD_ENABLE_PROFILING_ON_STARTUP;
132
133
134
135  // The "invoke-for-internal-operations" property definition.
136  private static final BooleanPropertyDefinition PD_INVOKE_FOR_INTERNAL_OPERATIONS;
137
138
139
140  // The "java-class" property definition.
141  private static final ClassPropertyDefinition PD_JAVA_CLASS;
142
143
144
145  // The "plugin-type" property definition.
146  private static final EnumPropertyDefinition<PluginType> PD_PLUGIN_TYPE;
147
148
149
150  // The "profile-action" property definition.
151  private static final EnumPropertyDefinition<ProfileAction> PD_PROFILE_ACTION;
152
153
154
155  // The "profile-directory" property definition.
156  private static final StringPropertyDefinition PD_PROFILE_DIRECTORY;
157
158
159
160  // The "profile-sample-interval" property definition.
161  private static final DurationPropertyDefinition PD_PROFILE_SAMPLE_INTERVAL;
162
163
164
165  // Build the "enable-profiling-on-startup" property definition.
166  static {
167      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enable-profiling-on-startup");
168      builder.setOption(PropertyOption.MANDATORY);
169      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enable-profiling-on-startup"));
170      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
171      PD_ENABLE_PROFILING_ON_STARTUP = builder.getInstance();
172      INSTANCE.registerPropertyDefinition(PD_ENABLE_PROFILING_ON_STARTUP);
173  }
174
175
176
177  // Build the "invoke-for-internal-operations" property definition.
178  static {
179      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "invoke-for-internal-operations");
180      builder.setOption(PropertyOption.ADVANCED);
181      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "invoke-for-internal-operations"));
182      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("false");
183      builder.setDefaultBehaviorProvider(provider);
184      PD_INVOKE_FOR_INTERNAL_OPERATIONS = builder.getInstance();
185      INSTANCE.registerPropertyDefinition(PD_INVOKE_FOR_INTERNAL_OPERATIONS);
186  }
187
188
189
190  // Build the "java-class" property definition.
191  static {
192      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
193      builder.setOption(PropertyOption.MANDATORY);
194      builder.setOption(PropertyOption.ADVANCED);
195      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
196      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.plugins.profiler.ProfilerPlugin");
197      builder.setDefaultBehaviorProvider(provider);
198      builder.addInstanceOf("org.opends.server.api.plugin.DirectoryServerPlugin");
199      PD_JAVA_CLASS = builder.getInstance();
200      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
201  }
202
203
204
205  // Build the "plugin-type" property definition.
206  static {
207      EnumPropertyDefinition.Builder<PluginType> builder = EnumPropertyDefinition.createBuilder(INSTANCE, "plugin-type");
208      builder.setOption(PropertyOption.MULTI_VALUED);
209      builder.setOption(PropertyOption.MANDATORY);
210      builder.setOption(PropertyOption.ADVANCED);
211      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "plugin-type"));
212      DefaultBehaviorProvider<PluginType> provider = new DefinedDefaultBehaviorProvider<PluginType>("startup");
213      builder.setDefaultBehaviorProvider(provider);
214      builder.setEnumClass(PluginType.class);
215      PD_PLUGIN_TYPE = builder.getInstance();
216      INSTANCE.registerPropertyDefinition(PD_PLUGIN_TYPE);
217  }
218
219
220
221  // Build the "profile-action" property definition.
222  static {
223      EnumPropertyDefinition.Builder<ProfileAction> builder = EnumPropertyDefinition.createBuilder(INSTANCE, "profile-action");
224      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "profile-action"));
225      DefaultBehaviorProvider<ProfileAction> provider = new DefinedDefaultBehaviorProvider<ProfileAction>("none");
226      builder.setDefaultBehaviorProvider(provider);
227      builder.setEnumClass(ProfileAction.class);
228      PD_PROFILE_ACTION = builder.getInstance();
229      INSTANCE.registerPropertyDefinition(PD_PROFILE_ACTION);
230  }
231
232
233
234  // Build the "profile-directory" property definition.
235  static {
236      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "profile-directory");
237      builder.setOption(PropertyOption.MANDATORY);
238      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "profile-directory"));
239      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
240      builder.setPattern(".*", "DIR");
241      PD_PROFILE_DIRECTORY = builder.getInstance();
242      INSTANCE.registerPropertyDefinition(PD_PROFILE_DIRECTORY);
243  }
244
245
246
247  // Build the "profile-sample-interval" property definition.
248  static {
249      DurationPropertyDefinition.Builder builder = DurationPropertyDefinition.createBuilder(INSTANCE, "profile-sample-interval");
250      builder.setOption(PropertyOption.MANDATORY);
251      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "profile-sample-interval"));
252      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Long>());
253      builder.setBaseUnit("ms");
254      builder.setUpperLimit("2147483647");
255      builder.setLowerLimit("1");
256      PD_PROFILE_SAMPLE_INTERVAL = builder.getInstance();
257      INSTANCE.registerPropertyDefinition(PD_PROFILE_SAMPLE_INTERVAL);
258  }
259
260
261
262  // Register the tags associated with this managed object definition.
263  static {
264    INSTANCE.registerTag(Tag.valueOf("core-server"));
265  }
266
267
268
269  /**
270   * Get the Profiler Plugin configuration definition singleton.
271   *
272   * @return Returns the Profiler Plugin configuration definition
273   *         singleton.
274   */
275  public static ProfilerPluginCfgDefn getInstance() {
276    return INSTANCE;
277  }
278
279
280
281  /**
282   * Private constructor.
283   */
284  private ProfilerPluginCfgDefn() {
285    super("profiler-plugin", PluginCfgDefn.getInstance());
286  }
287
288
289
290  /**
291   * {@inheritDoc}
292   */
293  public ProfilerPluginCfgClient createClientConfiguration(
294      ManagedObject<? extends ProfilerPluginCfgClient> impl) {
295    return new ProfilerPluginCfgClientImpl(impl);
296  }
297
298
299
300  /**
301   * {@inheritDoc}
302   */
303  public ProfilerPluginCfg createServerConfiguration(
304      ServerManagedObject<? extends ProfilerPluginCfg> impl) {
305    return new ProfilerPluginCfgServerImpl(impl);
306  }
307
308
309
310  /**
311   * {@inheritDoc}
312   */
313  public Class<ProfilerPluginCfg> getServerConfigurationClass() {
314    return ProfilerPluginCfg.class;
315  }
316
317
318
319  /**
320   * Get the "enabled" property definition.
321   * <p>
322   * Indicates whether the plug-in is enabled for use.
323   *
324   * @return Returns the "enabled" property definition.
325   */
326  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
327    return PluginCfgDefn.getInstance().getEnabledPropertyDefinition();
328  }
329
330
331
332  /**
333   * Get the "enable-profiling-on-startup" property definition.
334   * <p>
335   * Indicates whether the profiler plug-in is to start collecting
336   * data automatically when the directory server is started.
337   * <p>
338   * This property is read only when the server is started, and any
339   * changes take effect on the next restart. This property is
340   * typically set to "false" unless startup profiling is required,
341   * because otherwise the volume of data that can be collected can
342   * cause the server to run out of memory if it is not turned off in a
343   * timely manner.
344   *
345   * @return Returns the "enable-profiling-on-startup" property definition.
346   */
347  public BooleanPropertyDefinition getEnableProfilingOnStartupPropertyDefinition() {
348    return PD_ENABLE_PROFILING_ON_STARTUP;
349  }
350
351
352
353  /**
354   * Get the "invoke-for-internal-operations" property definition.
355   * <p>
356   * Indicates whether the plug-in should be invoked for internal
357   * operations.
358   * <p>
359   * Any plug-in that can be invoked for internal operations must
360   * ensure that it does not create any new internal operatons that can
361   * cause the same plug-in to be re-invoked.
362   *
363   * @return Returns the "invoke-for-internal-operations" property definition.
364   */
365  public BooleanPropertyDefinition getInvokeForInternalOperationsPropertyDefinition() {
366    return PD_INVOKE_FOR_INTERNAL_OPERATIONS;
367  }
368
369
370
371  /**
372   * Get the "java-class" property definition.
373   * <p>
374   * Specifies the fully-qualified name of the Java class that
375   * provides the plug-in implementation.
376   *
377   * @return Returns the "java-class" property definition.
378   */
379  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
380    return PD_JAVA_CLASS;
381  }
382
383
384
385  /**
386   * Get the "plugin-type" property definition.
387   * <p>
388   * Specifies the set of plug-in types for the plug-in, which
389   * specifies the times at which the plug-in is invoked.
390   *
391   * @return Returns the "plugin-type" property definition.
392   */
393  public EnumPropertyDefinition<PluginType> getPluginTypePropertyDefinition() {
394    return PD_PLUGIN_TYPE;
395  }
396
397
398
399  /**
400   * Get the "profile-action" property definition.
401   * <p>
402   * Specifies the action that should be taken by the profiler.
403   * <p>
404   * A value of "start" causes the profiler thread to start collecting
405   * data if it is not already active. A value of "stop" causes the
406   * profiler thread to stop collecting data and write it to disk, and
407   * a value of "cancel" causes the profiler thread to stop collecting
408   * data and discard anything that has been captured. These operations
409   * occur immediately.
410   *
411   * @return Returns the "profile-action" property definition.
412   */
413  public EnumPropertyDefinition<ProfileAction> getProfileActionPropertyDefinition() {
414    return PD_PROFILE_ACTION;
415  }
416
417
418
419  /**
420   * Get the "profile-directory" property definition.
421   * <p>
422   * Specifies the path to the directory where profile information is
423   * to be written. This path may be either an absolute path or a path
424   * that is relative to the root of the OpenDJ directory server
425   * instance.
426   * <p>
427   * The directory must exist and the directory server must have
428   * permission to create new files in it.
429   *
430   * @return Returns the "profile-directory" property definition.
431   */
432  public StringPropertyDefinition getProfileDirectoryPropertyDefinition() {
433    return PD_PROFILE_DIRECTORY;
434  }
435
436
437
438  /**
439   * Get the "profile-sample-interval" property definition.
440   * <p>
441   * Specifies the sample interval in milliseconds to be used when
442   * capturing profiling information in the server.
443   * <p>
444   * When capturing data, the profiler thread sleeps for this length
445   * of time between calls to obtain traces for all threads running in
446   * the JVM.
447   *
448   * @return Returns the "profile-sample-interval" property definition.
449   */
450  public DurationPropertyDefinition getProfileSampleIntervalPropertyDefinition() {
451    return PD_PROFILE_SAMPLE_INTERVAL;
452  }
453
454
455
456  /**
457   * Managed object client implementation.
458   */
459  private static class ProfilerPluginCfgClientImpl implements
460    ProfilerPluginCfgClient {
461
462    // Private implementation.
463    private ManagedObject<? extends ProfilerPluginCfgClient> impl;
464
465
466
467    // Private constructor.
468    private ProfilerPluginCfgClientImpl(
469        ManagedObject<? extends ProfilerPluginCfgClient> impl) {
470      this.impl = impl;
471    }
472
473
474
475    /**
476     * {@inheritDoc}
477     */
478    public Boolean isEnabled() {
479      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
480    }
481
482
483
484    /**
485     * {@inheritDoc}
486     */
487    public void setEnabled(boolean value) {
488      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
489    }
490
491
492
493    /**
494     * {@inheritDoc}
495     */
496    public Boolean isEnableProfilingOnStartup() {
497      return impl.getPropertyValue(INSTANCE.getEnableProfilingOnStartupPropertyDefinition());
498    }
499
500
501
502    /**
503     * {@inheritDoc}
504     */
505    public void setEnableProfilingOnStartup(boolean value) {
506      impl.setPropertyValue(INSTANCE.getEnableProfilingOnStartupPropertyDefinition(), value);
507    }
508
509
510
511    /**
512     * {@inheritDoc}
513     */
514    public boolean isInvokeForInternalOperations() {
515      return impl.getPropertyValue(INSTANCE.getInvokeForInternalOperationsPropertyDefinition());
516    }
517
518
519
520    /**
521     * {@inheritDoc}
522     */
523    public void setInvokeForInternalOperations(Boolean value) {
524      impl.setPropertyValue(INSTANCE.getInvokeForInternalOperationsPropertyDefinition(), value);
525    }
526
527
528
529    /**
530     * {@inheritDoc}
531     */
532    public String getJavaClass() {
533      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
534    }
535
536
537
538    /**
539     * {@inheritDoc}
540     */
541    public void setJavaClass(String value) {
542      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
543    }
544
545
546
547    /**
548     * {@inheritDoc}
549     */
550    public SortedSet<PluginType> getPluginType() {
551      return impl.getPropertyValues(INSTANCE.getPluginTypePropertyDefinition());
552    }
553
554
555
556    /**
557     * {@inheritDoc}
558     */
559    public void setPluginType(Collection<PluginType> values) {
560      impl.setPropertyValues(INSTANCE.getPluginTypePropertyDefinition(), values);
561    }
562
563
564
565    /**
566     * {@inheritDoc}
567     */
568    public ProfileAction getProfileAction() {
569      return impl.getPropertyValue(INSTANCE.getProfileActionPropertyDefinition());
570    }
571
572
573
574    /**
575     * {@inheritDoc}
576     */
577    public void setProfileAction(ProfileAction value) {
578      impl.setPropertyValue(INSTANCE.getProfileActionPropertyDefinition(), value);
579    }
580
581
582
583    /**
584     * {@inheritDoc}
585     */
586    public String getProfileDirectory() {
587      return impl.getPropertyValue(INSTANCE.getProfileDirectoryPropertyDefinition());
588    }
589
590
591
592    /**
593     * {@inheritDoc}
594     */
595    public void setProfileDirectory(String value) {
596      impl.setPropertyValue(INSTANCE.getProfileDirectoryPropertyDefinition(), value);
597    }
598
599
600
601    /**
602     * {@inheritDoc}
603     */
604    public Long getProfileSampleInterval() {
605      return impl.getPropertyValue(INSTANCE.getProfileSampleIntervalPropertyDefinition());
606    }
607
608
609
610    /**
611     * {@inheritDoc}
612     */
613    public void setProfileSampleInterval(long value) {
614      impl.setPropertyValue(INSTANCE.getProfileSampleIntervalPropertyDefinition(), value);
615    }
616
617
618
619    /**
620     * {@inheritDoc}
621     */
622    public ManagedObjectDefinition<? extends ProfilerPluginCfgClient, ? extends ProfilerPluginCfg> 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 ProfilerPluginCfgServerImpl implements
661    ProfilerPluginCfg {
662
663    // Private implementation.
664    private ServerManagedObject<? extends ProfilerPluginCfg> impl;
665
666    // The value of the "enabled" property.
667    private final boolean pEnabled;
668
669    // The value of the "enable-profiling-on-startup" property.
670    private final boolean pEnableProfilingOnStartup;
671
672    // The value of the "invoke-for-internal-operations" property.
673    private final boolean pInvokeForInternalOperations;
674
675    // The value of the "java-class" property.
676    private final String pJavaClass;
677
678    // The value of the "plugin-type" property.
679    private final SortedSet<PluginType> pPluginType;
680
681    // The value of the "profile-action" property.
682    private final ProfileAction pProfileAction;
683
684    // The value of the "profile-directory" property.
685    private final String pProfileDirectory;
686
687    // The value of the "profile-sample-interval" property.
688    private final long pProfileSampleInterval;
689
690
691
692    // Private constructor.
693    private ProfilerPluginCfgServerImpl(ServerManagedObject<? extends ProfilerPluginCfg> impl) {
694      this.impl = impl;
695      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
696      this.pEnableProfilingOnStartup = impl.getPropertyValue(INSTANCE.getEnableProfilingOnStartupPropertyDefinition());
697      this.pInvokeForInternalOperations = impl.getPropertyValue(INSTANCE.getInvokeForInternalOperationsPropertyDefinition());
698      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
699      this.pPluginType = impl.getPropertyValues(INSTANCE.getPluginTypePropertyDefinition());
700      this.pProfileAction = impl.getPropertyValue(INSTANCE.getProfileActionPropertyDefinition());
701      this.pProfileDirectory = impl.getPropertyValue(INSTANCE.getProfileDirectoryPropertyDefinition());
702      this.pProfileSampleInterval = impl.getPropertyValue(INSTANCE.getProfileSampleIntervalPropertyDefinition());
703    }
704
705
706
707    /**
708     * {@inheritDoc}
709     */
710    public void addProfilerChangeListener(
711        ConfigurationChangeListener<ProfilerPluginCfg> listener) {
712      impl.registerChangeListener(listener);
713    }
714
715
716
717    /**
718     * {@inheritDoc}
719     */
720    public void removeProfilerChangeListener(
721        ConfigurationChangeListener<ProfilerPluginCfg> listener) {
722      impl.deregisterChangeListener(listener);
723    }
724    /**
725     * {@inheritDoc}
726     */
727    public void addChangeListener(
728        ConfigurationChangeListener<PluginCfg> listener) {
729      impl.registerChangeListener(listener);
730    }
731
732
733
734    /**
735     * {@inheritDoc}
736     */
737    public void removeChangeListener(
738        ConfigurationChangeListener<PluginCfg> listener) {
739      impl.deregisterChangeListener(listener);
740    }
741
742
743
744    /**
745     * {@inheritDoc}
746     */
747    public boolean isEnabled() {
748      return pEnabled;
749    }
750
751
752
753    /**
754     * {@inheritDoc}
755     */
756    public boolean isEnableProfilingOnStartup() {
757      return pEnableProfilingOnStartup;
758    }
759
760
761
762    /**
763     * {@inheritDoc}
764     */
765    public boolean isInvokeForInternalOperations() {
766      return pInvokeForInternalOperations;
767    }
768
769
770
771    /**
772     * {@inheritDoc}
773     */
774    public String getJavaClass() {
775      return pJavaClass;
776    }
777
778
779
780    /**
781     * {@inheritDoc}
782     */
783    public SortedSet<PluginType> getPluginType() {
784      return pPluginType;
785    }
786
787
788
789    /**
790     * {@inheritDoc}
791     */
792    public ProfileAction getProfileAction() {
793      return pProfileAction;
794    }
795
796
797
798    /**
799     * {@inheritDoc}
800     */
801    public String getProfileDirectory() {
802      return pProfileDirectory;
803    }
804
805
806
807    /**
808     * {@inheritDoc}
809     */
810    public long getProfileSampleInterval() {
811      return pProfileSampleInterval;
812    }
813
814
815
816    /**
817     * {@inheritDoc}
818     */
819    public Class<? extends ProfilerPluginCfg> configurationClass() {
820      return ProfilerPluginCfg.class;
821    }
822
823
824
825    /**
826     * {@inheritDoc}
827     */
828    public DN dn() {
829      return impl.getDN();
830    }
831
832
833
834    /** {@inheritDoc} */
835    public String toString() {
836      return impl.toString();
837    }
838  }
839}