package tv.dyndns.kishibe.qmaclone.server.handwriting;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import com.google.inject.Inject;
import com.sun.jna.Pointer;
import tv.dyndns.kishibe.qmaclone.client.constant.Constant;
public class ZinniaObjectFactory extends BasePooledObjectFactory<Pointer> {
private static final String MODEL_FILE_PATH = Constant.FILE_PATH_BASE
+ "qmaclone/handwriting-ja.model";
private final ZinniaLibrary zinnia;
@Inject
public ZinniaObjectFactory(ZinniaLibrary zinnia) {
this.zinnia = zinnia;
}
@Override
public Pointer create() throws Exception {
Pointer recognizer = zinnia.zinnia_recognizer_new();
if (zinnia.zinnia_recognizer_open(recognizer, MODEL_FILE_PATH) == 0) {
System.err.printf("ERROR: %s\n", zinnia.zinnia_recognizer_strerror(recognizer));
zinnia.zinnia_recognizer_destroy(recognizer);
throw new Exception("zinnia 辞書ファイルの読み込みに失敗しました");
}
return recognizer;
}
@Override
public PooledObject<Pointer> wrap(Pointer obj) {
return new DefaultPooledObject<Pointer>(obj);
}
@Override
public void destroyObject(PooledObject<Pointer> p) throws Exception {
Pointer recognizer = (Pointer) p.getObject();
zinnia.zinnia_recognizer_destroy(recognizer);
}
}