Search in sources :

Example 1 with Entry

use of mondrian.util.LockBox.Entry in project pentaho-platform by pentaho.

the class OlapServiceImpl method getConnection.

public OlapConnection getConnection(String catalogName, IPentahoSession session) throws IOlapServiceException {
    if (catalogName == null) {
        // This is normal. It happens on XMLA's DISCOVER_DATASOURCES
        try {
            return getServer().getConnection(DATASOURCE_NAME, null, null, new Properties());
        } catch (Exception e) {
            throw new IOlapServiceException(e);
        }
    }
    // Check Access
    if (!hasAccess(catalogName, EnumSet.of(RepositoryFilePermission.READ), session)) {
        // $NON-NLS-1$
        LOG.debug("user does not have access; throwing exception");
        throw new IOlapServiceException(Messages.getInstance().getErrorString(// $NON-NLS-1$
        "OlapServiceImpl.ERROR_0003_INSUFFICIENT_PERMISSION"), IOlapServiceException.Reason.ACCESS_DENIED);
    }
    // Check its existence.
    if (!getCatalogNames(session).contains(catalogName)) {
        throw new IOlapServiceException(Messages.getInstance().getErrorString("MondrianCatalogHelper.ERROR_0015_CATALOG_NOT_FOUND", catalogName));
    }
    // Check if it is a remote server
    if (getHelper().getOlap4jServers().contains(catalogName)) {
        return makeOlap4jConnection(catalogName);
    }
    final StringBuilder roleName = new StringBuilder();
    Entry roleMonikor = null;
    if (this.role != null) {
        // We must use a custom role implementation.
        // Register the instance with the mondrian server.
        roleMonikor = getServer().getLockBox().register(this.role);
        roleName.append(roleMonikor.getMoniker());
    } else {
        final IConnectionUserRoleMapper mapper = PentahoSystem.get(IConnectionUserRoleMapper.class, MDXConnection.MDX_CONNECTION_MAPPER_KEY, // Don't use the user session here yet.
        null);
        String[] effectiveRoles = new String[0];
        /*
       * If Catalog/Schema are null (this happens with high level metadata requests,
       * like DISCOVER_DATASOURCES) we can't use the role mapper, even if it
       * is present and configured.
       */
        if (session != null && mapper != null) {
            // Use the role mapper.
            try {
                effectiveRoles = mapper.mapConnectionRoles(session, catalogName);
                if (effectiveRoles == null) {
                    effectiveRoles = new String[0];
                }
            } catch (PentahoAccessControlException e) {
                throw new IOlapServiceException(e);
            }
        }
        // Now we tokenize that list.
        boolean addComma = false;
        for (String role : effectiveRoles) {
            if (addComma) {
                // $NON-NLS-1$
                roleName.append(",");
            }
            roleName.append(role);
            addComma = true;
        }
    }
    // Populate some properties, like locale.
    final Properties properties = new Properties();
    properties.put(RolapConnectionProperties.Locale.name(), getLocale().toString());
    // Return a connection
    try {
        return getServer().getConnection(DATASOURCE_NAME, catalogName, Util.isEmpty(roleName.toString()) ? null : roleName.toString(), properties);
    } catch (Exception e) {
        throw new IOlapServiceException(e);
    } finally {
        // Cleanup our lockbox entry.
        if (roleMonikor != null) {
            getServer().getLockBox().deregister(roleMonikor);
        }
    }
}
Also used : Entry(mondrian.util.LockBox.Entry) IConnectionUserRoleMapper(org.pentaho.platform.api.engine.IConnectionUserRoleMapper) IOlapServiceException(org.pentaho.platform.plugin.action.olap.IOlapServiceException) RolapConnectionProperties(mondrian.rolap.RolapConnectionProperties) Properties(java.util.Properties) PentahoAccessControlException(org.pentaho.platform.api.engine.PentahoAccessControlException) PentahoAccessControlException(org.pentaho.platform.api.engine.PentahoAccessControlException) FileSystemException(org.apache.commons.vfs2.FileSystemException) OlapException(org.olap4j.OlapException) SQLException(java.sql.SQLException) IOlapServiceException(org.pentaho.platform.plugin.action.olap.IOlapServiceException)

Aggregations

SQLException (java.sql.SQLException)1 Properties (java.util.Properties)1 RolapConnectionProperties (mondrian.rolap.RolapConnectionProperties)1 Entry (mondrian.util.LockBox.Entry)1 FileSystemException (org.apache.commons.vfs2.FileSystemException)1 OlapException (org.olap4j.OlapException)1 IConnectionUserRoleMapper (org.pentaho.platform.api.engine.IConnectionUserRoleMapper)1 PentahoAccessControlException (org.pentaho.platform.api.engine.PentahoAccessControlException)1 IOlapServiceException (org.pentaho.platform.plugin.action.olap.IOlapServiceException)1