start of relationship mapper
[scpubgit/stemmatology.git] / TreeOfTexts / lib / TreeOfTexts / Controller / Root.pm
index e9deda3..137d28a 100644 (file)
@@ -1,7 +1,8 @@
 package TreeOfTexts::Controller::Root;
 use Moose;
 use namespace::autoclean;
-use TreeOfTexts::Model::Analysis qw/ run_analysis /;
+use Text::Tradition::Analysis qw/ run_analysis /;
+
 
 BEGIN { extends 'Catalyst::Controller' }
 
@@ -23,50 +24,121 @@ TreeOfTexts::Controller::Root - Root Controller for TreeOfTexts
 
 =head2 index
 
-The root page (/)
+The root page (/).  Lists the traditions available in the DB to work on,
+and should also eventually have an 'Upload new' interface.
 
 =cut
 
 sub index :Path :Args(0) {
     my ( $self, $c ) = @_;
 
-    my $m = $c->model('Analysis');
-    my $i = 0;
-    my @all_texts = map { $_->{'title'} } @{$m->{'data'}};
+    my $m = $c->model('Directory');
+    my @all_texts;
+    foreach my $id ( $m->tradition_ids ) {
+       my $data = { 
+               'id' => $id,
+               'name' => $m->name( $id ),
+       };
+       push( @all_texts, $data );
+    }
+    
     $c->stash->{texts} = \@all_texts;
     $c->stash->{template} = 'frontpage.tt';
 }
 
-sub view_text :Local {
+=head2 tradition (TODO)
+
+The main page for a tradition, with information about it and links to the
+available tools.
+
+=head2 relationships
+
+The relationship editor tool.
+
+=cut
+
+sub relationships :Local {
+       my( $self, $c ) = @_;
+       my $m = $c->model('Directory');
+       my $tradition = $m->tradition( $c->request->params->{'textid'} );
+       my $table = $tradition->collation->make_alignment_table();
+       my $witlist = shift @$table;
+       $c->stash->{witnesses} = $wits;
+       $c->stash->{alignment} = $table;
+       $c->stash->{template} = 'relate.tt';    
+}
+
+=head2 stexaminer
+
+The stemma analysis tool with the pretty colored table.
+
+=cut
+
+sub stexaminer :Local {
     my( $self, $c ) = @_;
-    my $m = $c->model('Analysis');
-    my $t = $m->{'data'}->[ $c->request->params->{'textid'} ];
-       $c->stash->{svg} = $t->{'svg'};
+    my $m = $c->model('Directory');
+       my $tradition = $m->tradition( $c->request->params->{'textid'} );
+       my $stemma = $tradition->stemma;
+       # TODO Think about caching the stemma in a session 
+       $c->stash->{svg} = $stemma->as_svg;
+       $c->stash->{text_title} = $tradition->name;
+       $c->stash->{template} = 'index.tt'; 
+       # TODO Run the analysis as AJAX from the loaded page.
+       my $t = run_analysis( $tradition );
        $c->stash->{variants} = $t->{'variants'};
-       $c->stash->{text_title} = $t->{'title'};
        $c->stash->{total} = $t->{'variant_count'};
        $c->stash->{genealogical} = $t->{'genealogical_count'};
        $c->stash->{conflict} = $t->{'conflict_count'};
-       $c->stash->{template} = 'index.tt'; 
 }
 
+=head2 alignment_table 
+
+Return a JSON alignment table of a given text.
+
+=cut
+
+sub alignment_table :Local {
+       my( $self, $c ) = @_;
+       my $m = $c->model( 'Directory' );
+       my $tradition = $m->tradition( $c->request->params->{'textid'} );
+       my $table = $tradition->collation->make_alignment_table();
+       $c->stash->{'result'} => $table;
+       $c->forward-( 'View::JSON' );
+}
+
+=head1 OPENSOCIAL URLs
+
+=head2 view_table
+
+Simple gadget to return the analysis table for the stexaminer
+
+=cut
+
 sub view_table :Local {
     my( $self, $c ) = @_;
-    my $m = $c->model( 'Analysis' );
-    my $t = $m->{'data'}->[ $c->request->params->{'textid'} ];
+    my $m = $c->model('Directory');
+       my $id = $c->request->params->{'textid'};
+       my $t = run_analysis( $m->tradition( $id ), $m->stemma( $id ) );
        $c->stash->{variants} = $t->{'variants'};
     $c->stash->{template} = 'table_gadget.tt';
 }
 
+=head2 view_svg
+
+Simple gadget to return the SVG for a given stemma
+
+=cut
+
 sub view_svg :Local {
     my( $self, $c ) = @_;
-    my $m = $c->model( 'Analysis' );
-    my $t = $m->{'data'}->[ $c->request->params->{'textid'} ];
-    $c->stash->{result} = $t->{'svg'};
-    $c->forward( "View::SVG" );
+    my $m = $c->model('Directory');
+    my $stemma = $m->tradition( $c->request->params->{'textid'} )->stemma;
+       if( $stemma ) {
+               $c->stash->{svg} = $stemma->as_svg;
+       }
+    $c->stash->{template} = 'stemma_gadget.tt';
 }
 
-
 =head2 default
 
 Standard 404 error page