All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.uqbar.commons.model.Search Maven / Gradle / Ivy

The newest version!
package org.uqbar.commons.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.uqbar.commons.model.annotations.TransactionalAndObservable;

/**
 * Clase base para implementar objetos cuya responsabilidad es realizar 
 * una búsqueda de objetos de dominio. Para eso delega en las implementaciones
 * verdaderas el método doSearch().
 * 
 * 
* * Base class for implementing search objects. * * @param The type of the objects to be searched. */ @TransactionalAndObservable public abstract class Search implements Serializable { private static final long serialVersionUID = -4824664309325850L; private static final Logger log = Logger.getLogger(Search.class); public static final String RESULTS = "results"; public static final String SELECTED = "selected"; public static final String SEARCH = "search"; private T selected; private List results; private final Class entityType; public Search(Class entityType) { this.entityType = entityType; results = new ArrayList(); } // *********************************************************** // ** Actions // *********************************************************** /** * The type of objects to be searched by this object. */ public Class getEntityType() { return this.entityType; } /** * Perform the search. The results will be left in the {@link #RESULTS} property. */ public void search() { this.results = null; this.results = this.doSearch(); // log StringBuilder builder = new StringBuilder("Search Result: "); for (T object : this.results) { builder.append(object + ", "); } log.debug(builder); // endlog // Adjust selection, nullify if selected object is out-filtered of the new search. if (!this.results.contains(this.getSelected())) { this.setSelected(null); } } /** * Internal method for subclasses to execute the search. * * @return The list of results. */ protected abstract List doSearch(); /** * Clear the parameters of the search. To be implemented by subclasses. */ public abstract void clear(); /** * Elimina el elemento seleccionado del repositorio subyacente. */ public abstract void removeSelected(); // *********************************************************** // ** Accessors // *********************************************************** /** * Returns the result of this search associated to the values of the search parameters present at the last * time the {@link #search()} method was invoked. */ public List getResults() { return this.results; } /** * The selected object between the search results. It gets cleared each time a search is performed. * * @return The selected object. */ public T getSelected() { return this.selected; } /** * Changes the selection. * * @param selected The new selected object. */ public void setSelected(T selected) { this.selected = selected; } public void setResults(List results) { this.results = results; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy