com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.RestServer.java Source code

Java tutorial

Introduction

Here is the source code for com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.RestServer.java

Source

// Copyright 2013 Google Inc. All Rights Reserved.
//
// 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.google.api.ads.adwords.jaxws.extensions.kratu.restserver;

import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.kratu.GenerateKratusRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.kratu.KratuRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.GenerateReportsRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportAccountRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportAdExtensionRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportAdGroupRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportAdRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportCampaignNegativeKeywordRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportCampaignRest;
import com.google.api.ads.adwords.jaxws.extensions.kratu.restserver.reports.ReportKeywordRest;

import org.restlet.Application;
import org.restlet.Component;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.data.Protocol;
import org.restlet.resource.Directory;
import org.restlet.routing.Redirector;
import org.restlet.routing.Router;
import org.springframework.context.ApplicationContext;

import java.io.File;

/**
 * RestServer
 * 
 * @author jtoledo@google.com (Julian Toledo)
 */
public class RestServer extends Application {

    public static void createRestServer(ApplicationContext appCtx, String propertiesPath, int port)
            throws Exception {

        // Create a component
        Component component = new Component();
        component.getServers().add(Protocol.HTTP, port);
        component.getClients().add(Protocol.FILE);

        Context context = component.getContext().createChildContext();
        RestServer application = new RestServer(context);

        application.getContext().getParameters().add("useForwardedForHeader", "true");

        application.getContext().getAttributes().put("appCtx", appCtx);
        application.getContext().getAttributes().put("file", propertiesPath);

        // Attach the application to the component and start it
        component.getDefaultHost().attach(application);
        component.start();
    }

    private RestServer(Context context) {
        super(context);
    }

    public synchronized Restlet createInboundRoot() {
        Router router = new Router(getContext());

        // *** MCCs ***
        router.attach("/mcc", MccRest.class); //LIST All

        // *** Accounts ***
        router.attach("/mcc/{topAccountId}/accounts", AccountRest.class); //LIST All

        // *** Kratu ***
        // ?includeZeroImpressions=false by default
        router.attach("/mcc/{topAccountId}/kratu", KratuRest.class); // List All
        router.attach("/mcc/{topAccountId}/kratu/{accountId}", KratuRest.class); // LIST Account level

        // Genereate Kratus MCC level
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/generatekratus", GenerateKratusRest.class);

        // *** Reporting ***
        // Generate
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/generatereports", GenerateReportsRest.class);

        // Accounts
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportaccount", ReportAccountRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportaccount/{accountId}", ReportAccountRest.class); //LIST Account level

        // Campaigns
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportcampaign", ReportCampaignRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportcampaign/{accountId}", ReportCampaignRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportcampaign/campaign/{campaignId}", ReportCampaignRest.class); //LIST Campaign level

        // AdGroups
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportadgroup", ReportAdGroupRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportadgroup/{accountId}", ReportAdGroupRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportadgroup/campaign/{campaignId}", ReportAdGroupRest.class); //LIST Campaign level
        router.attach("/mcc/{topAccountId}/reportadgroup/adgroup/{adGroupId}", ReportAdGroupRest.class); //LIST AdGroup level

        // Ads
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportad", ReportAdRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportad/{accountId}", ReportAdRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportad/campaign/{campaignId}", ReportAdRest.class); //LIST Campaign level
        router.attach("/mcc/{topAccountId}/reportad/adgroup/{adGroupId}", ReportAdRest.class); //LIST AdGroup level
        router.attach("/mcc/{topAccountId}/reportad/ad/{adId}", ReportAdRest.class); //LIST Ad level

        // Keywords
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportkeyword", ReportKeywordRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportkeyword/{accountId}", ReportKeywordRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportkeyword/campaign/{campaignId}", ReportKeywordRest.class); //LIST Campaign level
        router.attach("/mcc/{topAccountId}/reportkeyword/adgroup/{adGroupId}", ReportKeywordRest.class); //LIST AdGroup level
        router.attach("/mcc/{topAccountId}/reportkeyword/keyword/{criterionId}", ReportKeywordRest.class); //LIST Keyword level

        // ReportCampaignNegativeKeyword
        // This one does not support dateStart and dateEnd
        router.attach("/mcc/{topAccountId}/reportcampaignnegativekeyword", ReportCampaignNegativeKeywordRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportcampaignnegativekeyword/{accountId}",
                ReportCampaignNegativeKeywordRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportcampaignnegativekeyword/campaign/{campaignId}",
                ReportCampaignNegativeKeywordRest.class); //LIST Campaign level
        router.attach("/mcc/{topAccountId}/reportcampaignnegativekeyword/keyword/{criterionId}",
                ReportCampaignNegativeKeywordRest.class); //LIST Keyword level

        // ReportAdExtension
        // ?dateStart=yyyyMMdd&dateEnd=yyyyMMdd
        router.attach("/mcc/{topAccountId}/reportadextension", ReportAdExtensionRest.class); //LIST All
        router.attach("/mcc/{topAccountId}/reportadextension/{accountId}", ReportAdExtensionRest.class); //LIST Account level
        router.attach("/mcc/{topAccountId}/reportadextension/campaign/{campaignId}", ReportAdExtensionRest.class); //LIST Campaign level
        router.attach("/mcc/{topAccountId}/reportadextension/adextension/{adExtensionId}",
                ReportAdExtensionRest.class); //LIST Keyword level

        // *** Static files *** 
        // USING FILE
        String target = "index.html";
        Redirector redirector = new Redirector(getContext(), target, Redirector.MODE_CLIENT_FOUND);
        router.attach("/", redirector);
        File currentPath = new File(RestServer.class.getProtectionDomain().getCodeSource().getLocation().getPath());
        String htmlPath = "file:///" + currentPath.getParent() + "/html/";
        router.attach("/", redirector);
        router.attach("", new Directory(getContext(), htmlPath));

        return router;
    }
}