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.opends.server.admin.std.meta;
027
028
029
030import java.util.Collection;
031import org.forgerock.opendj.config.server.ConfigException;
032import org.opends.server.admin.AdministratorAction;
033import org.opends.server.admin.BooleanPropertyDefinition;
034import org.opends.server.admin.ClassPropertyDefinition;
035import org.opends.server.admin.client.AuthorizationException;
036import org.opends.server.admin.client.CommunicationException;
037import org.opends.server.admin.client.ConcurrentModificationException;
038import org.opends.server.admin.client.IllegalManagedObjectNameException;
039import org.opends.server.admin.client.ManagedObject;
040import org.opends.server.admin.client.ManagedObjectDecodingException;
041import org.opends.server.admin.client.MissingMandatoryPropertiesException;
042import org.opends.server.admin.client.OperationRejectedException;
043import org.opends.server.admin.DefaultBehaviorProvider;
044import org.opends.server.admin.DefinedDefaultBehaviorProvider;
045import org.opends.server.admin.DefinitionDecodingException;
046import org.opends.server.admin.EnumPropertyDefinition;
047import org.opends.server.admin.InstantiableRelationDefinition;
048import org.opends.server.admin.ManagedObjectAlreadyExistsException;
049import org.opends.server.admin.ManagedObjectDefinition;
050import org.opends.server.admin.ManagedObjectNotFoundException;
051import org.opends.server.admin.PropertyException;
052import org.opends.server.admin.PropertyOption;
053import org.opends.server.admin.PropertyProvider;
054import org.opends.server.admin.server.ConfigurationAddListener;
055import org.opends.server.admin.server.ConfigurationChangeListener;
056import org.opends.server.admin.server.ConfigurationDeleteListener;
057import org.opends.server.admin.server.ServerManagedObject;
058import org.opends.server.admin.std.client.AccessLogFilteringCriteriaCfgClient;
059import org.opends.server.admin.std.client.AccessLogPublisherCfgClient;
060import org.opends.server.admin.std.server.AccessLogFilteringCriteriaCfg;
061import org.opends.server.admin.std.server.AccessLogPublisherCfg;
062import org.opends.server.admin.std.server.LogPublisherCfg;
063import org.opends.server.admin.Tag;
064import org.opends.server.types.DN;
065
066
067
068/**
069 * An interface for querying the Access Log Publisher managed object
070 * definition meta information.
071 * <p>
072 * Access Log Publishers are responsible for distributing access log
073 * messages from the access logger to a destination.
074 */
075public final class AccessLogPublisherCfgDefn extends ManagedObjectDefinition<AccessLogPublisherCfgClient, AccessLogPublisherCfg> {
076
077  // The singleton configuration definition instance.
078  private static final AccessLogPublisherCfgDefn INSTANCE = new AccessLogPublisherCfgDefn();
079
080
081
082  /**
083   * Defines the set of permissable values for the "filtering-policy" property.
084   * <p>
085   * Specifies how filtering criteria should be applied to log
086   * records.
087   */
088  public static enum FilteringPolicy {
089
090    /**
091     * Records must not match any of the filtering criteria in order
092     * to be logged.
093     */
094    EXCLUSIVE("exclusive"),
095
096
097
098    /**
099     * Records must match at least one of the filtering criteria in
100     * order to be logged.
101     */
102    INCLUSIVE("inclusive"),
103
104
105
106    /**
107     * No filtering will be performed, and all records will be logged.
108     */
109    NO_FILTERING("no-filtering");
110
111
112
113    // String representation of the value.
114    private final String name;
115
116
117
118    // Private constructor.
119    private FilteringPolicy(String name) { this.name = name; }
120
121
122
123    /**
124     * {@inheritDoc}
125     */
126    public String toString() { return name; }
127
128  }
129
130
131
132  // The "filtering-policy" property definition.
133  private static final EnumPropertyDefinition<FilteringPolicy> PD_FILTERING_POLICY;
134
135
136
137  // The "java-class" property definition.
138  private static final ClassPropertyDefinition PD_JAVA_CLASS;
139
140
141
142  // The "suppress-internal-operations" property definition.
143  private static final BooleanPropertyDefinition PD_SUPPRESS_INTERNAL_OPERATIONS;
144
145
146
147  // The "suppress-synchronization-operations" property definition.
148  private static final BooleanPropertyDefinition PD_SUPPRESS_SYNCHRONIZATION_OPERATIONS;
149
150
151
152  // The "access-log-filtering-criteria" relation definition.
153  private static final InstantiableRelationDefinition<AccessLogFilteringCriteriaCfgClient, AccessLogFilteringCriteriaCfg> RD_ACCESS_LOG_FILTERING_CRITERIA;
154
155
156
157  // Build the "filtering-policy" property definition.
158  static {
159      EnumPropertyDefinition.Builder<FilteringPolicy> builder = EnumPropertyDefinition.createBuilder(INSTANCE, "filtering-policy");
160      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "filtering-policy"));
161      DefaultBehaviorProvider<FilteringPolicy> provider = new DefinedDefaultBehaviorProvider<FilteringPolicy>("no-filtering");
162      builder.setDefaultBehaviorProvider(provider);
163      builder.setEnumClass(FilteringPolicy.class);
164      PD_FILTERING_POLICY = builder.getInstance();
165      INSTANCE.registerPropertyDefinition(PD_FILTERING_POLICY);
166  }
167
168
169
170  // Build the "java-class" property definition.
171  static {
172      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
173      builder.setOption(PropertyOption.MANDATORY);
174      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
175      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.loggers.AccessLogPublisher");
176      builder.setDefaultBehaviorProvider(provider);
177      builder.addInstanceOf("org.opends.server.loggers.LogPublisher");
178      PD_JAVA_CLASS = builder.getInstance();
179      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
180  }
181
182
183
184  // Build the "suppress-internal-operations" property definition.
185  static {
186      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "suppress-internal-operations");
187      builder.setOption(PropertyOption.ADVANCED);
188      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "suppress-internal-operations"));
189      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("true");
190      builder.setDefaultBehaviorProvider(provider);
191      PD_SUPPRESS_INTERNAL_OPERATIONS = builder.getInstance();
192      INSTANCE.registerPropertyDefinition(PD_SUPPRESS_INTERNAL_OPERATIONS);
193  }
194
195
196
197  // Build the "suppress-synchronization-operations" property definition.
198  static {
199      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "suppress-synchronization-operations");
200      builder.setOption(PropertyOption.ADVANCED);
201      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "suppress-synchronization-operations"));
202      DefaultBehaviorProvider<Boolean> provider = new DefinedDefaultBehaviorProvider<Boolean>("false");
203      builder.setDefaultBehaviorProvider(provider);
204      PD_SUPPRESS_SYNCHRONIZATION_OPERATIONS = builder.getInstance();
205      INSTANCE.registerPropertyDefinition(PD_SUPPRESS_SYNCHRONIZATION_OPERATIONS);
206  }
207
208
209
210  // Build the "access-log-filtering-criteria" relation definition.
211  static {
212    InstantiableRelationDefinition.Builder<AccessLogFilteringCriteriaCfgClient, AccessLogFilteringCriteriaCfg> builder =
213      new InstantiableRelationDefinition.Builder<AccessLogFilteringCriteriaCfgClient, AccessLogFilteringCriteriaCfg>(INSTANCE, "access-log-filtering-criteria", "access-log-filtering-criteria", AccessLogFilteringCriteriaCfgDefn.getInstance());
214    RD_ACCESS_LOG_FILTERING_CRITERIA = builder.getInstance();
215    INSTANCE.registerRelationDefinition(RD_ACCESS_LOG_FILTERING_CRITERIA);
216  }
217
218
219
220  // Register the tags associated with this managed object definition.
221  static {
222    INSTANCE.registerTag(Tag.valueOf("logging"));
223  }
224
225
226
227  /**
228   * Get the Access Log Publisher configuration definition singleton.
229   *
230   * @return Returns the Access Log Publisher configuration definition
231   *         singleton.
232   */
233  public static AccessLogPublisherCfgDefn getInstance() {
234    return INSTANCE;
235  }
236
237
238
239  /**
240   * Private constructor.
241   */
242  private AccessLogPublisherCfgDefn() {
243    super("access-log-publisher", LogPublisherCfgDefn.getInstance());
244  }
245
246
247
248  /**
249   * {@inheritDoc}
250   */
251  public AccessLogPublisherCfgClient createClientConfiguration(
252      ManagedObject<? extends AccessLogPublisherCfgClient> impl) {
253    return new AccessLogPublisherCfgClientImpl(impl);
254  }
255
256
257
258  /**
259   * {@inheritDoc}
260   */
261  public AccessLogPublisherCfg createServerConfiguration(
262      ServerManagedObject<? extends AccessLogPublisherCfg> impl) {
263    return new AccessLogPublisherCfgServerImpl(impl);
264  }
265
266
267
268  /**
269   * {@inheritDoc}
270   */
271  public Class<AccessLogPublisherCfg> getServerConfigurationClass() {
272    return AccessLogPublisherCfg.class;
273  }
274
275
276
277  /**
278   * Get the "enabled" property definition.
279   * <p>
280   * Indicates whether the Access Log Publisher is enabled for use.
281   *
282   * @return Returns the "enabled" property definition.
283   */
284  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
285    return LogPublisherCfgDefn.getInstance().getEnabledPropertyDefinition();
286  }
287
288
289
290  /**
291   * Get the "filtering-policy" property definition.
292   * <p>
293   * Specifies how filtering criteria should be applied to log
294   * records.
295   *
296   * @return Returns the "filtering-policy" property definition.
297   */
298  public EnumPropertyDefinition<FilteringPolicy> getFilteringPolicyPropertyDefinition() {
299    return PD_FILTERING_POLICY;
300  }
301
302
303
304  /**
305   * Get the "java-class" property definition.
306   * <p>
307   * The fully-qualified name of the Java class that provides the
308   * Access Log Publisher implementation.
309   *
310   * @return Returns the "java-class" property definition.
311   */
312  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
313    return PD_JAVA_CLASS;
314  }
315
316
317
318  /**
319   * Get the "suppress-internal-operations" property definition.
320   * <p>
321   * Indicates whether internal operations (for example, operations
322   * that are initiated by plugins) should be logged along with the
323   * operations that are requested by users.
324   *
325   * @return Returns the "suppress-internal-operations" property definition.
326   */
327  public BooleanPropertyDefinition getSuppressInternalOperationsPropertyDefinition() {
328    return PD_SUPPRESS_INTERNAL_OPERATIONS;
329  }
330
331
332
333  /**
334   * Get the "suppress-synchronization-operations" property definition.
335   * <p>
336   * Indicates whether access messages that are generated by
337   * synchronization operations should be suppressed.
338   *
339   * @return Returns the "suppress-synchronization-operations" property definition.
340   */
341  public BooleanPropertyDefinition getSuppressSynchronizationOperationsPropertyDefinition() {
342    return PD_SUPPRESS_SYNCHRONIZATION_OPERATIONS;
343  }
344
345
346
347  /**
348   * Get the "access-log-filtering-criteria" relation definition.
349   *
350   * @return Returns the "access-log-filtering-criteria" relation definition.
351   */
352  public InstantiableRelationDefinition<AccessLogFilteringCriteriaCfgClient,AccessLogFilteringCriteriaCfg> getAccessLogFilteringCriteriaRelationDefinition() {
353    return RD_ACCESS_LOG_FILTERING_CRITERIA;
354  }
355
356
357
358  /**
359   * Managed object client implementation.
360   */
361  private static class AccessLogPublisherCfgClientImpl implements
362    AccessLogPublisherCfgClient {
363
364    // Private implementation.
365    private ManagedObject<? extends AccessLogPublisherCfgClient> impl;
366
367
368
369    // Private constructor.
370    private AccessLogPublisherCfgClientImpl(
371        ManagedObject<? extends AccessLogPublisherCfgClient> impl) {
372      this.impl = impl;
373    }
374
375
376
377    /**
378     * {@inheritDoc}
379     */
380    public Boolean isEnabled() {
381      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
382    }
383
384
385
386    /**
387     * {@inheritDoc}
388     */
389    public void setEnabled(boolean value) {
390      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
391    }
392
393
394
395    /**
396     * {@inheritDoc}
397     */
398    public FilteringPolicy getFilteringPolicy() {
399      return impl.getPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition());
400    }
401
402
403
404    /**
405     * {@inheritDoc}
406     */
407    public void setFilteringPolicy(FilteringPolicy value) {
408      impl.setPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition(), value);
409    }
410
411
412
413    /**
414     * {@inheritDoc}
415     */
416    public String getJavaClass() {
417      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
418    }
419
420
421
422    /**
423     * {@inheritDoc}
424     */
425    public void setJavaClass(String value) {
426      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
427    }
428
429
430
431    /**
432     * {@inheritDoc}
433     */
434    public boolean isSuppressInternalOperations() {
435      return impl.getPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition());
436    }
437
438
439
440    /**
441     * {@inheritDoc}
442     */
443    public void setSuppressInternalOperations(Boolean value) {
444      impl.setPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition(), value);
445    }
446
447
448
449    /**
450     * {@inheritDoc}
451     */
452    public boolean isSuppressSynchronizationOperations() {
453      return impl.getPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition());
454    }
455
456
457
458    /**
459     * {@inheritDoc}
460     */
461    public void setSuppressSynchronizationOperations(Boolean value) {
462      impl.setPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition(), value);
463    }
464
465
466
467    /**
468     * {@inheritDoc}
469     */
470    public String[] listAccessLogFilteringCriteria() throws ConcurrentModificationException,
471        AuthorizationException, CommunicationException {
472      return impl.listChildren(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition());
473    }
474
475
476
477    /**
478     * {@inheritDoc}
479     */
480    public AccessLogFilteringCriteriaCfgClient getAccessLogFilteringCriteria(String name)
481        throws DefinitionDecodingException, ManagedObjectDecodingException,
482        ManagedObjectNotFoundException, ConcurrentModificationException,
483        AuthorizationException, CommunicationException {
484      return impl.getChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name).getConfiguration();
485    }
486
487
488
489    /**
490     * {@inheritDoc}
491     */
492    public <M extends AccessLogFilteringCriteriaCfgClient> M createAccessLogFilteringCriteria(
493        ManagedObjectDefinition<M, ? extends AccessLogFilteringCriteriaCfg> d, String name, Collection<PropertyException> exceptions) throws IllegalManagedObjectNameException {
494      return impl.createChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), d, name, exceptions).getConfiguration();
495    }
496
497
498
499    /**
500     * {@inheritDoc}
501     */
502    public void removeAccessLogFilteringCriteria(String name)
503        throws ManagedObjectNotFoundException, ConcurrentModificationException,
504        OperationRejectedException, AuthorizationException, CommunicationException {
505      impl.removeChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name);
506    }
507
508
509
510    /**
511     * {@inheritDoc}
512     */
513    public ManagedObjectDefinition<? extends AccessLogPublisherCfgClient, ? extends AccessLogPublisherCfg> definition() {
514      return INSTANCE;
515    }
516
517
518
519    /**
520     * {@inheritDoc}
521     */
522    public PropertyProvider properties() {
523      return impl;
524    }
525
526
527
528    /**
529     * {@inheritDoc}
530     */
531    public void commit() throws ManagedObjectAlreadyExistsException,
532        MissingMandatoryPropertiesException, ConcurrentModificationException,
533        OperationRejectedException, AuthorizationException,
534        CommunicationException {
535      impl.commit();
536    }
537
538
539
540    /** {@inheritDoc} */
541    public String toString() {
542      return impl.toString();
543    }
544  }
545
546
547
548  /**
549   * Managed object server implementation.
550   */
551  private static class AccessLogPublisherCfgServerImpl implements
552    AccessLogPublisherCfg {
553
554    // Private implementation.
555    private ServerManagedObject<? extends AccessLogPublisherCfg> impl;
556
557    // The value of the "enabled" property.
558    private final boolean pEnabled;
559
560    // The value of the "filtering-policy" property.
561    private final FilteringPolicy pFilteringPolicy;
562
563    // The value of the "java-class" property.
564    private final String pJavaClass;
565
566    // The value of the "suppress-internal-operations" property.
567    private final boolean pSuppressInternalOperations;
568
569    // The value of the "suppress-synchronization-operations" property.
570    private final boolean pSuppressSynchronizationOperations;
571
572
573
574    // Private constructor.
575    private AccessLogPublisherCfgServerImpl(ServerManagedObject<? extends AccessLogPublisherCfg> impl) {
576      this.impl = impl;
577      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
578      this.pFilteringPolicy = impl.getPropertyValue(INSTANCE.getFilteringPolicyPropertyDefinition());
579      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
580      this.pSuppressInternalOperations = impl.getPropertyValue(INSTANCE.getSuppressInternalOperationsPropertyDefinition());
581      this.pSuppressSynchronizationOperations = impl.getPropertyValue(INSTANCE.getSuppressSynchronizationOperationsPropertyDefinition());
582    }
583
584
585
586    /**
587     * {@inheritDoc}
588     */
589    public void addAccessChangeListener(
590        ConfigurationChangeListener<AccessLogPublisherCfg> listener) {
591      impl.registerChangeListener(listener);
592    }
593
594
595
596    /**
597     * {@inheritDoc}
598     */
599    public void removeAccessChangeListener(
600        ConfigurationChangeListener<AccessLogPublisherCfg> listener) {
601      impl.deregisterChangeListener(listener);
602    }
603    /**
604     * {@inheritDoc}
605     */
606    public void addChangeListener(
607        ConfigurationChangeListener<LogPublisherCfg> listener) {
608      impl.registerChangeListener(listener);
609    }
610
611
612
613    /**
614     * {@inheritDoc}
615     */
616    public void removeChangeListener(
617        ConfigurationChangeListener<LogPublisherCfg> listener) {
618      impl.deregisterChangeListener(listener);
619    }
620
621
622
623    /**
624     * {@inheritDoc}
625     */
626    public boolean isEnabled() {
627      return pEnabled;
628    }
629
630
631
632    /**
633     * {@inheritDoc}
634     */
635    public FilteringPolicy getFilteringPolicy() {
636      return pFilteringPolicy;
637    }
638
639
640
641    /**
642     * {@inheritDoc}
643     */
644    public String getJavaClass() {
645      return pJavaClass;
646    }
647
648
649
650    /**
651     * {@inheritDoc}
652     */
653    public boolean isSuppressInternalOperations() {
654      return pSuppressInternalOperations;
655    }
656
657
658
659    /**
660     * {@inheritDoc}
661     */
662    public boolean isSuppressSynchronizationOperations() {
663      return pSuppressSynchronizationOperations;
664    }
665
666
667
668    /**
669     * {@inheritDoc}
670     */
671    public String[] listAccessLogFilteringCriteria() {
672      return impl.listChildren(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition());
673    }
674
675
676
677    /**
678     * {@inheritDoc}
679     */
680    public AccessLogFilteringCriteriaCfg getAccessLogFilteringCriteria(String name) throws ConfigException {
681      return impl.getChild(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), name).getConfiguration();
682    }
683
684
685
686    /**
687     * {@inheritDoc}
688     */
689    public void addAccessLogFilteringCriteriaAddListener(
690        ConfigurationAddListener<AccessLogFilteringCriteriaCfg> listener) throws ConfigException {
691      impl.registerAddListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
692    }
693
694
695
696    /**
697     * {@inheritDoc}
698     */
699    public void removeAccessLogFilteringCriteriaAddListener(
700        ConfigurationAddListener<AccessLogFilteringCriteriaCfg> listener) {
701      impl.deregisterAddListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
702    }
703
704
705
706    /**
707     * {@inheritDoc}
708     */
709    public void addAccessLogFilteringCriteriaDeleteListener(
710        ConfigurationDeleteListener<AccessLogFilteringCriteriaCfg> listener) throws ConfigException {
711      impl.registerDeleteListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
712    }
713
714
715
716    /**
717     * {@inheritDoc}
718     */
719    public void removeAccessLogFilteringCriteriaDeleteListener(
720        ConfigurationDeleteListener<AccessLogFilteringCriteriaCfg> listener) {
721      impl.deregisterDeleteListener(INSTANCE.getAccessLogFilteringCriteriaRelationDefinition(), listener);
722    }
723
724
725
726    /**
727     * {@inheritDoc}
728     */
729    public Class<? extends AccessLogPublisherCfg> configurationClass() {
730      return AccessLogPublisherCfg.class;
731    }
732
733
734
735    /**
736     * {@inheritDoc}
737     */
738    public DN dn() {
739      return impl.getDN();
740    }
741
742
743
744    /** {@inheritDoc} */
745    public String toString() {
746      return impl.toString();
747    }
748  }
749}