Package github.priyatam.springrest.helper

Source Code of github.priyatam.springrest.helper.ResponseBuilderHelper

package github.priyatam.springrest.helper;

import com.google.common.collect.Lists;
import github.priyatam.springrest.domain.Driver;
import github.priyatam.springrest.domain.DrivingHistory;
import github.priyatam.springrest.domain.Policy;
import github.priyatam.springrest.domain.Vehicle;
import github.priyatam.springrest.utils.Link;
import github.priyatam.springrest.utils.LinkBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.inject.Inject;
import java.util.List;

@Service
public class ResponseBuilderHelper {

    final static Logger logger = LoggerFactory.getLogger(ResponseBuilderHelper.class);

    @Inject
    protected ETagHelper eTagHelper;

    @Inject
    private PersistenceHelper persistenceHelper;

    @Value("${virtualhost}")
    private String vhost;

    public enum URLS {

        POLICY("/policy/{policyNum}"),
        POLICY_VEHICLE("/policy/{policyNum}/vehicle/{vin}"),
        POLICY_DRIVER("/policy/{policyNum}/driver/{licenseNo}"),
        DRIVING_HISTORY("/policy/{policyNum}/driver/{licenseNo}/drivinghistory"),
        VEHICLE("/vehicle/{vin}"),
        DRIVER("/driver/{licenseNo}");

        final String url;

        URLS(String url) {
            this.url = url;
        }

        public String expand(String policyNum, String param) {
            switch (this) {
                case POLICY_DRIVER:
                    return url.replaceAll("\\{policyNum\\}", policyNum).replaceAll("\\{licenseNo\\}", param);
                case POLICY_VEHICLE:
                    return url.replaceAll("\\{policyNum\\}", policyNum).replaceAll("\\{vin\\}", param);
                case DRIVING_HISTORY:
                    return url.replaceAll("\\{policyNum\\}", policyNum).replaceAll("\\{licenseNo\\}", param);
                default:
                    return "";
            }
        }

        public String expand(String param) {
            switch (this) {
                case POLICY:
                    return url.replaceAll("\\{policyNum\\}", param);
                case DRIVER:
                    return url.replaceAll("\\{licenseNo\\}", param);
                case VEHICLE:
                    return url.replaceAll("\\{vin\\}", param);
                default:
                    return "";
            }
        }
    }

    public void toPolicy(Policy policy) {
        // Build policy link
        if (policy.getLinks().size() != 1) {
            policy.addLink(LinkBuilder.build(URLS.POLICY.expand(policy.getPolicyNum()), policy.toString()));
        }

        // Build driver links
        List<Driver> drivers = persistenceHelper.loadDriverByPolicyNum(policy.getPolicyNum());

        toDriver(policy, policy.getPolicyNum(), drivers);

        // Build vehicle links
        List<Vehicle> vehicles = persistenceHelper.loadVehicleByPolicyNum(policy.getPolicyNum());

        toVehicle(policy, policy.getPolicyNum(), vehicles);

        // Update Etag
        eTagHelper.generate(vhost + URLS.POLICY.expand(policy.getPolicyNum()), policy);
    }

    public void toPolicyFull(Policy policy) {
        // Build policy link
        if (policy.getLinks().size() != 1) {
            policy.addLink(LinkBuilder.build(URLS.POLICY.expand(policy.getPolicyNum()), policy.toString()));
        }

        // Build driver links
        List<Driver> drivers = persistenceHelper.loadDriverByPolicyNum(policy.getPolicyNum());

        toDriver(policy, policy.getPolicyNum(), drivers);
        policy = policy.deepCopyWithDrivers(drivers);

        // Build vehicle links
        List<Vehicle> vehicles = persistenceHelper.loadVehicleByPolicyNum(policy.getPolicyNum());
        policy = policy.deepCopyWithVehicles(vehicles);

        toVehicle(policy, policy.getPolicyNum(), vehicles);

        // Update Etag
        eTagHelper.generate(vhost + URLS.POLICY.expand(policy.getPolicyNum()), policy);
    }

    public void toDriver(Policy policy, String policyNum, List<Driver> drivers) {
        for (Driver _d : drivers) {
            Driver driver = new Driver.Builder().withLicenseNum(_d.getLicenseNum()).build();
            driver.addLink(LinkBuilder.build(URLS.POLICY.expand(policyNum), "Policy", Link.REL_PARENT));
            driver.addLink(LinkBuilder.build(URLS.POLICY_DRIVER.expand(policyNum, _d.getLicenseNum()), _d.toString()));

            List<DrivingHistory> dh = persistenceHelper.loadDrivingHistory(policyNum, _d.getLicenseNum());
            toDrivingHistory(driver, policyNum, _d.getLicenseNum(), dh);

            if (policy != null) {
                policy = policy.deepCopyWithDrivers(Lists.newArrayList(driver));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.POLICY_DRIVER.expand(policyNum, _d.getLicenseNum()), _d);
        }
    }

    public void toDriver(List<Driver> drivers) {
        for (Driver driver : drivers) {
            if (driver.getLinks().size() != 1) {
                driver.addLink(LinkBuilder.build(URLS.DRIVER.expand(driver.getLicenseNum()), driver.toString()));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.DRIVER.expand(driver.getLicenseNum()), driver);
        }
    }

    public void toDriver(String policyNum, List<Driver> drivers) {
        for (Driver driver : drivers) {
            if (driver.getLinks().size() != 2) {
                driver.addLink(LinkBuilder.build(URLS.POLICY.expand(policyNum), "Policy", Link.REL_PARENT));
                driver.addLink(LinkBuilder.build(URLS.POLICY_DRIVER.expand(policyNum, driver.getLicenseNum()),
                        driver.toString()));
            }

            List<DrivingHistory> dh = persistenceHelper.loadDrivingHistory(policyNum, driver.getLicenseNum());
            toDrivingHistory(policyNum, driver.getLicenseNum(), dh);
            for (DrivingHistory history : dh) {
                driver = driver.deepCopyWithDrivingHistory(Lists.newArrayList(history));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.POLICY_DRIVER.expand(policyNum, driver.getLicenseNum()), driver);
        }
    }

    public void toDrivingHistory(String policyNum, String licenseNo, List<DrivingHistory> historyList) {
        for (DrivingHistory history : historyList) {
            if (history.getLinks().size() != 2) {
                history.addLink(LinkBuilder.build(URLS.DRIVER.expand(licenseNo), "Driver", Link.REL_PARENT));
                history.addLink(LinkBuilder.build(URLS.DRIVING_HISTORY.expand(policyNum, licenseNo), history.toString()));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.DRIVING_HISTORY.expand(policyNum, licenseNo), history);
        }
    }

    public void toDrivingHistory(Driver driver, String policyNum, String licenseNo, List<DrivingHistory> historyList) {
        for (DrivingHistory _h : historyList) {
            DrivingHistory history = new DrivingHistory.Builder().build();
            history.addLink(LinkBuilder.build(URLS.DRIVER.expand(licenseNo), driver.toString(), Link.REL_PARENT));
            history.addLink(LinkBuilder.build(URLS.DRIVING_HISTORY.expand(policyNum, licenseNo), _h.toString()));

            if (driver != null) {
                driver = driver.deepCopyWithDrivingHistory(Lists.newArrayList(history));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.DRIVING_HISTORY.expand(policyNum, licenseNo), _h);
        }
    }

    public void toVehicle(List<Vehicle> vehicles) {
        for (Vehicle vehicle : vehicles) {
            if (vehicle.getLinks().size() != 1) {
                vehicle.addLink(LinkBuilder.build(URLS.VEHICLE.expand(vehicle.getVin()), vehicle.toString()));

                // Update Etag
                eTagHelper.generate(vhost + URLS.VEHICLE.expand(vehicle.getVin()), vehicle);
            }
        }
    }

    public void toVehicle(Policy policy, String policyNum, List<Vehicle> vehicles) {
        for (Vehicle _v : vehicles) {
            if (_v.getLinks().size() != 2) {
                Vehicle vehicle = new Vehicle.Builder().withVin(_v.getVin()).build();
                vehicle.addLink(LinkBuilder.build(URLS.POLICY.expand(policyNum), "Policy", Link.REL_PARENT));
                vehicle.addLink(LinkBuilder.build(URLS.POLICY_VEHICLE.expand(policyNum, _v.getVin()), _v.toString()));

                if (policy != null) {
                    policy = policy.deepCopyWithVehicles(Lists.newArrayList(vehicle));
                }
            }
            // Update Etag
            eTagHelper.generate(vhost + URLS.POLICY_VEHICLE.expand(policyNum, _v.getVin()), _v);
        }
    }

    public void toVehicle(String policyNum, List<Vehicle> vehicles) {
        for (Vehicle vehicle : vehicles) {
            if (vehicle.getLinks().size() != 2) {
                vehicle.addLink(LinkBuilder.build(URLS.POLICY.expand(policyNum), "Policy", Link.REL_PARENT));
                vehicle.addLink(LinkBuilder.build(URLS.POLICY_VEHICLE.expand(policyNum, vehicle.getVin()),
                        vehicle.toString()));
            }

            // Update Etag
            eTagHelper.generate(vhost + URLS.POLICY_VEHICLE.expand(policyNum, vehicle.getVin()), vehicle);
        }
    }

}
TOP

Related Classes of github.priyatam.springrest.helper.ResponseBuilderHelper

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.