/* * Copyright (C) 2012 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.providers.impl.pentaho; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.metadata.model.Domain; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.metadata.repository.IMetadataDomainRepository; import org.pentaho.platform.api.engine.ILogger; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.engine.core.system.PentahoSessionHolder; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.saiku.adhoc.messages.Messages; import org.saiku.adhoc.model.master.ReportTemplate; import org.saiku.adhoc.model.metadata.impl.MetadataModel; import org.saiku.adhoc.providers.AbstractMetadataProvider; import org.saiku.adhoc.service.repository.IRepositoryHelper; /** * This service retrieves information on metadata models to be consumed by the * client * * <a href="mailto:mgiepz@googlemail.com">Marius Giepz</a> * */ public class PentahoMetadataProvider extends AbstractMetadataProvider { private static final long serialVersionUID = 8481450224870463494L; private Log logger = LogFactory.getLog(PentahoMetadataProvider.class); protected final IMetadataDomainRepository repo; protected IRepositoryHelper repositoryHelper; public PentahoMetadataProvider() { setLoggingLevel(ILogger.ERROR); //repo = (SecurityAwareMetadataDomainRepository) getMetadataRepository(); repo = getMetadataRepository(); } /* (non-Javadoc) * @see refac.saiku.adhoc.service.repository.IMetadataService#getLogicalModel(java.lang.String, java.lang.String) */ @Override public LogicalModel getLogicalModel(String domainId, String modelId) { return repo.getDomain(domainId).findLogicalModel(modelId); } /* (non-Javadoc) * @see refac.saiku.adhoc.service.repository.IMetadataService#getDomain(java.lang.String) */ @Override public Domain getDomain(String domainId) { return repo.getDomain(domainId); } /* (non-Javadoc) * @see refac.saiku.adhoc.service.repository.IMetadataService#loadModel(java.lang.String, java.lang.String) */ @Override public MetadataModel loadModel(String domainId, String modelId) { if (domainId == null) { error(Messages .getErrorString("MetadataService.ERROR_0003_NULL_DOMAIN")); //$NON-NLS-1$ return null; } if (modelId == null) { error(Messages .getErrorString("MetadataService.ERROR_0004_NULL_Model")); //$NON-NLS-1$ return null; } Domain domain = repo.getDomain(domainId); if (domain == null) { error(Messages.getErrorString( "MetadataService.ERROR_0005_DOMAIN_NOT_FOUND", domainId)); //$NON-NLS-1$ return null; } LogicalModel model = domain.findLogicalModel(modelId); if (model == null) { // the model cannot be found or cannot be loaded error(Messages.getErrorString( "MetadataService.ERROR_0006_MODEL_NOT_FOUND", modelId)); //$NON-NLS-1$ return null; } //TODO: Move to dto util PentahoMetadataUtil util = new PentahoMetadataUtil(); util.setDomain(domain); MetadataModel thinModel = util.createThinModel(model, domainId); return thinModel; } /** * Returns a instance of the IMetadataDomainRepository for the current * session * * @return */ public IMetadataDomainRepository getMetadataRepository() { IMetadataDomainRepository mdr = PentahoSystem .get(IMetadataDomainRepository.class, PentahoSessionHolder.getSession()); if (mdr instanceof ILogger) { ((ILogger) mdr).setLoggingLevel(getLoggingLevel()); } return mdr; } @Override public Log getLogger() { return logger; } @Override public ReportTemplate[] loadTemplates() { IPentahoSession userSession = PentahoSessionHolder.getSession(); return repositoryHelper.getTemplateList(userSession); } public IRepositoryHelper getRepositoryHelper() { return repositoryHelper; } public void setRepositoryHelper(IRepositoryHelper repositoryHelper) { this.repositoryHelper = repositoryHelper; } }