class Embulk::OutputPlugin::JavaAdapter

def cleanup(java_task_source, java_schema, task_count, java_task_reports)

def cleanup(java_task_source, java_schema, task_count, java_task_reports)
  task_source = DataSource.from_java(java_task_source)
  schema = Schema.from_java(java_schema)
  task_reports = java_task_reports.map {|c| DataSource.from_java(c) }
  @ruby_class.cleanup(task_source, schema, task_count, task_reports)
  return nil
end

def initialize(ruby_class)

def initialize(ruby_class)
  @ruby_class = ruby_class
end

def open(java_task_source, java_schema, processor_index)

def open(java_task_source, java_schema, processor_index)
  task_source = DataSource.from_java(java_task_source)
  schema = Schema.from_java(java_schema)
  ruby_object = @ruby_class.new(task_source, schema, processor_index)
  return OutputAdapter.new(ruby_object, schema)
end

def resume(java_task_source, java_schema, task_count, java_control)

def resume(java_task_source, java_schema, task_count, java_control)
  task_source = DataSource.from_java(java_task_source)
  schema = Schema.from_java(java_schema)
  config_diff_hash = @ruby_class.resume(task_source, schema, task_count) do |task_source_hash,columns,task_count|
    java_task_source = DataSource.from_ruby_hash(task_source_hash).to_java
    java_task_reports = java_control.run(java_task_source)
    java_task_reports.map {|java_task_report|
      DataSource.from_java(java_task_report)
    }
  end
  # TODO check return type of #resume
  return DataSource.from_ruby_hash(config_diff_hash).to_java
end

def transaction(java_config, java_schema, task_count, java_control)

def transaction(java_config, java_schema, task_count, java_control)
  config = DataSource.from_java(java_config)
  schema = Schema.from_java(java_schema)
  config_diff_hash = @ruby_class.transaction(config, schema, task_count) do |task_source_hash|
    java_task_source = DataSource.from_ruby_hash(task_source_hash).to_java
    java_task_reports = java_control.run(java_task_source)
    java_task_reports.map {|java_task_report|
      DataSource.from_java(java_task_report)
    }
  end
  # TODO check return type of #transaction
  return DataSource.from_ruby_hash(config_diff_hash).to_java
end