Package com.bring.api

Source Code of com.bring.api.BringService

package com.bring.api;

import com.bring.api.connection.BringConnection;
import com.bring.api.connection.HttpUrlConnectionAdapter;
import com.bring.api.exceptions.CouldNotLoadBringConnectionAdapterException;
import com.bring.api.exceptions.RequestFailedException;
import com.bring.api.shippingguide.dao.ShippingGuideDao;
import com.bring.api.shippingguide.request.QueryType;
import com.bring.api.shippingguide.request.Shipment;
import com.bring.api.shippingguide.response.ShippingGuideResult;
import com.bring.api.tracking.dao.TrackingDao;
import com.bring.api.tracking.request.TrackingQuery;
import com.bring.api.tracking.response.Signature;
import com.bring.api.tracking.response.TrackingResult;

import java.io.InputStream;
import java.lang.reflect.Constructor;

/**
* Service containing all Bring APIs.
*/
public class BringService {

    ShippingGuideDao shippingGuideDao;
    TrackingDao trackingDao;
   
    /**
     * Constructor that autodetects available BringConnections (i.e. chooses automatically
     * between UrlConnection, HttpClient 3 and HttpClient 4 depending on what's on the classpath.
     * HttpClient 3 and HttpClient 4 are sub-modules that must be included).
     * If no extra BringConnection sub-modules are loaded, then UrlConnection is used as default.
     *
     * @param clientIdentifier Unique string that identifies the caller. Domain of the web site is preferred.
     */
    public BringService(String clientIdentifier) {
        initDaos(detectAndLoadConnectionAdapter(clientIdentifier));
    }
   
    /**
     * Constructor that accepts a custom BringConnection implementation.
     *
     * @param bringConnection Custom BringConnection
     */
    public BringService(BringConnection bringConnection) {
        initDaos(bringConnection);
    }
   
    /**
     * Constructor that accepts a custom BringConnection and a custom BringParser.
     *
     * @param bringConnection Custom BringConnection
     */
    public BringService(BringConnection bringConnection, BringParser<ShippingGuideResult> shippingGuideParser, BringParser<TrackingResult> trackingParser) {
        initDaos(bringConnection, shippingGuideParser, trackingParser);
    }

    /**
     * Queries Bring Fraktguide for products available for passed in Shipment instance.
     *
     * @param shipment Parameters for the request
     * @param queryType Used to limit search (faster requests)
     * @return ShippingGuideResult Product prices, expected delivery, trace messages etc.
     * @throws RequestFailedException
     */
    public ShippingGuideResult queryShippingGuide(Shipment shipment, QueryType queryType) throws RequestFailedException {
        return shippingGuideDao.query(shipment, queryType);
    }

    /**
     * Queries Bring Tracking for passed in query.
     *
     * @param trackingQuery Search parameters (reference-, transmission-, or package number)
     * @return TrackingResult Tracking data
     * @throws RequestFailedException
     */
    public TrackingResult queryTracking(TrackingQuery trackingQuery) throws RequestFailedException {
        return trackingDao.query(trackingQuery);
    }
   
    /**
     * Queries Bring Tracking for passed in query using given API userID and key.
     * Returns more info than open (non-logged in) query.
     *
     * @param trackingQuery Search parameters (reference-, transmission-, or package number)
     * @param apiUserId API user identity
     * @param apiKey API key
     * @return TrackingResult Tracking data for authenticated users
     * @throws RequestFailedException
     */
    public TrackingResult queryTracking(TrackingQuery trackingQuery, String apiUserId, String apiKey) throws RequestFailedException {
        return trackingDao.query(trackingQuery, apiUserId, apiKey);
    }
   
    /**
     * Query for signature image.
     * Caller is responsible for closing stream.
     *
     * @param recipentSignature received from queryTracking
     * @return InputStream (used to access signature images)
     * @throws RequestFailedException
     */
    public InputStream getSignatureImageAsStream(Signature recipentSignature) throws RequestFailedException {
        return trackingDao.getSignatureImageAsStream(recipentSignature);
    }
   
    /**
     * Query for signature image for passed in query using given API userID and key.
     * The signature must exist to be downloaded.
     * Caller is responsible for closing stream.
     *
     * @param recipentSignature received from queryTracking
     * @return InputStream (used to access signature images)
     * @throws RequestFailedException
     */
    public InputStream getSignatureImageAsStream(Signature recipentSignature, String apiUserId, String apiKey) throws RequestFailedException {
        return trackingDao.getSignatureImageAsStream(recipentSignature, apiUserId, apiKey);
    }
   
    protected BringConnection detectAndLoadConnectionAdapter(String clientIdentifier) {
        BringConnection bringConnection;

        try {
            bringConnection = loadConnectionAdapter("com.bring.api.connection.HttpClient4Adapter", clientIdentifier);
        }
        catch (CouldNotLoadBringConnectionAdapterException e1) {
            try {
                bringConnection = loadConnectionAdapter("com.bring.api.connection.HttpClient3Adapter", clientIdentifier);
            }
            catch (CouldNotLoadBringConnectionAdapterException e2) {
                bringConnection = new HttpUrlConnectionAdapter(clientIdentifier);
            }
        }
        return bringConnection;
    }
   
    protected BringConnection loadConnectionAdapter(String className, String identifier) {
        try {
            Constructor constructor = Class.forName(className).getConstructor(String.class);
            return (BringConnection) constructor.newInstance(identifier);
        }
        catch (Exception e) {
            throw new CouldNotLoadBringConnectionAdapterException(e);
        }
    }
   
    private void initDaos(BringConnection conn) {
        shippingGuideDao = new ShippingGuideDao(conn);
        trackingDao = new TrackingDao(conn);
    }

    private void initDaos(BringConnection bringConnection, BringParser<ShippingGuideResult> shippingGuideParser, BringParser<TrackingResult> trackingParser) {
        shippingGuideDao = new ShippingGuideDao(bringConnection, shippingGuideParser);
        trackingDao = new TrackingDao(bringConnection, trackingParser);
    }
}
TOP

Related Classes of com.bring.api.BringService

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.