/* * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/** * Class used for building QueryExp instances of all every possible type * in terms of JMX API members; note that several JMX classes are private * and appears in the JDK API only by their serial form. * Comments in each case of the big switch in method getQuery() details which * API member we cover with a given query.
*/ publicclass QueryFactory extends QueryData {
/** * Creates a new instance of QueryFactory. * The name is the fully qualified class name of an MBean. * There is severe constraints on that MBean that must: * <ul> * <li>extend QueryData in order to inherit attribute values. * <li>define a RW attribute IntAtt of type int * initialized to QueryData.longValue * <li>define a RW attribute LongAtt of type long * initialized to QueryData.intValue * <li>define a RW attribute IntegerAtt of type Integer * initialized to QueryData.integerValue * <li>define a RW attribute BooleanAtt of type boolean * initialized to QueryData.booleanValue * <li>define a RW attribute DoubleAtt of type double * initialized to QueryData.doubleValue * <li>define a RW attribute FloatAtt of type float * initialized to QueryData.floatValue * <li>define a RW attribute StringAtt of type String * initialized to QueryData.stringValue * </ul>
*/ public QueryFactory(String name) { this.mbeanClassName = name;
}
/** * Returns the highest index value the method getQuery supports. * WARNING : returns 0 if buildQueries haven't been called first !
*/ publicint getSize() { return queries.size();
}
/** * Populates an ArrayList of QueryExp. * Lowest index is 1. * Highest index is returned by getSize(). * <br>The queries numbered 1 to 23 allow to cover all the underlying * Java classes of the JMX API used to build queries.
*/ publicvoid buildQueries() { if ( queries.size() == 0 ) { int smallerIntValue = intValue - 1; int biggerIntValue = intValue + 1;
// case 1: // True if the MBean is of class mbeanClassName // We cover javax.management.InstanceOfQueryExp
queries.add(Query.isInstanceOf(Query.value(mbeanClassName)));
// case 2: // True if the MBean is of class mbeanClassName // We cover javax.management.MatchQueryExp and // javax.management.ClassAttributeValueExp
queries.add(Query.match(Query.classattr(),
Query.value(mbeanClassName)));
// case 3: // True if an attribute named primitiveIntAttName of type int has // the value intValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.NumericValueExp
queries.add(Query.eq(Query.attr(primitiveIntAttName),
Query.value(intValue)));
// case 4: // True if an attribute named primitiveLongAttName of type long has // the value longValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.NumericValueExp
queries.add(Query.eq(Query.attr(primitiveLongAttName),
Query.value(longValue)));
// case 5: // True if an attribute named primitiveDoubleAttName of type double // has the value doubleValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.NumericValueExp
queries.add(Query.eq(Query.attr(primitiveDoubleAttName),
Query.value(doubleValue)));
// case 6: // True if an attribute named primitiveFloatAttName of type float // has the value floatValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.NumericValueExp
queries.add(Query.eq(Query.attr(primitiveFloatAttName),
Query.value(floatValue)));
// case 7: // True if an attribute named primitiveIntAttName of type int is // hold by an MBean of class mbeanClassName and has // the value intValue // We cover javax.management.QualifiedAttributeValueExp
queries.add(Query.eq(Query.attr(mbeanClassName, primitiveIntAttName),
Query.value(intValue)));
// case 8: // True if an attribute named stringAttName of type String has // the value stringValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.StringValueExp
queries.add(Query.eq(Query.attr(stringAttName),
Query.value(stringValue)));
// case 9: // True if an attribute named integerAttName of type Integer has // the value integerValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.NumericValueExp
queries.add(Query.eq(Query.attr(integerAttName),
Query.value(integerValue)));
// case 10: // True if an attribute named primitiveBooleanAttName of type boolean // has the value booleanValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to EQ and javax.management.BooleanValueExp
queries.add(Query.eq(Query.attr(primitiveBooleanAttName),
Query.value(booleanValue)));
// case 11: // True if an attribute named primitiveIntAttName of type int has // not the value smallerIntValue // We cover javax.management.NotQueryExp
queries.add(Query.not(Query.eq(Query.attr(primitiveIntAttName),
Query.value(smallerIntValue))));
// case 12: // True if either // an attribute named primitiveIntAttName of type int has // the value intValue // or // an attribute named primitiveLongAttName of type long has // the value longValue // We cover javax.management.OrQueryExp
queries.add(Query.or(
Query.eq(Query.attr(primitiveIntAttName),
Query.value(intValue)),
Query.eq(Query.attr(primitiveLongAttName),
Query.value(longValue))));
// case 13: // True if // an attribute named primitiveIntAttName of type int has // the value intValue // and // an attribute named primitiveLongAttName of type long has // the value longValue // We cover javax.management.AndQueryExp
queries.add(Query.and(
Query.eq(Query.attr(primitiveIntAttName),
Query.value(intValue)),
Query.eq(Query.attr(primitiveLongAttName),
Query.value(longValue))));
// case 14: // True if an attribute named primitiveIntAttName of type int has // the value intValue // We cover javax.management.InQueryExp
ValueExp[] inArray = {Query.value(intValue)};
queries.add(Query.in(Query.attr(primitiveIntAttName), inArray));
// case 15: // True if an attribute named primitiveIntAttName of type int has // its value in between smallerIntValue and biggerIntValue // We cover javax.management.BetweenRelQueryExp
queries.add(Query.between(Query.attr(primitiveIntAttName),
Query.value(smallerIntValue),
Query.value(biggerIntValue)));
// case 16: // True if an attribute named primitiveIntAttName of type int has // a value greater than smallerIntValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to GT
queries.add(Query.gt(Query.attr(primitiveIntAttName),
Query.value(smallerIntValue)));
// case 17: // True if an attribute named primitiveIntAttName of type int has // a value greater or equal to smallerIntValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to GE
queries.add(Query.geq(Query.attr(primitiveIntAttName),
Query.value(smallerIntValue)));
// case 18: // True if an attribute named primitiveIntAttName of type int has // a value smaller than biggerIntValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to LT
queries.add(Query.lt(Query.attr(primitiveIntAttName),
Query.value(biggerIntValue)));
// case 19: // True if an attribute named primitiveIntAttName of type int has // a value smaller or equal to biggerIntValue // We cover javax.management.BinaryRelQueryExp with // a relOp equal to LE
queries.add(Query.leq(Query.attr(primitiveIntAttName),
Query.value(biggerIntValue)));
// case 20: // True if an attribute named primitiveIntAttName of type int has // a value equal to intValue minus zero // We cover javax.management.BinaryRelQueryExp with // a relOp equal to MINUS
queries.add(Query.eq(Query.attr(primitiveIntAttName),
Query.minus(Query.value(intValue), Query.value(0))));
// case 21: // True if an attribute named primitiveIntAttName of type int has // a value equal to intValue plus zero // We cover javax.management.BinaryRelQueryExp with // a relOp equal to PLUS
queries.add(Query.eq(Query.attr(primitiveIntAttName),
Query.plus(Query.value(intValue), Query.value(0))));
// case 22: // True if an attribute named primitiveIntAttName of type int has // a value equal to intValue divided by one // We cover javax.management.BinaryRelQueryExp with // a relOp equal to DIV
queries.add(Query.eq(Query.attr(primitiveIntAttName),
Query.div(Query.value(intValue), Query.value(1))));
// case 23: // True if an attribute named primitiveIntAttName of type int has // a value equal to intValue multiplicated by one // We cover javax.management.BinaryRelQueryExp with // a relOp equal to TIMES
queries.add(Query.eq(Query.attr(primitiveIntAttName),
Query.times(Query.value(intValue), Query.value(1))));
// case 24: // That query is a complex one that combines within a big AND // queries with index 2 to 23 inclusive. But because a List is // zero based, we must decrement all indexes by 1 when retrieving // any previously stored query.
QueryExp q2_3 = Query.and(queries.get(2-1), queries.get(3-1));
QueryExp q4_5 = Query.and(queries.get(4-1), queries.get(5-1));
QueryExp q6_7 = Query.and(queries.get(6-1), queries.get(7-1));
QueryExp q8_9 = Query.and(queries.get(8-1), queries.get(9-1));
QueryExp q10_11 = Query.and(queries.get(10-1), queries.get(11-1));
QueryExp q12_13 = Query.and(queries.get(12-1), queries.get(13-1));
QueryExp q14_15 = Query.and(queries.get(14-1), queries.get(15-1));
QueryExp q16_17 = Query.and(queries.get(16-1), queries.get(17-1));
QueryExp q18_19 = Query.and(queries.get(18-1), queries.get(19-1));
QueryExp q20_21 = Query.and(queries.get(20-1), queries.get(21-1));
QueryExp q22_23 = Query.and(queries.get(22-1), queries.get(23-1));
QueryExp q2_5 = Query.and(q2_3, q4_5);
QueryExp q6_9 = Query.and(q6_7, q8_9);
QueryExp q10_13 = Query.and(q10_11, q12_13);
QueryExp q14_17 = Query.and(q14_15, q16_17);
QueryExp q18_21 = Query.and(q18_19, q20_21);
QueryExp q2_9 = Query.and(q2_5, q6_9);
QueryExp q10_17 = Query.and(q10_13, q14_17);
QueryExp q18_23 = Query.and(q18_21, q22_23);
QueryExp q2_17 = Query.and(q2_9, q10_17);
queries.add(Query.and(q2_17, q18_23));
// case 25: // Complex query mixing AND and OR.
queries.add(Query.or(q6_9, q18_23));
}
}
/** * Returns a QueryExp taken is the ArrayList populated by buildQueries(). * Lowest index is 1. * Highest index is returned by getSize(). * <br>The queries numbered 1 to 23 allow to cover all the underlying * Java classes of the JMX API used to build queries.
*/ public QueryExp getQuery(int index) { return queries.get(index - 1);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.