uk.ac.ebi.bioinvindex.search.StudySearchTest.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.ebi.bioinvindex.search.StudySearchTest.java

Source

package uk.ac.ebi.bioinvindex.search;

/*
 * __________
 * CREDITS
 * __________
 *
 * Team page: http://isatab.sf.net/
 * - Marco Brandizi (software engineer: ISAvalidator, ISAconverter, BII data management utility, BII model)
 * - Eamonn Maguire (software engineer: ISAcreator, ISAcreator configurator, ISAvalidator, ISAconverter,  BII data management utility, BII web)
 * - Nataliya Sklyar (software engineer: BII web application, BII model,  BII data management utility)
 * - Philippe Rocca-Serra (technical coordinator: user requirements and standards compliance for ISA software, ISA-tab format specification, BII model, ISAcreator wizard, ontology)
 * - Susanna-Assunta Sansone (coordinator: ISA infrastructure design, standards compliance, ISA-tab format specification, BII model, funds raising)
 *
 * Contributors:
 * - Manon Delahaye (ISA team trainee:  BII web services)
 * - Richard Evans (ISA team trainee: rISAtab)
 *
 *
 * ______________________
 * Contacts and Feedback:
 * ______________________
 *
 * Project overview: http://isatab.sourceforge.net/
 *
 * To follow general discussion: isatab-devel@list.sourceforge.net
 * To contact the developers: isatools@googlegroups.com
 *
 * To report bugs: http://sourceforge.net/tracker/?group_id=215183&atid=1032649
 * To request enhancements:  http://sourceforge.net/tracker/?group_id=215183&atid=1032652
 *
 *
 * __________
 * License:
 * __________
 *
 * This work is licenced under the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales License. To view a copy of this licence, visit http://creativecommons.org/licenses/by-sa/2.0/uk/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
 *
 * __________
 * Sponsors
 * __________
 * This work has been funded mainly by the EU Carcinogenomics (http://www.carcinogenomics.eu) [PL 037712] and in part by the
 * EU NuGO [NoE 503630](http://www.nugo.org/everyone) projects and in part by EMBL-EBI.
 */

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermsFilter;
import org.hibernate.Session;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.reader.ReaderProvider;
import org.hibernate.search.store.DirectoryProvider;
import org.junit.AfterClass;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import uk.ac.ebi.bioinvindex.dao.ejb3.DaoFactory;
import uk.ac.ebi.bioinvindex.dao.ejb3.StudyEJB3DAO;
import uk.ac.ebi.bioinvindex.model.Study;
import uk.ac.ebi.bioinvindex.model.VisibilityStatus;
import uk.ac.ebi.bioinvindex.model.security.User;
import uk.ac.ebi.bioinvindex.model.security.Person;
import uk.ac.ebi.bioinvindex.model.security.UserRole;
// TODO: THis is missing from SVN
// import uk.ac.ebi.bioinvindex.model.security.UserRole;
import uk.ac.ebi.bioinvindex.model.processing.Assay;
import uk.ac.ebi.bioinvindex.model.term.AssayTechnology;
import uk.ac.ebi.bioinvindex.model.term.Characteristic;
import uk.ac.ebi.bioinvindex.model.term.CharacteristicValue;
import uk.ac.ebi.bioinvindex.model.term.Design;
import uk.ac.ebi.bioinvindex.model.term.Measurement;
import uk.ac.ebi.bioinvindex.model.term.OntologyEntry;
import uk.ac.ebi.bioinvindex.model.term.OntologyTerm;
import uk.ac.ebi.bioinvindex.model.term.PropertyRole;
import uk.ac.ebi.bioinvindex.model.xref.ReferenceSource;
import uk.ac.ebi.bioinvindex.persistence.StudyPersister;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.BIIFilterQuery;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.FilterField;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.StudyBIIFilterQuery;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.StudyBrowseField;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.StudyFreeTextSearchImpl;
import uk.ac.ebi.bioinvindex.search.hibernatesearch.SecureStudyFreeTextSearch;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.io.File;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;
import java.util.BitSet;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Date;

/**
 * ToDo: Claen up tests!!!
 * <p/>
 * User: Nataliya Sklyar (nsklyar@ebi.ac.uk) Date: Sep 14, 2007
 */
public class StudySearchTest {

    protected static EntityManager entityManager;

    private static EntityManagerFactory entityManagerFactory;

    private StudyEJB3DAO dao;

    private StudyFreeTextSearchImpl search;

    // private PersisterHelper persisterHelper;

    public StudySearchTest() throws Exception {

        prepareIndexDirectory();

        entityManagerFactory = Persistence.createEntityManagerFactory("BIIEntityManager");
        entityManager = entityManagerFactory.createEntityManager();

        DaoFactory factory = DaoFactory.getInstance(entityManager);

        dao = (StudyEJB3DAO) factory.getStudyDAO();

        search = new StudyFreeTextSearchImpl();
        search.setEntityManager(entityManager);

        //persisterHelper = new PersisterHelper();
        //persisterHelper.setDaoFactory(DaoFactory.getInstance(entityManager));
    }

    @AfterClass
    public static void close() {
        entityManager.close();
        entityManagerFactory.close();
    }

    public void prepareIndexDirectory() throws Exception {

        Properties properties = new Properties();

        URL resource = StudySearchTest.class.getResource("/hibernate.properties");
        System.out.println("resource.getPath() = " + resource.getPath());

        InputStream asStream = StudySearchTest.class.getResourceAsStream("/hibernate.properties");

        properties.load(asStream);

        String location = properties.getProperty("hibernate.search.default.indexBase");
        File dir = new File(location);
        if (dir.exists()) {
            deleteDir(dir);
        }

        dir.mkdir();
    }

    private static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }

        return dir.delete();
    }

    //   @Test
    //   public void testTitle() throws Exception {
    //
    //      Study study = buildStudy("acc1", "my test experiment");
    //      Design design = buildDesign("acc2", "study design");
    //      study.setDesign(design);
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(design);
    //      entityManager.persist(study);
    //      tnx.commit();
    //
    //      List<Study> result = search.searchAndFilterByAssayType("my test*");
    //
    //      assertEquals(1, result.size());
    //      assertTrue(result.get(0) instanceof Study);
    //
    //      Study testStudy = (Study) result.get(0);
    //      assertEquals(study.getTitle(), testStudy.getTitle());
    //
    //   }

    //   @Test
    //   public void testAll1() throws Exception {
    //
    //      Study study = buildStudy("acc1", "my test experiment");
    //      Design design = buildDesign("parallel design");
    //      study.setDesign(design);
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(design);
    //      entityManager.persist(study);
    //      tnx.commit();
    //
    //      List<Study> result = search.searchAllFields("my test");
    //
    //      assertEquals(1, result.size());
    //      assertTrue(result.get(0) instanceof Study);
    //
    //      Study testStudy = (Study) result.get(0);
    //      assertEquals(study.getTitle(), testStudy.getTitle());
    //
    //      //Search for a field from Design object
    //      result = search.searchAllFields("parallel");
    //
    //      assertEquals(1, result.size());
    //      assertTrue(result.get(0) instanceof Study);
    //
    //      testStudy = (Study) result.get(0);
    //      assertEquals(study.getTitle(), testStudy.getTitle());
    //   }

    //   @Test
    //   public void testAll2() throws Exception {
    //
    //      Study study = buildStudy("acc1", "study to test");
    //      Design design = buildDesign("study design");
    //      study.setDesign(design);
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(design);
    //      entityManager.persist(study);
    //      tnx.commit();
    //
    //      List<Study> result = search.searchAllFields("design");
    //
    //      assertEquals(1, result.size());
    //      assertTrue(result.get(0) instanceof Study);
    //
    //      Study testStudy = result.get(0);
    //      assertEquals(study.getTitle(), testStudy.getTitle());
    //   }

    //ToDo: Fix indexing, and lucene-based search first, introduce all_content field
    //   @Ignore
    //   public void testAll3() throws Exception {
    //
    //      Study study = buildStudy("acc1", "study to test");
    //      Assay assay = buildAssay("acc2", "my assay type", study);
    //
    //      study.addAssay(assay);
    //      Design design = buildDesign("study design");
    //      study.setDesign(design);
    //
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(design);
    //      entityManager.persist(study);
    //      entityManager.persist(assay);
    //      tnx.commit();
    //
    //      List<Study> result = search.searchAllFields("assay");
    //
    //      assertEquals(1, result.size());
    //      assertTrue(result.get(0) instanceof Study);
    //      Study testStudy = result.get(0);
    //      assertEquals(study.getTitle(), testStudy.getTitle());
    //   }

    //   @Test
    //   public void testGetIds() throws Exception {
    //
    //      Study study = buildStudy("acc1", "study to test");
    //      Design design = buildDesign("study design");
    //      study.setDesign(design);
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(design);
    //      entityManager.persist(study);
    //      tnx.commit();
    //
    //      List<Object[]> result = search.getIdsAllFields("design");
    //
    //      assertEquals(1, result.size());
    //
    //   }

    //ToDo: Fix this test, the method works in web app, but test fails!
    //   @Ignore
    //   public void testFilterByAssayType() throws Exception {
    //
    //      Study study1 = buildStudy("acc1", "study to test");
    //      Assay assay = buildAssay("acc2", "my assay type", study1);
    //      study1.addAssay(assay);
    //
    //      Study study2 = buildStudy("acc2", "study to test 2");
    //      Study study3 = buildStudy("acc3", "study to test 3");
    //      Study study4 = buildStudy("acc4", "study to test 3");
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      entityManager.persist(study1);
    //      entityManager.persist(assay);
    //      entityManager.persist(study2);
    //      entityManager.persist(study3);
    //      entityManager.persist(study4);
    //
    //      tnx.commit();
    //
    //      List<Study> list = dao.findByAssayType("my assay type");
    //      System.out.println("list.size = " + list.size());
    //
    //      List<Study> result = search.searchAndFilterByAssayType("study", "my assay type");
    //
    //      assertEquals(1, result.size());
    //
    //   }

    //  @Test
    //   public void testAssayCascadedProp() throws Exception {
    //
    //      Session session = (Session) entityManager.getDelegate ();
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //
    //      Study study = buildStudy("study_acc1", "study to test");
    //
    //      Assay assay = buildAssay("assay_acc2", "my assay type", study);
    //
    ////      study.addAssay(assay);
    //      Design design = buildDesign("study design");
    //
    //      Characteristic char1 = buildCharacteristic("organism", "specie", PropertyRole.FACTOR);
    //
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("human", char1, "homo sapiens"));
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("little mouse", char1, "Mus musculus"));
    //
    //      Characteristic char2 = buildCharacteristic("size", null, PropertyRole.PROPERTY);
    //
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("big", char2, null));
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("small", char2, null));
    //
    //      // Saves all what comes from here.
    //      new StudyPersister ( DaoFactory.getInstance ( entityManager ), null ).persist ( study );
    //
    //      tnx.commit();
    //
    ////      List<Object[]> list = search.getTable("human");
    ////      System.out.println("list.size() = " + list.size());
    ////
    ////      Object[] firstResult = (Object[]) list.get(0);
    ////      System.out.println("firstResult.si = " + firstResult.length);
    ////      for (int i = 0; i < firstResult.length; i++) {
    ////         System.out.println("firstResult = " + firstResult[i]);
    ////
    ////      }
    //
    ////      List<Map<StudyBrowseField, String[]>> studyBrowseFieldValues = search.getStudyBrowseFieldValues(0, 10);
    ////      System.out.println("studyBrowseFieldValues = " + studyBrowseFieldValues);
    //
    //      BIIFilterQuery filterQuery = new StudyBIIFilterQuery();
    //      filterQuery.addFilterValue(FilterField.ORGANISM, "little mouse");
    ////      filterQuery.addFilterValue(FilterField.ENDPOINT_NAME, "first endpoint");
    ////   filterQuery.setSearchText("little");
    //
    ////      BIIQueryBuilder queryBuilder = new BIIQueryBuilder();
    ////      Filter filter = queryBuilder.buildFilter(filterQuery);
    ////      System.out.println("filter = " + filter);
    //
    //      List<Map<StudyBrowseField, String[]>> studyBrowseFieldValues1 =
    //            search.getStudyBrowseFieldValues(filterQuery, 0, 10);
    //      System.out.println("studyBrowseFieldValues1 = " + studyBrowseFieldValues1);
    //
    ////      List<Map<StudyBrowseField, String[]>> studyBrowseFieldValues2 =
    ////            search.getStudyBrowseFieldValues(null, 0, 10);
    ////      System.out.println("studyBrowseFieldValues2 = " + studyBrowseFieldValues2);
    //
    ////      search.indexReaderUse();
    //   }

    @Test
    public void testAssayCascadedProp2() throws Exception {

        Session session = (Session) entityManager.getDelegate();
        EntityTransaction tnx = entityManager.getTransaction();
        tnx.begin();

        Study study = buildStudy("study_acc11111", "study to test");

        Assay assay = buildAssay("assay_acc22221", "my assay type", study);

        //      study.addAssay(assay);
        Design design = buildDesign("study design");
        study.setDesign(design);

        Characteristic char1 = buildCharacteristic("organism", "specie", PropertyRole.FACTOR);

        Characteristic char2 = buildCharacteristic("size", null, PropertyRole.PROPERTY);

        // Saves all what comes from here.
        new StudyPersister(DaoFactory.getInstance(entityManager), null).persist(study);

        tnx.commit();

        BIIFilterQuery filterQuery = new StudyBIIFilterQuery();
        //      filterQuery.setSearchText("organism:human");

        List<Map<StudyBrowseField, String[]>> studyBrowseFieldValues1 = search
                .getAllStudyBrowseFieldValues(filterQuery);
        System.out.println("studyBrowseFieldValues1 = " + studyBrowseFieldValues1);

        //      List<Map<StudyBrowseField, String[]>> studyBrowseFieldValues2 =
        //            search.getStudyBrowseFieldValues(null, 0, 10);
        //      System.out.println("studyBrowseFieldValues2 = " + studyBrowseFieldValues2);

        //      search.indexReaderUse();
    }

    //   @Test
    //   public void testGetAssayPlatforms() throws Exception{
    //
    //      Study study = buildStudy("study_acc1", "study to test");
    //      Assay assay = buildAssay("assay_acc2", "my assay type", study);
    //
    ////      study.addAssay(assay);
    //      Design design = buildDesign("study design");
    //      study.setDesign(design);
    //
    //      Characteristic char1 = buildCharacteristic("organism", "specie", PropertyRole.FACTOR);
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("human", char1, "homo sapiens"));
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("little mouse", char1, "Mus musculus"));
    //
    //      Characteristic char2 = buildCharacteristic("size", null, PropertyRole.PROPERTY);
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("big", char2, null));
    ////      assay.addCascadedPropertyValue(buildCharacteristicValue("small", char2, null));
    //
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      // MB: uses the new persistence API
    //      new StudyPersister ( DaoFactory.getInstance ( entityManager ), null ).persist ( study );
    //      tnx.commit();
    //
    //      Collection<String> platforms = search.getAssayPlatforms();
    //      System.out.println("platforms = " + platforms);
    //   }

    //   @Test
    //   public void testUser() throws Exception{
    //
    //      Study study = buildStudy("study_acc1", "study to test");
    //
    //      User user1 = new Person();
    //      user1.setUserName("curator");
    //      user1.setRole(UserRole.CURATOR);
    //
    //      User user2 = new Person();
    //      user2.setUserName("test");
    //      user2.setRole(UserRole.SUBMITTER);
    //
    //      study.addUser(user1);
    //      study.addUser(user2);
    //
    //
    //      EntityTransaction tnx = entityManager.getTransaction();
    //      tnx.begin();
    //      // MB: uses the new persistence API
    //      new StudyPersister ( DaoFactory.getInstance ( entityManager ), null ).persist ( study );
    //      tnx.commit();
    //
    ////      Collection<String> platforms = search.getAssayPlatforms();
    ////      System.out.println("platforms = " + platforms);
    //   }

    @Test
    public void testUser() throws Exception {

        Study study = buildStudy("study_acc1", "study to test");

        User user1 = new Person();
        user1.setUserName("curator");
        user1.setRole(UserRole.CURATOR);
        user1.setJoinDate(new Date());

        User user2 = new Person();
        user2.setUserName("test_user1");
        user2.setRole(UserRole.SUBMITTER);

        User user3 = new Person();
        user3.setUserName("test_user2");
        user3.setRole(UserRole.SUBMITTER);

        study.addUser(user1);
        study.addUser(user2);
        study.setStatus(VisibilityStatus.PUBLIC);

        Study study2 = buildStudy("study_acc2", "study to test 2");
        study2.setStatus(VisibilityStatus.PRIVATE);
        study2.addUser(user3);

        Study study3 = buildStudy("study_acc3", "study to test 3");
        study3.setStatus(VisibilityStatus.PRIVATE);
        study3.addUser(user2);

        EntityTransaction tnx = entityManager.getTransaction();
        tnx.begin();

        entityManager.persist(user1);
        entityManager.persist(user2);
        entityManager.persist(user3);

        StudyPersister studyPersister = new StudyPersister(DaoFactory.getInstance(entityManager), null);
        studyPersister.persist(study);
        studyPersister.persist(study2);
        studyPersister.persist(study3);
        tnx.commit();

        BIIFilterQuery query = new StudyBIIFilterQuery();

        SecureStudyFreeTextSearch secureSearch = new SecureStudyFreeTextSearch();
        secureSearch.setEntityManager(entityManager);

        List<Map<StudyBrowseField, String[]>> list = secureSearch.getAllStudyBrowseFieldValuesForUser(query,
                "test_user1");
        System.out.println("list.size() = " + list.size());
        System.out.println("list = " + list);
        assertEquals(2, list.size());

        list = secureSearch.getAllStudyBrowseFieldValuesForUser(query, "test_user2");
        assertEquals(2, list.size());

        list = secureSearch.getAllStudyBrowseFieldValuesForUser(query, "curator");
        assertEquals(3, list.size());

        list = secureSearch.getAllStudyBrowseFieldValuesForUser(query, "");
        assertEquals(1, list.size());

        //      Collection<String> platforms = search.getAssayPlatforms();
        //      System.out.println("platforms = " + platforms);
    }

    @Test
    @Ignore
    public void test() throws Exception {

        Study study = buildStudy("study_acc1", "study to test");
        Assay assay = buildAssay("assay_acc2", "my assay type", study);

        //      study.addAssay(assay);
        Design design = buildDesign("study design");
        study.setDesign(design);

        //ToDo: Use AssayResult
        Characteristic char1 = buildCharacteristic("organism", "specie", PropertyRole.FACTOR);
        //      assay.addCascadedPropertyValue(buildCharacteristicValue("human", char1, "homo sapiens"));
        //      assay.addCascadedPropertyValue(buildCharacteristicValue("little mouse", char1, "Mus musculus"));

        Characteristic char2 = buildCharacteristic("size", null, PropertyRole.PROPERTY);
        //      assay.addCascadedPropertyValue(buildCharacteristicValue("big", char2, null));
        //      assay.addCascadedPropertyValue(buildCharacteristicValue("small", char2, null));

        EntityTransaction tnx = entityManager.getTransaction();
        tnx.begin();
        // MB: uses the new persistence API
        new StudyPersister(DaoFactory.getInstance(entityManager), null).persist(study);
        tnx.commit();

        FullTextSession session;
        Session deligate = (Session) entityManager.getDelegate();

        if (deligate instanceof FullTextSession) {
            session = (FullTextSession) deligate;
        } else {
            session = Search.createFullTextSession(deligate);
        }

        SearchFactory searchFactory = session.getSearchFactory();

        DirectoryProvider directoryProvider = searchFactory.getDirectoryProviders(Study.class)[0];

        ReaderProvider readerProvider = searchFactory.getReaderProvider();
        IndexReader reader = readerProvider.openReader(directoryProvider);

        BitSet bitSet = new BitSet(reader.maxDoc());

        //      Term term1 = new Term(FilterField.ORGANISM.getName(), "mouse");
        //      Term term2 = new Term(FilterField.ORGANISM.getName(), "little");

        Analyzer analyzer = new StandardAnalyzer();

        StringReader stringReader = new StringReader("first endpoint");
        TokenStream tokenStream = analyzer.tokenStream(null, stringReader);

        TermsFilter filter = new TermsFilter();
        while (true) {
            Token token = tokenStream.next();
            if (token == null)
                break;

            System.out.println("token = " + token);
            filter.addTerm(new Term(FilterField.ENDPOINT_NAME.getName(), token.termText()));

        }

        //      TermsFilter filter = new TermsFilter();
        //      filter.addTerm(term1);
        //      filter.addTerm(term2);

        BitSet bitSet1 = filter.bits(reader);
        System.out.println("bitSet1.cardinality() = " + bitSet1.cardinality());

        //      TermDocs termDocs = reader.termDocs(term);
        //      while (termDocs.next()) {
        //         bitSet.set(termDocs.doc());
        //      }
        //
        //      System.out.println("bitSet.cardinality() = " + bitSet.cardinality());

    }

    protected Study buildStudy(String acc, String title) {
        Study study = new Study(title);
        study.setAcc(acc);
        study.setDescription("Very long mock Study description");
        study.setObjective("Very important Study objective");

        return study;
    }

    protected Design buildDesign(String name) {
        Design design = new Design(name);

        return design;
    }

    protected Assay buildAssay(String acc, String type, Study study) {
        Assay assay = new Assay(study);
        assay.setAcc(acc);
        ReferenceSource reference = new ReferenceSource("OBI-test");
        reference.setAcc("test acc");

        // MB: doing it with the new persistence API
        //entityManager.persist(reference);

        AssayTechnology assayType = new AssayTechnology("at_1", type, reference);
        //entityManager.persist(assayType);

        Measurement measurement = new Measurement("ep_1", "first endpoint", reference);
        //entityManager.persist(endPoint);

        assay.setTechnology(assayType);
        assay.setMeasurement(measurement);
        return assay;
    }

    protected CharacteristicValue buildCharacteristicValue(String valueName, Characteristic property,
            String ontologyTermName) {

        CharacteristicValue characteristic = new CharacteristicValue(property);
        characteristic.setValue(valueName);

        if (ontologyTermName != null) {
            ReferenceSource referenceSource = new ReferenceSource("new ref source");
            OntologyEntry chTerm1 = new OntologyTerm(ontologyTermName, ontologyTermName, referenceSource);

            characteristic.addOntologyTerm((OntologyTerm) chTerm1);
        }

        // MB: new persistence API used
        // persisterHelper.preparePropertyValue(characteristic);
        // entityManager.persist(characteristic);

        return characteristic;
    }

    protected Characteristic buildCharacteristic(String propertyName, String ontologyTermName, PropertyRole role) {

        //Create and add characteristics
        Characteristic property = new Characteristic(1);
        property.setValue(propertyName);

        if (ontologyTermName != null) {
            ReferenceSource referenceSource = new ReferenceSource("new ref source");
            OntologyEntry chTerm1 = new OntologyTerm(ontologyTermName, ontologyTermName, referenceSource);

            property.addOntologyTerm((OntologyTerm) chTerm1);
        }

        property.setRole(role);
        return property;
    }
}