View Javadoc

    1   /***
    2    * JFoxSOAF, Service-Oriented Application Framework
    3    *
    4    * Copyright (C) www.huihoo.org
    5    *
    6    * Distributable under GNU LGPL For more information, please visit:
    7    * http://www.huihoo.org/jfox/jfoxsoaf
    8    */
    9
    10  package org.huihoo.jfox.soaf.container;
    11
    12  import java.io.InputStream;
    13  import java.io.InputStreamReader;
    14  import java.util.ArrayList;
    15  import java.util.Collection;
    16  import java.util.Iterator;
    17  import java.util.LinkedList;
    18
    19  import org.huihoo.jfox.soaf.schema.config.Configuration;
    20  import org.huihoo.jfox.soaf.schema.config.ConfigurationEntry;
    21  import org.huihoo.jfox.soaf.schema.config.Interceptor;
    22  import org.huihoo.jfox.soaf.schema.service.Service;
    23  import org.huihoo.jfox.soaf.schema.service.ServiceEntry;
    24
    25  /***
    26   * <p>
    27   * Service Configration load proxy.
    28   * </p>
    29   *
    30   * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
    31   * @version $Revision: 1.3 $ $Date: 2004/10/15 08:36:00 $
    32   * @version Revision: 1.0
    33   */
    34
    35  public class ServiceLoadProxy {
    36
    37      private boolean serviceLoaded = false;
    38
    39      private Collection serviceSchemaColl = new LinkedList();
    40
    41      private Collection interceptorColl = new ArrayList();
    42
    43      private Collection serviceEntryColl = new ArrayList();
    44
    45      private InterceptorManager interceptorManager = new InterceptorManagerImpl();
    46
    47      /***
    48       * Default Constructor.
    49       */
    50      public ServiceLoadProxy() {
    51          super();
    52      }
    53
    54      /***
    55       * Load all configuration service.
    56       *
    57       * @param service
    58       */
    59      public void loadConfig(Configuration config, ClassLoader classLoader)
    60              throws Throwable {
    61          Iterator iter = null;
    62          if (!serviceLoaded) {
    63              processConfig(config);
    64              loadService(serviceSchemaColl, classLoader);
    65              interceptorManager.processInterceptor(interceptorColl,
    66                      serviceEntryColl, classLoader);
    67              this.serviceLoaded = true;
    68          }
    69      }
    70
    71      private void loadService(Collection serviceSchemaColl,
    72              ClassLoader classLoader) throws Throwable {
    73          InputStream is = null;
    74          InputStreamReader isr = null;
    75          Iterator iter = serviceSchemaColl.iterator();
    76          Service service;
    77          while (iter.hasNext()) {
    78              is = classLoader.getResourceAsStream((String) iter.next());
    79              isr = new InputStreamReader(is);
    80              service = Service.unmarshal(isr);
    81              processService(service);
    82          }
    83          is.close();
    84          isr.close();
    85      }
    86
    87      private void processService(Service service) {
    88          ServiceEntry[] serviceEntry = service.getServiceEntry();
    89          for (int i = 0; i < serviceEntry.length; i++) {
    90              serviceEntryColl.add(serviceEntry[i]);
    91          }
    92      }
    93
    94      /***
    95       * Is service loaded?
    96       *
    97       * @return boolean
    98       */
    99      public boolean isServiceLoaded() {
    100         return this.serviceLoaded;
    101     }
    102
    103     private void processConfig(Configuration config) {
    104         ConfigurationEntry[] configEntry = config.getServiceConfiguration()
    105                 .getConfigurationEntry();
    106         Interceptor[] interceptor = config.getSystemInterceptor()
    107                 .getInterceptor();
    108         for (int i = 0; i < configEntry.length; i++) {
    109             serviceSchemaColl.add(configEntry[i].getValue());
    110         }
    111
    112         for (int i = 0; i < interceptor.length; i++) {
    113             interceptorColl.add(interceptor[i].getValue());
    114         }
    115     }
    116 }