/* * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * anguenot * * $Id: DateRangeParser.java 20577 2007-06-16 09:26:07Z sfermigier $ */ package org.eclipse.ecr.audit.api.query; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Date range parser. * * @author <a href="mailto:ja@nuxeo.com">Julien Anguenot</a> */ public final class DateRangeParser { // Utility class. private DateRangeParser() { } public static Date parseDateRangeQuery(Date now, String dateRangeQuery) throws AuditQueryException { try { Calendar calendar = Calendar.getInstance(); calendar.setTime(now); if (dateRangeQuery != null) { Map<String, Integer> parsed = parseQuery(dateRangeQuery); if (parsed.containsKey(DateRangeQueryConstants.HOUR)) { calendar.add(Calendar.HOUR_OF_DAY, -parsed.get(DateRangeQueryConstants.HOUR)); } if (parsed.containsKey(DateRangeQueryConstants.MIN)) { calendar.add(Calendar.MINUTE, -parsed.get(DateRangeQueryConstants.MIN)); } } return calendar.getTime(); } catch (NumberFormatException nfe) { throw new AuditQueryException("Invalid query format...", nfe); } } private static Map<String, Integer> parseQuery(String query) throws AuditQueryException { Map<String, Integer> parsed = new HashMap<String, Integer>(); query = query.trim(); query = query.replace(" ", ""); int offsetMinutes = query.indexOf(DateRangeQueryConstants.MIN); int offsetHours = query.indexOf(DateRangeQueryConstants.HOUR); if (offsetMinutes != -1) { String sub = query.substring(0, offsetMinutes); try { parsed.put(DateRangeQueryConstants.MIN, Integer.parseInt(sub)); } catch (NumberFormatException nfe) { throw new AuditQueryException(nfe.getMessage(), nfe); } } if (offsetHours != -1) { String sub; if (offsetMinutes == -1) { sub = query.substring(0, offsetHours); } else { sub = query.substring(offsetMinutes + 1, offsetHours); } try { parsed.put(DateRangeQueryConstants.HOUR, Integer.parseInt(sub)); } catch (NumberFormatException nfe) { throw new AuditQueryException(nfe.getMessage(), nfe); } } return parsed; } }