public Object getQueryHash(
     final DataFactoryMetaData dataFactoryMetaData,
     final DataFactory dataFactory,
     final String queryName,
     final DataRow parameter) {
   final KettleDataFactory kettleDataFactory = (KettleDataFactory) dataFactory;
   return kettleDataFactory.getQueryHash(queryName);
 }
  protected DataFactory createDataFactory(final String query) throws ReportDataFactoryException {
    final KettleTransFromFileProducer producer =
        new KettleTransFromFileProducer(query, STEP, new String[0], new ParameterMapping[0]);

    final KettleDataFactory kettleDataFactory = new KettleDataFactory();
    kettleDataFactory.initialize(new DesignTimeDataFactoryContext());
    kettleDataFactory.setQuery("default", producer);
    return kettleDataFactory;
  }
  public String[] getReferencedFields(
      final DataFactoryMetaData metaData,
      final DataFactory element,
      final String query,
      final DataRow parameter) {
    final KettleDataFactory kettleDataFactory = (KettleDataFactory) element;
    final KettleTransformationProducer transformationProducer = kettleDataFactory.getQuery(query);
    if (transformationProducer == null) {
      return null;
    }

    return transformationProducer.getReferencedFields();
  }
  public void testMetaData() throws ReportDataFactoryException {
    final KettleDataFactory kettleDataFactory = new KettleDataFactory();
    kettleDataFactory.initialize(new DesignTimeDataFactoryContext());
    kettleDataFactory.setQuery(
        "default",
        new KettleTransFromFileProducer(QUERY, STEP, new String[0], new ParameterMapping[0]));

    final DataFactoryMetaData metaData = kettleDataFactory.getMetaData();
    final Object queryHash =
        metaData.getQueryHash(kettleDataFactory, "default", new StaticDataRow());
    assertNotNull(queryHash);

    final KettleDataFactory kettleDataFactory2 = new KettleDataFactory();
    kettleDataFactory2.initialize(new DesignTimeDataFactoryContext());
    kettleDataFactory2.setQuery(
        "default",
        new KettleTransFromFileProducer(QUERY + "2", STEP, new String[0], new ParameterMapping[0]));
    kettleDataFactory2.setQuery(
        "default2",
        new KettleTransFromFileProducer(QUERY, STEP, new String[0], new ParameterMapping[0]));

    assertNotEquals(
        "Physical Query is not the same",
        queryHash,
        metaData.getQueryHash(kettleDataFactory2, "default", new StaticDataRow()));
    assertEquals(
        "Physical Query is the same",
        queryHash,
        metaData.getQueryHash(kettleDataFactory2, "default2", new StaticDataRow()));
  }
  public void testParameter() throws ReportDataFactoryException {
    final KettleDataFactory kettleDataFactory = new KettleDataFactory();
    kettleDataFactory.initialize(new DesignTimeDataFactoryContext());
    final ParameterMapping[] parameterMappings = {
      new ParameterMapping("name", "kettle-name"),
      new ParameterMapping("name2", "k3"),
      new ParameterMapping("name", "k2")
    };
    final String[] argumentNames = {"arg0"};
    kettleDataFactory.setQuery(
        "default", new KettleTransFromFileProducer(QUERY, STEP, argumentNames, parameterMappings));

    final DataFactoryMetaData metaData = kettleDataFactory.getMetaData();
    final String[] fields =
        metaData.getReferencedFields(kettleDataFactory, "default", new StaticDataRow());
    assertNotNull(fields);
    assertEquals(4, fields.length);
    assertEquals("arg0", fields[0]);
    assertEquals("name", fields[1]);
    assertEquals("name2", fields[2]);
    assertEquals(DataFactory.QUERY_LIMIT, fields[3]);
  }