# HG changeset patch # User IRI # Date 1269343917 -3600 # Node ID 4a089c49eb448915a71d4bbe97937c7acb6ee950 # Parent 25dda14508ec3b9b90b4254a0183781db81621ce add test and move resources diff -r 25dda14508ec -r 4a089c49eb44 .classpath --- a/.classpath Sat Mar 20 03:54:43 2010 +0100 +++ b/.classpath Tue Mar 23 12:31:57 2010 +0100 @@ -13,5 +13,6 @@ + diff -r 25dda14508ec -r 4a089c49eb44 WebContent/WEB-INF/web.xml --- a/WebContent/WEB-INF/web.xml Sat Mar 20 03:54:43 2010 +0100 +++ b/WebContent/WEB-INF/web.xml Tue Mar 23 12:31:57 2010 +0100 @@ -12,7 +12,7 @@ sonyengine - fr.iri.thd.sonyengine.ServletContainer + fr.iri.thd.sonyengine.web.ServletContainer initDatabasePath diff -r 25dda14508ec -r 4a089c49eb44 lib/junit-4.8.1.jar Binary file lib/junit-4.8.1.jar has changed diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/DataAccessor.java --- a/src/fr/iri/thd/sonyengine/DataAccessor.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -package fr.iri.thd.sonyengine; - -import com.sleepycat.je.DatabaseException; -import com.sleepycat.persist.EntityStore; -import com.sleepycat.persist.PrimaryIndex; -import com.sleepycat.persist.SecondaryIndex; - -public class DataAccessor { - - public PrimaryIndex movieFragmentById; - - public PrimaryIndex tagById; - public SecondaryIndex tagByName; - public SecondaryIndex tagBySegment; - - public DataAccessor(EntityStore store) throws DatabaseException { - - movieFragmentById = store.getPrimaryIndex(String.class, MovieFragment.class); - - tagById = store.getPrimaryIndex(String.class, Tag.class); - tagByName = store.getSecondaryIndex(tagById, String.class, "name"); - tagBySegment = store.getSecondaryIndex(tagById, String.class, "segment"); - - } - -} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/DbEnv.java --- a/src/fr/iri/thd/sonyengine/DbEnv.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -package fr.iri.thd.sonyengine; - -import java.io.File; - -import com.sleepycat.je.DatabaseException; -import com.sleepycat.je.Environment; -import com.sleepycat.je.EnvironmentConfig; -import com.sleepycat.persist.EntityStore; -import com.sleepycat.persist.StoreConfig; - -public class DbEnv { - - private Environment env; - private EntityStore store; - - // Our constructor does nothing - public DbEnv() {} - - // The setup() method opens the environment and store - // for us. - public void setup(File envHome, boolean readOnly) - throws DatabaseException { - - EnvironmentConfig myEnvConfig = new EnvironmentConfig(); - StoreConfig storeConfig = new StoreConfig(); - - myEnvConfig.setReadOnly(readOnly); - storeConfig.setReadOnly(readOnly); - - // If the environment is opened for write, then we want to be - // able to create the environment and entity store if - // they do not exist. - myEnvConfig.setAllowCreate(!readOnly); - storeConfig.setAllowCreate(!readOnly); - - // Open the environment and entity store - env = new Environment(envHome, myEnvConfig); - store = new EntityStore(env, "EntityStore", storeConfig); - - } - - // Return a handle to the entity store - public EntityStore getEntityStore() { - return store; - } - - // Return a handle to the environment - public Environment getEnv() { - return env; - } - - // Close the store and environment. - public void close() { - if (store != null) { - try { - store.close(); - } catch(DatabaseException dbe) { - System.err.println("Error closing store: " + - dbe.toString()); - throw dbe; - } - } - - if (env != null) { - try { - // Finally, close the environment. - env.close(); - } catch(DatabaseException dbe) { - System.err.println("Error closing DbEnv: " + - dbe.toString()); - throw dbe; - } - } - } - - -} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/EngineResource.java --- a/src/fr/iri/thd/sonyengine/EngineResource.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -package fr.iri.thd.sonyengine; - -import javax.ws.rs.Path; -import javax.ws.rs.POST; -import javax.ws.rs.PathParam; - -import thd.ThdEngine; - -@Path ("engine") -public class EngineResource { - - @POST - @Path("train") - public String train() { - - ThdEngine.getEngine().reTrain(); - return "ok\n"; - } - - @POST - @Path("train/{id}") - public String train(@PathParam("id") String tagName) { - - ThdEngine.getEngine().reTrain(tagName); - return tagName + " : ok\n"; - } - -} - - diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/MovieFragment.java --- a/src/fr/iri/thd/sonyengine/MovieFragment.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -package fr.iri.thd.sonyengine; - -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.PrimaryKey; - -@Entity -public class MovieFragment { - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - @PrimaryKey - private String id; - - public MovieFragment(String id) { - this.id = id; - } - -} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/MovieFragmentResource.java --- a/src/fr/iri/thd/sonyengine/MovieFragmentResource.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package fr.iri.thd.sonyengine; - -import javax.servlet.ServletContext; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.Context; - -import thd.ThdEngine; - -@Path ("segment") -public class MovieFragmentResource { - - @POST - @Path("create/{id}") - public void create(@PathParam("id") String id, @Context ServletContext context) { - - ThdEngine.getEngine().createMovieFragment(id); - - DbEnv dbenv = (DbEnv)context.getAttribute(ServletContainer.DB_ENV_ATTRIBUTE); - - DataAccessor da = new DataAccessor(dbenv.getEntityStore()); - - MovieFragment fragment = new MovieFragment(id); - da.movieFragmentById.put(fragment); - - ThdEngine.getEngine().reTrain(); - - } - - public void find(String id, String tag, Float separation, Boolean b) { - } - - - public void get(String id) { - } -} - - diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/ServletContainer.java --- a/src/fr/iri/thd/sonyengine/ServletContainer.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -package fr.iri.thd.sonyengine; - -import java.io.File; - -import javax.servlet.ServletException; -import javax.ws.rs.core.Application; - -import thd.ThdEngine; - -import com.sleepycat.persist.EntityCursor; - -public class ServletContainer extends - com.sun.jersey.spi.container.servlet.ServletContainer { - - /** - * - */ - private static final long serialVersionUID = -447765110849619632L; - - public static final String DB_ENV_ATTRIBUTE = "DB_ENV"; - - public ServletContainer() { - } - - public ServletContainer(Class appClass) { - super(appClass); - } - - public ServletContainer(Application app) { - super(app); - } - - - public void init() throws ServletException { - super.init(); - - String databasePath = this.getInitParameter("initDatabasePath"); - - if(databasePath == null) - return; - - File databasePathFile = new File(databasePath); - - if(!databasePathFile.exists()) - { - databasePathFile.mkdirs(); - } - DbEnv env = new DbEnv(); - env.setup(databasePathFile, false); - - // set DbEnv in servlet context - this.getServletContext().setAttribute(ServletContainer.DB_ENV_ATTRIBUTE, env); - - //load all entities - DataAccessor da = new DataAccessor(env.getEntityStore()); - - EntityCursor movieFragmentItems = da.movieFragmentById.entities(); - - try { - for(MovieFragment item : movieFragmentItems) { - ThdEngine.getEngine().createMovieFragment(item.getId()); - } - } - finally { - movieFragmentItems.close(); - } - - EntityCursor tagItems = da.tagById.entities(); - - try { - for(Tag item : tagItems) { - ThdEngine.getEngine().addTag(item.getName(), item.getSegment()); - } - } - finally { - tagItems.close(); - } - - ThdEngine.getEngine().reTrain(); - } - - public void destroy() { - DbEnv env = (DbEnv)this.getServletContext().getAttribute(DB_ENV_ATTRIBUTE); - - if(env != null) { - env.close(); - } - } - -} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/Tag.java --- a/src/fr/iri/thd/sonyengine/Tag.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -package fr.iri.thd.sonyengine; - -import java.util.UUID; - -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.PrimaryKey; -import com.sleepycat.persist.model.Relationship; -import com.sleepycat.persist.model.SecondaryKey; - -@Entity -public class Tag { - - @PrimaryKey - private String id = UUID.randomUUID().toString(); - - @SecondaryKey(relate=Relationship.MANY_TO_ONE) - private String name; - - @SecondaryKey(relate=Relationship.MANY_TO_ONE, relatedEntity=MovieFragment.class) - private String segment; - - - public String getId() { - return id; - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setSegment(String segment) { - this.segment = segment; - } - - public String getSegment() { - return segment; - } -} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/TagResource.java --- a/src/fr/iri/thd/sonyengine/TagResource.java Sat Mar 20 03:54:43 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -package fr.iri.thd.sonyengine; - -import javax.ws.rs.Path; - -@Path ("tag") -public class TagResource { - - public void get(String id) { - } - -} - - diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/core/DataAccessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/core/DataAccessor.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,27 @@ +package fr.iri.thd.sonyengine.core; + +import com.sleepycat.je.DatabaseException; +import com.sleepycat.persist.EntityStore; +import com.sleepycat.persist.PrimaryIndex; +import com.sleepycat.persist.SecondaryIndex; + + +public class DataAccessor { + + public PrimaryIndex movieFragmentById; + + public PrimaryIndex tagById; + public SecondaryIndex tagByName; + public SecondaryIndex tagBySegment; + + public DataAccessor(EntityStore store) throws DatabaseException { + + movieFragmentById = store.getPrimaryIndex(String.class, MovieFragment.class); + + tagById = store.getPrimaryIndex(String.class, Tag.class); + tagByName = store.getSecondaryIndex(tagById, String.class, "name"); + tagBySegment = store.getSecondaryIndex(tagById, String.class, "segment"); + + } + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/core/DbEnv.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/core/DbEnv.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,77 @@ +package fr.iri.thd.sonyengine.core; + +import java.io.File; + +import com.sleepycat.je.DatabaseException; +import com.sleepycat.je.Environment; +import com.sleepycat.je.EnvironmentConfig; +import com.sleepycat.persist.EntityStore; +import com.sleepycat.persist.StoreConfig; + +public class DbEnv { + + private Environment env; + private EntityStore store; + + // Our constructor does nothing + public DbEnv() {} + + // The setup() method opens the environment and store + // for us. + public void setup(File envHome, boolean readOnly) + throws DatabaseException { + + EnvironmentConfig myEnvConfig = new EnvironmentConfig(); + StoreConfig storeConfig = new StoreConfig(); + + myEnvConfig.setReadOnly(readOnly); + storeConfig.setReadOnly(readOnly); + + // If the environment is opened for write, then we want to be + // able to create the environment and entity store if + // they do not exist. + myEnvConfig.setAllowCreate(!readOnly); + storeConfig.setAllowCreate(!readOnly); + + // Open the environment and entity store + env = new Environment(envHome, myEnvConfig); + store = new EntityStore(env, "EntityStore", storeConfig); + + } + + // Return a handle to the entity store + public EntityStore getEntityStore() { + return store; + } + + // Return a handle to the environment + public Environment getEnv() { + return env; + } + + // Close the store and environment. + public void close() { + if (store != null) { + try { + store.close(); + } catch(DatabaseException dbe) { + System.err.println("Error closing store: " + + dbe.toString()); + throw dbe; + } + } + + if (env != null) { + try { + // Finally, close the environment. + env.close(); + } catch(DatabaseException dbe) { + System.err.println("Error closing DbEnv: " + + dbe.toString()); + throw dbe; + } + } + } + + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/core/MovieFragment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/core/MovieFragment.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,27 @@ +package fr.iri.thd.sonyengine.core; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity +public class MovieFragment { + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + @PrimaryKey + private String id; + + public MovieFragment(String id) { + this.id = id; + } + + public MovieFragment() { + } + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/core/Tag.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/core/Tag.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,52 @@ +package fr.iri.thd.sonyengine.core; + +import java.util.UUID; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; +import com.sleepycat.persist.model.Relationship; +import com.sleepycat.persist.model.SecondaryKey; + + +@Entity +public class Tag { + + @PrimaryKey + private String id = UUID.randomUUID().toString(); + + @SecondaryKey(relate=Relationship.MANY_TO_ONE) + private String name; + + @SecondaryKey(relate=Relationship.MANY_TO_ONE, relatedEntity=MovieFragment.class) + private String segment; + + + public String getId() { + return id; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setSegment(String segment) { + this.segment = segment; + } + + public String getSegment() { + return segment; + } + + public Tag(String name, String segment) { + this.setName(name); + this.setSegment(segment); + } + + public Tag() { + } + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/test/TestEngine.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/test/TestEngine.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,225 @@ +package fr.iri.thd.sonyengine.test; + +import java.io.File; + +import javax.ws.rs.core.MediaType; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer; + +import fr.iri.thd.sonyengine.core.DataAccessor; +import fr.iri.thd.sonyengine.core.DbEnv; + +/* + * + * import java.io.File; + +import core.Tag; + +/** + * A class to test ThdEngine + * + * @author pachet + * +public class ThdEngineTest { + + public static void main(String[] args) { + testSimpleExampleManual(); +// testSimpleExampleFile(); + // testUniversCineFile(); + } + + /** + * Tests the engine with a small set of movies and tags, entered +"manually", one by one + private static void testSimpleExampleManual() { + ThdEngine engine = ThdEngine.getEngine(); + engine.createMovieFragment("ref1"); + engine.createMovieFragment("ref2"); + engine.createMovieFragment("ref3"); + engine.createMovieFragment("ref4"); + engine.createMovieFragment("ref5"); + engine.createMovieFragment("ref6"); + engine.createMovieFragment("ref7"); + + engine.addTag("crayon", "ref1"); + engine.addTag("carte", "ref1"); + engine.addTag("bateau", "ref1"); + engine.addTag("voiture", "ref1"); + engine.addTag("car", "ref1"); + + engine.addTag("enfant", "ref2"); + engine.addTag("famille", "ref2"); + engine.addTag("violon", "ref2"); + engine.addTag("maison", "ref2"); + engine.addTag("hopital", "ref2"); + + engine.addTag("enfant", "ref3"); + engine.addTag("famille", "ref3"); + engine.addTag("violon", "ref3"); + engine.addTag("maison", "ref3"); + engine.addTag("ordinateur", "ref3"); + engine.addTag("fenetre", "ref3"); + engine.addTag("voiture", "ref3"); + engine.addTag("guitare", "ref3"); + engine.addTag("carte", "ref3"); + + engine.addTag("enfant", "ref4"); + engine.addTag("famille", "ref4"); + engine.addTag("violon", "ref4"); + engine.addTag("bateau", "ref4"); + engine.addTag("ordinateur", "ref4"); + engine.addTag("fenetre", "ref4"); + engine.addTag("stylo", "ref4"); + engine.addTag("perroquet", "ref4"); + engine.addTag("crayon", "ref4"); + engine.addTag("tele", "ref4"); + engine.addTag("bateau", "ref4"); + + engine.addTag("ordinateur", "ref5"); + engine.addTag("crayon", "ref5"); + engine.addTag("fenetre", "ref5"); + engine.addTag("hopital", "ref5"); + engine.addTag("carte", "ref5"); + engine.addTag("tele", "ref5"); + engine.addTag("stylo", "ref5"); + engine.addTag("perroquet", "ref5"); + engine.addTag("bateau", "ref5"); + engine.addTag("guitare", "ref5"); + + engine.addTag("maison", "ref6"); + engine.addTag("perroquet", "ref6"); + engine.addTag("stylo", "ref6"); + engine.addTag("guitare", "ref6"); + engine.addTag("hopital", "ref6"); + engine.addTag("tele", "ref6"); + engine.addTag("car", "ref6"); + engine.addTag("voiture", "ref6"); + engine.addTag("fenetre", "ref6"); + + engine.addTag("car", "ref7"); + engine.addTag("voiture", "ref7"); + + engine.reTrain(); + engine.showAllTagValues(); + + Neighbor neighbor = engine.findMore("ref1", "enfant", .05f, true); + + while (neighbor != null) { + System.out.println(neighbor.getMovieRef() + " distance: " + + neighbor.getDistance()); + neighbor = engine.findMore(neighbor.getMovieRef(), "enfant", .05f, + true); + } + System.out.println("cannot find any better"); + } + + /** + * Tests the engine with a xcl file containing references of movies and + * their tags. esult should be the same than testSimpleExampleManual() + public static void testSimpleExampleFile() { + ThdEngine engine = ThdEngine.getEngine(); + engine.loadFromTextFile(new File("./Sessions/Essai.csv")); + System.out.println("number of movies read: " + + engine.getAllMovieFragments().size()); + + engine.reTrain(); + engine.showAllTagValues(); + + Neighbor neighbor = engine.findMore("ref1", "enfant", .05f, true); + + while (neighbor != null) { + System.out.println(neighbor.getMovieRef() + " distance: " + + neighbor.getDistance()); + neighbor = engine.findMore(neighbor.getMovieRef(), "enfant", .05f, + true); + } + System.out.println("cannot find any better"); + } + + /** + * Tests the engine with a xcl file containing references of movies and + * their tags + public static void testUniversCineFile() { + ThdEngine engine = ThdEngine.getEngine(); + engine.loadFromTextFile(new File("./Sessions/MovieFrame2.csv")); + System.out.println("number of movies read: " + + engine.getAllMovieFragments().size()); + ThdMovieFragment sobibor = engine + .movieFragmentNamed("Sobibor, 14 octobre 1943, 16 heures"); + engine.reTrain(); + + Tag T_enfant = engine.tagNamed("Enfant"); + System.out.println(sobibor); + System.out.println(T_enfant); + + engine.tagNamed("Enfant").valueFor(sobibor); + + Neighbor neighbor = engine.findMore(sobibor.getName(), "Enfant", .05f, + true); + + while (neighbor != null) { + System.out.println(neighbor.getMovieRef() + " distance: " + + neighbor.getDistance()); + neighbor = engine.findMore(neighbor.getMovieRef(), "Enfant", .05f, + true); + } + System.out.println("cannot find any better"); + } + +} + + * + * + * + * + * + */ + + + +public class TestEngine { + + public static final String BASE_URL = "http://localhost:8080/mosatags.sonyengine/"; + public static final String DATABASE_PATH = "c:/tmp/db"; + + private DbEnv dbenv = null; + + + @Before + public void setup() + { + File databasePathFile = new File(DATABASE_PATH); + dbenv = new DbEnv(); + dbenv.setup(databasePathFile, true); + } + + @After + public void teardown() { + dbenv.close(); + } + + @Test + public void testCreateMovieFragment() { + + DataAccessor da = new DataAccessor(this.dbenv.getEntityStore()); + + Client c = Client.create(); + WebResource res = c.resource(BASE_URL + "segment/create/movie1"); + + String response = res.accept(MediaType.TEXT_PLAIN_TYPE).post(String.class); + + Assert.assertNotNull(response); + + Assert.assertTrue(da.movieFragmentById.contains("movie1")); + } + + + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/web/EngineResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/web/EngineResource.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,128 @@ +package fr.iri.thd.sonyengine.web; + +import java.io.StringWriter; + +import javax.servlet.ServletContext; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.POST; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Context; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.sleepycat.je.Transaction; + +import fr.iri.thd.sonyengine.core.DataAccessor; +import fr.iri.thd.sonyengine.core.DbEnv; + +import thd.Neighbor; +import thd.ThdEngine; + +@Path ("engine") +public class EngineResource { + + @POST + @Path("train") + public String train() { + + ThdEngine.getEngine().reTrain(); + return "ok\n"; + } + + @POST + @Path("train/{id}") + public String train(@PathParam("id") String tagName) { + + ThdEngine.getEngine().reTrain(tagName); + return tagName + " : ok\n"; + } + + @GET + @Path("find/{segment}/{tag}/{percent}/{more}") + public String find( + @PathParam("segment") String segment, + @PathParam("tag") String tag, + @PathParam("percent") String percent, + @PathParam("more") String more) { + + float percentf = (float)Integer.parseInt(percent) / 100.0f; + boolean moreb = Boolean.parseBoolean(more); + Neighbor n = ThdEngine.getEngine().findMore(segment, tag, percentf, moreb); + + Document doc = null; + try { + doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } + + Element root = doc.createElement("sonyengine"); + doc.appendChild(root); + + if(n!= null) + { + Element neighborElement = doc.createElement("neighbor"); + neighborElement.setAttribute("segment", n.getMovieRef()); + neighborElement.setAttribute("distance", Double.toString(n.getDistance())); + root.appendChild(neighborElement); + } + + TransformerFactory transfac = TransformerFactory.newInstance(); + Transformer trans = null; + try { + trans = transfac.newTransformer(); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); + trans.setOutputProperty(OutputKeys.INDENT, "yes"); + + //create string from xml tree + StringWriter sw = new StringWriter(); + StreamResult result = new StreamResult(sw); + DOMSource source = new DOMSource(doc); + try { + trans.transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + return sw.toString(); + + } + + @POST + @Path("reset") + public String ResetDatabase(@Context ServletContext context) { + + DbEnv dbenv = (DbEnv)context.getAttribute(ServletContainer.DB_ENV_ATTRIBUTE); + DataAccessor da = new DataAccessor(dbenv.getEntityStore()); + + Transaction trans = dbenv.getEntityStore().getEnvironment().beginTransaction(null,null); + + for (String key : da.tagById.keys()) { + da.tagById.delete(trans, key); + } + + for (String key : da.movieFragmentById.keys()) { + da.movieFragmentById.delete(trans, key); + } + + trans.commit(); + + return "ok"; + } + +} + + diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/web/MovieFragmentResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/web/MovieFragmentResource.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,45 @@ +package fr.iri.thd.sonyengine.web; + +import javax.servlet.ServletContext; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Context; + +import fr.iri.thd.sonyengine.core.DataAccessor; +import fr.iri.thd.sonyengine.core.DbEnv; +import fr.iri.thd.sonyengine.core.MovieFragment; + +import thd.ThdEngine; + +@Path ("segment") +public class MovieFragmentResource { + + @POST + @Path("create/{id}") + public String create(@PathParam("id") String id, @Context ServletContext context) { + + ThdEngine.getEngine().createMovieFragment(id); + + DbEnv dbenv = (DbEnv)context.getAttribute(ServletContainer.DB_ENV_ATTRIBUTE); + + DataAccessor da = new DataAccessor(dbenv.getEntityStore()); + + MovieFragment fragment = new MovieFragment(id); + da.movieFragmentById.put(fragment); + + ThdEngine.getEngine().reTrain(); + + return "ok"; + + } + + public void find(String id, String tag, Float separation, Boolean b) { + } + + + public void get(String id) { + } +} + + diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/web/ServletContainer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/web/ServletContainer.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,95 @@ +package fr.iri.thd.sonyengine.web; + +import java.io.File; + +import javax.servlet.ServletException; +import javax.ws.rs.core.Application; + +import thd.ThdEngine; + +import com.sleepycat.persist.EntityCursor; + +import fr.iri.thd.sonyengine.core.DataAccessor; +import fr.iri.thd.sonyengine.core.DbEnv; +import fr.iri.thd.sonyengine.core.MovieFragment; +import fr.iri.thd.sonyengine.core.Tag; + +public class ServletContainer extends + com.sun.jersey.spi.container.servlet.ServletContainer { + + /** + * + */ + private static final long serialVersionUID = -447765110849619632L; + + public static final String DB_ENV_ATTRIBUTE = "DB_ENV"; + + public ServletContainer() { + } + + public ServletContainer(Class appClass) { + super(appClass); + } + + public ServletContainer(Application app) { + super(app); + } + + + public void init() throws ServletException { + super.init(); + + String databasePath = this.getInitParameter("initDatabasePath"); + + if(databasePath == null) + return; + + File databasePathFile = new File(databasePath); + + if(!databasePathFile.exists()) + { + databasePathFile.mkdirs(); + } + DbEnv env = new DbEnv(); + env.setup(databasePathFile, false); + + // set DbEnv in servlet context + this.getServletContext().setAttribute(ServletContainer.DB_ENV_ATTRIBUTE, env); + + //load all entities + DataAccessor da = new DataAccessor(env.getEntityStore()); + + EntityCursor movieFragmentItems = da.movieFragmentById.entities(); + + try { + for(MovieFragment item : movieFragmentItems) { + ThdEngine.getEngine().createMovieFragment(item.getId()); + } + } + finally { + movieFragmentItems.close(); + } + + EntityCursor tagItems = da.tagById.entities(); + + try { + for(Tag item : tagItems) { + ThdEngine.getEngine().addTag(item.getName(), item.getSegment()); + } + } + finally { + tagItems.close(); + } + + ThdEngine.getEngine().reTrain(); + } + + public void destroy() { + DbEnv env = (DbEnv)this.getServletContext().getAttribute(DB_ENV_ATTRIBUTE); + + if(env != null) { + env.close(); + } + } + +} diff -r 25dda14508ec -r 4a089c49eb44 src/fr/iri/thd/sonyengine/web/TagResource.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fr/iri/thd/sonyengine/web/TagResource.java Tue Mar 23 12:31:57 2010 +0100 @@ -0,0 +1,88 @@ +package fr.iri.thd.sonyengine.web; + +import java.io.IOException; +import java.io.StringReader; + +import javax.servlet.ServletContext; +import javax.ws.rs.FormParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Context; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import fr.iri.thd.sonyengine.core.DataAccessor; +import fr.iri.thd.sonyengine.core.DbEnv; +import fr.iri.thd.sonyengine.core.Tag; + +import thd.ThdEngine; + +@Path ("tag") +public class TagResource { + + + @Path("add/{id}/{movieFragment}") + @POST + public String add(@PathParam("id") String tagName, @PathParam("movieFragment") String movieSegmentRef,@Context ServletContext context) { + ThdEngine.getEngine().addTag(tagName, movieSegmentRef); + + DbEnv dbenv = (DbEnv)context.getAttribute(ServletContainer.DB_ENV_ATTRIBUTE); + + DataAccessor da = new DataAccessor(dbenv.getEntityStore()); + + + Tag tag = new Tag(tagName, movieSegmentRef); + da.tagById.put(tag); + + ThdEngine.getEngine().reTrain(); + + return "ok"; + + } + + @Path("add") + @POST + public String add(@FormParam("xml") String xmldocstr, @Context ServletContext context) { + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + InputSource source = new InputSource(new StringReader(xmldocstr)); + Document doc = null; + try { + doc = factory.newDocumentBuilder().parse(source); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } + DbEnv dbenv = (DbEnv)context.getAttribute(ServletContainer.DB_ENV_ATTRIBUTE); + DataAccessor da = new DataAccessor(dbenv.getEntityStore()); + + + NodeList tags = doc.getElementsByTagName("tag"); + for(int i = 0; i