package org.saiku.adhoc.providers.impl.standalone; 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.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.providers.impl.pentaho.PentahoMetadataUtil; import org.saiku.adhoc.service.repository.IRepositoryHelper; import org.saiku.adhoc.service.repository.MemoryBasedRepository; public class StandaloneMetadataProvider extends AbstractMetadataProvider { private static final long serialVersionUID = 8481450224870463494L; private Log logger = LogFactory.getLog(StandaloneMetadataProvider.class); public IMetadataDomainRepository repo; protected IRepositoryHelper repositoryHelper; MemoryBasedRepository mbr; public StandaloneMetadataProvider() { super(); setLoggingLevel(ILogger.ERROR); mbr = new MemoryBasedRepository(); 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 = mbr.getImmdr(); if (mdr instanceof ILogger) { ((ILogger) mdr).setLoggingLevel(getLoggingLevel()); } return mdr; } public Log getLogger() { return logger; } public ReportTemplate[] loadTemplates() { IPentahoSession userSession = PentahoSessionHolder.getSession(); return repositoryHelper.getTemplateList(userSession); } public IRepositoryHelper getRepositoryHelper() { return repositoryHelper; } public void setRepositoryHelper(IRepositoryHelper repositoryHelper) { this.repositoryHelper = repositoryHelper; } }