From 481a59649a7a9b659969735c1b31f440e121fa9a Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@bioforsk.no>
Date: Fri, 16 Aug 2013 15:46:19 +0200
Subject: [PATCH] Added ModelResource as REST service interface available for
 both client and server (to implement)

---
 .../vips/core/VIPSCoreApplication.java        |  13 +-
 ...elResource.java => ModelResourceImpl.java} | 118 ++++++++----------
 2 files changed, 61 insertions(+), 70 deletions(-)
 rename src/main/java/no/bioforsk/vips/core/service/{ModelResource.java => ModelResourceImpl.java} (67%)

diff --git a/src/main/java/no/bioforsk/vips/core/VIPSCoreApplication.java b/src/main/java/no/bioforsk/vips/core/VIPSCoreApplication.java
index 764f0a2..ebdb76b 100644
--- a/src/main/java/no/bioforsk/vips/core/VIPSCoreApplication.java
+++ b/src/main/java/no/bioforsk/vips/core/VIPSCoreApplication.java
@@ -16,8 +16,11 @@ public class VIPSCoreApplication extends Application
     public Set<Class<?>> getClasses() {
         Set<Class<?>> resources = new java.util.HashSet<>();
         addRestResourceClasses(resources);
+        addInterfaceImplRestResourceClasses(resources);
         return resources;
     }
+    
+    //resources.add(no.bioforsk.vips.core.service.ModelResourceImpl.class);
 
     /**
      * Do not modify addRestResourceClasses() method.
@@ -26,8 +29,16 @@ public class VIPSCoreApplication extends Application
      */
     private void addRestResourceClasses(Set<Class<?>> resources) {
         resources.add(no.bioforsk.vips.core.config.JacksonConfig.class);
-        resources.add(no.bioforsk.vips.core.service.ModelResource.class);
+        
 
+    }
 
+    /**
+     * Handmade because NetBeans doesn't discover the services that are implementations
+     * of service interfaces.
+     * @param resources 
+     */
+    private void addInterfaceImplRestResourceClasses(Set<Class<?>> resources) {
+        resources.add(no.bioforsk.vips.core.service.ModelResourceImpl.class);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/no/bioforsk/vips/core/service/ModelResource.java b/src/main/java/no/bioforsk/vips/core/service/ModelResourceImpl.java
similarity index 67%
rename from src/main/java/no/bioforsk/vips/core/service/ModelResource.java
rename to src/main/java/no/bioforsk/vips/core/service/ModelResourceImpl.java
index b966dfd..14de78a 100644
--- a/src/main/java/no/bioforsk/vips/core/service/ModelResource.java
+++ b/src/main/java/no/bioforsk/vips/core/service/ModelResourceImpl.java
@@ -2,12 +2,7 @@ package no.bioforsk.vips.core.service;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 import no.bioforsk.vips.entity.ModelConfiguration;
 import no.bioforsk.vips.model.Model;
@@ -18,57 +13,30 @@ import no.bioforsk.vips.model.factory.ModelFactory;
  * @copyright 2013 {@link http://www.bioforsk.no Bioforsk}
  * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no>
  */
-@Path("") 
-public class ModelResource {
-    
+public class ModelResourceImpl implements ModelResource{
+     
     /**
      * Lists all models available in this instance, using default language (English)
      * @return list of all models available
      */
-    @GET
-    @Path("models")
-    @Produces("text/plain;charset=UTF-8")
+    @Override
     public Response printModelList()
     {
         return this.printModelList(null);
-        /*
-        StringBuilder retVal = new StringBuilder();
-        ModelFactory mF = ModelFactory.getInstance();
-        for(String key : mF.getModelList().keySet())
-        {
-            try {
-                retVal.append(key).append(" ").append(mF.getModelInstance(key).getModelName()).append("\n");
-            } catch (InstantiationException | IllegalAccessException ex) {
-                Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
-            }
-            
-        }
-        return Response.ok().entity(retVal.toString()).build();*/
+        
     }
     
     /**
      * Lists all models available in this instance, using default language (English)
      * @return list of all models available
      */
-    @GET
-    @Path("models/json")
-    @Produces("application/json;charset=UTF-8")
+    //@GET
+    //@Path("models/json")
+    //@Produces("application/json;charset=UTF-8")
+    @Override
     public Response printModelListJSON()
     {
-        /*
-        StringBuilder retVal = new StringBuilder();
-        ModelFactory mF = ModelFactory.getInstance();
-        for(String key : mF.getModelList().keySet())
-        {
-            try {
-                retVal.append(key).append(" ").append(mF.getModelInstance(key).getModelName()).append("\n");
-            } catch (InstantiationException | IllegalAccessException ex) {
-                Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
-            }
-            
-        }
-        return Response.ok().entity(retVal.toString()).build();
-        * */
+        
         return this.printModelListJSON(null);
     }
     
@@ -76,9 +44,10 @@ public class ModelResource {
      * Lists all models available in this instance, using default language (English)
      * @return list of all models available
      */
-    @GET
-    @Path("models/json/{language}")
-    @Produces("application/json;charset=UTF-8")
+    //@GET
+    //@Path("models/json/{language}")
+    //@Produces("application/json;charset=UTF-8")
+    @Override
     public Response printModelListJSON(@PathParam("language") String language)
     {
         StringBuilder retVal = new StringBuilder();
@@ -95,7 +64,7 @@ public class ModelResource {
                 retVal.append("}");
                 
             } catch (InstantiationException | IllegalAccessException ex) {
-                Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
+                Logger.getLogger(ModelResourceImpl.class.getName()).log(Level.SEVERE, null, ex);
             }
             
         }
@@ -107,9 +76,10 @@ public class ModelResource {
      * Lists all models available in this instance, using default language (English)
      * @return list of all models available
      */
-    @GET
-    @Path("models/{language}")
-    @Produces("text/plain;charset=UTF-8")
+    //@GET
+    //@Path("models/{language}")
+    //@Produces("text/plain;charset=UTF-8")
+    @Override
     public Response printModelList(@PathParam("language") String language)
     {
         StringBuilder retVal = new StringBuilder();
@@ -119,7 +89,7 @@ public class ModelResource {
             try {
                 retVal.append(key).append(" ").append(mF.getModelInstance(key).getModelName(language)).append("\n");
             } catch (InstantiationException | IllegalAccessException ex) {
-                Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
+                Logger.getLogger(ModelResourceImpl.class.getName()).log(Level.SEVERE, null, ex);
             }
             
         }
@@ -132,9 +102,10 @@ public class ModelResource {
      * @param language two-letter code (<a href="http://www.loc.gov/standards/iso639-2/php/English_list.php">ISO-639-2</a>)
      * @return 
      */
-    @GET
-    @Path("models/{modelId}/usage/{language}")
-    @Produces("text/plain;charset=UTF-8")
+    //@GET
+    //@Path("models/{modelId}/usage/{language}")
+    //@Produces("text/plain;charset=UTF-8")
+    @Override
     public Response printModelUsage(@PathParam("modelId") String modelId, @PathParam("language") String language)
     {
         String usage = ModelFactory.getInstance().getModelUsage(modelId, language);
@@ -147,24 +118,31 @@ public class ModelResource {
      * @param language two-letter code (<a href="http://www.loc.gov/standards/iso639-2/php/English_list.php">ISO-639-2</a>)
      * @return 
      */
-    @GET
-    @Path("models/{modelId}/usage")
-    @Produces("text/plain;charset=UTF-8")
+    //@GET
+    //@Path("models/{modelId}/usage")
+    //@Produces("text/plain;charset=UTF-8")
+    @Override
     public Response printModelUsage(@PathParam("modelId") String modelId)
     {
         return this.printModelUsage(modelId, null);
     }
     
-    @GET
-    @Path("models/{modelId}/sampleconfig")
-    @Produces("text/plain;charset=UTF-8")
+    /**
+     * Outputs a sample configuration for the requested model
+     * @param modelId the requested model
+     * @return 
+     */
+    //@GET
+    //@Path("models/{modelId}/sampleconfig")
+    //@Produces("text/plain;charset=UTF-8")
+    @Override
     public Response printModelSampleConfig(@PathParam("modelId") String modelId)
     {
         try {
             String sampleConfig = ModelFactory.getInstance().getModelInstance(modelId).getSampleConfig();
             return Response.ok().entity(sampleConfig).build();
         } catch (InstantiationException | IllegalAccessException ex) {
-            Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
+            Logger.getLogger(ModelResourceImpl.class.getName()).log(Level.SEVERE, null, ex);
             return Response.serverError().build();
         }
     }
@@ -174,10 +152,11 @@ public class ModelResource {
      * @param config input data for the model
      * @return list of result objects
      */
-    @POST
-    @Path("models/run")
-    @Consumes("application/json")
-    @Produces("application/json")
+    //@POST
+    //@Path("models/run")
+    //@Consumes("application/json")
+    //@Produces("application/json")
+    @Override
     public Response runModel(ModelConfiguration config)
     {
         try
@@ -188,7 +167,7 @@ public class ModelResource {
         }
         catch(InstantiationException | IllegalAccessException ex)
         {
-            Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
+            Logger.getLogger(ModelResourceImpl.class.getName()).log(Level.SEVERE, null, ex);
             return Response.serverError().build();
         }
     }
@@ -199,10 +178,11 @@ public class ModelResource {
      * @param config input data for the model
      * @return list of result objects
      */
-    @POST
-    @Path("models/{modelId}/run")
-    @Consumes("application/json")
-    @Produces("application/json")
+    //@POST
+    //@Path("models/{modelId}/run")
+    //@Consumes("application/json")
+    //@Produces("application/json")
+    @Override
     public Response runModel(@PathParam("modelId") String modelId, ModelConfiguration config)
     {
         try
@@ -213,7 +193,7 @@ public class ModelResource {
         }
         catch(InstantiationException | IllegalAccessException ex)
         {
-            Logger.getLogger(ModelResource.class.getName()).log(Level.SEVERE, null, ex);
+            Logger.getLogger(ModelResourceImpl.class.getName()).log(Level.SEVERE, null, ex);
             return Response.serverError().build();
         }
     }
-- 
GitLab