/*
* 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");
}
}