001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * anguenot 011 * 012 * $Id: DateRangeParser.java 20577 2007-06-16 09:26:07Z sfermigier $ 013 */ 014 015package org.nuxeo.ecm.platform.audit.api.query; 016 017import java.util.Calendar; 018import java.util.Date; 019import java.util.HashMap; 020import java.util.Map; 021 022/** 023 * Date range parser. 024 * 025 * @author <a href="mailto:ja@nuxeo.com">Julien Anguenot</a> 026 */ 027public final class DateRangeParser { 028 029 // Utility class. 030 private DateRangeParser() { 031 } 032 033 public static Date parseDateRangeQuery(Date now, String dateRangeQuery) throws AuditQueryException { 034 try { 035 Calendar calendar = Calendar.getInstance(); 036 calendar.setTime(now); 037 if (dateRangeQuery != null) { 038 Map<String, Integer> parsed = parseQuery(dateRangeQuery); 039 if (parsed.containsKey(DateRangeQueryConstants.HOUR)) { 040 calendar.add(Calendar.HOUR_OF_DAY, -parsed.get(DateRangeQueryConstants.HOUR)); 041 } 042 if (parsed.containsKey(DateRangeQueryConstants.MIN)) { 043 calendar.add(Calendar.MINUTE, -parsed.get(DateRangeQueryConstants.MIN)); 044 } 045 } 046 return calendar.getTime(); 047 } catch (NumberFormatException nfe) { 048 throw new AuditQueryException("Invalid query format...", nfe); 049 } 050 } 051 052 private static Map<String, Integer> parseQuery(String query) throws AuditQueryException { 053 Map<String, Integer> parsed = new HashMap<String, Integer>(); 054 055 query = query.trim(); 056 query = query.replace(" ", ""); 057 058 int offsetMinutes = query.indexOf(DateRangeQueryConstants.MIN); 059 int offsetHours = query.indexOf(DateRangeQueryConstants.HOUR); 060 061 if (offsetMinutes != -1) { 062 String sub = query.substring(0, offsetMinutes); 063 try { 064 parsed.put(DateRangeQueryConstants.MIN, Integer.parseInt(sub)); 065 } catch (NumberFormatException nfe) { 066 throw new AuditQueryException(nfe.getMessage(), nfe); 067 } 068 } 069 if (offsetHours != -1) { 070 String sub; 071 if (offsetMinutes == -1) { 072 sub = query.substring(0, offsetHours); 073 } else { 074 sub = query.substring(offsetMinutes + 1, offsetHours); 075 } 076 try { 077 parsed.put(DateRangeQueryConstants.HOUR, Integer.parseInt(sub)); 078 } catch (NumberFormatException nfe) { 079 throw new AuditQueryException(nfe.getMessage(), nfe); 080 } 081 } 082 return parsed; 083 } 084 085}