protected void propagateCatalogTableProperties(
      Output output, CatalogStorage tableStorage, Properties props) {
    String prefix = "falcon_" + output.getName();

    propagateCommonCatalogTableProperties(tableStorage, props, prefix);

    // pig and java actions require partition expression as "key1=val1, key2=val2"
    props.put(prefix + "_partitions_pig", "${coord:dataOutPartitions('" + output.getName() + "')}");
    props.put(
        prefix + "_partitions_java", "${coord:dataOutPartitions('" + output.getName() + "')}");

    // hive requires partition expression as "key1='val1', key2='val2'" (with quotes around values)
    // there is no direct EL expression in oozie
    List<String> partitions = new ArrayList<String>();
    for (String key : tableStorage.getDatedPartitionKeys()) {
      StringBuilder expr = new StringBuilder();
      expr.append("${coord:dataOutPartitionValue('")
          .append(output.getName())
          .append("', '")
          .append(key)
          .append("')}");
      props.put(prefix + "_dated_partition_value_" + key, expr.toString());
      partitions.add(key + "='" + expr + "'");
    }
    props.put(prefix + "_partitions_hive", StringUtils.join(partitions, ","));
  }
  @Test(dependsOnMethods = "testOnProcessEntityChange")
  public void testAreSame() throws Exception {

    Inputs inputs1 = new Inputs();
    Inputs inputs2 = new Inputs();
    Outputs outputs1 = new Outputs();
    Outputs outputs2 = new Outputs();
    // return true when both are null
    Assert.assertTrue(EntityRelationshipGraphBuilder.areSame(inputs1, inputs2));
    Assert.assertTrue(EntityRelationshipGraphBuilder.areSame(outputs1, outputs2));

    Input i1 = new Input();
    i1.setName("input1");
    Input i2 = new Input();
    i2.setName("input2");
    Output o1 = new Output();
    o1.setName("output1");
    Output o2 = new Output();
    o2.setName("output2");

    inputs1.getInputs().add(i1);
    Assert.assertFalse(EntityRelationshipGraphBuilder.areSame(inputs1, inputs2));
    outputs1.getOutputs().add(o1);
    Assert.assertFalse(EntityRelationshipGraphBuilder.areSame(outputs1, outputs2));

    inputs2.getInputs().add(i1);
    Assert.assertTrue(EntityRelationshipGraphBuilder.areSame(inputs1, inputs2));
    outputs2.getOutputs().add(o1);
    Assert.assertTrue(EntityRelationshipGraphBuilder.areSame(outputs1, outputs2));
  }
  public void removeOutputFeeds(Outputs outputs, Vertex processVertex) {
    if (outputs == null) {
      return;
    }

    for (Output output : outputs.getOutputs()) {
      removeProcessFeedEdge(processVertex, output.getFeed(), RelationshipLabel.PROCESS_FEED_EDGE);
    }
  }