content: /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied.  See the License for the
   * specific language governing permissions and limitations
   * under the License.
   */
  package org.apache.weex;
  
  import android.support.annotation.NonNull;
  import org.apache.weex.adapter.ClassLoaderAdapter;
  import org.apache.weex.adapter.IDrawableLoader;
  import org.apache.weex.adapter.IWXHttpAdapter;
  import org.apache.weex.adapter.IWXImgLoaderAdapter;
  import org.apache.weex.adapter.IWXJSExceptionAdapter;
  import org.apache.weex.adapter.IWXJsFileLoaderAdapter;
  import org.apache.weex.adapter.IWXJscProcessManager;
  import org.apache.weex.adapter.IWXSoLoaderAdapter;
  import org.apache.weex.adapter.IWXUserTrackAdapter;
  import org.apache.weex.adapter.URIAdapter;
  import org.apache.weex.appfram.storage.IWXStorageAdapter;
  import org.apache.weex.appfram.websocket.IWebSocketAdapterFactory;
  import org.apache.weex.performance.IApmGenerator;
  import java.util.LinkedList;
  import java.util.List;
  
  /**
   * Created by sospartan on 5/31/16.
   */
  public class InitConfig {
    private IWXHttpAdapter httpAdapter;
    private IDrawableLoader drawableLoader;
    private IWXImgLoaderAdapter imgAdapter;
    private IWXUserTrackAdapter utAdapter;
    private IWXStorageAdapter storageAdapter;
    private IWXSoLoaderAdapter soLoader;
    private URIAdapter mURIAdapter;
    private IWebSocketAdapterFactory webSocketAdapterFactory;
    private IWXJSExceptionAdapter mJSExceptionAdapter;
    private String framework;
    private ClassLoaderAdapter classLoaderAdapter;
    private IApmGenerator apmGenerater;
    private IWXJsFileLoaderAdapter jsFileLoaderAdapter;
    private IWXJscProcessManager jscProcessManager;
    private List<String> nativeLibraryList;
  
    public IWXHttpAdapter getHttpAdapter() {
      return httpAdapter;
    }
  
    public IWXImgLoaderAdapter getImgAdapter() {
      return imgAdapter;
    }
  
    public IDrawableLoader getDrawableLoader() {
      return drawableLoader;
    }
  
    public IWXUserTrackAdapter getUtAdapter() {
      return utAdapter;
    }
  
    public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
      return soLoader;
    }
  
    public String getFramework() {
      return framework;
    }
  
    public IWXStorageAdapter getStorageAdapter() {
      return storageAdapter;
    }
  
    public URIAdapter getURIAdapter() {
      return mURIAdapter;
    }
  
    public IWebSocketAdapterFactory getWebSocketAdapterFactory() {
      return webSocketAdapterFactory;
    }
  
    public ClassLoaderAdapter getClassLoaderAdapter() {
      return classLoaderAdapter;
    }
  
    public IApmGenerator getApmGenerater() {
      return apmGenerater;
    }
  
    public IWXJsFileLoaderAdapter getJsFileLoaderAdapter() {
      return jsFileLoaderAdapter;
    }
  
    public InitConfig setClassLoaderAdapter(ClassLoaderAdapter classLoaderAdapter) {
      this.classLoaderAdapter = classLoaderAdapter;
      return this;
    }
  
    public IWXJSExceptionAdapter getJSExceptionAdapter() {
      return mJSExceptionAdapter;
    }
    public IWXJscProcessManager getJscProcessManager() {
      return jscProcessManager;
    }
  
    @NonNull Iterable<String> getNativeLibraryList() {
      if(nativeLibraryList == null){
        nativeLibraryList = new LinkedList<>();
      }
      return nativeLibraryList;
    }
  
    private InitConfig() {
    }
  
    public static class Builder{
      IWXHttpAdapter httpAdapter;
      IWXImgLoaderAdapter imgAdapter;
      IDrawableLoader drawableLoader;
      IWXUserTrackAdapter utAdapter;
      IWXStorageAdapter storageAdapter;
      IWXSoLoaderAdapter soLoader;
      URIAdapter mURIAdapter;
      IWXJSExceptionAdapter mJSExceptionAdapter;
      String framework;
      IWebSocketAdapterFactory webSocketAdapterFactory;
      ClassLoaderAdapter classLoaderAdapter;
      IApmGenerator apmGenerater;
      private IWXJsFileLoaderAdapter jsFileLoaderAdapter;
      private List<String> nativeLibraryList = new LinkedList<>();
  
      public IWXJscProcessManager getJscProcessManager() {
        return jscProcessManager;
      }
  
      public Builder setJscProcessManager(IWXJscProcessManager jscProcessManager) {
        this.jscProcessManager = jscProcessManager;
        return this;
      }
  
      IWXJscProcessManager jscProcessManager;
  
      public Builder(){
  
      }
  
      public Builder setHttpAdapter(IWXHttpAdapter httpAdapter) {
        this.httpAdapter = httpAdapter;
        return this;
      }
  
      public Builder setImgAdapter(IWXImgLoaderAdapter imgAdapter) {
        this.imgAdapter = imgAdapter;
        return this;
      }
  
      public Builder setDrawableLoader(IDrawableLoader drawableLoader){
        this.drawableLoader=drawableLoader;
        return this;
      }
  
      public Builder setUtAdapter(IWXUserTrackAdapter utAdapter) {
        this.utAdapter = utAdapter;
        return this;
      }
  
      public Builder setStorageAdapter(IWXStorageAdapter storageAdapter) {
        this.storageAdapter = storageAdapter;
        return this;
      }
  
      public Builder setURIAdapter(URIAdapter URIAdapter) {
        mURIAdapter = URIAdapter;
        return this;
      }
  
      public Builder setJSExceptionAdapter(IWXJSExceptionAdapter JSExceptionAdapter) {
        mJSExceptionAdapter = JSExceptionAdapter;
        return this;
      }
  
      public Builder setSoLoader(IWXSoLoaderAdapter loader) {
        this.soLoader = loader;
        return this;
      }
  
      public Builder setFramework(String framework){
        this.framework=framework;
        return this;
      }
  
      public Builder setWebSocketAdapterFactory(IWebSocketAdapterFactory factory) {
        this.webSocketAdapterFactory = factory;
        return this;
      }
  
      public Builder setClassLoaderAdapter(ClassLoaderAdapter classLoaderAdapter) {
        this.classLoaderAdapter = classLoaderAdapter;
        return this;
      }
  
      public Builder setApmGenerater(IApmGenerator apmGenerater){
        this.apmGenerater =apmGenerater;
        return this;
      }
  
      public Builder setJsFileLoaderAdapter(IWXJsFileLoaderAdapter jsFileLoaderAdapter) {
        this.jsFileLoaderAdapter = jsFileLoaderAdapter;
        return this;
      }
  
      public Builder addNativeLibrary(String name){
        nativeLibraryList.add(name);
        return this;
      }
  
      public InitConfig build(){
        InitConfig config =  new InitConfig();
        config.httpAdapter = this.httpAdapter;
        config.imgAdapter = this.imgAdapter;
        config.drawableLoader = this.drawableLoader;
        config.utAdapter = this.utAdapter;
        config.storageAdapter = this.storageAdapter;
        config.soLoader=this.soLoader;
        config.framework=this.framework;
        config.mURIAdapter = this.mURIAdapter;
        config.webSocketAdapterFactory = this.webSocketAdapterFactory;
        config.mJSExceptionAdapter=this.mJSExceptionAdapter;
        config.classLoaderAdapter = this.classLoaderAdapter;
        config.apmGenerater = this.apmGenerater;
        config.jsFileLoaderAdapter = this.jsFileLoaderAdapter;
        config.jscProcessManager = this.jscProcessManager;
        config.nativeLibraryList = this.nativeLibraryList;
        return config;
      }
    }
  }
  