/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.backend.lucene; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.IndexedEmbedded; import org.hibernate.search.annotations.Store; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @Indexed public class Quote { private static final RandomGenerator randomGenerator = RandomGenerator.withDefaults(); private static final AtomicInteger counter = new AtomicInteger( 0 ); private static final int MAX_RATINGS = 5; private List<Rating> ratings = new ArrayList<>(); @Field(store = Store.YES) private String description; @DocumentId private Integer id; public Quote(Integer id, String description) { this.description = description; this.id = id; } public Integer getId() { return id; } @IndexedEmbedded private List<Rating> getRatings() { return ratings; } public void addRating(Rating rating) { ratings.add( rating ); } public static Quote random() { return getRandomQuote( null ); } public static Quote random(int id) { return getRandomQuote( id ); } private static Quote getRandomQuote(Integer id) { int docId = id == null ? counter.incrementAndGet() : id; Quote quote = new Quote( docId, randomGenerator.generateRandomPhrase() ); addRatings( quote ); return quote; } private static void addRatings(Quote quote) { for ( int i = 0; i < randomGenerator.randomIntNotZero( MAX_RATINGS ); i++ ) { quote.addRating( Rating.random() ); } } @Override public String toString() { return "Quote{" + "name='" + description + '\'' + ", id=" + id + ", ratings=" + ratings + '}'; } }