org.saiku.adhoc.rest.StandaloneCdaResource.java Source code

Java tutorial

Introduction

Here is the source code for org.saiku.adhoc.rest.StandaloneCdaResource.java

Source

/*
 * Copyright (C) 2011 Marius Giepz
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public License as published by the Free 
 * Software Foundation; either version 2 of the License, or (at your option) 
 * any later version.
 *
 * 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 GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along 
 * with this program; if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 *
 */
package org.saiku.adhoc.rest;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;

import org.pentaho.platform.api.engine.IParameterProvider;
import org.pentaho.platform.engine.core.solution.SimpleParameterProvider;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import pt.webdetails.cda.CdaContentGenerator;
import pt.webdetails.cda.CdaEngine;
import pt.webdetails.cda.discovery.DiscoveryOptions;
import pt.webdetails.cda.exporter.ExporterEngine;
import pt.webdetails.cda.settings.CdaSettings;
import pt.webdetails.cda.settings.SettingsManager;

@Component
@Path("/saiku-adhoc/content/cda")
@Scope("request")
public class StandaloneCdaResource {

    @Context
    private HttpServletResponse anotherServlerResponse;

    CdaContentGenerator ccg;

    public StandaloneCdaResource() {
        ccg = new CdaContentGenerator();

    }

    @GET
    @Produces({ "application/json" })
    @Path("/doQuery")
    public String doQuery(@QueryParam("solution") String solution, @QueryParam("path") String path,
            @QueryParam("file") String file, @QueryParam("dataAccessId") String dataAccessId,
            @QueryParam("outputType") String outputType) {

        final IParameterProvider pathParams = null;
        final OutputStream out = new ByteArrayOutputStream();

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("outputType", outputType);
        params.put("path", path + "/" + file);
        params.put("solution", "");
        params.put("dataAccessId", dataAccessId);
        IParameterProvider requestParams = new SimpleParameterProvider(params);
        try {
            ccg.doQuery(requestParams, out);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return out.toString();

    }

    @GET
    @Produces({ "application/xml" })
    @Path("/listParameters")
    public String listParameters(@QueryParam("outputType") String outputType,
            @QueryParam("solution") String solution, @QueryParam("path") String path,
            @QueryParam("file") String file, @QueryParam("dataAccessId") String dataAccessId) {

        final IParameterProvider pathParams = null;
        final OutputStream out = new ByteArrayOutputStream();

        Map<String, Object> params = new HashMap<String, Object>();

        params.put("path", path);
        params.put("solution", "");
        params.put("dataAccessId", dataAccessId);
        params.put("outputType", outputType);
        params.put("file", file);
        IParameterProvider requestParams = new SimpleParameterProvider(params);

        try {
            listParameters(requestParams, out);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return out.toString();

    }

    //Have to remove the pentaho specific call
    public void listParameters(final IParameterProvider pathParams, final OutputStream out) throws Exception {
        final CdaEngine engine = CdaEngine.getInstance();

        final String path = pathParams.getStringParameter("path", ".");
        final String file = pathParams.getStringParameter("file", "na");
        final CdaSettings cdaSettings = SettingsManager.getInstance().parseSettingsFile(path + "/" + file);

        // Handle the query itself and its output format...
        final DiscoveryOptions discoveryOptions = new DiscoveryOptions();
        discoveryOptions.setOutputType(pathParams.getStringParameter("outputType", "json"));
        discoveryOptions.setDataAccessId(pathParams.getStringParameter("dataAccessId", "<blank>"));

        String mimeType = ExporterEngine.getInstance().getExporter(discoveryOptions.getOutputType()).getMimeType();
        setResponseHeaders(mimeType, null);

        engine.listParameters(out, cdaSettings, discoveryOptions);
    }

    private void setResponseHeaders(final String mimeType, final String attachmentName) {
        // Make sure we have the correct mime type
        final HttpServletResponse response = anotherServlerResponse;
        if (response == null) {
            return;
        }

        response.setHeader("Content-Type", mimeType);

        if (attachmentName != null) {
            response.setHeader("content-disposition", "attachment; filename=" + attachmentName);
        }

        // We can't cache this request
        response.setHeader("Cache-Control", "max-age=0, no-store");
    }

}