#!/usr/bin/perl
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

# ok here is the a basic Unix like shell to manage RDF (RDFStore) databases
#
# Useful for inspiration are the following links:
#
#	XML Editing Shell: http://xsh.sourceforge.net/ and http://www.xml.com/lpt/a/2002/07/10/kip.html
#	Guha rdfdb tcp/ip commands: http://www.guha.com/rdfdb/query.html
#	Tucana RDF store Interactive Query Language: http://tks.pisoftware.com/user/itql.html
#	Intellidimension RDF Gateway RDFQL: http://www.intellidimension.com/default.rsp?topic=/pages/rdfgateway/reference/db/default.rsp
#

use RDFStore::Parser::SiRPAC;
use RDFStore::Parser::NTriples;
use RDFStore::NodeFactory;
use Carp;

my $Usage =<<EOU;
Usage is:
    $0 [-h] [-f <command_file>] [-i]

RDF shell

-h	Print this message

[-f <command_file>]
	Command file containing the RDF shell commands

EOU

my ($command_file);
$interactive=0;
while (defined($ARGV[0]) and $ARGV[0] =~ /^[-+]/) {
    my $opt = shift;

    if ($opt eq '-f') {
        $command_file = shift;
	undef $command_file
		unless(-e $command_file);
    } elsif ($opt eq '-h') {
        print $Usage;
        exit;
    } elsif ($opt eq '-v') {
	$verbose=1;
    } else {
        die "Unknown option: $opt\n$Usage";
    };
};

my $fh;
if($command_file) {
	open(FILE,$command_file);
	$fh = *FILE;
} else {
	$fh = *STDIN;
	};

my %aliases = (
	'http://www.w3.org/1999/02/22-rdf-syntax-ns#' => rdf,
	'http://www.w3.org/2000/01/rdf-schema#' => rdfs,
	'http://purl.org/rss/1.0/' => rss,
	'http://www.daml.org/2001/03/daml+oil#' => 'daml+oil',
	'http://purl.org/dc/elements/1.1/' => 'dc',
	'http://purl.org/dc/terms/' => 'dcq',
	'http://xmlns.com/foaf/0.1/' => 'foaf'
	);

print "\nWelcome to RDFStore shell!\n\nType help for a list of available commands\n\n" unless($command_file);

for(;;) {
	prompt();

	$line = <$fh>;

	last unless($line);

	#print "OOOKKK!!!\n" if($line =~ m/^[[A/);

	next
		if( $line =~ m/^(\s|\n|#[^\n]*)*$/gm);

	if($line =~ m/^(help)/i) {
		print "help <command>\n";
	} elsif($line =~ m/^(quit|exit)/i) {
		exit;
		};
	};

close(FILE)
	if($command_file);

sub prompt { print 'rdfsh> '; };
