View Javadoc

1   /**
2    * Copyright 2005 Steve Molloy
3    * 
4    * This file is part of OV4J.
5    * 
6    * OV4J is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
7    * published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
8    * 
9    * OV4J is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
10   * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
11   * 
12   * You should have received a copy of the GNU General Public License along with OV4J; if not, write to the Free Software
13   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
14   * 
15   */
16  package org.ov4j.db4oImpl;
17  
18  import java.util.TreeSet;
19  import java.util.logging.Level;
20  import java.util.logging.Logger;
21  
22  import org.ov4j.data.Item;
23  
24  import com.db4o.query.Candidate;
25  import com.db4o.query.Evaluation;
26  
27  /**
28   * This class is used to validate multiple IDs at once.
29   * 
30   * @author smolloy
31   * 
32   */
33  public class MultipleIDValidator<C extends Comparable<? super C>> implements Evaluation {
34  	/**
35  	 * Logger for this class
36  	 */
37  	private static final Logger	logger				= Logger.getLogger(MultipleIDValidator.class.getName());
38  
39  	/** Serial Version UID. */
40  	private static final long	serialVersionUID	= 4121131424788460597L;
41  
42  	/** IDs to used for validation. */
43  	private final TreeSet<C>	ids					= new TreeSet<C>();
44  
45  	/**
46  	 * Constructor.
47  	 * 
48  	 * @param ids
49  	 *            IDs to use for validation.
50  	 */
51  	public MultipleIDValidator(final C[] ids) {
52  		if (ids != null) {
53  			for (int i = 0; i < ids.length; i++) {
54  				if (ids[i] != null) {
55  					this.ids.add(ids[i]);
56  				}
57  			}
58  		}
59  	}
60  
61  	/**
62  	 * Evaluates whether or not the candidate should be included in the results.
63  	 */
64  	public void evaluate(final Candidate c) {
65  		if (MultipleIDValidator.logger.isLoggable(Level.FINEST)) {
66  			MultipleIDValidator.logger.entering("MultipleIDValidator", "evaluate(Candidate=" + c + ")", "start");
67  		}
68  
69  		c.include((c.getObject() instanceof MappedField && ids.contains(((MappedField) c.getObject()).getObject()))
70  			|| (c.getObject() instanceof Item && ids.contains(((Item<?, C>) c.getObject()).getId())));
71  
72  		if (MultipleIDValidator.logger.isLoggable(Level.FINEST)) {
73  			MultipleIDValidator.logger.exiting("MultipleIDValidator", "evaluate(Candidate=" + c + ")", "end");
74  		}
75  	}
76  }