Package com.bring.api.tracking.dao

Source Code of com.bring.api.tracking.dao.TrackingDao

package com.bring.api.tracking.dao;

import com.bring.api.BringParser;
import com.bring.api.connection.BringConnection;
import com.bring.api.exceptions.RequestFailedException;
import com.bring.api.exceptions.UnmarshalException;
import com.bring.api.tracking.request.TrackingQuery;
import com.bring.api.tracking.response.*;
import com.bring.api.tracking.response.Package;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class TrackingDao {

    private BringConnection bringConnection;
    private BringParser<TrackingResult> bringParser;

    public TrackingDao(BringConnection connection){
        bringParser = new BringParser<TrackingResult>(TrackingResult.class);
        this.bringConnection = connection;
    }

    public TrackingDao(BringConnection bringConnection, BringParser<TrackingResult> bringParser) {
        this.bringConnection = bringConnection;
        this.bringParser = bringParser;
    }

    public TrackingResult query(TrackingQuery trackingQuery) throws RequestFailedException {
        return query("http://sporing.bring.no/api/tracking.xml", trackingQuery, null);
    }

    public TrackingResult query(TrackingQuery trackingQuery, String apiUserId, String apiKey) throws RequestFailedException {
        Map<String,String> headers = new HashMap<String,String>();
        headers.put("X-MyBring-API-Uid", apiUserId);
        headers.put("X-MyBring-API-Key", apiKey);
        return query("https://www.mybring.com/tracking/api/tracking.xml", trackingQuery, headers);
    }
   
    private TrackingResult query(String baseUrl, TrackingQuery trackingQuery, Map<String, String> headers) throws RequestFailedException {
        String url = baseUrl + trackingQuery.toQueryString();
        InputStream inputStream = null;
        try {
            if (headers == null) {
                inputStream = bringConnection.openInputStream(url);
            }
            else {
                inputStream = bringConnection.openInputStream(url, headers);
            }
            TrackingResult trackingResult = bringParser.unmarshal(inputStream);
            convertSignatureUrlsToFullUrl(trackingResult, baseUrl.substring(0, baseUrl.lastIndexOf('/') + 1));
            return trackingResult;
        }
        catch (UnmarshalException e) {
            throw new RequestFailedException(e);
        }
        finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                }
                catch (IOException e) {
                    throw new RequestFailedException(e);
                }
            }
        }
    }

    private void convertSignatureUrlsToFullUrl(TrackingResult trackingResult, String urlPrefix) {
        for (Consignment consignment : trackingResult.getConsignments()) {
            if (consignment.getPackageSet() != null && consignment.getPackageSet().getPackages() != null) {
                for (Package packet : consignment.getPackageSet().getPackages()) {
                    for (Event event : packet.getEventSet().getEvents()) {
                        convertToFullUrl(event, urlPrefix);
                    }
                }
            }
        }
    }

    private void convertToFullUrl(Event event, String urlPrefix) {
        String url = event.getSignature().getLinkToImage();
        if (url != null && !url.matches("^https?://.*")) {
            event.getSignature().setLinkToImage(urlPrefix + url);
        }
    }

    /**
     * Get the signature image.
     * Caller is responsible for closing stream.
     *
     * @param signature
     * @return
     * @throws com.bring.api.exceptions.RequestFailedException
     */
  public InputStream getSignatureImageAsStream(Signature signature, String apiUserId, String apiKey) throws RequestFailedException {
        Map<String,String> headers = new HashMap<String,String>();
        headers.put("X-MyBring-API-Uid", apiUserId);
        headers.put("X-MyBring-API-Key", apiKey);
    return bringConnection.openInputStream(signature.getLinkToImage(), headers);
  }
 
  public InputStream getSignatureImageAsStream(Signature signature) throws RequestFailedException {
    return bringConnection.openInputStream(signature.getLinkToImage());
  }
}
TOP

Related Classes of com.bring.api.tracking.dao.TrackingDao

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.