You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by sz...@apache.org on 2011/07/07 09:38:27 UTC

svn commit: r1143692 [1/10] - in /incubator/stanbol/trunk/commons/web/webvie: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/stanbol/ src/main/java/org/apache/stanbol/enhancer/ src/main/java/org/a...

Author: szabyg
Date: Thu Jul  7 07:38:24 2011
New Revision: 1143692

URL: http://svn.apache.org/viewvc?rev=1143692&view=rev
Log:
First version of the webvie user interface, based on hallo.coffee editor and the annotate.coffee widget. 
See also https://github.com/szabyg/stanbol-webvie

Added:
    incubator/stanbol/trunk/commons/web/webvie/
    incubator/stanbol/trunk/commons/web/webvie/.svnignore
    incubator/stanbol/trunk/commons/web/webvie/README.md
    incubator/stanbol/trunk/commons/web/webvie/pom.xml
    incubator/stanbol/trunk/commons/web/webvie/src/
    incubator/stanbol/trunk/commons/web/webvie/src/main/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/EnhancerVieWebFragment.java
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/
    incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource.java
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/annotate.coffee
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/bg_fallback.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/icon_sprite.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/progress_bar.gif   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/slider_handles.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_222222_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_454545_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/jquery-ui-1.8.7.custom.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/jquery.ui.menu.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_flat_75_ffffff_40x100.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_glass_65_ffffff_1x400.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_glass_75_dadada_1x400.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_glass_95_fef1ec_1x400.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-icons_222222_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-icons_2e83ff_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-icons_454545_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-icons_888888_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/images/ui-icons_cd0a0a_256x240.png   (with props)
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery-ui-1.8.13.custom.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.accordion.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.all.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.autocomplete.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.base.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.button.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.core.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.datepicker.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.dialog.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.progressbar.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.resizable.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.selectable.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.slider.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.tabs.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Smoothness/jquery.ui.theme.css
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/annotate.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/backbone-min.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/backbone.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/hallo/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/hallo/format.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/hallo/hallo.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/jquery-1.5.1.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/jquery-ui.1.9m5.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/jquery.rdfquery.debug.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/jquery.rdfquery.min.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/underscore-min.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie-collectionmanager.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie-containermanager.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/dbpedia.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/opencalais.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/rdfa.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/semantictweet.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/stanbol.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/connector/zemanta.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/organization.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/person.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/place.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/task.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/mapping/thing.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/vie2/vie2-latest.debug.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/test.js
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/imports/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/imports/enhancervieDescription.ftl
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/webvie/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/webvie/resource/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource/
    incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource/index.ftl
    incubator/stanbol/trunk/commons/web/webvie/src/test/
    incubator/stanbol/trunk/commons/web/webvie/src/test/java/
    incubator/stanbol/trunk/commons/web/webvie/src/test/resources/

Added: incubator/stanbol/trunk/commons/web/webvie/.svnignore
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/.svnignore?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/.svnignore (added)
+++ incubator/stanbol/trunk/commons/web/webvie/.svnignore Thu Jul  7 07:38:24 2011
@@ -0,0 +1,2 @@
+*.sh
+sc

Added: incubator/stanbol/trunk/commons/web/webvie/README.md
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/README.md?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/README.md (added)
+++ incubator/stanbol/trunk/commons/web/webvie/README.md Thu Jul  7 07:38:24 2011
@@ -0,0 +1,62 @@
+VIE based Stanbol Enhancer UI
+=============================
+
+Adapter to add a VIE based interface for the Stanbol Enhancer
+
+Deploy
+------
+
+After building stanbol in a different folder you can build and deploy this bundle by using the following command:
+
+    mvn install -DskipTests -PinstallBundle -Dsling.url=http://localhost:8080/system/console
+
+Development Guide
+=================
+
+The widget development is done in CoffeeScript. Use the following command to 
+automatically compile the script in the background
+    
+    coffee -c -w -o lib annotate.coffee
+    
+This will as well show you compile errors right after each save.
+
+To simplify work with the deep directory structure I created a directory for
+shortcuts to the most important directories called 'sc':
+
+    ls -ln sc/
+    lrwxrwxrwx 1 1000 1000  52 2011-06-01 11:44 java -> ../src/main/java/org/apache/stanbol/enhancer/webvie/
+    lrwxrwxrwx 1 1000 1000  63 2011-06-01 11:43 static -> ../src/main/resources/org/apache/stanbol/enhancer/webvie/static
+    lrwxrwxrwx 1 1000 1000 135 2011-06-01 11:44 template -> ../src/main/resources/org/apache/stanbol/enhancer/webvie/templates/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource/
+
+Annotate widget API
+===================
+Options:
+--------
+
+Methods:
+--------
+**enable**:
+    Analyze text and highlight TextAnnotations. Make TextAnnotations 
+    interactive.
+
+**disable**:
+    Remove TextAnnotation highlighting.
+
+Events
+------
+**select**:
+    Triggered on annotating a suggested TextEnhancement
+
+**decline**:
+    Triggered on declining a suggested TextEnhancement
+
+**remove**:
+    Triggered when an annotation is removed
+    
+    function (event, ui)
+    
+    The ui object has the following attributes:
+        `textEnhancement`,
+        `entityEnhancement`
+        `linkedEntity`
+

Added: incubator/stanbol/trunk/commons/web/webvie/pom.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/pom.xml?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/pom.xml (added)
+++ incubator/stanbol/trunk/commons/web/webvie/pom.xml Thu Jul  7 07:38:24 2011
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.stanbol</groupId>
+    <artifactId>stanbol-parent</artifactId>
+    <version>0.9-SNAPSHOT</version>
+    <relativePath>../../parent/pom.xml</relativePath>
+  </parent>
+  <artifactId>org.apache.stanbol.enhancer.webvie</artifactId>
+  <packaging>bundle</packaging>
+
+  <name>Editable Entity based Enhancer UI</name>
+  <description>VIE based user interface for Stanbol
+  </description>
+
+  <build>
+    <!-- make it an OSGi bundle -->
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-scr-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Export-Package>
+              org.apache.stanbol.enhancer.webvie.*
+            </Export-Package>
+            <Import-Package>*</Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+
+    <!-- dependencies on other IKS modules -->
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.enhancer.standalone</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.commons.web.base</artifactId>
+    </dependency>
+
+    <!-- needed for the ContentItem resource -->
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.enhancer.jersey</artifactId>
+    </dependency>
+    <!-- Clerezza dependencies -->
+    <dependency>
+      <groupId>org.apache.clerezza</groupId>
+      <artifactId>org.apache.clerezza.rdf.core</artifactId>
+    </dependency>
+
+    <!-- Jersey -->
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-server</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.freemarker</groupId>
+      <artifactId>freemarker</artifactId>
+    </dependency>
+    <!-- indirect dependency for freemarker -->
+    <dependency>
+      <groupId>org.codehaus.jettison</groupId>
+      <artifactId>jettison</artifactId>
+    </dependency>
+
+    <!-- generic tax -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+    </dependency>
+
+    <!-- OSGi tax -->
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.apache.felix.scr.annotations</artifactId>
+    </dependency>
+
+    <!-- for tests -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+</project>

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/EnhancerVieWebFragment.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/EnhancerVieWebFragment.java?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/EnhancerVieWebFragment.java (added)
+++ incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/fragment/EnhancerVieWebFragment.java Thu Jul  7 07:38:24 2011
@@ -0,0 +1,132 @@
+package org.apache.stanbol.enhancer.webvie.fragment;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.serializedform.Serializer;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.commons.web.base.LinkResource;
+import org.apache.stanbol.commons.web.base.NavigationLink;
+import org.apache.stanbol.commons.web.base.ScriptResource;
+import org.apache.stanbol.commons.web.base.WebFragment;
+import org.apache.stanbol.enhancer.servicesapi.EnhancementJobManager;
+import org.apache.stanbol.enhancer.servicesapi.Store;
+import org.apache.stanbol.enhancer.webvie.resource.EnhancerVieRootResource;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+
+import freemarker.cache.ClassTemplateLoader;
+import freemarker.cache.TemplateLoader;
+
+/**
+ * Statically define the list of available resources and providers to be contributed to the the Stanbol JAX-RS
+ * Endpoint.
+ */
+@Component(immediate = true, metatype = true)
+@Service
+public class EnhancerVieWebFragment implements WebFragment {
+
+    private static final String NAME = "enhancervie";
+
+    private static final String STATIC_RESOURCE_PATH = "/org/apache/stanbol/enhancer/webvie/static";
+
+    private static final String TEMPLATE_PATH = "/org/apache/stanbol/enhancer/webvie/templates";
+
+    private BundleContext bundleContext;
+    
+    @Reference
+    TcManager tcManager;
+
+    @Reference
+    Store store;
+
+    @Reference
+    EnhancementJobManager jobManager;
+
+    @Reference
+    Serializer serializer;
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Activate
+    protected void activate(ComponentContext ctx) {
+        this.bundleContext = ctx.getBundleContext();
+    }
+
+    @Override
+    public Set<Class<?>> getJaxrsResourceClasses() {
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        classes.add(EnhancerVieRootResource.class);
+        return classes;
+    }
+
+    @Override
+    public Set<Object> getJaxrsResourceSingletons() {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public String getStaticResourceClassPath() {
+        return STATIC_RESOURCE_PATH;
+    }
+
+    @Override
+    public TemplateLoader getTemplateLoader() {
+        return new ClassTemplateLoader(getClass(), TEMPLATE_PATH);
+    }
+
+    @Override
+    public List<LinkResource> getLinkResources() {
+    	List<LinkResource> resources = new ArrayList<LinkResource>();
+//    	resources.add(new LinkResource("stylesheet", "lib/Aristo/jquery-ui-1.8.7.custom.css", this, 10));
+    	resources.add(new LinkResource("stylesheet", "lib/Smoothness/jquery.ui.all.css", this, 10)); // version 1.8.13
+//    	resources.add(new LinkResource("stylesheet", "lib/Aristo/jquery.ui.menu.css", this, 10));
+        return resources;
+    }
+
+    @Override
+    public List<ScriptResource> getScriptResources() {
+        List<ScriptResource> resources = new ArrayList<ScriptResource>();
+        resources.add(new ScriptResource("text/javascript", "lib/jquery-1.5.1.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/jquery-ui.1.9m5.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/underscore-min.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/backbone.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie-containermanager.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie-collectionmanager.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/hallo/hallo.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/hallo/format.js", this, 10));
+
+        resources.add(new ScriptResource("text/javascript", "lib/jquery.rdfquery.debug.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie2/vie2-latest.debug.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie2/connector/stanbol.js", this, 10));
+        resources.add(new ScriptResource("text/javascript", "lib/vie2/mapping/person.js", this, 10));
+        
+        resources.add(new ScriptResource("text/javascript", "lib/annotate.js", this, 10));
+
+        return resources;
+    }
+
+    @Override
+    public List<NavigationLink> getNavigationLinks() {
+        List<NavigationLink> links = new ArrayList<NavigationLink>();
+        links.add(new NavigationLink("enhancervie", "/enhancer VIE", "/imports/enhancervieDescription.ftl", 20));
+        return links;
+    }
+
+    @Override
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+}

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource.java?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource.java (added)
+++ incubator/stanbol/trunk/commons/web/webvie/src/main/java/org/apache/stanbol/enhancer/webvie/resource/EnhancerVieRootResource.java Thu Jul  7 07:38:24 2011
@@ -0,0 +1,27 @@
+package org.apache.stanbol.enhancer.webvie.resource;
+
+import static javax.ws.rs.core.MediaType.TEXT_HTML;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
+
+import com.sun.jersey.api.view.Viewable;
+
+/**
+ * Adapter to add a VIE based interface for the Stanbol Enhancer
+ * @author Szaby Gruenwald
+ */
+@Path("/enhancervie")
+public class EnhancerVieRootResource extends BaseStanbolResource {
+
+
+    @GET
+    @Produces(TEXT_HTML + ";qs=2")
+    public Viewable getView() {
+        return new Viewable("index", this);
+    }
+
+}

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/annotate.coffee
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/annotate.coffee?rev=1143692&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/annotate.coffee (added)
+++ incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/annotate.coffee Thu Jul  7 07:38:24 2011
@@ -0,0 +1,677 @@
+#     Annotate - a text enhancement interaction jQuery UI widget
+#     (c) 2011 Szaby Gruenwald, IKS Consortium
+#     Annotate may be freely distributed under the MIT license
+
+((jQuery) ->
+    # The annotate.js widget
+    #
+
+    # define namespaces
+    ns =
+        rdf:      'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+        enhancer: 'http://fise.iks-project.eu/ontology/'
+        dc:       'http://purl.org/dc/terms/'
+        rdfs:     'http://www.w3.org/2000/01/rdf-schema#'
+
+    ANTT = ANTT or {}
+    Stanbol = Stanbol or {}
+
+    # filter for TextAnnotations
+    Stanbol.getTextAnnotations = (enhRdf) ->
+        res = _(enhRdf).map((obj, key) ->
+            obj.id = key
+            obj
+        )
+        .filter (e) ->
+            e["#{ns.rdf}type"]
+            .map((x) -> x.value)
+            .indexOf("#{ns.enhancer}TextAnnotation") != -1
+        res = _(res).sortBy (e) ->
+            conf = Number e["#{ns.enhancer}confidence"][0].value if e["#{ns.enhancer}confidence"]
+            -1 * conf
+
+        _(res).map (s)->
+            new Stanbol.TextEnhancement s, enhRdf
+
+    # filter the entityManager for TextAnnotations
+    Stanbol.getEntityAnnotations = (enhRdf) ->
+        _(enhRdf)
+        .map((obj, key) ->
+            obj.id = key
+            obj
+        )
+        .filter (e) ->
+            e["#{ns.rdf}type"]
+            .map((x) -> x.value)
+            .indexOf("#{ns.enhancer}EntityAnnotation") != -1
+
+    # Get the label in the user's language or the first one from a VIE entity
+    ANTT.getRightLabel = (entity) ->
+        labelMap = {}
+        for label in _(entity["#{ns.rdfs}label"]).flatten()
+            cleanLabel = label.value
+            if cleanLabel.lastIndexOf "@" is cleanLabel.length - 3
+                cleanLabel = cleanLabel.substring 0, cleanLabel.length - 3
+            labelMap[label["xml:lang"]|| "_"] = cleanLabel
+        userLang = window.navigator.language.split("-")[0]
+        # Return the first best label
+        labelMap[userLang] or labelMap["_"] or labelMap["en"]
+
+    # Generic API for a TextEnhancement
+    # A TextEnhancement object has the methods for getting generic
+    # text-enhancement-specific properties.
+    # TODO Place it into a global Stanbol object.
+    Stanbol.TextEnhancement = (enhancement, enhRdf) ->
+        @_enhancement = enhancement
+        @_enhRdf = enhRdf
+        @id = @_enhancement.id
+    Stanbol.TextEnhancement.prototype =
+        # the text the annotation is for
+        getSelectedText: ->
+            @_vals("#{ns.enhancer}selected-text")[0]
+        # confidence value
+        getConfidence: ->
+            @_vals("#{ns.enhancer}confidence")[0]
+        # get Entities suggested for the text enhancement (if any)
+        getEntityEnhancements: ->
+            rawList = _(Stanbol.getEntityAnnotations @_enhRdf ).filter (ann) =>
+                relations = _(ann["#{ns.dc}relation"])
+                .map (e) -> e.value
+                if (relations.indexOf @_enhancement.id) isnt -1 then true
+                else false
+            _(rawList).map (ee) =>
+                new Stanbol.EntityEnhancement ee, @
+        # The type of the entity suggested (e.g. person, location, organization)
+        getType: ->
+            @_vals("#{ns.dc}type")[0]
+        # Optional, not used
+        getContext: ->
+            @_vals("#{ns.enhancer}selection-context")[0]
+        # start position in the original text
+        getStart: ->
+            Number @_vals("#{ns.enhancer}start")[0]
+        # end position in the original text
+        getEnd: ->
+            Number @_vals("#{ns.enhancer}end")[0]
+        # Optional
+        getOrigText: ->
+            ciUri = @_vals("#{ns.enhancer}extracted-from")[0]
+            @_enhRdf[ciUri]["http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent"][0].value
+        _vals: (key) ->
+            _(@_enhancement[key])
+            .map (x) -> x.value
+
+    # Generic API for an EntityEnhancement. This is the implementation for Stanbol
+    Stanbol.EntityEnhancement = (ee, textEnh) ->
+        @_textEnhancement = textEnh
+        $.extend @, ee
+    Stanbol.EntityEnhancement.prototype =
+        getLabel: ->
+            @_vals("#{ns.enhancer}entity-label")[0]
+        getUri: ->
+            @_vals("#{ns.enhancer}entity-reference")[0]
+        getTextEnhancement: ->
+            @_textEnhancement
+        getTypes: ->
+            @_vals("#{ns.enhancer}entity-type")
+        getConfidence: ->
+            Number @_vals("#{ns.enhancer}confidence")[0]
+        _vals: (key) ->
+            _(@[key]).map (x) -> x.value
+
+    # get or create a dom element containing only the occurrence of the found entity
+    ANTT.getOrCreateDomElement = (element, text, options = {}) ->
+        # Find occurrence indexes of s in str
+        occurrences = (str, s) ->
+            res = []
+            last = 0
+            while str.indexOf(s, last + 1) isnt -1
+                next = str.indexOf s, last+1
+                res.push next
+                last = next
+
+        # Find the nearest number among the 
+        nearest = (arr, nr) ->
+            _(arr).sortedIndex nr
+
+        # Nearest position
+        nearestPosition = (str, s, ind) ->
+            arr = occurrences(str,s)
+            i1 = nearest arr, ind
+            if arr.length is 1
+                arr[0]
+            else if i1 is arr.length
+                arr[i1-1]
+            else
+                i0 = i1-1
+                d0 = ind - arr[i0]
+                d1 = arr[i1] - ind
+                if d1 > d0 then arr[i0]
+                else arr[i1]
+
+        domEl = element
+        textContentOf = (element) -> $(element).text().replace(/\n/g, " ")
+        # find the text node
+        if textContentOf(element).indexOf(text) is -1
+            throw "'#{text}' doesn't appear in the text block."
+            return $()
+        start = options.start +
+        textContentOf(element).indexOf textContentOf(element).trim()
+        # Correct small position errors
+        start = nearestPosition textContentOf(element), text, start
+        pos = 0
+        while textContentOf(domEl).indexOf(text) isnt -1 and domEl.nodeName isnt '#text'
+            domEl = _(domEl.childNodes).detect (el) ->
+                p = textContentOf(el).lastIndexOf text
+                if p >= start - pos
+                    true
+                else
+                    pos += textContentOf(el).length
+                    false
+
+        if options.createMode is "existing" and textContentOf($(domEl).parent()) is text
+            return $(domEl).parent()[0]
+        else
+            pos = start - pos
+            len = text.length
+            textToCut = textContentOf(domEl).substring(pos, pos+len)
+            if textToCut is text
+                domEl.splitText pos + len
+                newElement = document.createElement options.createElement or 'span'
+                newElement.innerHTML = text
+                $(domEl).parent()[0].replaceChild newElement, domEl.splitText pos
+                $ newElement
+            else
+                console.warn "dom element creation problem: #{textToCut} isnt #{text}"
+
+    # Give back the last part of a uri for fallback label creation
+    ANTT.uriSuffix = (uri) ->
+        res = uri.substring uri.lastIndexOf("#") + 1
+        res.substring res.lastIndexOf("/") + 1
+
+    # jquery events cloning method
+    ANTT.cloneCopyEvent = (src, dest) ->
+        if dest.nodeType isnt 1 or not jQuery.hasData src
+            return
+
+        internalKey = $.expando
+        oldData = $.data src
+        curData = $.data dest, oldData
+
+        # Switch to use the internal data object, if it exists, for the next
+        # stage of data copying
+        if oldData = oldData[internalKey]
+            events = oldData.events
+            curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+            if events
+                delete curData.handle
+                curData.events = {}
+
+                `for ( var type in events ) {
+                    for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+                        jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+                    }
+                }`
+            null
+
+    ######################################################
+    # Annotate widget
+    # makes a content dom element interactively annotatable
+    ######################################################
+    jQuery.widget 'IKS.annotate',
+        __widgetName: "IKS.annotate"
+        options:
+            autoAnalyze: false
+            debug: false
+            # namespaces necessary for the widget configuration
+            ns:
+                dbpedia:  "http://dbpedia.org/ontology/"
+                skos:     "http://www.w3.org/2004/02/skos/core#"
+            # Give a label to your expected enhancement types
+            getTypes: ->
+                [
+                    uri:   "#{@ns.dbpedia}Place"
+                    label: 'Place'
+                ,
+                    uri:   "#{@ns.dbpedia}Person"
+                    label: 'Person'
+                ,
+                    uri:   "#{@ns.dbpedia}Organisation"
+                    label: 'Organisation'
+                ,
+                    uri:   "#{@ns.skos}Concept"
+                    label: 'Concept'
+                ]
+            # Give a label to the sources the entities come from
+            getSources: ->
+                [
+                    uri: "http://dbpedia.org/resource/"
+                    label: "dbpedia"
+                ,
+                    uri: "http://sws.geonames.org/"
+                    label: "geonames"
+                ]
+        _create: ->
+            widget = @
+            # logger can be turned on and off. It will show the real caller line in the log
+            @_logger = if @options.debug then console else 
+                info: ->
+                warn: ->
+                error: ->
+            # widget.entityCache.get(uri, cb) will get and cache the entity from an entityhub
+            @entityCache = window.entityCache =
+                _entities: {}
+                # calling the get with a scope and callback will call cb(entity) with the scope as soon it's available.'
+                get: (uri, scope, cb) ->
+                    # If entity is stored in the cache already just call cb
+                    if @_entities[uri] and @_entities[uri].status is "done"
+                        cb.apply scope, [@_entities[uri].entity]
+                    # If the entity is new to the cache
+                    else if not @_entities[uri]
+                        # create cache entry
+                        @_entities[uri] = 
+                            status: "pending"
+                            uri: uri
+                        cache = @
+                        # make a request to the entity hub
+                        widget.options.connector.queryEntityHub uri, (entity) ->
+                            if not entity.status
+                                if entity.id isnt uri
+                                    widget._logger.warn "wrong callback", uri, entity.id
+                                cache._entities[uri].entity = entity
+                                cache._entities[uri].status = "done"
+                                $(cache._entities[uri]).trigger "done", entity
+                            else
+                                widget._logger.warn "error getting entity", uri, entity
+                    if @_entities[uri] and @_entities[uri].status is "pending"
+                        $( @_entities[uri] )
+                        .bind "done", (event, entity) ->
+                            cb.apply scope, [entity]
+            if @options.autoAnalyze
+                @enable()
+
+        # analyze the widget element and show text enhancements
+        enable: (cb) ->
+            analyzedNode = @element
+            # the analyzedDocUri makes the connection between a document state and
+            # the annotations to it. We have to clean up the annotations to any
+            # old document state
+
+            @options.connector.analyze @element,
+                success: (rdf) =>
+                    # Get enhancements
+                    rdfJson = rdf.databank.dump()
+
+                    textAnnotations = Stanbol.getTextAnnotations(rdfJson)
+                    # Remove all textAnnotations without a selected text property
+                    textAnnotations = _(textAnnotations)
+                    .filter (textEnh) ->
+                        if textEnh.getSelectedText and textEnh.getSelectedText()
+                            true
+                        else
+                            false
+                    _(textAnnotations)
+                    .each (s) =>
+                        @_logger.info s._enhancement,
+                            'confidence', s.getConfidence(),
+                            'selectedText', s.getSelectedText(),
+                            'type', s.getType(),
+                            'EntityEnhancements', s.getEntityEnhancements()
+                        # Process the text enhancements
+                        @processTextEnhancement s, analyzedNode
+                    # trigger 'done' event with success = true
+                    @_trigger "done", true
+                    if typeof cb is "function"
+                        cb(true)
+        # Remove all not accepted text enhancement widgets
+        disable: ->
+            $( ':IKS-annotationSelector', @element ).each () ->
+                $(@).annotationSelector 'disable'
+
+        # processTextEnhancement deals with one TextEnhancement in an ancestor element of its occurrence
+        processTextEnhancement: (textEnh, parentEl) ->
+            if not textEnh.getSelectedText()
+                console.warn "textEnh", textEnh, "doesn't have selected-text!"
+                return
+            el = $ ANTT.getOrCreateDomElement parentEl[0], textEnh.getSelectedText(),
+                createElement: 'span'
+                createMode: 'existing'
+                context: textEnh.getContext()
+                start:   textEnh.getStart()
+                end:     textEnh.getEnd()
+            sType = textEnh.getType()
+            widget = @
+            el.addClass('entity')
+            .addClass ANTT.uriSuffix(sType).toLowerCase()
+            if textEnh.getEntityEnhancements().length
+                el.addClass "withSuggestions"
+            for eEnh in textEnh.getEntityEnhancements()
+                eEnhUri = eEnh.getUri()
+                @entityCache.get eEnhUri, eEnh, (entity) ->
+                    if this.getUri() isnt entity.id
+                        widget._logger.warn "wrong callback", entity.id, this.getUri()
+#                    widget._logger.info "entity for", textEnh.getSelectedText(), this.getUri(), entity
+            # Create widget to select from the suggested entities
+            options =
+                cache: @entityCache
+            $.extend options, @options
+            el.annotationSelector( options )
+            .annotationSelector 'addTextEnhancement', textEnh
+
+    ######################################################
+    # AnnotationSelector widget
+    # the annotationSelector makes an annotated word interactive
+    ######################################################
+    ANTT.annotationSelector =
+    jQuery.widget 'IKS.annotationSelector',
+        # just for debugging and understanding
+        __widgetName: "IKS.annotationSelector"
+        options:
+            ns:
+                dbpedia:  "http://dbpedia.org/ontology/"
+                skos:     "http://www.w3.org/2004/02/skos/core#"
+            getTypes: ->
+                [
+                    uri:   "#{@ns.dbpedia}Place"
+                    label: 'Place'
+                ,
+                    uri:   "#{@ns.dbpedia}Person"
+                    label: 'Person'
+                ,
+                    uri:   "#{@ns.dbpedia}Organisation"
+                    label: 'Organisation'
+                ,
+                    uri:   "#{@ns.skos}Concept"
+                    label: 'Concept'
+                ]
+            getSources: ->
+                [
+                    uri: "http://dbpedia.org/resource/"
+                    label: "dbpedia"
+                ,
+                    uri: "http://sws.geonames.org/"
+                    label: "geonames"
+                ]
+
+        _create: ->
+            @element.click =>
+                if not @dialog
+                    @_createDialog()
+                    setTimeout((=> @dialog.open()), 220)
+                    # Collect all EntityEnhancements for all the TextEnhancements
+                    # on the selected node.
+                    eEnhancements = []
+                    for textEnh in @textEnhancements
+                        for enhancement in textEnh.getEntityEnhancements()
+                            eEnhancements.push enhancement
+                    # filter enhancements with the same uri
+                    # this is necessary because of a bug in stanbol that creates
+                    # duplicate enhancements.
+                    # https://issues.apache.org/jira/browse/STANBOL-228
+                    _tempUris = []
+                    eEnhancements = _(eEnhancements).filter (eEnh) ->
+                        uri = eEnh.getUri()
+                        if _tempUris.indexOf(uri) is -1
+                            _tempUris.push uri
+                            true
+                        else
+                            false
+                    @entityEnhancements = eEnhancements
+
+                    @_createSearchbox()
+                    if @entityEnhancements.length > 0
+                        @_createMenu() if @menu is undefined
+                else @searchEntryField.find('.search').focus 100
+            @_logger = if @options.debug then console else 
+                info: ->
+                warn: ->
+                error: ->
+        _destroy: ->
+            if @menu
+                @menu.destroy()
+                @menu.element.remove()
+                delete @menu
+            if @dialog
+                @dialog.destroy()
+                @dialog.element.remove()
+                @dialog.uiDialogTitlebar.remove()
+                delete @dialog
+            
+        # Produce type label list out of a uri list.
+        # Filtered by the @options.types list
+        _typeLabels: (types) ->
+            knownMapping = @options.getTypes()
+            allKnownPrefixes = _(knownMapping).map (x) -> x.uri
+            knownPrefixes = _.intersect allKnownPrefixes, types
+            _(knownPrefixes).map (key) =>
+                foundPrefix = _(knownMapping).detect (x) -> x.uri is key
+                foundPrefix.label
+
+        # make a label for the entity source based on options.getSources()
+        _sourceLabel: (src) ->
+            sources = @options.getSources()
+            sourceObj = _(sources).detect (s) -> src.indexOf(s.uri) isnt -1
+            if sourceObj
+                sourceObj.label
+            else
+                src.split("/")[2]
+
+        # create dialog widget
+        _createDialog: ->
+            label = @element.text()
+            dialogEl = $("<div><span class='entity-link'></span></div>")
+            .attr( "tabIndex", -1)
+            .addClass()
+            .keydown( (event) =>
+                if not event.isDefaultPrevented() and event.keyCode and event.keyCode is $.ui.keyCode.ESCAPE
+                    @close event
+                    event.preventDefault()
+            )
+            .bind('dialogblur', (event) =>
+                @_logger.info 'dialog dialogblur'
+                @close(event)
+            )
+            .bind('blur', (event) =>
+                @_logger.info 'dialog blur'
+                @close(event)
+            )
+            .appendTo( $("body")[0] )
+            widget = @
+            dialogEl.dialog
+                width: 400
+                title: label
+                close: (event, ui) =>
+                    @close(event)
+                autoOpen: false
+                open: (e, ui) ->
+                    $.data(this, 'dialog').uiDialog.position {
+                        of: widget.element
+                        my: "left top"
+                        at: "left bottom"
+                        collision: "none"}
+            @dialog = dialogEl.data 'dialog'
+            @dialog.uiDialogTitlebar.hide()
+            @_logger.info "dialog widget:", @dialog
+            @dialog.element.focus(100)
+            window.d = @dialog
+            @_insertLink()
+            @_updateTitle()
+            @_setButtons()
+
+        # If annotation is already made insert a link to the entity
+        _insertLink: ->
+            if @isAnnotated() and @dialog
+                $("Annotated: <a href='#{@linkedEntity.uri}' target='_blank'>
+                #{@linkedEntity.label} @ #{@_sourceLabel(@linkedEntity.uri)}</a><br/>")
+                .appendTo $( '.entity-link', @dialog.element )
+        # create/update the dialog button row
+        _setButtons: ->
+            @dialog.element.dialog 'option', 'buttons',
+                rem:
+                    text: if @isAnnotated() then 'Remove' else 'Decline'
+                    click: (event) =>
+                        @remove event
+                Cancel: =>
+                    @close()
+
+        # remove textEnhancement/annotation, replace the separate html
+        # element with the plain text and close the dialog
+        remove: (event) ->
+            el = @element.parent()
+            if not @isAnnotated() and @textEnhancements
+                @_trigger 'decline', event,
+                    textEnhancements: @textEnhancements
+            else
+                @_trigger 'remove', event,
+                    textEnhancement: @_acceptedTextEnhancement
+                    entityEnhancement: @_acceptedEntityEnhancement
+                    linkedEntity: @linkedEntity
+            @destroy()
+            if @element.qname().name isnt '#text'
+                @element.replaceWith document.createTextNode @element.text()
+
+        # Remove the widget if not annotated.
+        disable: ->
+            if not @isAnnotated() and @element.qname().name isnt '#text'
+                @element.replaceWith document.createTextNode @element.text()
+
+        # tells if this is an annotated dom element (not a highlighted textEnhancement only)
+        isAnnotated: ->
+            if @element.attr 'about' then true else false
+
+        # Place the annotation on the DOM element (about and typeof attributes)
+        annotate: (entityEnhancement, styleClass) ->
+            entityUri = entityEnhancement.getUri()
+            entityType = entityEnhancement.getTextEnhancement().getType()
+            entityHtml = @element.html()
+            # We ignore the old style classes
+            # entityClass = @element.attr 'class'
+            sType = entityEnhancement.getTextEnhancement().getType()
+            entityClass = 'entity ' + ANTT.uriSuffix(sType).toLowerCase()
+            newElement = $ "<a href='#{entityUri}'
+                about='#{entityUri}'
+                typeof='#{entityType}'
+                class='#{entityClass}'>#{entityHtml}</a>"
+            ANTT.cloneCopyEvent @element[0], newElement[0]
+            @linkedEntity =
+                uri: entityUri
+                type: entityType
+                label: entityEnhancement.getLabel()
+            @element.replaceWith newElement
+            @element = newElement.addClass styleClass
+            @_logger.info "created annotation in", @element
+            @_updateTitle()
+            @_insertLink()
+            @_acceptedTextEnhancement = entityEnhancement.getTextEnhancement()
+            @_acceptedEntityEnhancement = entityEnhancement
+            @_trigger 'select', null,
+                linkedEntity: @linkedEntity
+                textEnhancement: entityEnhancement.getTextEnhancement()
+                entityEnhancement: entityEnhancement
+        # closing the widget
+        close: ->
+            @destroy()
+        _updateTitle: ->
+            if @dialog
+                if @isAnnotated()
+                    title = "#{@linkedEntity.label} <small>@ #{@_sourceLabel(@linkedEntity.uri)}</small>"
+                else
+                    title = @element.text()
+                @dialog._setOption 'title', title
+
+        # create menu and add to the dialog
+        _createMenu: ->
+            ul = $('<ul></ul>')
+            .appendTo( @dialog.element )
+            @_renderMenu ul, @entityEnhancements
+            @menu = ul
+            .menu({
+                select: (event, ui) =>
+                    @_logger.info "selected menu item", ui.item
+                    @annotate ui.item.data('enhancement'), 'acknowledged'
+                    @close(event)
+                blur: (event, ui) =>
+                    @_logger.info 'menu.blur()', ui.item
+                focus: (event, ui) =>
+                    @_logger.info 'menu.focus()', ui.item
+                    # show preview
+                    @_entityPreview ui.item
+            })
+            .bind('blur', (event, ui) ->
+                @_logger.info 'menu blur', ui
+            )
+            .bind('menublur', (event, ui) ->
+                @_logger.info 'menu menublur', ui.item
+            )
+            .focus(150)
+            .data 'menu'
+
+        # Rendering menu for the EntityEnhancements suggested for the selected text
+        _renderMenu: (ul, entityEnhancements) ->
+            entityEnhancements = _(entityEnhancements).sortBy (ee) -> -1 * ee.getConfidence()
+            @_renderItem ul, enhancement for enhancement in entityEnhancements
+            @_logger.info 'rendered menu for the elements', entityEnhancements
+        _renderItem: (ul, eEnhancement) ->
+            label = eEnhancement.getLabel().replace /^\"|\"$/g, ""
+            type = @_typeLabels eEnhancement.getTypes()
+            source = @_sourceLabel eEnhancement.getUri()
+            active = if @linkedEntity and eEnhancement.getUri() is @linkedEntity.uri
+                    " class='ui-state-active'"
+                else ""
+            $("<li#{active}><a href='#'>#{label} <small>(#{type} from #{source})</small></a></li>")
+            .data('enhancement', eEnhancement)
+            .appendTo ul
+
+        # Render search box with autocompletion for finding the right entity
+        _createSearchbox: ->
+            # Show an input box for autocompleted search
+            @searchEntryField = $('<span style="background: fff;"><label for="search">Search:</label> <input id="search" class="search"></span>')
+            .appendTo @dialog.element
+            sugg = @textEnhancements[0]
+            widget = @
+            $( '.search', @searchEntryField )
+            .autocomplete
+                # Define source method. TODO make independent from stanbol.
+                source: (req, resp) ->
+                    widget._logger.info "req:", req
+                    widget.options.connector.findEntity "#{req.term}#{'*' if req.term.length > 3}", (entityList) ->
+                        widget._logger.info "resp:", _(entityList).map (ent) ->
+                            ent.id
+                        res = for i, entity of entityList
+                            {
+                            key: entity.id
+                            label: "#{ANTT.getRightLabel entity} @ #{widget._sourceLabel entity.id}"
+                            _label: ANTT.getRightLabel entity
+                            getLabel: -> @_label
+                            getUri: -> @key
+                            # To rethink: The type of the annotation (person, place, org)
+                            # should come from the search result, not from the first textEnhancement
+                            _tEnh: sugg
+                            getTextEnhancement: -> @_tEnh
+                            }
+                        resp res
+                # An entity selected, annotate
+                select: (e, ui) =>
+                    @annotate ui.item, "acknowledged"
+                    @_logger.info "autocomplete.select", e.target, ui
+                focus: (e, ui) =>
+                    @_logger.info "autocomplete.focus", e.target, ui
+                    @_entityPreview ui.item
+            .focus(200)
+            .blur (e, ui) =>
+                @_dialogCloseTimeout = setTimeout ( => @close()), 200
+            @_logger.info "show searchbox"
+        # Show preview of a hovered item
+        _entityPreview: _.throttle(( (item) ->
+            @_logger.info "Show preview for", item
+        ), 1500)
+
+        # add a textEnhancement that gets shown when the dialog is rendered
+        addTextEnhancement: (textEnh) ->
+            @options.textEnhancements = @options.textEnhancements or []
+            @options.textEnhancements.push textEnh
+            @textEnhancements = @options.textEnhancements
+
+    window.ANTT = ANTT
+) jQuery

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/bg_fallback.png
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/bg_fallback.png?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/bg_fallback.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/icon_sprite.png
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/icon_sprite.png?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/icon_sprite.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/progress_bar.gif
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/progress_bar.gif?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/progress_bar.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/slider_handles.png
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/slider_handles.png?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/slider_handles.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_222222_256x240.png
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_222222_256x240.png?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_222222_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_454545_256x240.png
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_454545_256x240.png?rev=1143692&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/stanbol/trunk/commons/web/webvie/src/main/resources/org/apache/stanbol/enhancer/webvie/static/lib/Aristo/images/ui-icons_454545_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream