Package com.ibm.sbt.services.client.base.datahandlers

Source Code of com.ibm.sbt.services.client.base.datahandlers.EntityList

/*
* © Copyright IBM Corp. 2013
*
* Licensed 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 com.ibm.sbt.services.client.base.datahandlers;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.AbstractList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;

import com.ibm.sbt.services.client.ClientService.Args;
import com.ibm.sbt.services.client.Response;
import com.ibm.sbt.services.client.base.BaseEntity;
import com.ibm.sbt.services.client.base.BaseService;
import com.ibm.sbt.services.client.base.IFeedHandler;


public abstract class EntityList<Entity extends BaseEntity> extends AbstractList<Entity> implements ResponseProvider, Externalizable {

  private Response requestData;
  private List<Entity> entities;
 
  //Make it final
  private IFeedHandler<Entity> feedHandler;
 
  //TO REMOVE
  private BaseService service;
 
  public EntityList(){}
 
  public EntityList(Response requestData, IFeedHandler<Entity> feedHandler) {
    init(requestData, feedHandler);
  }
 
  protected void init(Response requestData, IFeedHandler<Entity> feedHandler) {
    this.requestData = requestData;
        this.feedHandler = feedHandler;
       
        // in case of 401 errors  client service returns null
        if (requestData != null) {
          this.entities = createEntities();
        } else {
          this.entities = null;
        }
    }
 
  //TO REMOVE
  public EntityList(Response requestData, BaseService service) {
    this.requestData = requestData;
        this.service = service;
    this.entities = createEntities();
    }
 
  abstract protected List<Entity> createEntities();
 
  @Override
  public Object getData() {
    return requestData.getData();
  }
 
  @Override
  public List<Cookie> getCookies() {
    DefaultHttpClient httpClient = (DefaultHttpClient)requestData.getHttpClient();
    return httpClient.getCookieStore().getCookies();
  }

  @Override
  public Header[] getRequestHeaders() {
    return requestData.getRequest().getAllHeaders();
  }
 
  @Override
  public Header[] getResponseHeaders() {
    return requestData.getResponse().getAllHeaders();
  }
 
  private Header getHeaderByName(String headerName, Header[] headers) {
    for (Header header: headers){
      if (header.getName().equalsIgnoreCase(headerName)){
        return header;
      }
    }
    return null;
  }
 
  @Override
  public Header getRequestHeader(String headerName) {
    Header[] headers = getRequestHeaders();
    return getHeaderByName(headerName, headers);
  }
 
  @Override
  public Args getArgs(){
    return requestData.getArgs();
  }

  @Override
  public Header getResponseHeader(String headerName) {
    Header[] headers = getResponseHeaders();
    return getHeaderByName(headerName, headers);
  }
 
  @Override
  public HttpResponse getHttpResponse() {
    return requestData.getResponse();
  }

  @Override
  public HttpRequest getHttpRequest() {
    return requestData.getRequest();
  }
 
  public IFeedHandler<Entity> getFeedHandler() {
    return feedHandler;
  }
 
  protected Entity getEntity(Object data){
    return getFeedHandler().createEntityFromData(data);
  }
 
  /*UNCOMMENT
  public BaseService getService() {
    return feedHandler.getService();
  }
  */
 
  public BaseService getService() {
    return service;
  }

  @Override
  public Entity get(int index) {
    return (entities != null && entities.size()>0)?entities.get(index):null;
  }

  @Override
  public int size() {
    return (entities == null) ? 0 : entities.size();
  }
 
  @Override
  public void readExternal(ObjectInput inputStream) throws IOException, ClassNotFoundException {
    // Retrieve the entity data and other values like endpoint name and service name
    Response data = (Response) inputStream.readObject();
    List<Entity> entities = (List<Entity>) inputStream.readObject();
    BaseService service = (BaseService) inputStream.readObject();
   
    this.requestData = data;
    this.entities = entities;
    this.service = service;
   
  }

  @Override
  public void writeExternal(ObjectOutput outputStream) throws IOException {
 
    // Serialize the data elements
    outputStream.writeObject(requestData);
    outputStream.writeObject(entities);
    outputStream.writeObject(getService());
  }
}
TOP

Related Classes of com.ibm.sbt.services.client.base.datahandlers.EntityList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.