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 java.util.TreeSet;
033import org.forgerock.opendj.config.AdministratorAction;
034import org.forgerock.opendj.config.AggregationPropertyDefinition;
035import org.forgerock.opendj.config.AliasDefaultBehaviorProvider;
036import org.forgerock.opendj.config.BooleanPropertyDefinition;
037import org.forgerock.opendj.config.ClassPropertyDefinition;
038import org.forgerock.opendj.config.client.ConcurrentModificationException;
039import org.forgerock.opendj.config.client.IllegalManagedObjectNameException;
040import org.forgerock.opendj.config.client.ManagedObject;
041import org.forgerock.opendj.config.client.ManagedObjectDecodingException;
042import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
043import org.forgerock.opendj.config.client.OperationRejectedException;
044import org.forgerock.opendj.config.conditions.Conditions;
045import org.forgerock.opendj.config.DefaultBehaviorProvider;
046import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
047import org.forgerock.opendj.config.DefinitionDecodingException;
048import org.forgerock.opendj.config.DurationPropertyDefinition;
049import org.forgerock.opendj.config.EnumPropertyDefinition;
050import org.forgerock.opendj.config.GenericConstraint;
051import org.forgerock.opendj.config.InstantiableRelationDefinition;
052import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
053import org.forgerock.opendj.config.ManagedObjectDefinition;
054import org.forgerock.opendj.config.ManagedObjectNotFoundException;
055import org.forgerock.opendj.config.PropertyException;
056import org.forgerock.opendj.config.PropertyOption;
057import org.forgerock.opendj.config.PropertyProvider;
058import org.forgerock.opendj.config.server.ConfigException;
059import org.forgerock.opendj.config.server.ConfigurationAddListener;
060import org.forgerock.opendj.config.server.ConfigurationChangeListener;
061import org.forgerock.opendj.config.server.ConfigurationDeleteListener;
062import org.forgerock.opendj.config.server.ServerManagedObject;
063import org.forgerock.opendj.config.StringPropertyDefinition;
064import org.forgerock.opendj.config.Tag;
065import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider;
066import org.forgerock.opendj.ldap.DN;
067import org.forgerock.opendj.ldap.LdapException;
068import org.forgerock.opendj.server.config.client.AccessLogFilteringCriteriaCfgClient;
069import org.forgerock.opendj.server.config.client.CsvFileAccessLogPublisherCfgClient;
070import org.forgerock.opendj.server.config.client.LogRetentionPolicyCfgClient;
071import org.forgerock.opendj.server.config.client.LogRotationPolicyCfgClient;
072import org.forgerock.opendj.server.config.meta.AccessLogPublisherCfgDefn.FilteringPolicy;
073import org.forgerock.opendj.server.config.server.AccessLogFilteringCriteriaCfg;
074import org.forgerock.opendj.server.config.server.AccessLogPublisherCfg;
075import org.forgerock.opendj.server.config.server.CsvFileAccessLogPublisherCfg;
076import org.forgerock.opendj.server.config.server.LogPublisherCfg;
077import org.forgerock.opendj.server.config.server.LogRetentionPolicyCfg;
078import org.forgerock.opendj.server.config.server.LogRotationPolicyCfg;
079
080
081
082/**
083 * An interface for querying the Csv File Access Log Publisher managed
084 * object definition meta information.
085 * <p>
086 * Csv File Access Log Publishers publish access messages to CSV
087 * files.
088 */
089public final class CsvFileAccessLogPublisherCfgDefn extends ManagedObjectDefinition<CsvFileAccessLogPublisherCfgClient, CsvFileAccessLogPublisherCfg> {
090
091  /** The singleton configuration definition instance. */
092  private static final CsvFileAccessLogPublisherCfgDefn INSTANCE = new CsvFileAccessLogPublisherCfgDefn();
093
094
095
096  /** The "asynchronous" property definition. */
097  private static final BooleanPropertyDefinition PD_ASYNCHRONOUS;
098
099
100
101  /** The "auto-flush" property definition. */
102  private static final BooleanPropertyDefinition PD_AUTO_FLUSH;
103
104
105
106  /** The "csv-delimiter-char" property definition. */
107  private static final StringPropertyDefinition PD_CSV_DELIMITER_CHAR;
108
109
110
111  /** The "csv-eol-symbols" property definition. */
112  private static final StringPropertyDefinition PD_CSV_EOL_SYMBOLS;
113
114
115
116  /** The "csv-quote-char" property definition. */
117  private static final StringPropertyDefinition PD_CSV_QUOTE_CHAR;
118
119
120
121  /** The "java-class" property definition. */
122  private static final ClassPropertyDefinition PD_JAVA_CLASS;
123
124
125
126  /** The "key-store-file" property definition. */
127  private static final StringPropertyDefinition PD_KEY_STORE_FILE;
128
129
130
131  /** The "key-store-pin-file" property definition. */
132  private static final StringPropertyDefinition PD_KEY_STORE_PIN_FILE;
133
134
135
136  /** The "log-control-oids" property definition. */
137  private static final BooleanPropertyDefinition PD_LOG_CONTROL_OIDS;
138
139
140
141  /** The "log-directory" property definition. */
142  private static final StringPropertyDefinition PD_LOG_DIRECTORY;
143
144
145
146  /** The "retention-policy" property definition. */
147  private static final AggregationPropertyDefinition<LogRetentionPolicyCfgClient, LogRetentionPolicyCfg> PD_RETENTION_POLICY;
148
149
150
151  /** The "rotation-policy" property definition. */
152  private static final AggregationPropertyDefinition<LogRotationPolicyCfgClient, LogRotationPolicyCfg> PD_ROTATION_POLICY;
153
154
155
156  /** The "signature-time-interval" property definition. */
157  private static final DurationPropertyDefinition PD_SIGNATURE_TIME_INTERVAL;
158
159
160
161  /** The "tamper-evident" property definition. */
162  private static final BooleanPropertyDefinition PD_TAMPER_EVIDENT;
163
164
165
166  /** Build the "asynchronous" property definition. */
167  static {
168      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "asynchronous");
169      builder.setOption(PropertyOption.MANDATORY);
170      builder.setOption(PropertyOption.ADVANCED);
171      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "asynchronous"));
172      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("true");
173      builder.setDefaultBehaviorProvider(provider);
174      PD_ASYNCHRONOUS = builder.getInstance();
175      INSTANCE.registerPropertyDefinition(PD_ASYNCHRONOUS);
176  }
177
178
179
180  /** Build the "auto-flush" property definition. */
181  static {
182      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "auto-flush");
183      builder.setOption(PropertyOption.ADVANCED);
184      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "auto-flush"));
185      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("true");
186      builder.setDefaultBehaviorProvider(provider);
187      PD_AUTO_FLUSH = builder.getInstance();
188      INSTANCE.registerPropertyDefinition(PD_AUTO_FLUSH);
189  }
190
191
192
193  /** Build the "csv-delimiter-char" property definition. */
194  static {
195      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "csv-delimiter-char");
196      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "csv-delimiter-char"));
197      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>(",");
198      builder.setDefaultBehaviorProvider(provider);
199      builder.setPattern(".*", "DELIMITER CHARACTER");
200      PD_CSV_DELIMITER_CHAR = builder.getInstance();
201      INSTANCE.registerPropertyDefinition(PD_CSV_DELIMITER_CHAR);
202  }
203
204
205
206  /** Build the "csv-eol-symbols" property definition. */
207  static {
208      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "csv-eol-symbols");
209      builder.setOption(PropertyOption.ADVANCED);
210      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "csv-eol-symbols"));
211      builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "csv-eol-symbols"));
212      builder.setPattern(".*", "STRING");
213      PD_CSV_EOL_SYMBOLS = builder.getInstance();
214      INSTANCE.registerPropertyDefinition(PD_CSV_EOL_SYMBOLS);
215  }
216
217
218
219  /** Build the "csv-quote-char" property definition. */
220  static {
221      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "csv-quote-char");
222      builder.setOption(PropertyOption.ADVANCED);
223      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "csv-quote-char"));
224      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("\"");
225      builder.setDefaultBehaviorProvider(provider);
226      builder.setPattern(".*", "QUOTE CHARACTER");
227      PD_CSV_QUOTE_CHAR = builder.getInstance();
228      INSTANCE.registerPropertyDefinition(PD_CSV_QUOTE_CHAR);
229  }
230
231
232
233  /** Build the "java-class" property definition. */
234  static {
235      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
236      builder.setOption(PropertyOption.MANDATORY);
237      builder.setOption(PropertyOption.ADVANCED);
238      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
239      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.loggers.CsvFileAccessLogPublisher");
240      builder.setDefaultBehaviorProvider(provider);
241      builder.addInstanceOf("org.opends.server.loggers.LogPublisher");
242      PD_JAVA_CLASS = builder.getInstance();
243      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
244  }
245
246
247
248  /** Build the "key-store-file" property definition. */
249  static {
250      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-file");
251      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-file"));
252      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
253      builder.setPattern(".*", "FILE");
254      PD_KEY_STORE_FILE = builder.getInstance();
255      INSTANCE.registerPropertyDefinition(PD_KEY_STORE_FILE);
256  }
257
258
259
260  /** Build the "key-store-pin-file" property definition. */
261  static {
262      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "key-store-pin-file");
263      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "key-store-pin-file"));
264      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
265      builder.setPattern(".*", "FILE");
266      PD_KEY_STORE_PIN_FILE = builder.getInstance();
267      INSTANCE.registerPropertyDefinition(PD_KEY_STORE_PIN_FILE);
268  }
269
270
271
272  /** Build the "log-control-oids" property definition. */
273  static {
274      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "log-control-oids");
275      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "log-control-oids"));
276      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("false");
277      builder.setDefaultBehaviorProvider(provider);
278      PD_LOG_CONTROL_OIDS = builder.getInstance();
279      INSTANCE.registerPropertyDefinition(PD_LOG_CONTROL_OIDS);
280  }
281
282
283
284  /** Build the "log-directory" property definition. */
285  static {
286      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "log-directory");
287      builder.setOption(PropertyOption.MANDATORY);
288      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "log-directory"));
289      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("logs");
290      builder.setDefaultBehaviorProvider(provider);
291      builder.setPattern(".*", "DIRECTORY");
292      PD_LOG_DIRECTORY = builder.getInstance();
293      INSTANCE.registerPropertyDefinition(PD_LOG_DIRECTORY);
294  }
295
296
297
298  /** Build the "retention-policy" property definition. */
299  static {
300      AggregationPropertyDefinition.Builder<LogRetentionPolicyCfgClient, LogRetentionPolicyCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "retention-policy");
301      builder.setOption(PropertyOption.MULTI_VALUED);
302      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "retention-policy"));
303      builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "retention-policy"));
304      builder.setParentPath("/");
305      builder.setRelationDefinition("log-retention-policy");
306      PD_RETENTION_POLICY = builder.getInstance();
307      INSTANCE.registerPropertyDefinition(PD_RETENTION_POLICY);
308      INSTANCE.registerConstraint(PD_RETENTION_POLICY.getSourceConstraint());
309  }
310
311
312
313  /** Build the "rotation-policy" property definition. */
314  static {
315      AggregationPropertyDefinition.Builder<LogRotationPolicyCfgClient, LogRotationPolicyCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "rotation-policy");
316      builder.setOption(PropertyOption.MULTI_VALUED);
317      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "rotation-policy"));
318      builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<String>(INSTANCE, "rotation-policy"));
319      builder.setParentPath("/");
320      builder.setRelationDefinition("log-rotation-policy");
321      PD_ROTATION_POLICY = builder.getInstance();
322      INSTANCE.registerPropertyDefinition(PD_ROTATION_POLICY);
323      INSTANCE.registerConstraint(PD_ROTATION_POLICY.getSourceConstraint());
324  }
325
326
327
328  /** Build the "signature-time-interval" property definition. */
329  static {
330      DurationPropertyDefinition.Builder builder = DurationPropertyDefinition.createBuilder(INSTANCE, "signature-time-interval");
331      builder.setOption(PropertyOption.ADVANCED);
332      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "signature-time-interval"));
333      DefaultBehaviorProvider<Long> provider = new DefinedDefaultBehaviorProvider<Long>("3s");
334      builder.setDefaultBehaviorProvider(provider);
335      builder.setBaseUnit("ms");
336      builder.setLowerLimit("1");
337      PD_SIGNATURE_TIME_INTERVAL = builder.getInstance();
338      INSTANCE.registerPropertyDefinition(PD_SIGNATURE_TIME_INTERVAL);
339  }
340
341
342
343  /** Build the "tamper-evident" property definition. */
344  static {
345      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "tamper-evident");
346      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "tamper-evident"));
347      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("false");
348      builder.setDefaultBehaviorProvider(provider);
349      PD_TAMPER_EVIDENT = builder.getInstance();
350      INSTANCE.registerPropertyDefinition(PD_TAMPER_EVIDENT);
351  }
352
353
354
355  // Register the tags associated with this managed object definition.
356  static {
357    INSTANCE.registerTag(Tag.valueOf("logging"));
358  }
359
360
361
362  // Register the constraints associated with this managed object definition.
363  static {
364    INSTANCE.registerConstraint(new GenericConstraint(INSTANCE, 1, Conditions.implies(Conditions.and(Conditions.contains("enabled", "true"), Conditions.contains("tamper-evident", "true")), Conditions.and(Conditions.isPresent("key-store-file"), Conditions.isPresent("key-store-pin-file")))));
365  }
366
367
368
369  /**
370   * Get the Csv File Access Log Publisher configuration definition
371   * singleton.
372   *
373   * @return Returns the Csv File Access Log Publisher configuration
374   *         definition singleton.
375   */
376  public static CsvFileAccessLogPublisherCfgDefn getInstance() {
377    return INSTANCE;
378  }
379
380
381
382  /**
383   * Private constructor.
384   */
385  private CsvFileAccessLogPublisherCfgDefn() {
386    super("csv-file-access-log-publisher", AccessLogPublisherCfgDefn.getInstance());
387  }
388
389
390
391  /** {@inheritDoc} */
392  public CsvFileAccessLogPublisherCfgClient createClientConfiguration(
393      ManagedObject<? extends CsvFileAccessLogPublisherCfgClient> impl) {
394    return new CsvFileAccessLogPublisherCfgClientImpl(impl);
395  }
396
397
398
399  /** {@inheritDoc} */
400  public CsvFileAccessLogPublisherCfg createServerConfiguration(
401      ServerManagedObject<? extends CsvFileAccessLogPublisherCfg> impl) {
402    return new CsvFileAccessLogPublisherCfgServerImpl(impl);
403  }
404
405
406
407  /** {@inheritDoc} */
408  public Class<CsvFileAccessLogPublisherCfg> getServerConfigurationClass() {
409    return CsvFileAccessLogPublisherCfg.class;
410  }
411
412
413
414  /**
415   * Get the "asynchronous" property definition.
416   * <p>
417   * Indicates whether the Csv File Access Log Publisher will publish
418   * records asynchronously.
419   *
420   * @return Returns the "asynchronous" property definition.
421   */
422  public BooleanPropertyDefinition getAsynchronousPropertyDefinition() {
423    return PD_ASYNCHRONOUS;
424  }
425
426
427
428  /**
429   * Get the "auto-flush" property definition.
430   * <p>
431   * Specifies whether to flush the writer after every log record.
432   * <p>
433   * If the asynchronous writes option is used, the writer is flushed
434   * after all the log records in the queue are written.
435   *
436   * @return Returns the "auto-flush" property definition.
437   */
438  public BooleanPropertyDefinition getAutoFlushPropertyDefinition() {
439    return PD_AUTO_FLUSH;
440  }
441
442
443
444  /**
445   * Get the "csv-delimiter-char" property definition.
446   * <p>
447   * The delimiter character to use when writing in CSV format.
448   *
449   * @return Returns the "csv-delimiter-char" property definition.
450   */
451  public StringPropertyDefinition getCsvDelimiterCharPropertyDefinition() {
452    return PD_CSV_DELIMITER_CHAR;
453  }
454
455
456
457  /**
458   * Get the "csv-eol-symbols" property definition.
459   * <p>
460   * The string that marks the end of a line.
461   *
462   * @return Returns the "csv-eol-symbols" property definition.
463   */
464  public StringPropertyDefinition getCsvEolSymbolsPropertyDefinition() {
465    return PD_CSV_EOL_SYMBOLS;
466  }
467
468
469
470  /**
471   * Get the "csv-quote-char" property definition.
472   * <p>
473   * The character to append and prepend to a CSV field when writing
474   * in CSV format.
475   *
476   * @return Returns the "csv-quote-char" property definition.
477   */
478  public StringPropertyDefinition getCsvQuoteCharPropertyDefinition() {
479    return PD_CSV_QUOTE_CHAR;
480  }
481
482
483
484  /**
485   * Get the "enabled" property definition.
486   * <p>
487   * Indicates whether the Csv File Access Log Publisher is enabled
488   * for use.
489   *
490   * @return Returns the "enabled" property definition.
491   */
492  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
493    return AccessLogPublisherCfgDefn.getInstance().getEnabledPropertyDefinition();
494  }
495
496
497
498  /**
499   * Get the "filtering-policy" property definition.
500   * <p>
501   * Specifies how filtering criteria should be applied to log
502   * records.
503   *
504   * @return Returns the "filtering-policy" property definition.
505   */
506  public EnumPropertyDefinition<FilteringPolicy> getFilteringPolicyPropertyDefinition() {
507    return AccessLogPublisherCfgDefn.getInstance().getFilteringPolicyPropertyDefinition();
508  }
509
510
511
512  /**
513   * Get the "java-class" property definition.
514   * <p>
515   * The fully-qualified name of the Java class that provides the Csv
516   * File Access Log Publisher implementation.
517   *
518   * @return Returns the "java-class" property definition.
519   */
520  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
521    return PD_JAVA_CLASS;
522  }
523
524
525
526  /**
527   * Get the "key-store-file" property definition.
528   * <p>
529   * Specifies the path to the file that contains the private key
530   * information. This may be an absolute path, or a path that is
531   * relative to the OpenDJ instance root.
532   * <p>
533   * Changes to this property will take effect the next time that the
534   * key store is accessed.
535   *
536   * @return Returns the "key-store-file" property definition.
537   */
538  public StringPropertyDefinition getKeyStoreFilePropertyDefinition() {
539    return PD_KEY_STORE_FILE;
540  }
541
542
543
544  /**
545   * Get the "key-store-pin-file" property definition.
546   * <p>
547   * Specifies the path to the text file whose only contents should be
548   * a single line containing the clear-text PIN needed to access the
549   * Csv File Access Log Publisher .
550   *
551   * @return Returns the "key-store-pin-file" property definition.
552   */
553  public StringPropertyDefinition getKeyStorePinFilePropertyDefinition() {
554    return PD_KEY_STORE_PIN_FILE;
555  }
556
557
558
559  /**
560   * Get the "log-control-oids" property definition.
561   * <p>
562   * Specifies whether control OIDs will be included in operation log
563   * records.
564   *
565   * @return Returns the "log-control-oids" property definition.
566   */
567  public BooleanPropertyDefinition getLogControlOidsPropertyDefinition() {
568    return PD_LOG_CONTROL_OIDS;
569  }
570
571
572
573  /**
574   * Get the "log-directory" property definition.
575   * <p>
576   * The directory to use for the log files generated by the Csv File
577   * Access Log Publisher. The path to the directory is relative to the
578   * server root.
579   *
580   * @return Returns the "log-directory" property definition.
581   */
582  public StringPropertyDefinition getLogDirectoryPropertyDefinition() {
583    return PD_LOG_DIRECTORY;
584  }
585
586
587
588  /**
589   * Get the "retention-policy" property definition.
590   * <p>
591   * The retention policy to use for the Csv File Access Log Publisher
592   * .
593   * <p>
594   * When multiple policies are used, log files are cleaned when any
595   * of the policy's conditions are met.
596   *
597   * @return Returns the "retention-policy" property definition.
598   */
599  public AggregationPropertyDefinition<LogRetentionPolicyCfgClient, LogRetentionPolicyCfg> getRetentionPolicyPropertyDefinition() {
600    return PD_RETENTION_POLICY;
601  }
602
603
604
605  /**
606   * Get the "rotation-policy" property definition.
607   * <p>
608   * The rotation policy to use for the Csv File Access Log Publisher
609   * .
610   * <p>
611   * When multiple policies are used, rotation will occur if any
612   * policy's conditions are met.
613   *
614   * @return Returns the "rotation-policy" property definition.
615   */
616  public AggregationPropertyDefinition<LogRotationPolicyCfgClient, LogRotationPolicyCfg> getRotationPolicyPropertyDefinition() {
617    return PD_ROTATION_POLICY;
618  }
619
620
621
622  /**
623   * Get the "signature-time-interval" property definition.
624   * <p>
625   * Specifies the interval at which to sign the log file when the
626   * tamper-evident option is enabled.
627   *
628   * @return Returns the "signature-time-interval" property definition.
629   */
630  public DurationPropertyDefinition getSignatureTimeIntervalPropertyDefinition() {
631    return PD_SIGNATURE_TIME_INTERVAL;
632  }
633
634
635
636  /**
637   * Get the "suppress-internal-operations" property definition.
638   * <p>
639   * Indicates whether internal operations (for example, operations
640   * that are initiated by plugins) should be logged along with the
641   * operations that are requested by users.
642   *
643   * @return Returns the "suppress-internal-operations" property definition.
644   */
645  public BooleanPropertyDefinition getSuppressInternalOperationsPropertyDefinition() {
646    return AccessLogPublisherCfgDefn.getInstance().getSuppressInternalOperationsPropertyDefinition();
647  }
648
649
650
651  /**
652   * Get the "suppress-synchronization-operations" property definition.
653   * <p>
654   * Indicates whether access messages that are generated by
655   * synchronization operations should be suppressed.
656   *
657   * @return Returns the "suppress-synchronization-operations" property definition.
658   */
659  public BooleanPropertyDefinition getSuppressSynchronizationOperationsPropertyDefinition() {
660    return AccessLogPublisherCfgDefn.getInstance().getSuppressSynchronizationOperationsPropertyDefinition();
661  }
662
663
664
665  /**
666   * Get the "tamper-evident" property definition.
667   * <p>
668   * Specifies whether the log should be signed in order to detect
669   * tampering.
670   * <p>
671   * Every log record will be signed, making it possible to verify
672   * that the log has not been tampered with. This feature has a
673   * significative impact on performance of the server.
674   *
675   * @return Returns the "tamper-evident" property definition.
676   */
677  public BooleanPropertyDefinition getTamperEvidentPropertyDefinition() {
678    return PD_TAMPER_EVIDENT;
679  }
680
681
682
683  /**
684   * Get the "access-log-filtering-criteria" relation definition.
685   *
686   * @return Returns the "access-log-filtering-criteria" relation definition.
687   */
688  public InstantiableRelationDefinition<AccessLogFilteringCriteriaCfgClient,AccessLogFilteringCriteriaCfg> getAccessLogFilteringCriteriaRelationDefinition() {
689    return AccessLogPublisherCfgDefn.getInstance().getAccessLogFilteringCriteriaRelationDefinition();
690  }
691
692
693
694  /**
695   * Managed object client implementation.
696   */
697  private static class CsvFileAccessLogPublisherCfgClientImpl implements
698    CsvFileAccessLogPublisherCfgClient {
699
700    /** Private implementation. */
701    private ManagedObject<? extends CsvFileAccessLogPublisherCfgClient> impl;
702
703
704
705    /** Private constructor. */
706    private CsvFileAccessLogPublisherCfgClientImpl(
707        ManagedObject<? extends CsvFileAccessLogPublisherCfgClient> impl) {
708      this.impl = impl;
709    }
710
711
712
713    /** {@inheritDoc} */
714    public boolean isAsynchronous() {
715      return impl.getPropertyValue(INSTANCE.getAsynchronousPropertyDefinition());
716    }
717
718
719
720    /** {@inheritDoc} */
721    public void setAsynchronous(boolean value) {
722      impl.setPropertyValue(INSTANCE.getAsynchronousPropertyDefinition(), value);
723    }
724
725
726
727    /** {@inheritDoc} */
728    public boolean isAutoFlush() {
729      return impl.getPropertyValue(INSTANCE.getAutoFlushPropertyDefinition());
730    }
731
732
733
734    /** {@inheritDoc} */
735    public void setAutoFlush(Boolean value) {
736      impl.setPropertyValue(INSTANCE.getAutoFlushPropertyDefinition(), value);
737    }
738
739
740
741    /** {@inheritDoc} */
742    public String getCsvDelimiterChar() {
743      return impl.getPropertyValue(INSTANCE.getCsvDelimiterCharPropertyDefinition());
744    }
745
746
747
748    /** {@inheritDoc} */
749    public void setCsvDelimiterChar(String value) {
750      impl.setPropertyValue(INSTANCE.getCsvDelimiterCharPropertyDefinition(), value);
751    }
752
753
754
755    /** {@inheritDoc} */
756    public String getCsvEolSymbols() {
757      return impl.getPropertyValue(INSTANCE.getCsvEolSymbolsPropertyDefinition());
758    }
759
760
761
762    /** {@inheritDoc} */
763    public void setCsvEolSymbols(String value) {
764      impl.setPropertyValue(INSTANCE.getCsvEolSymbolsPropertyDefinition(), value);
765    }
766
767
768
769    /** {@inheritDoc} */
770    public String getCsvQuoteChar() {
771      return impl.getPropertyValue(INSTANCE.getCsvQuoteCharPropertyDefinition());
772    }
773
774
775
776    /** {@inheritDoc} */
777    public void setCsvQuoteChar(String value) {
778      impl.setPropertyValue(INSTANCE.getCsvQuoteCharPropertyDefinition(), value);
779    }
780
781
782
783    /** {@inheritDoc} */
784    public Boolean isEnabled() {
785      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
786    }
787
788
789
790    /** {@inheritDoc} */
791    public void setEnabled(boolean value) {
792      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
793    }
794
795
796
797    /** {@inheritDoc} */
798    public FilteringPolicy getFilteringPolicy() {
799      return impl.getPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition());
800    }
801
802
803
804    /** {@inheritDoc} */
805    public void setFilteringPolicy(FilteringPolicy value) {
806      impl.setPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition(), value);
807    }
808
809
810
811    /** {@inheritDoc} */
812    public String getJavaClass() {
813      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
814    }
815
816
817
818    /** {@inheritDoc} */
819    public void setJavaClass(String value) {
820      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
821    }
822
823
824
825    /** {@inheritDoc} */
826    public String getKeyStoreFile() {
827      return impl.getPropertyValue(INSTANCE.getKeyStoreFilePropertyDefinition());
828    }
829
830
831
832    /** {@inheritDoc} */
833    public void setKeyStoreFile(String value) {
834      impl.setPropertyValue(INSTANCE.getKeyStoreFilePropertyDefinition(), value);
835    }
836
837
838
839    /** {@inheritDoc} */
840    public String getKeyStorePinFile() {
841      return impl.getPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition());
842    }
843
844
845
846    /** {@inheritDoc} */
847    public void setKeyStorePinFile(String value) {
848      impl.setPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition(), value);
849    }
850
851
852
853    /** {@inheritDoc} */
854    public boolean isLogControlOids() {
855      return impl.getPropertyValue(INSTANCE.getLogControlOidsPropertyDefinition());
856    }
857
858
859
860    /** {@inheritDoc} */
861    public void setLogControlOids(Boolean value) {
862      impl.setPropertyValue(INSTANCE.getLogControlOidsPropertyDefinition(), value);
863    }
864
865
866
867    /** {@inheritDoc} */
868    public String getLogDirectory() {
869      return impl.getPropertyValue(INSTANCE.getLogDirectoryPropertyDefinition());
870    }
871
872
873
874    /** {@inheritDoc} */
875    public void setLogDirectory(String value) {
876      impl.setPropertyValue(INSTANCE.getLogDirectoryPropertyDefinition(), value);
877    }
878
879
880
881    /** {@inheritDoc} */
882    public SortedSet<String> getRetentionPolicy() {
883      return impl.getPropertyValues(INSTANCE.getRetentionPolicyPropertyDefinition());
884    }
885
886
887
888    /** {@inheritDoc} */
889    public void setRetentionPolicy(Collection<String> values) {
890      impl.setPropertyValues(INSTANCE.getRetentionPolicyPropertyDefinition(), values);
891    }
892
893
894
895    /** {@inheritDoc} */
896    public SortedSet<String> getRotationPolicy() {
897      return impl.getPropertyValues(INSTANCE.getRotationPolicyPropertyDefinition());
898    }
899
900
901
902    /** {@inheritDoc} */
903    public void setRotationPolicy(Collection<String> values) {
904      impl.setPropertyValues(INSTANCE.getRotationPolicyPropertyDefinition(), values);
905    }
906
907
908
909    /** {@inheritDoc} */
910    public long getSignatureTimeInterval() {
911      return impl.getPropertyValue(INSTANCE.getSignatureTimeIntervalPropertyDefinition());
912    }
913
914
915
916    /** {@inheritDoc} */
917    public void setSignatureTimeInterval(Long value) {
918      impl.setPropertyValue(INSTANCE.getSignatureTimeIntervalPropertyDefinition(), value);
919    }
920
921
922
923    /** {@inheritDoc} */
924    public boolean isSuppressInternalOperations() {
925      return impl.getPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition());
926    }
927
928
929
930    /** {@inheritDoc} */
931    public void setSuppressInternalOperations(Boolean value) {
932      impl.setPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition(), value);
933    }
934
935
936
937    /** {@inheritDoc} */
938    public boolean isSuppressSynchronizationOperations() {
939      return impl.getPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition());
940    }
941
942
943
944    /** {@inheritDoc} */
945    public void setSuppressSynchronizationOperations(Boolean value) {
946      impl.setPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition(), value);
947    }
948
949
950
951    /** {@inheritDoc} */
952    public boolean isTamperEvident() {
953      return impl.getPropertyValue(INSTANCE.getTamperEvidentPropertyDefinition());
954    }
955
956
957
958    /** {@inheritDoc} */
959    public void setTamperEvident(Boolean value) {
960      impl.setPropertyValue(INSTANCE.getTamperEvidentPropertyDefinition(), value);
961    }
962
963
964
965    /** {@inheritDoc} */
966    public String[] listAccessLogFilteringCriteria() throws ConcurrentModificationException,
967        LdapException {
968      return impl.listChildren(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition());
969    }
970
971
972
973    /** {@inheritDoc} */
974    public AccessLogFilteringCriteriaCfgClient getAccessLogFilteringCriteria(String name)
975        throws DefinitionDecodingException, ManagedObjectDecodingException,
976        ManagedObjectNotFoundException, ConcurrentModificationException,
977        LdapException {
978      return impl.getChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name).getConfiguration();
979    }
980
981
982
983    /** {@inheritDoc} */
984    public <M extends AccessLogFilteringCriteriaCfgClient> M createAccessLogFilteringCriteria(
985        ManagedObjectDefinition<M, ? extends AccessLogFilteringCriteriaCfg> d, String name, Collection<PropertyException> exceptions) throws IllegalManagedObjectNameException {
986      return impl.createChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), d, name, exceptions).getConfiguration();
987    }
988
989
990
991    /** {@inheritDoc} */
992    public void removeAccessLogFilteringCriteria(String name)
993        throws ManagedObjectNotFoundException, ConcurrentModificationException,
994        OperationRejectedException, LdapException {
995      impl.removeChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name);
996    }
997
998
999
1000    /** {@inheritDoc} */
1001    public ManagedObjectDefinition<? extends CsvFileAccessLogPublisherCfgClient, ? extends CsvFileAccessLogPublisherCfg> definition() {
1002      return INSTANCE;
1003    }
1004
1005
1006
1007    /** {@inheritDoc} */
1008    public PropertyProvider properties() {
1009      return impl;
1010    }
1011
1012
1013
1014    /** {@inheritDoc} */
1015    public void commit() throws ManagedObjectAlreadyExistsException,
1016        MissingMandatoryPropertiesException, ConcurrentModificationException,
1017        OperationRejectedException, LdapException {
1018      impl.commit();
1019    }
1020
1021
1022
1023    /** {@inheritDoc} */
1024    public String toString() {
1025      return impl.toString();
1026    }
1027  }
1028
1029
1030
1031  /**
1032   * Managed object server implementation.
1033   */
1034  private static class CsvFileAccessLogPublisherCfgServerImpl implements
1035    CsvFileAccessLogPublisherCfg {
1036
1037    /** Private implementation. */
1038    private ServerManagedObject<? extends CsvFileAccessLogPublisherCfg> impl;
1039
1040    /** The value of the "asynchronous" property. */
1041    private final boolean pAsynchronous;
1042
1043    /** The value of the "auto-flush" property. */
1044    private final boolean pAutoFlush;
1045
1046    /** The value of the "csv-delimiter-char" property. */
1047    private final String pCsvDelimiterChar;
1048
1049    /** The value of the "csv-eol-symbols" property. */
1050    private final String pCsvEolSymbols;
1051
1052    /** The value of the "csv-quote-char" property. */
1053    private final String pCsvQuoteChar;
1054
1055    /** The value of the "enabled" property. */
1056    private final boolean pEnabled;
1057
1058    /** The value of the "filtering-policy" property. */
1059    private final FilteringPolicy pFilteringPolicy;
1060
1061    /** The value of the "java-class" property. */
1062    private final String pJavaClass;
1063
1064    /** The value of the "key-store-file" property. */
1065    private final String pKeyStoreFile;
1066
1067    /** The value of the "key-store-pin-file" property. */
1068    private final String pKeyStorePinFile;
1069
1070    /** The value of the "log-control-oids" property. */
1071    private final boolean pLogControlOids;
1072
1073    /** The value of the "log-directory" property. */
1074    private final String pLogDirectory;
1075
1076    /** The value of the "retention-policy" property. */
1077    private final SortedSet<String> pRetentionPolicy;
1078
1079    /** The value of the "rotation-policy" property. */
1080    private final SortedSet<String> pRotationPolicy;
1081
1082    /** The value of the "signature-time-interval" property. */
1083    private final long pSignatureTimeInterval;
1084
1085    /** The value of the "suppress-internal-operations" property. */
1086    private final boolean pSuppressInternalOperations;
1087
1088    /** The value of the "suppress-synchronization-operations" property. */
1089    private final boolean pSuppressSynchronizationOperations;
1090
1091    /** The value of the "tamper-evident" property. */
1092    private final boolean pTamperEvident;
1093
1094
1095
1096    /** Private constructor. */
1097    private CsvFileAccessLogPublisherCfgServerImpl(ServerManagedObject<? extends CsvFileAccessLogPublisherCfg> impl) {
1098      this.impl = impl;
1099      this.pAsynchronous = impl.getPropertyValue(INSTANCE.getAsynchronousPropertyDefinition());
1100      this.pAutoFlush = impl.getPropertyValue(INSTANCE.getAutoFlushPropertyDefinition());
1101      this.pCsvDelimiterChar = impl.getPropertyValue(INSTANCE.getCsvDelimiterCharPropertyDefinition());
1102      this.pCsvEolSymbols = impl.getPropertyValue(INSTANCE.getCsvEolSymbolsPropertyDefinition());
1103      this.pCsvQuoteChar = impl.getPropertyValue(INSTANCE.getCsvQuoteCharPropertyDefinition());
1104      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
1105      this.pFilteringPolicy = impl.getPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition());
1106      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
1107      this.pKeyStoreFile = impl.getPropertyValue(INSTANCE.getKeyStoreFilePropertyDefinition());
1108      this.pKeyStorePinFile = impl.getPropertyValue(INSTANCE.getKeyStorePinFilePropertyDefinition());
1109      this.pLogControlOids = impl.getPropertyValue(INSTANCE.getLogControlOidsPropertyDefinition());
1110      this.pLogDirectory = impl.getPropertyValue(INSTANCE.getLogDirectoryPropertyDefinition());
1111      this.pRetentionPolicy = impl.getPropertyValues(INSTANCE.getRetentionPolicyPropertyDefinition());
1112      this.pRotationPolicy = impl.getPropertyValues(INSTANCE.getRotationPolicyPropertyDefinition());
1113      this.pSignatureTimeInterval = impl.getPropertyValue(INSTANCE.getSignatureTimeIntervalPropertyDefinition());
1114      this.pSuppressInternalOperations = impl.getPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition());
1115      this.pSuppressSynchronizationOperations = impl.getPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition());
1116      this.pTamperEvident = impl.getPropertyValue(INSTANCE.getTamperEvidentPropertyDefinition());
1117    }
1118
1119
1120
1121    /** {@inheritDoc} */
1122    public void addCsvFileAccessChangeListener(
1123        ConfigurationChangeListener<CsvFileAccessLogPublisherCfg> listener) {
1124      impl.registerChangeListener(listener);
1125    }
1126
1127
1128
1129    /** {@inheritDoc} */
1130    public void removeCsvFileAccessChangeListener(
1131        ConfigurationChangeListener<CsvFileAccessLogPublisherCfg> listener) {
1132      impl.deregisterChangeListener(listener);
1133    }
1134    /** {@inheritDoc} */
1135    public void addAccessChangeListener(
1136        ConfigurationChangeListener<AccessLogPublisherCfg> listener) {
1137      impl.registerChangeListener(listener);
1138    }
1139
1140
1141
1142    /** {@inheritDoc} */
1143    public void removeAccessChangeListener(
1144        ConfigurationChangeListener<AccessLogPublisherCfg> listener) {
1145      impl.deregisterChangeListener(listener);
1146    }
1147    /** {@inheritDoc} */
1148    public void addChangeListener(
1149        ConfigurationChangeListener<LogPublisherCfg> listener) {
1150      impl.registerChangeListener(listener);
1151    }
1152
1153
1154
1155    /** {@inheritDoc} */
1156    public void removeChangeListener(
1157        ConfigurationChangeListener<LogPublisherCfg> listener) {
1158      impl.deregisterChangeListener(listener);
1159    }
1160
1161
1162
1163    /** {@inheritDoc} */
1164    public boolean isAsynchronous() {
1165      return pAsynchronous;
1166    }
1167
1168
1169
1170    /** {@inheritDoc} */
1171    public boolean isAutoFlush() {
1172      return pAutoFlush;
1173    }
1174
1175
1176
1177    /** {@inheritDoc} */
1178    public String getCsvDelimiterChar() {
1179      return pCsvDelimiterChar;
1180    }
1181
1182
1183
1184    /** {@inheritDoc} */
1185    public String getCsvEolSymbols() {
1186      return pCsvEolSymbols;
1187    }
1188
1189
1190
1191    /** {@inheritDoc} */
1192    public String getCsvQuoteChar() {
1193      return pCsvQuoteChar;
1194    }
1195
1196
1197
1198    /** {@inheritDoc} */
1199    public boolean isEnabled() {
1200      return pEnabled;
1201    }
1202
1203
1204
1205    /** {@inheritDoc} */
1206    public FilteringPolicy getFilteringPolicy() {
1207      return pFilteringPolicy;
1208    }
1209
1210
1211
1212    /** {@inheritDoc} */
1213    public String getJavaClass() {
1214      return pJavaClass;
1215    }
1216
1217
1218
1219    /** {@inheritDoc} */
1220    public String getKeyStoreFile() {
1221      return pKeyStoreFile;
1222    }
1223
1224
1225
1226    /** {@inheritDoc} */
1227    public String getKeyStorePinFile() {
1228      return pKeyStorePinFile;
1229    }
1230
1231
1232
1233    /** {@inheritDoc} */
1234    public boolean isLogControlOids() {
1235      return pLogControlOids;
1236    }
1237
1238
1239
1240    /** {@inheritDoc} */
1241    public String getLogDirectory() {
1242      return pLogDirectory;
1243    }
1244
1245
1246
1247    /** {@inheritDoc} */
1248    public SortedSet<String> getRetentionPolicy() {
1249      return pRetentionPolicy;
1250    }
1251
1252
1253
1254    /**
1255     * {@inheritDoc}
1256     */
1257    public SortedSet<DN> getRetentionPolicyDNs() {
1258      SortedSet<String> values = getRetentionPolicy();
1259      SortedSet<DN> dnValues = new TreeSet<DN>();
1260      for (String value : values) {
1261        DN dn = INSTANCE.getRetentionPolicyPropertyDefinition().getChildDN(value);
1262        dnValues.add(dn);
1263      }
1264      return dnValues;
1265    }
1266
1267
1268
1269    /** {@inheritDoc} */
1270    public SortedSet<String> getRotationPolicy() {
1271      return pRotationPolicy;
1272    }
1273
1274
1275
1276    /**
1277     * {@inheritDoc}
1278     */
1279    public SortedSet<DN> getRotationPolicyDNs() {
1280      SortedSet<String> values = getRotationPolicy();
1281      SortedSet<DN> dnValues = new TreeSet<DN>();
1282      for (String value : values) {
1283        DN dn = INSTANCE.getRotationPolicyPropertyDefinition().getChildDN(value);
1284        dnValues.add(dn);
1285      }
1286      return dnValues;
1287    }
1288
1289
1290
1291    /** {@inheritDoc} */
1292    public long getSignatureTimeInterval() {
1293      return pSignatureTimeInterval;
1294    }
1295
1296
1297
1298    /** {@inheritDoc} */
1299    public boolean isSuppressInternalOperations() {
1300      return pSuppressInternalOperations;
1301    }
1302
1303
1304
1305    /** {@inheritDoc} */
1306    public boolean isSuppressSynchronizationOperations() {
1307      return pSuppressSynchronizationOperations;
1308    }
1309
1310
1311
1312    /** {@inheritDoc} */
1313    public boolean isTamperEvident() {
1314      return pTamperEvident;
1315    }
1316
1317
1318
1319    /** {@inheritDoc} */
1320    public String[] listAccessLogFilteringCriteria() {
1321      return impl.listChildren(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition());
1322    }
1323
1324
1325
1326    /** {@inheritDoc} */
1327    public AccessLogFilteringCriteriaCfg getAccessLogFilteringCriteria(String name) throws ConfigException {
1328      return impl.getChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name).getConfiguration();
1329    }
1330
1331
1332
1333    /** {@inheritDoc} */
1334    public void addAccessLogFilteringCriteriaAddListener(
1335        ConfigurationAddListener<AccessLogFilteringCriteriaCfg> listener) throws ConfigException {
1336      impl.registerAddListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
1337    }
1338
1339
1340
1341    /** {@inheritDoc} */
1342    public void removeAccessLogFilteringCriteriaAddListener(
1343        ConfigurationAddListener<AccessLogFilteringCriteriaCfg> listener) {
1344      impl.deregisterAddListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
1345    }
1346
1347
1348
1349    /** {@inheritDoc} */
1350    public void addAccessLogFilteringCriteriaDeleteListener(
1351        ConfigurationDeleteListener<AccessLogFilteringCriteriaCfg> listener) throws ConfigException {
1352      impl.registerDeleteListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
1353    }
1354
1355
1356
1357    /** {@inheritDoc} */
1358    public void removeAccessLogFilteringCriteriaDeleteListener(
1359        ConfigurationDeleteListener<AccessLogFilteringCriteriaCfg> listener) {
1360      impl.deregisterDeleteListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
1361    }
1362
1363
1364
1365    /** {@inheritDoc} */
1366    public Class<? extends CsvFileAccessLogPublisherCfg> configurationClass() {
1367      return CsvFileAccessLogPublisherCfg.class;
1368    }
1369
1370
1371
1372    /** {@inheritDoc} */
1373    public DN dn() {
1374      return impl.getDN();
1375    }
1376
1377
1378
1379    /** {@inheritDoc} */
1380    public String toString() {
1381      return impl.toString();
1382    }
1383  }
1384}