/* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.virtuoso.query; import static com.mysema.query.alias.Alias.$; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.io.IOException; import org.junit.Ignore; import org.junit.Test; import com.mysema.query.BooleanBuilder; import com.mysema.query.alias.Alias; import com.mysema.query.types.Predicate; import com.mysema.rdfbean.domains.NoteRevisionTermDomain; import com.mysema.rdfbean.domains.NoteRevisionTermDomain.Note; import com.mysema.rdfbean.domains.NoteRevisionTermDomain.NoteRevision; import com.mysema.rdfbean.domains.NoteRevisionTermDomain.Term; import com.mysema.rdfbean.testutil.SessionConfig; import com.mysema.rdfbean.virtuoso.AbstractConnectionTest; @Ignore @SessionConfig({ Note.class, NoteRevision.class, Term.class }) public class ComplexPathsTest extends AbstractConnectionTest implements NoteRevisionTermDomain { @Test public void OptionalPaths() throws IOException { Note note = new Note(); session.save(note); NoteRevision rev = new NoteRevision(); rev.note = note; rev.lemma = "X a X"; session.save(rev); Term term = new Term(); term.meaning = "X c X"; session.save(term); Note note2 = new Note(); note2.term = term; session.save(note2); NoteRevision rev2 = new NoteRevision(); rev2.note = note2; rev2.lemma = "X b X"; session.save(rev2); NoteRevision noteVar = Alias.alias(NoteRevision.class); BooleanBuilder builder = new BooleanBuilder(); builder.or($(noteVar.getLemma()).containsIgnoreCase("a")); builder.or($(noteVar.getNote().getTerm().getMeaning()).containsIgnoreCase("a")); assertEquals(1, session.from($(noteVar)).where(builder.getValue()).list($(noteVar)).size()); System.out.println(); builder = new BooleanBuilder(); builder.or($(noteVar.getLemma()).isNotNull().and($(noteVar.getLemma()).containsIgnoreCase("c"))); builder.or($(noteVar.getNote().getTerm()).isNotNull().and($(noteVar.getNote().getTerm().getMeaning()).containsIgnoreCase("c"))); assertEquals(1, session.from($(noteVar)).where(builder.getValue()).list($(noteVar)).size()); System.out.println(); builder = new BooleanBuilder(); builder.or($(noteVar.getLemma()).containsIgnoreCase("c")); builder.or($(noteVar.getNote().getTerm().getMeaning()).containsIgnoreCase("c")); assertEquals(1, session.from($(noteVar)).where(builder.getValue()).list($(noteVar)).size()); System.out.println(); builder = new BooleanBuilder(); builder.and($(noteVar.getNote().getLatestRevision()).eq($(noteVar))); builder.or($(noteVar.getLemma()).containsIgnoreCase("c")); builder.or($(noteVar.getNote().getTerm().getMeaning()).containsIgnoreCase("c")); assertFalse(session.from($(noteVar)).where(builder.getValue()).list($(noteVar)).isEmpty()); builder = new BooleanBuilder(); builder.or($(noteVar.getNote().getTerm().getBasicForm()).containsIgnoreCase("c")); builder.or($(noteVar.getNote().getTerm().getMeaning()).containsIgnoreCase("c")); assertEquals(1, session.from($(noteVar)).where(builder.getValue()).list($(noteVar)).size()); } @Test public void DeepPaths() { NoteRevision rev1 = new NoteRevision(); NoteRevision rev2 = new NoteRevision(); Note note = new Note(); note.latestRevision = rev1; rev1.note = note; rev2.note = note; session.saveAll(note, rev1, rev2); NoteRevision noteVar = Alias.alias(NoteRevision.class); Predicate where = $(noteVar).eq($(noteVar.getNote().getLatestRevision())); assertEquals(1, session.from($(noteVar)).where(where).list($(noteVar)).size()); } }