View Javadoc

1   /*
2    * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.opensaml.saml2.metadata.provider;
18  
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  /**
23   * An observable base implementation of metadata providers. An observer that clears the descriptor index kept by
24   * {@link AbstractMetadataProvider} is registered during construction time.
25   */
26  public abstract class AbstractObservableMetadataProvider extends AbstractMetadataProvider implements
27          ObservableMetadataProvider {
28  
29      /** List of registered observers. */
30      private ArrayList<Observer> observers;
31  
32      /** Constructor. */
33      public AbstractObservableMetadataProvider() {
34          super();
35          observers = new ArrayList<Observer>();
36          observers.add(new DescriptorIndexClearingObserver());
37      }
38  
39      /** {@inheritDoc} */
40      public List<Observer> getObservers() {
41          return observers;
42      }
43  
44      /**
45       * Helper method for calling
46       * {@link org.opensaml.saml2.metadata.provider.ObservableMetadataProvider.Observer#onEvent(MetadataProvider)} on
47       * every registered Observer passing in this provider.
48       */
49      protected void emitChangeEvent() {
50          synchronized (observers) {
51              for (Observer observer : observers) {
52                  if (observer != null) {
53                      observer.onEvent(this);
54                  }
55              }
56          }
57      }
58  
59      /**
60       * Observer that clears the descriptor index of this provider.
61       */
62      private class DescriptorIndexClearingObserver implements Observer {
63  
64          /** {@inheritDoc} */
65          public void onEvent(MetadataProvider provider) {
66              ((AbstractMetadataProvider) provider).clearDescriptorIndex();
67          }
68      }
69  }