/* * 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.service.cda; import java.io.IOException; import java.util.List; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.metadata.model.LogicalColumn; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.metadata.model.concept.types.DataType; import org.pentaho.reporting.libraries.resourceloader.ResourceException; import org.saiku.adhoc.exceptions.CdaException; import org.saiku.adhoc.exceptions.QueryException; import org.saiku.adhoc.exceptions.SaikuAdhocException; import org.saiku.adhoc.model.WorkspaceSessionHolder; import org.saiku.adhoc.model.dto.FilterResult; import org.saiku.adhoc.model.master.SaikuMasterModel; import org.saiku.adhoc.model.master.SaikuParameter; import org.saiku.adhoc.providers.IMetadataProvider; import org.saiku.adhoc.service.repository.IRepositoryHelper; public class CdaQueryService { protected Log log = LogFactory.getLog(CdaQueryService.class); protected ICdaAccessor cdaAccessor; protected IRepositoryHelper repository; protected WorkspaceSessionHolder sessionHolder; private IMetadataProvider metadataProvider; public void setMetadataProvider(IMetadataProvider metadataProvider) { this.metadataProvider = metadataProvider; } public void setSessionHolder(WorkspaceSessionHolder sessionHolder) { this.sessionHolder = sessionHolder; } public void setRepositoryHelper(IRepositoryHelper repository) { this.repository = repository; } public void setCdaAccessor(ICdaAccessor cdaAccessor) { this.cdaAccessor = cdaAccessor; } /** * Execute the query * * @param queryName * @param sessionId * @throws SaikuAdhocException * @throws QueryException * @throws CdaException * @throws QuerybuilderServiceException */ public String runQuery(String queryName, String sessionId) throws SaikuAdhocException, CdaException { sessionHolder.storeCda(sessionId); SaikuMasterModel model = sessionHolder.getModel(sessionId); return cdaAccessor.doQuery(model, queryName, null); } public FilterResult getFilterResult(String sessionId, String categoryId, String columnId) throws CdaException, QueryException, SaikuAdhocException, ResourceException, IOException{ SaikuMasterModel model = sessionHolder.getModel(sessionId); //model.deriveModels(); final LogicalModel logicalModel = metadataProvider.getLogicalModel(model.getDomainId(),model.getLogicalModelId()); LogicalColumn column = logicalModel.findLogicalColumn(columnId); // String filterKey = categoryId + "." + columnId; List<String> selectedValues = null; final List<SaikuParameter> parameters = model.getParameters(); for (SaikuParameter saikuParameter : parameters) { if(saikuParameter.getCategory().equals(categoryId)&& saikuParameter.getId().equals(columnId)){ selectedValues = saikuParameter.getParameterValues(); } } if(column.getDataType().equals(DataType.DATE)){ return new FilterResult(null,selectedValues, column.getDataType().getName()); }else{ final String filterResultJson = this.runQuery(filterKey, sessionId); return new FilterResult(filterResultJson, selectedValues, column.getDataType().getName()); } } public Properties getProperties(String queryName) { //nothing there yet Properties props = new Properties(); return props; } public Properties setProperties(String queryName, Properties props) { //nothing there yet return props; } }