Package org.netmelody.cieye.server.response

Source Code of org.netmelody.cieye.server.response.CiEyeResourceEngine

package org.netmelody.cieye.server.response;


import org.netmelody.cieye.server.CiEyeNewVersionChecker;
import org.netmelody.cieye.server.CiEyeServerInformationFetcher;
import org.netmelody.cieye.server.CiSpyIntermediary;
import org.netmelody.cieye.server.LandscapeFetcher;
import org.netmelody.cieye.server.PictureFetcher;
import org.netmelody.cieye.server.response.resource.CiEyeResource;
import org.netmelody.cieye.server.response.responder.CiEyeVersionResponder;
import org.netmelody.cieye.server.response.responder.DohHandler;
import org.netmelody.cieye.server.response.responder.FileResponder;
import org.netmelody.cieye.server.response.responder.LandscapeListResponder;
import org.netmelody.cieye.server.response.responder.LandscapeObservationResponder;
import org.netmelody.cieye.server.response.responder.NotFoundResponder;
import org.netmelody.cieye.server.response.responder.PictureResponder;
import org.netmelody.cieye.server.response.responder.RedirectResponder;
import org.netmelody.cieye.server.response.responder.SettingsLocationResponder;
import org.netmelody.cieye.server.response.responder.SponsorResponder;
import org.netmelody.cieye.server.response.responder.TargetNotationHandler;
import org.simpleframework.http.Address;
import org.simpleframework.http.resource.Resource;
import org.simpleframework.http.resource.ResourceEngine;

public final class CiEyeResourceEngine implements ResourceEngine {
   
    private final CiSpyIntermediary spyIntermediary;
    private final LandscapeFetcher landscapeFetcher;
    private final PictureFetcher pictureFetcher;
    private final CiEyeServerInformationFetcher configurationFetcher;
    private final CiEyeNewVersionChecker updateChecker;
    private final RequestOriginTracker tracker;
    private final Prison prison = new Prison();

    public CiEyeResourceEngine(LandscapeFetcher landscapeFetcher, PictureFetcher pictureFetcher,
                               CiEyeServerInformationFetcher configurationFetcher,
                               RequestOriginTracker tracker, CiSpyIntermediary spyIntermediary,
                               CiEyeNewVersionChecker updateChecker) {
       
        this.landscapeFetcher = landscapeFetcher;
        this.pictureFetcher = pictureFetcher;
        this.configurationFetcher = configurationFetcher;
        this.tracker = tracker;
        this.spyIntermediary = spyIntermediary;
        this.updateChecker = updateChecker;
    }

    @Override
    public Resource resolve(Address target) {
        return new CiEyeResource(route(target));
    }

    private CiEyeResponder route(Address target) {
        final String[] path = target.getPath().getSegments();
       
        if (path.length == 0) {
            return new FileResponder("/resources/welcome.html");
        }
       
        if (path.length == 1) {
            if ("mugshotconfig.html".equals(path[0])) {
                return new FileResponder("/resources/mugshotconfig.html");
            }
            if ("landscapelist.json".equals(path[0])) {
                return new LandscapeListResponder(landscapeFetcher);
            }
            if ("settingslocation.json".equals(path[0])) {
                return new SettingsLocationResponder(configurationFetcher);
            }
            if ("version.json".equals(path[0])) {
                return new CiEyeVersionResponder(configurationFetcher, updateChecker);
            }
            if ("sponsor.json".equals(path[0])) {
                return new SponsorResponder(tracker);
            }
           
            final String name = "/resources/" + path[0];
            if (null != getClass().getResource(name)) {
                return new FileResponder(name);
            }
        }
       
        if (path.length == 2) {
            if ("pictures".equals(path[0])) {
                return new PictureResponder(pictureFetcher, path[1]);
            }
           
            if ("landscapes".equals(path[0])) {
                if (!target.getPath().getPath().endsWith("/")) {
                    return new RedirectResponder(target.getPath().getPath() + "/");
                }
                return new FileResponder("/resources/cieye.html");
            }
        }
       
        if (path.length == 3) {
            if ("landscapes".equals(path[0]) && "landscapeobservation.json".equals(path[2])) {
                return new LandscapeObservationResponder(landscapeFetcher.landscapeNamed(path[1]), spyIntermediary, prison);
            }
           
            if ("landscapes".equals(path[0]) && "addNote".equals(path[2])) {
                return new TargetNotationHandler(landscapeFetcher, spyIntermediary, tracker);
            }
           
            if ("landscapes".equals(path[0]) && "doh".equals(path[2])) {
                return new DohHandler(landscapeFetcher.landscapeNamed(path[1]), prison, tracker);
            }
        }
       
        return new NotFoundResponder();
    }
}
TOP

Related Classes of org.netmelody.cieye.server.response.CiEyeResourceEngine

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.