New API and custom Bridge for 4.3.x
Posted: Tue Nov 29, 2011 4:51 pm
Hi all,
We are moving ourselves to 4.3.x.
The first step for me is to have a corresponding Bridge that works on 4.3.x OMERO server.
I confirmed my bridge is called from Indexer log.
But it seems like there's major change in APIs.
here's my bridge java code (which was working from 4.2.1)
there's no compile error.
from the Indexer log, I saw the following part has been successfully went through.
But after that, I don't see any log, meaning there might be many run time errors from the line of..
Could anyone give me the link for API documents of 4.3.x so that I can get help in order to update my code?
Best,
BK
We are moving ourselves to 4.3.x.
The first step for me is to have a corresponding Bridge that works on 4.3.x OMERO server.
I confirmed my bridge is called from Indexer log.
But it seems like there's major change in APIs.
here's my bridge java code (which was working from 4.2.1)
- Code: Select all
/*
* $Id$
*
* Copyright 2008 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package edu.cmu.search.bridges;
import edu.cmu.search.bridges.ExperimentFileParser;
import edu.cmu.search.bridges.RunPython;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collections;
import java.util.Iterator;
import java.util.Properties;
import java.io.*;
import org.apache.commons.io.filefilter.*;
//import omero.api.IMetadataPrx;
//import omero.api.ServiceFactoryPrx;
//import omero.api.ServiceFactory;
//import omero.api.RawFileStorePrx;
//import omero.api.RawFileStore;
//import omero.model.IObject;
import ome.model.annotations.Annotation;
import ome.model.annotations.FileAnnotation;
import ome.model.containers.Dataset;
import ome.model.containers.DatasetImageLink;
import ome.model.containers.Project;
import ome.model.containers.ProjectDatasetLink;
import ome.model.core.Image;
import ome.model.core.OriginalFile;
import ome.services.fulltext.BridgeHelper;
import ome.services.fulltext.SimpleLuceneOptions;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.bridge.LuceneOptions;
/**
* Example custom {@link FieldBridge} implementation which parses all
* {@link Image} names from a {@link Project} and inserts them into the index
* for that {@link Project}.
*
* @author Josh Moore, josh at glencoesoftware.com
* @since 3.0-Beta3
*/
public class ExperimentFileBridge extends BridgeHelper {
// ExperimentFileParser exParser;
/**
* If the "value" argument is a {@link Project}, this
* {@link FieldBridge bridge} gathers all images and adds them to the index
* with a slightly reduced boost value. The field name of the image name is
* "image_name" but the values are also added to the
* {@link BridgeHelper#COMBINED} field via the
* {@link #add(Document, String, String, org.apache.lucene.document.Field.Store, org.apache.lucene.document.Field.Index, Float)}
* method.
*/
@Override
public void set(final String name, final Object value,
final Document document, final LuceneOptions _opts) {
if (value instanceof Image) {
logger().info("Scheduling all Experiment Files of " + value + " for re-indexing");
ExperimentFileParser exParser = new ExperimentFileParser();
final Image i = (Image) value;
String user = i.getDetails().getOwner().getOmeName();
String group = i.getDetails().getGroup().getName();
Long imageId = i.getId();
// this can be used later. compare the created time with the current time.
// if the difference is small, then you trigger the feature calculation
Long update = i.getDetails().getUpdateEvent().getTime().getTime();
Long creation = i.getDetails().getCreationEvent().getTime().getTime();
java.util.Date today = new java.util.Date();
Long now = today.getTime();
//RunPython rp0 = new RunPython();
//String st = rp0.testCreateUpdate(creation, update, now);
/******************* Block Start for triggering feature calculation ******************/
RunPython rp = new RunPython();
logger().info("Before Triggering Feature Calculation for " + value);
Boolean isFeatureFile = false;
for (Annotation a : i.linkedAnnotationList()) {
logger().info("Scheduling all Experiment Files of " + " for re-indexing");
logger().info("Scheduling all Experiment Files of " + a + " for re-indexing");
if (a instanceof FileAnnotation) {
FileAnnotation ann2 = (FileAnnotation) a;
String fName = ann2.getFile().getName();
String subfName = fName.substring(fName.length()-3);
if ((subfName != null)){
if (subfName.equalsIgnoreCase(".h5")){
isFeatureFile = true;
}
}
if (!isFeatureFile){
for (final DatasetImageLink dil : i.unmodifiableDatasetLinks()) {
//logger().info("WIthin Triggering Feature Calculation for " + value);
Long datasetID = dil.parent().getId();
//logger().info("WIthin Triggering Feature Calculation for " + Long.toString(datasetID));
String status = rp.runFeatCalc(Long.toString(imageId), Long.toString(datasetID), user, group);
//String status = rp.runFeatCalc(Long.toString(imageId), Long.toString(datasetID),Long.toString(creation), Long.toString(now));
logger().info("WIthin Triggering Feature Calculation STATUS: " + status);
}
}
}
}
/******************* Block Ends ******************/
/******************* Block Start for Experiment File Indexing to Lucene Index ******************/
String tagNs = null;
String tagName = null;
String subtagName = null;
String XML = null;
HashMap <String, String> map = null;
// get the annotations for the image and look for a FileAnnotation
for (Annotation a : i.linkedAnnotationList()) {
if (a instanceof FileAnnotation) {
FileAnnotation ann = (FileAnnotation) a;
tagNs = ann.getNs();
tagName = ann.getFile().getName();
subtagName = tagName.substring(tagName.length()-7);
if ((tagNs != null) && (subtagName != null)){
if (tagNs.equalsIgnoreCase("openmicroscopy.org/omero/editor/experiment") && subtagName.equalsIgnoreCase("cpe.xml")){
OriginalFile file = ann.getFile();
ome.io.nio.OriginalFilesService fileservice = (ome.io.nio.OriginalFilesService)ome.system.OmeroContext.getManagedServerContext().getBean("/OMERO/Files");
String path = fileservice.getFilesPath(file.getId());
String format = file.getMimetype();
map = exParser.parse(new File(path));
// parse the XML string
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
add(document, key, map.get(key), _opts);
}
}
}
}
}
/******************* Block Ends ******************/
}
}
}
there's no compile error.
from the Indexer log, I saw the following part has been successfully went through.
- Code: Select all
logger().info("Before Triggering Feature Calculation for " + value);
But after that, I don't see any log, meaning there might be many run time errors from the line of..
- Code: Select all
for (Annotation a : i.linkedAnnotationList()) {
Could anyone give me the link for API documents of 4.3.x so that I can get help in order to update my code?
Best,
BK