ProductSearchService.java
package estore.business;
import java.util.List;
import estore.data.Product;
import estore.logging.ILogger;
import estore.logging.Logger;
public class ProductSearchService {
private final IProductService productService;
private final ILogger logger;
public ProductSearchService(IProductService productService) {
this(productService, new Logger());
}
public ProductSearchService(IProductService productService, ILogger logger) {
this.productService = productService;
this.logger = logger;
}
public List<Product> search(SearchQuery query) {
logger.info("Executing search query with id=" + query.getId() + ", name=" + query.getName() + ", year=" + query.getYear());
return productService.searchProducts(query.getId(), query.getName(), query.getYear());
}
public List<Product> searchByName(String name) {
return search(new SearchQuery("", name, ""));
}
public List<Product> searchByIdAndName(String id, String name) {
return search(new SearchQuery(id, name, ""));
}
public List<Product> searchByYear(String year) {
return search(new SearchQuery("", "", year));
}
public List<Product> handleSearch(String id, String name, String year) {
return search(new SearchQuery(id, name, year));
}
public static int[] parseYearRange(String year) {
if (year == null || year.isEmpty()) {
return new int[] { 0, 0, 0 };
}
int[] values = new int[3];
values[0] = 0;
values[1] = 0;
values[2] = 0;
if (!year.contains("-")) {
values[0] = Integer.parseInt(year.substring(0, 4));
values[1] = 1;
return values;
}
if (year.length() == 5) {
if (year.indexOf('-') == 0) {
values[0] = Integer.parseInt(year.substring(1, 5));
values[1] = 0;
}
if (year.indexOf('-') == 4) {
values[0] = Integer.parseInt(year.substring(0, 4));
values[1] = 4;
}
return values;
}
if (year.length() == 9) {
values[0] = Integer.parseInt(year.substring(0, 4));
values[2] = Integer.parseInt(year.substring(5, 9));
values[1] = 4;
}
return values;
}
public static boolean hasMultiWordName(String name) {
return name != null && name.contains(" ");
}
}