Package org.pentaho.reporting.engine.classic.core

Examples of org.pentaho.reporting.engine.classic.core.ReportDataFactoryException


          connection.setRoleName(role);
        }
      }
      catch (SQLException e)
      {
        throw new ReportDataFactoryException("Failed to obtain a connection", e);
      }
    }

    final MDXCompiler compiler = new MDXCompiler(parameter, locale);
    final String translatedQuery = compiler.translateAndLookup(query, parameter);
View Full Code Here


        final Type parameterType = olapParameterMetaData.getParameterOlapType(i);
        if (parameterType instanceof StringType)
        {
          if (!(parameterValue instanceof String))
          {
            throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
          }
        }
        if (parameterType instanceof NumericType)
        {
          if (!(parameterValue instanceof Number))
          {
            throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
          }
        }

        if (parameterType instanceof MemberType)
        {
          if (parameterValue instanceof String)
          {
            final MemberType type = (MemberType) parameterType;
            final Hierarchy hierarchy = type.getHierarchy();
            final Cube cube = statement.getCube();
            parameterValue = findMember(hierarchy, cube, String.valueOf(parameterValue));
          }
          else if (!(parameterValue instanceof Member))
          {
            throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
          }
        }
        if (parameterType instanceof SetType)
        {
          if (parameterValue instanceof String)
          {
            final SetType type = (SetType) parameterType;
            final Hierarchy hierarchy = type.getHierarchy();
            final Cube cube = statement.getCube();

            final String rawString = (String) parameterValue;
            final String[] memberStr = rawString.replaceFirst("^ *\\{", "").replaceFirst("} *$", "").split(",");
            final List<Member> list = new ArrayList<Member>(memberStr.length);

            for (int j = 0; j < memberStr.length; j++)
            {
              final String str = memberStr[j];
              final Member member = findMember(hierarchy, cube, String.valueOf(str));
              list.add(member);
            }

            parameterValue = list;
          }
          else if (!(parameterValue instanceof Member))
          {
            throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
          }
        }

      }
      statement.setObject(i, parameterValue);
View Full Code Here

      params.add(DataFactory.QUERY_LIMIT);
      return params.toArray(new String[params.size()]);
    }
    catch (Throwable e)
    {
      throw new ReportDataFactoryException("Failed to obtain a connection", e);
    }
  }
View Full Code Here

      return memberById;
    }

    if (missingMembersIsFatal)
    {
      throw new ReportDataFactoryException("No member matches parameter value '" + parameter + "'.");
    }
    return null;
  }
View Full Code Here

          return null;
        }
      }
      catch (PatternSyntaxException pe)
      {
        throw new ReportDataFactoryException("Unable to match reg-exp role filter:", pe);
      }
    }

    boolean hasAccept = false;
    final Iterator staticAcceptKeys = configuration.findPropertyKeys
        ("org.pentaho.reporting.engine.classic.extensions.datasources.olap4j.role-filter.static.accept");
    while (staticAcceptKeys.hasNext())
    {
      hasAccept = true;
      final String key = (String) staticAcceptKeys.next();
      final String value = configuration.getConfigProperty(key);
      if (ObjectUtilities.equal(value, role))
      {
        return role;
      }
    }

    final Iterator regExpAcceptKeys = configuration.findPropertyKeys
        ("org.pentaho.reporting.engine.classic.extensions.datasources.olap4j.role-filter.reg-exp.accept");
    while (regExpAcceptKeys.hasNext())
    {
      hasAccept = true;
      final String key = (String) regExpAcceptKeys.next();
      final String value = configuration.getConfigProperty(key);
      try
      {
        if (role.matches(value))
        {
          return role;
        }
      }
      catch (PatternSyntaxException pe)
      {
        throw new ReportDataFactoryException("Unable to match reg-exp role filter:", pe);
      }
    }
    if (hasAccept == false)
    {
      return role;
View Full Code Here

        connection = mondrianConnectionProvider.createConnection(computeProperties(parameters), dataSourceProvider.getDataSource());
      }
    }
    catch (SQLException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }
    catch (MondrianException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }

    try
    {
      if (connection == null)
      {
        throw new ReportDataFactoryException("Factory is closed.");
      }

      final Object queryTimeout = parameters.get(DataFactory.QUERY_TIMEOUT);
      final int queryTimeoutValue;
      if (queryTimeout instanceof Number)
      {
        final Number i = (Number) queryTimeout;
        queryTimeoutValue = i.intValue();
      }
      else
      {
        // means unlimited ...
        queryTimeoutValue = 0;
      }

      final MDXCompiler compiler = new MDXCompiler(parameters, locale);
      final String mdxQuery = compiler.translateAndLookup(rawMdxQuery, parameters);
      // Alternatively, JNDI is possible. Maybe even more ..
      final Query query = connection.parseQuery(mdxQuery);
      if (queryTimeoutValue > 0)
      {
        query.setQueryTimeoutMillis(queryTimeoutValue * 1000);
      }

      final Parameter[] parameterDefs = query.getParameters();
      for (int i = 0; i < parameterDefs.length; i++)
      {
        final Parameter def = parameterDefs[i];
        Object parameterValue = parameters.get(def.getName());
        final Object processedParamValue;
        final Type parameterType = def.getType();

        // Mondrian doesn't handle null MemberType/SetType parameters well (http://jira.pentaho.com/browse/MONDRIAN-745)
        // If parameterValue is null, give it the default value
        try
        {
          if (parameterValue == null && (parameterType instanceof MemberType || parameterType instanceof SetType))
          {
            parameterValue = def.getDefaultExp().toString();
          }
        }
        catch (Exception e)
        {
          // Ignore - this is a safety procedure anyway
        }

        if (parameterValue != null)
        {

          if (parameterType instanceof StringType)
          {
            if (!(parameterValue instanceof String))
            {
              throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
            }
            processedParamValue = parameterValue;
          }
          else if (parameterType instanceof NumericType)
          {
            if (!(parameterValue instanceof Number))
            {
              throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
            }
            processedParamValue = parameterValue;
          }
          else if (parameterType instanceof MemberType)
          {
            final MemberType memberType = (MemberType) parameterType;
            final Hierarchy hierarchy = memberType.getHierarchy();
            if (parameterValue instanceof String)
            {
              final Member member = findMember(query, hierarchy, query.getCube(), String.valueOf(parameterValue));
              if (member != null)
              {
                processedParamValue = new MemberExpr(member);
              }
              else
              {
                processedParamValue = null;
              }
            }
            else
            {
              if (!(parameterValue instanceof OlapElement))
              {
                throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
              }
              else
              {
                processedParamValue = parameterValue;
              }
            }
          }
          else if (parameterType instanceof SetType)
          {
            final SetType setType = (SetType) parameterType;
            final Hierarchy hierarchy = setType.getHierarchy();
            if (parameterValue instanceof String)
            {
              final String rawString = (String) parameterValue;
              final String[] memberStr = rawString.replaceFirst("^ *\\{", "").replaceFirst("} *$", "").split(",");
              final List<Member> list = new ArrayList<Member>(memberStr.length);

              for (int j = 0; j < memberStr.length; j++)
              {
                final String str = memberStr[j];
                final Member member = findMember(query, hierarchy, query.getCube(), String.valueOf(str));
                if (member != null)
                {
                  list.add(member);
                }
              }

              processedParamValue = list;
            }
            else
            {
              if (!(parameterValue instanceof OlapElement))
              {
                throw new ReportDataFactoryException(parameterValue + " is incorrect for type " + parameterType);
              }
              else
              {
                processedParamValue = parameterValue;
              }
            }
          }
          else
          {
            processedParamValue = parameterValue;
          }
        }
        else
        {
          processedParamValue = null;
        }

        // Mondrian allows null values to be passed in, so we'll go ahead and
        // convert null values to their defaults for now until MONDRIAN-745 is
        // resolved.

        final Exp exp = def.getDefaultExp();
        if (processedParamValue == null && exp != null && exp instanceof Literal)
        {
          def.setValue(((Literal) exp).getValue());
        }
        else
        {
          def.setValue(processedParamValue);
        }
      }

      final Result resultSet = connection.execute(query);
      if (resultSet == null)
      {
        throw new ReportDataFactoryException("query returned no resultset");
      }
      return resultSet;
    }
    catch (MondrianException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }
  }
View Full Code Here

      return memberById;
    }

    if (missingMembersIsFatal)
    {
      throw new ReportDataFactoryException("No member matches parameter value '" + parameter + "'.");
    }
    return null;
  }
View Full Code Here

  private Properties computeProperties(final DataRow parameters) throws ReportDataFactoryException
  {
    if (cubeFileProvider == null)
    {
      throw new ReportDataFactoryException("No CubeFileProvider");
    }

    final Properties properties = new Properties();
    final String catalog = cubeFileProvider.getCubeFile(resourceManager, contextKey);
    if (catalog == null)
    {
      throw new ReportDataFactoryException("No valid catalog given.");
    }
    properties.setProperty("Catalog", catalog); // NON-NLS
    final String role = computeRole(parameters);
    if (role != null)
    {
View Full Code Here

          return null;
        }
      }
      catch (PatternSyntaxException pe)
      {
        throw new ReportDataFactoryException("Unable to match reg-exp role filter:", pe);
      }
    }

    boolean hasAccept = false;
    final Iterator staticAcceptKeys = configuration.findPropertyKeys(ACCEPT_ROLES_CONFIG_KEY);
    while (staticAcceptKeys.hasNext())
    {
      hasAccept = true;
      final String key = (String) staticAcceptKeys.next();
      final String value = configuration.getConfigProperty(key);
      if (ObjectUtilities.equal(value, role))
      {
        return role;
      }
    }

    final Iterator regExpAcceptKeys = configuration.findPropertyKeys(ACCEPT_REGEXP_CONFIG_KEY);
    while (regExpAcceptKeys.hasNext())
    {
      hasAccept = true;
      final String key = (String) regExpAcceptKeys.next();
      final String value = configuration.getConfigProperty(key);
      try
      {
        if (role.matches(value))
        {
          return role;
        }
      }
      catch (PatternSyntaxException pe)
      {
        throw new ReportDataFactoryException("Unable to match reg-exp role filter:", pe);
      }
    }
    if (hasAccept == false)
    {
      return role;
View Full Code Here

        connection = mondrianConnectionProvider.createConnection(computeProperties(parameters), dataSourceProvider.getDataSource());
      }
    }
    catch (SQLException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }
    catch (MondrianException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }

    try
    {
      if (connection == null)
      {
        throw new ReportDataFactoryException("Factory is closed.");
      }
      final LinkedHashSet<String> parameter = new LinkedHashSet<String>();

      final MDXCompiler compiler = new MDXCompiler(parameters, locale);
      final String mdxQuery = compiler.translateAndLookup(rawMdxQuery, parameters);
      parameter.addAll(compiler.getCollectedParameter());
      // Alternatively, JNDI is possible. Maybe even more ..
      final Query query = connection.parseQuery(mdxQuery);
      final Parameter[] queryParameters = query.getParameters();
      for (int i = 0; i < queryParameters.length; i++)
      {
        final Parameter queryParameter = queryParameters[i];
        parameter.add(queryParameter.getName());
      }
      if (jdbcUserField != null)
      {
        parameter.add(jdbcUserField);
      }
      if (roleField != null)
      {
        parameter.add(roleField);
      }
      parameter.add(DataFactory.QUERY_LIMIT);
      return parameter.toArray(new String[parameter.size()]);
    }
    catch (MondrianException e)
    {
      throw new ReportDataFactoryException("Failed to create datasource:" + e.getLocalizedMessage(), e);
    }
  }
View Full Code Here

TOP

Related Classes of org.pentaho.reporting.engine.classic.core.ReportDataFactoryException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.