/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: LogQuery.java,v 1.4 2008/06/25 05:43:35 qcheng Exp $ * */ /* * Portions Copyrighted [2011] [ForgeRock AS] */ package com.sun.identity.log; import java.util.ArrayList; /** * LogQuery defines the query format that the reader api supports. * This class contains a list of individual query elements * and also stores information about whether all the query to * be satisfied or any one to be satisfied. It also allows * caller to set required number of most recent records and * to specify the sortby field name (optional). * @supported.all.api */ public class LogQuery { /** * matching condition, values of globalOperand. * All the queries to be applied successfully */ static public final int MATCH_ALL_CONDITIONS = 1; /* Any one of the query must be true */ static public final int MATCH_ANY_CONDITION = 2; /** * when maximum records asked * Most recent maximum number of records to be collected. * Here maximum number will be as stored in the configuration. */ static public final int MOST_RECENT_MAX_RECORDS = -1; /** * All the records that matches query criteria (if any) * will be retrieved. Maximum number of records as configured * will be ignored. */ static public final int ALL_RECORDS = -2; // private attributes private int maxRecord; private int globalOperand; private ArrayList queries; /* list of QueryElement object */ private ArrayList columns; /* columns requested */ private String sortBy; /** * Default constructor * It creates the new object and assigns space to them. * It sets default values when applicable. **/ public LogQuery() { this.maxRecord = LogQuery.MOST_RECENT_MAX_RECORDS; this.globalOperand = LogQuery.MATCH_ANY_CONDITION; this.queries = null; this.columns = null; this.sortBy = null; } /** * Customized constructor to set only maxrecord. * * @param max_record is maximum number of most recent records to be * returned. */ public LogQuery(int max_record) { this.maxRecord = max_record; this.globalOperand = LogQuery.MATCH_ANY_CONDITION; this.queries = null; this.columns = null; this.sortBy = null; } /** * Customized constructor. * * @param max_Record the maximum number of most recent records * to be returned * @param matchCriteria whether all queries or any one to match. * @param sortingBy fieldname on which records to be sorted. * @throws IllegalArgumentException if any of the * max_Record/matchCriteria is not valid. */ public LogQuery(int max_Record, int matchCriteria, String sortingBy) throws IllegalArgumentException { if (max_Record < LogQuery.ALL_RECORDS) { throw new IllegalArgumentException( "max_Record should be greater than LogQuery.ALL_RECORDS"); } else { this.maxRecord = max_Record; } if ((matchCriteria > LogQuery.MATCH_ANY_CONDITION) || (matchCriteria < LogQuery.MATCH_ALL_CONDITIONS)) { throw new IllegalArgumentException( "matchCriteria should be LogQuery.MATCH_ANY_CONDITION or " + "LogQuery.MATCH_ALL_CONDITIONS"); } else { this.globalOperand = matchCriteria; } if (sortingBy != null) { this.sortBy = sortingBy; } this.queries = null; this.columns = null; } /** * Sets the globalOperand field to either any query criteria * match or to match all the criteria. * * @param no the value to set to globalOperand * @throws IllegalArgumentException when parameter is passed as * neither all nor any match. */ public void setGlobalOperand (int no) throws IllegalArgumentException { if (no > LogQuery.MATCH_ANY_CONDITION) { IllegalArgumentException ie = new IllegalArgumentException( "parameter should be LogQuery.MATCH_ANY_CONDITION or " + "LogQuery.MATCH_ALL_CONDITIONS"); throw (ie); } else if (no < LogQuery.MATCH_ALL_CONDITIONS) { IllegalArgumentException ie = new IllegalArgumentException( "parameter should be LogQuery.MATCH_ANY_CONDITION or " + "LogQuery.MATCH_ALL_CONDITIONS"); throw (ie); } this.globalOperand = no; } /* * Sets maxRecord i.e. maximum number of records to return to the * user specified value. * It checks whether it exceeds the configured maximum value or not. * * @param value the maximum number of records to return. */ public void setMaxRecord(int value) { if (value < LogQuery.ALL_RECORDS) { return; } this.maxRecord = value; } /** * Adds a query element to the list present in LogQuery. * * @param qryElement the query to be added into the list */ public void addQuery(QueryElement qryElement) { if (qryElement == null) { return; } if (this.queries == null) { this.queries = new ArrayList(); } this.queries.add(qryElement); } /**Returns the full list of query * * @return full list of query **/ public ArrayList getQueries() { return (this.queries); } /* * Returns max number of records asked for. * * @return max number of records asked for. */ public int getNumRecordsWanted() { return (this.maxRecord); } /** * Returns the value of global operand set in the query. * * @return the value of global operand set in the query. */ public int getGlobalOperand() { return (this.globalOperand); } /** * Set the field name on which records to be sorted. * * @param fieldName field name on which records to be sorted. */ public void setSortingField(String fieldName) { if (fieldName == null) { return; } this.sortBy = fieldName; } /** * Returns the field name on which records to be sorted. * * @return the field name on which records to be sorted. */ public String getSortingField() { return (this.sortBy); } /** * Set the columns to be selected. This applies to flatfile * logging also; means "fields", rather than "columns" then. * * @param columns to request. */ public void setColumns(ArrayList columns) { if ((columns == null) || (columns.isEmpty())) { return; } this.columns = columns; } /** * Returns the table column names selected. This applies to flatfile * logging also; means "fields", rather than "columns" then. * * @return the ArrayList of columns specified. */ public ArrayList getColumns() { return (this.columns); } }