vumix/commit

fixes for first user test at BandG

authorMichiel Hildebrand
Tue Mar 27 00:37:29 2012 +0200
committerMichiel Hildebrand
Tue Mar 27 00:37:29 2012 +0200
commitca6a7113156237577e3981a57d081ce81cddd7f0
treec6e74d0dc8f4287c24cfaf55a6cf39fd2550cbb6
parent0f2b59769a54c176c20aae9ae3c105fb7cf5e2cd
Diff style: patch stat
diff --git a/applications/vumix.pl b/applications/vumix.pl
index 41ad3ff..15b817d 100644
--- a/applications/vumix.pl
+++ b/applications/vumix.pl
@@ -22,13 +22,16 @@
 :- use_module(library(graph_version)).
 
 :- use_module(applications(annotation)).
+:- use_module(library(user_process)).
 
 
 /***************************************************
 * http handlers
 ***************************************************/
 
+:- http_handler(cliopatria(vumix/annotate), http_vumix_annotate, []).
 :- http_handler(cliopatria(vumix), http_vumix, []).
+:- http_handler(cliopatria(vumix/session/finish), http_vumix_finish, []).
 
 
 /***************************************************
@@ -44,27 +47,93 @@
 * http replies
 ***************************************************/
 
-%%	http_vumix(+Request)
+%%	http_vumix_annotate(+Request)
 %
 %	Generate page to annotate a vumix.
 
-http_vumix(Request) :-
+http_vumix_annotate(Request) :-
 	http_parameters(Request,
 		[ target(Target,
 		     [uri,
 		      description('URI of the object to be annotated')
 		     ]),
-		  field(Fields,
+		  field(Fields0,
 			[zero_or_more,
 			 description('URI of annotation field')
 			])
 		]),
+	(   Fields0 = []
+	->  Fields = ['http://semanticweb.cs.vu.nl/prestoprime/personAnnotation',
+		      'http://semanticweb.cs.vu.nl/prestoprime/placeAnnotation',
+		      'http://semanticweb.cs.vu.nl/prestoprime/nameAnnotation',
+		      'http://semanticweb.cs.vu.nl/prestoprime/subjectAnnotation']
+	;   Fields = Fields0
+	),
 	(   setting(login, true)
-        ->  authorized(write(_,_))
-        ;   true
+        ->  authorized(write(_,_)),
+	    logged_on(User)
+	;   logged_on(User, anonymous)
         ),
+	user_process(User, Target, _),
 	html_page(Target, Fields).
 
+user_process(User, Target, Process) :-
+	(   current_user_process(Process),
+	    rdf(Process, rdf:type, pprime:'Annotation'),
+	    rdf(Process, opmv:used, Target)
+	->  true
+	;   create_user_process(User, [rdf:type=pprime:'Annotation',
+				       opmv:used=Target
+				      ], Process)
+	),
+	start_user_process(Process).
+
+
+http_vumix_finish(Request) :-
+	(   current_user_process(Process)
+	->  end_user_process(Process)
+	;   true
+	),
+	http_redirect(see_other, location_by_id(http_vumix), Request).
+
+
+http_vumix(_Request) :-
+	ensure_logged_on(User),
+	findall(URI, rdf(URI, rdf:type, pprime:'TestFragment'), Fragments),
+	reply_html_page(
+	    [ title(['Fragments'])
+	    ],
+	    [table(tbody(\html_fragments(Fragments, User)))]).
+
+html_fragments([], _) --> !.
+html_fragments([F|Fs], User) -->
+	{ fragment_label(F, Label),
+	  findall(Time, annotated_fragment(F, User, _Process, Time), Times),
+	  http_link_to_id(http_vumix_annotate, [target(F)], Link)
+	},
+	html(tr([td(a(href(Link), Label)),
+		 td(\html_times(Times))
+		])),
+	html_fragments(Fs, User).
+
+html_times([]) --> !.
+html_times([T|Ts]) -->
+	html(div(T)),
+	html_times(Ts).
+
+fragment_label(Fragment, Label) :-
+	(   rdf(Fragment, dcterms:title, literal(Title))
+	->  Label = Title
+	;   rdf(Fragment, dcterms:id, literal(Id))
+	->  Label = Id
+	;   rdf_global_id(_:Label, Fragment)
+	).
+
+annotated_fragment(Fragment, User, Process, EndTime) :-
+	rdf(Process, opmv:used, Fragment),
+	rdf(Process, opmv:wasControlledBy, User),
+	rdf(Process, opmv:wasEndedAt, literal(type(xsd:date, EndTime))).
+
 /***************************************************
 * annotation page
 ***************************************************/
@@ -86,7 +155,11 @@ html_page(Target, Fields) :-
 		    div(id(bd),
 			div([id(layout), class('yui3-g')],
 			    [ div([id(fields), class('yui3-u')],
-				  \html_annotation_fields(Fields)),
+				  [ div(class(bd),
+					\html_annotation_fields(Fields)),
+				    div(class(ft),
+					a(href(location_by_id(http_vumix_finish)), done))
+				  ]),
 			      div([id(media), class('yui3-u')],
 				  [ div(id(title), []),
 				    div(id(video), []),
@@ -103,8 +176,9 @@ html_page(Target, Fields) :-
 % hack for mbh demo
 video_source(R, Video) :-
 	rdf_has(R, pprime:source, FragmentId),
+	!,
 	concat_atom(['http://eculture2.cs.vu.nl/pprime/videos/',FragmentId,'.mp4'], Video).
-
+video_source(_R, @null).
 
 %%	html_annotation_fields(+FieldURIs)
 %
diff --git a/config-available/load_mbh_example.pl b/config-available/load_mbh_example.pl
index 0abe1c9..76928c2 100644
--- a/config-available/load_mbh_example.pl
+++ b/config-available/load_mbh_example.pl
@@ -6,15 +6,16 @@
 
 load_mbh_example :-
 	rdf_load(rdf('mbh_example.ttl')), % load example video and config file
-        rdf_attach_library(vocs),
-	rdf_load_library(gtaa),
-	http_link_to_id(http_vumix, [target('http://semanticweb.cs.vu.nl/prestoprime/video18702'),
-				     field('http://semanticweb.cs.vu.nl/prestoprime/personAnnotation'),
-				     field('http://semanticweb.cs.vu.nl/prestoprime/placeAnnotation'),
-				     field('http://semanticweb.cs.vu.nl/prestoprime/nameAnnotation'),
-				     field('http://semanticweb.cs.vu.nl/prestoprime/subjectAnnotation')
+	http_link_to_id(http_vumix_annotate, [target('http://semanticweb.cs.vu.nl/prestoprime/video18702'),
+					      field('http://semanticweb.cs.vu.nl/prestoprime/personAnnotation'),
+					      field('http://semanticweb.cs.vu.nl/prestoprime/placeAnnotation'),
+					      field('http://semanticweb.cs.vu.nl/prestoprime/nameAnnotation'),
+					      field('http://semanticweb.cs.vu.nl/prestoprime/subjectAnnotation')
 				    ],
 			Location),
 	http_handler(cliopatria(p0),
 		     http_redirect(moved, Location),
 		     []).
+
+:- load_mbh_example.
+:- rdf_load(rdf('mbh_test_fragments.ttl')).
diff --git a/rdf/mbh_example.ttl b/rdf/mbh_example.ttl
index a5e724a..23fadfe 100644
--- a/rdf/mbh_example.ttl
+++ b/rdf/mbh_example.ttl
@@ -5,18 +5,14 @@
 @prefix dc:	<http://purl.org/dc/terms/> .
 @prefix skos:   <http://www.w3.org/2004/02/skos/core#> .
 
-pprime:video18702
-    a pprime:Video ;
-    dc:id "18702" ;
-    dc:title "Appie op de bus" ;
-    dc:description "Ouder worden is lang niet altijd gemakkelijk. Eenzaam
-heid en een geisoleerd leven liggen op de loer. De 91- jarige Appie Beukers uit
-Den Haag kijkt er wel voor uit dat hij achter de geraniums terechtkomt. Hij heef
-t de manier gevonden om nog volop aan het sociale leven deel te nemen. Hij rijdt
- namelijk vijf dagen per week mee op een taxibusje om te helpen" ;
-    pprime:duration "34300" ;
-    pprime:slug "appie-bus" ;
-    pprime:source <http://eculture2.cs.vu.nl/pprime/videos/18702.mp4> .
+
+#pprime:video18702
+#    a pprime:Video ;
+#    dc:id "18702" ;
+#    dc:title "Appie op de bus" ;
+#    pprime:duration "34300" ;
+#    pprime:slug "appie-bus" ;
+#    pprime:source <http://eculture2.cs.vu.nl/pprime/videos/18702.mp4> .
 
 
 pprime:personAnnotation
@@ -42,3 +38,4 @@ pprime:subjectAnnotation
     rdfs:label "Onderwerp"@nl ;
     dc:comment "voeg subject termen toe toe"@nl ;
     :source "/api/autocomplete?q={query}&filter={\"scheme\":\"http://data.beeldengeluid.nl/gtaa/OnderwerpenBenG\"}" .
+
diff --git a/rdf/mbh_test_fragments.ttl b/rdf/mbh_test_fragments.ttl
new file mode 100644
index 0000000..844d348
--- /dev/null
+++ b/rdf/mbh_test_fragments.ttl
@@ -0,0 +1,199 @@
+@prefix : <http://semanticweb.cs.vu.nl/prestoprime/> .
+
+:video18701 a :TestFragment .
+:video18702 a :TestFragment .
+:video18704 a :TestFragment .
+:video18705 a :TestFragment .
+:video18732 a :TestFragment .
+:video18733 a :TestFragment .
+:video18770 a :TestFragment .
+:video18794 a :TestFragment .
+:video18859 a :TestFragment .
+:video18867 a :TestFragment .
+:video18876 a :TestFragment .
+:video18902 a :TestFragment .
+:video18903 a :TestFragment .
+:video18920 a :TestFragment .
+:video18947 a :TestFragment .
+:video18952 a :TestFragment .
+:video18989 a :TestFragment .
+:video19053 a :TestFragment .
+:video19054 a :TestFragment .
+:video19088 a :TestFragment .
+:video19143 a :TestFragment .
+:video19146 a :TestFragment .
+:video19188 a :TestFragment .
+:video19190 a :TestFragment .
+:video19192 a :TestFragment .
+:video19194 a :TestFragment .
+:video19207 a :TestFragment .
+:video19211 a :TestFragment .
+:video19254 a :TestFragment .
+:video19260 a :TestFragment .
+:video19263 a :TestFragment .
+:video19330 a :TestFragment .
+:video19332 a :TestFragment .
+:video19364 a :TestFragment .
+:video19366 a :TestFragment .
+:video19371 a :TestFragment .
+:video19387 a :TestFragment .
+:video19389 a :TestFragment .
+:video19390 a :TestFragment .
+:video27305 a :TestFragment .
+:video27307 a :TestFragment .
+:video27317 a :TestFragment .
+:video27320 a :TestFragment .
+:video27321 a :TestFragment .
+:video27382 a :TestFragment .
+:video27384 a :TestFragment .
+:video27399 a :TestFragment .
+:video27564 a :TestFragment .
+:video27569 a :TestFragment .
+:video27573 a :TestFragment .
+:video27609 a :TestFragment .
+:video27610 a :TestFragment .
+:video27611 a :TestFragment .
+:video27629 a :TestFragment .
+:video27630 a :TestFragment .
+:video27653 a :TestFragment .
+:video27679 a :TestFragment .
+:video27763 a :TestFragment .
+:video27765 a :TestFragment .
+:video27935 a :TestFragment .
+:video28049 a :TestFragment .
+:video28145 a :TestFragment .
+:video28206 a :TestFragment .
+:video28208 a :TestFragment .
+:video28297 a :TestFragment .
+:video28299 a :TestFragment .
+:video28355 a :TestFragment .
+:video28356 a :TestFragment .
+:video28412 a :TestFragment .
+:video28415 a :TestFragment .
+:video28416 a :TestFragment .
+:video28437 a :TestFragment .
+:video28444 a :TestFragment .
+:video28496 a :TestFragment .
+:video28502 a :TestFragment .
+:video28600 a :TestFragment .
+:video28602 a :TestFragment .
+:video28749 a :TestFragment .
+:video28828 a :TestFragment .
+:video28845 a :TestFragment .
+:video28878 a :TestFragment .
+:video28881 a :TestFragment .
+:video28882 a :TestFragment .
+:video28899 a :TestFragment .
+:video28928 a :TestFragment .
+:video28929 a :TestFragment .
+:video28954 a :TestFragment .
+:video29007 a :TestFragment .
+:video29012 a :TestFragment .
+:video29038 a :TestFragment .
+:video29204 a :TestFragment .
+:video29208 a :TestFragment .
+:video29343 a :TestFragment .
+:video29469 a :TestFragment .
+:video29470 a :TestFragment .
+:video29471 a :TestFragment .
+:video29512 a :TestFragment .
+:video29551 a :TestFragment .
+:video29552 a :TestFragment .
+:video29571 a :TestFragment .
+:video29572 a :TestFragment .
+:video29574 a :TestFragment .
+:video29575 a :TestFragment .
+:video29616 a :TestFragment .
+:video29622 a :TestFragment .
+:video29640 a :TestFragment .
+:video29645 a :TestFragment .
+:video29662 a :TestFragment .
+:video29669 a :TestFragment .
+:video29701 a :TestFragment .
+:video29724 a :TestFragment .
+:video29757 a :TestFragment .
+:video29760 a :TestFragment .
+:video29761 a :TestFragment .
+:video29762 a :TestFragment .
+:video29827 a :TestFragment .
+:video29828 a :TestFragment .
+:video29829 a :TestFragment .
+:video29832 a :TestFragment .
+:video29861 a :TestFragment .
+:video29862 a :TestFragment .
+:video29863 a :TestFragment .
+:video29864 a :TestFragment .
+:video29865 a :TestFragment .
+:video29895 a :TestFragment .
+:video29932 a :TestFragment .
+:video29934 a :TestFragment .
+:video29963 a :TestFragment .
+:video29965 a :TestFragment .
+:video29966 a :TestFragment .
+:video30002 a :TestFragment .
+:video30004 a :TestFragment .
+:video30005 a :TestFragment .
+:video30035 a :TestFragment .
+:video30073 a :TestFragment .
+:video30074 a :TestFragment .
+:video30075 a :TestFragment .
+:video30107 a :TestFragment .
+:video30124 a :TestFragment .
+:video30144 a :TestFragment .
+:video30145 a :TestFragment .
+:video30158 a :TestFragment .
+:video30177 a :TestFragment .
+:video30178 a :TestFragment .
+:video30249 a :TestFragment .
+:video30250 a :TestFragment .
+:video30252 a :TestFragment .
+:video30302 a :TestFragment .
+:video30303 a :TestFragment .
+:video30307 a :TestFragment .
+:video30322 a :TestFragment .
+:video30332 a :TestFragment .
+:video30379 a :TestFragment .
+:video30380 a :TestFragment .
+:video30448 a :TestFragment .
+:video30524 a :TestFragment .
+:video30547 a :TestFragment .
+:video30580 a :TestFragment .
+:video30584 a :TestFragment .
+:video30660 a :TestFragment .
+:video30662 a :TestFragment .
+:video30674 a :TestFragment .
+:video30726 a :TestFragment .
+:video30757 a :TestFragment .
+:video30761 a :TestFragment .
+:video30791 a :TestFragment .
+:video30819 a :TestFragment .
+:video30854 a :TestFragment .
+:video30856 a :TestFragment .
+:video30857 a :TestFragment .
+:video30859 a :TestFragment .
+:video30885 a :TestFragment .
+:video30917 a :TestFragment .
+:video30919 a :TestFragment .
+:video30951 a :TestFragment .
+:video30956 a :TestFragment .
+:video30957 a :TestFragment .
+:video31046 a :TestFragment .
+:video31196 a :TestFragment .
+:video31256 a :TestFragment .
+:video31295 a :TestFragment .
+:video31303 a :TestFragment .
+:video31310 a :TestFragment .
+:video31375 a :TestFragment .
+:video31376 a :TestFragment .
+:video31377 a :TestFragment .
+:video31379 a :TestFragment .
+:video31422 a :TestFragment .
+:video31425 a :TestFragment .
+:video31426 a :TestFragment .
+:video31454 a :TestFragment .
+:video31491 a :TestFragment .
+:video31496 a :TestFragment .
+:video31497 a :TestFragment .
+:video31569 a :TestFragment .
+:video31571 a :TestFragment .
+:video31572 a :TestFragment .
diff --git a/web/css/vumix.css b/web/css/vumix.css
index cd5f8cd..86df8ba 100644
--- a/web/css/vumix.css
+++ b/web/css/vumix.css
@@ -2,9 +2,16 @@
 #layout {
 	height: 100%;
 }
-#fields {
+#fields .bd {
 	height: 490px;
 }
+#fields .ft {
+	border-top: 2px solid white;
+	padding-top: 5px;
+}
+#fields .ft button {
+	width: 100%;
+}
 
 /* editable title field */
 #title {