Skip to content

Commit

Permalink
remove FileAttachment, handle Blob, reload FileExtractor on applicati…
Browse files Browse the repository at this point in the history
…on start
  • Loading branch information
sgodbillon committed Feb 24, 2011
1 parent 7ac5e65 commit 2db5d09
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 28 deletions.
4 changes: 2 additions & 2 deletions src/play/modules/search/Search.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ public static void init() {

public static Analyzer getAnalyser() {
try {
Class clazz = Class.forName(ANALYSER_CLASS);
return (Analyzer) clazz.getConstructor(Version.class).newInstance(getLuceneVersion());
Class<Analyzer> clazz = (Class<Analyzer>) Class.forName(ANALYSER_CLASS);
return clazz.getConstructor(Version.class).newInstance(getLuceneVersion());
} catch (Exception e) {
throw new RuntimeException(e);
}
Expand Down
2 changes: 2 additions & 0 deletions src/play/modules/search/SearchPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import play.PlayPlugin;
import play.Play.Mode;
import play.exceptions.UnexpectedException;
import play.modules.search.store.FileExtractor;
import play.mvc.Router;
/**
* Integrated to Play's lifecycle, SearchPlugin
Expand All @@ -17,6 +18,7 @@ public class SearchPlugin extends PlayPlugin {
@Override
public void onApplicationStart() {
Search.init();
FileExtractor.init();
}

@Override
Expand Down
14 changes: 7 additions & 7 deletions src/play/modules/search/store/ConvertionUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

import play.Logger;
import play.data.binding.Binder;
import play.db.jpa.FileAttachment;
import play.db.jpa.Blob;
import play.db.jpa.JPABase;
import play.db.jpa.Model;
import play.exceptions.UnexpectedException;
Expand Down Expand Up @@ -82,8 +82,8 @@ public static String valueOf(Object object, java.lang.reflect.Field field) throw
if (field.getType().equals(String.class)) {
return (String ) field.get(object);
}
if (field.getType().equals(FileAttachment.class) && field.get(object) != null) {
return FileExtractor.getText((FileAttachment ) field.get(object));
if (field.getType().equals(Blob.class) && field.get(object) != null) {
return FileExtractor.getText((Blob) field.get(object));
}

Object o = field.get(object);
Expand All @@ -103,9 +103,9 @@ public static String valueOf(Object object, java.lang.reflect.Field field) throw
* @param indexValue String value of the id, taken from index
* @return Object id expected to build query
*/
public static Object getIdValueFromIndex(Class clazz, String indexValue) {
public static Object getIdValueFromIndex(Class<?> clazz, String indexValue) {
java.lang.reflect.Field field = getIdField(clazz);
Class parameter = field.getType();
Class<?> parameter = field.getType();
try {
return Binder.directBind(indexValue, parameter);
} catch (Exception e) {
Expand All @@ -119,7 +119,7 @@ public static Object getIdValueFromIndex(Class clazz, String indexValue) {
* @param clazz JPABase target class
* @return corresponding field
*/
public static java.lang.reflect.Field getIdField(Class clazz) {
public static java.lang.reflect.Field getIdField(Class<?> clazz) {
for (java.lang.reflect.Field field : clazz.getFields()) {
if (field.getAnnotation(Id.class) != null) {
return field;
Expand Down Expand Up @@ -152,7 +152,7 @@ public static Object getIdValueFor(JPABase jpaBase) {
return val;
}

public static boolean isForcedUntokenized(Class clazz, String fieldName) {
public static boolean isForcedUntokenized(Class<?> clazz, String fieldName) {
try {
java.lang.reflect.Field field = clazz.getField(fieldName);
play.modules.search.Field index = field.getAnnotation(play.modules.search.Field.class);
Expand Down
20 changes: 13 additions & 7 deletions src/play/modules/search/store/FileExtractor.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import play.Logger;
import play.Play;
import play.classloading.ApplicationClasses.ApplicationClass;
import play.db.jpa.FileAttachment;
import play.db.jpa.Blob;
import play.modules.search.store.extractors.TextExtractor;
import play.modules.search.store.mime.ExtensionGuesser;
import play.modules.search.store.mime.MimeGuesser;
Expand All @@ -20,28 +20,34 @@ public class FileExtractor {

public static List<TextExtractor> extractors = new ArrayList<TextExtractor>();
public static MimeGuesser mimeGuesser = new ExtensionGuesser();
static {

public static void init() {
Logger.debug("init FileExtractor");
List<ApplicationClass> classes = Play.classes.getAssignableClasses(TextExtractor.class);
List<TextExtractor> extractors = new ArrayList<TextExtractor>();
for (ApplicationClass applicationClass : classes) {
try {
Logger.trace("adding %s as a TextExtractor", applicationClass.name);
extractors.add((TextExtractor) applicationClass.javaClass.newInstance());
} catch (Exception e) {
Logger.warn(e,"Could not instanciate text extractor %s",applicationClass.javaClass.getName());
}
}
FileExtractor.extractors = extractors;
}

public static String getText (FileAttachment file) {
public static String getText (Blob blob) {
// Guess mime
String mime = mimeGuesser.guess (file);
String mime = mimeGuesser.guess (blob);
// Invoke the handlers
String fileName = blob.getFile().getName();
for (TextExtractor extractor : extractors) {
if (extractor.handles(mime)) {
Logger.debug ("Using %s extractor to handle file %s, mime=%s",extractor.getClass().getName(),file.filename,mime);
return extractor.extract(file);
Logger.debug ("Using %s extractor to handle blob %s, mime=%s", extractor.getClass().getName(), fileName, blob.type());
return extractor.extract(blob);
}
}
Logger.warn("No handlers able to index %s mime type, file was %s",mime,file.filename);
Logger.warn("No handlers able to index %s mime type, file was %s", mime, fileName);
return null;
}
}
4 changes: 2 additions & 2 deletions src/play/modules/search/store/extractors/TextExtractor.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package play.modules.search.store.extractors;

import play.db.jpa.FileAttachment;
import play.db.jpa.Blob;

public interface TextExtractor {
public boolean handles (String mime);
public String extract (FileAttachment file);
public String extract (Blob blob);
}
14 changes: 6 additions & 8 deletions src/play/modules/search/store/mime/ExtensionGuesser.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@
import java.util.HashMap;
import java.util.Map;

import play.db.jpa.FileAttachment;
import play.db.jpa.Blob;

public class ExtensionGuesser implements MimeGuesser {
public static Map<String, String> extensions = new HashMap<String, String> ();
static {
extensions.put("pdf", "application/pdf");
//FIXME: complete
}
public String guess (FileAttachment file) {
if (file == null || file.filename == null) {
return null;
}
String extension = file.filename.substring(file.filename.lastIndexOf('.')+1);
return extensions.get(extension);
}

public String guess (Blob blob) {
if(blob != null)
return blob.type();
return null;
}
}
4 changes: 2 additions & 2 deletions src/play/modules/search/store/mime/MimeGuesser.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package play.modules.search.store.mime;

import play.db.jpa.FileAttachment;
import play.db.jpa.Blob;

public interface MimeGuesser {
public String guess (FileAttachment file);
public String guess (Blob blob);
}

0 comments on commit 2db5d09

Please sign in to comment.