// Copyright 2015 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

local workflow = import "workflow.jsonnet";

// Workflow that performs an intersection of two files using shell commands.
{
  intersection: workflow.Workflow {
    jobs: {
      local input_file1 = "/tmp/list1",
      local input_file2 = "/tmp/list2",
      local sorted_file1 = "/tmp/list1_sorted",
      local sorted_file2 = "/tmp/list2_sorted",
      local intersection = "/tmp/intersection",

      SortJob:: workflow.ShJob {
        input_file:: "",
        output_file:: "",
        command: "sort %s > %s" % [self.input_file, self.output_file],
        inputs: [self.input_file],
        outputs: [self.output_file],
      },

      sort_file1: self.SortJob {
        input_file:: input_file1,
        output_file:: sorted_file1,
      },

      sort_file2: self.SortJob {
        input_file:: input_file2,
        output_file:: sorted_file2,
      },

      intersect: workflow.ShJob {
        deps: [
          ":sort_file1",
          ":sort_file2",
        ],
        command: "comm -12 %s %s > %s" %
            [sorted_file1, sorted_file2, intersection],
        inputs: [
          sorted_file1,
          sorted_file2,
        ],
        outputs: [intersection],
      },
    }
  }
}
