#!/usr/bin/env ruby

$:.unshift '../../lib'

require 'RDF4R/Driver/XMLParser'
require 'RDF4R/Consumer/Standard'
require 'basicrdf'
module RDF4R
  def parse(filename, base_uri)
    consumer = Consumer::Standard.new
    File.open(filename) do |file|
      puts "Opening file: '#{filename}' \n"
      return RDF4R::Driver::XMLParser.process(file, base_uri, consumer)
    end
  end
  module_function :parse
end

if __FILE__ == $0
  models = nil
  filename = ARGV.shift or (puts "need filename"; exit 1)
    base = (ARGV.shift or %Q{file://#{filename}})
    uri = ARGV.shift
    models = RDF4R.parse(filename, base)
    if models.size == 0
      puts "no models found"
      exit 0
    elsif models.size > 1
      puts "i got multiple models, you probably didn't want that"
      exit 0
    else
      model = models.shift
    if uri
      resource = model.resources_by_uri[uri]
      #resource.to_rdf_xml $stdout
    else
      #model.to_rdf_xml $stdout
      data=Graph.new([])
      model.statements.each do |s|
        s.each do |bit|
          # this is an ugly hack, I need better way to integrate these APIs!
          # puts "GOT Raw: #{bit} \n"
          if bit.class.to_s =~ /RDF4R/
            nt = bit.to_ntriple
            cache={}
            puts "#{nt.to_s}\n"
            Loader.parseline nt.to_s, data, cache
          end
        end
      end
      puts "\n#{data.toNtriples}\n"
    end
  end
end

