1 /*
2  * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 import javax.management.ConstructorParameters;
25 import java.util.Arrays;
26 import java.util.Collections;
27 import java.util.HashSet;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31 import java.util.SortedMap;
32 import java.util.SortedSet;
33 import java.util.TreeMap;
34 import java.util.TreeSet;
35 import javax.management.openmbean.ArrayType;
36 import javax.management.openmbean.CompositeType;
37 import javax.management.openmbean.OpenDataException;
38 import javax.management.openmbean.OpenType;
39 import javax.management.openmbean.SimpleType;
40 import javax.management.openmbean.TabularType;
41 
42 public interface TigerMXBean {
43 
44     class Point {
45         @ConstructorParameters({"x", "y"})
Point(double x, double y)46         public Point(double x, double y) {
47             this.x = x;
48             this.y = y;
49         }
50 
equals(Object o)51         public boolean equals(Object o) {
52             if (!(o instanceof Point))
53                 return false;
54             Point p = (Point) o;
55             return p.x == x && p.y == y;
56         }
57 
hashCode()58         public int hashCode() {
59             return new Double(x).hashCode() ^ new Double(y).hashCode();
60         }
61 
getX()62         public double getX() {return x;}
getY()63         public double getY() {return y;}
64         private final double x, y;
65     }
66 
67     Point Point = new Point(1.5, 2.5);
68     CompositeType PointType = MerlinMXBean.CompositeTypeMaker.make(
69         Point.class.getName(),
70         Point.class.getName(),
71         new String[] {"x", "y"},
72         new String[] {"x", "y"},
73         new OpenType[] {SimpleType.DOUBLE, SimpleType.DOUBLE});
getPoint()74     Point getPoint();
setPoint(Point x)75     void setPoint(Point x);
opPoint(Point x, Point y)76     Point opPoint(Point x, Point y);
77 
78     enum Tuiseal {AINMNEACH, GAIRMEACH, GINIDEACH, TABHARTHACH}
79     Tuiseal Enum = Tuiseal.GINIDEACH;
80     SimpleType EnumType = SimpleType.STRING;
getEnum()81     Tuiseal getEnum();
setEnum(Tuiseal x)82     void setEnum(Tuiseal x);
opEnum(Tuiseal x, Tuiseal y)83     Tuiseal opEnum(Tuiseal x, Tuiseal y);
84 
85     List<String> StringList = Arrays.asList(new String[] {"a", "b", "x"});
86     ArrayType<?> StringListType =
87         MerlinMXBean.ArrayTypeMaker.make(1, SimpleType.STRING);
getStringList()88     List<String> getStringList();
setStringList(List<String> x)89     void setStringList(List<String> x);
opStringList(List<String> x, List<String> y)90     List<String> opStringList(List<String> x, List<String> y);
91 
92     Set<String> StringSet = new HashSet<String>(StringList);
93     ArrayType<?> StringSetType = StringListType;
getStringSet()94     Set<String> getStringSet();
setStringSet(Set<String> x)95     void setStringSet(Set<String> x);
opStringSet(Set<String> x, Set<String> y)96     Set<String> opStringSet(Set<String> x, Set<String> y);
97 
98     SortedSet<String> SortedStringSet = new TreeSet<String>(StringList);
99     ArrayType<?> SortedStringSetType = StringListType;
getSortedStringSet()100     SortedSet<String> getSortedStringSet();
setSortedStringSet(SortedSet<String> x)101     void setSortedStringSet(SortedSet<String> x);
opSortedStringSet(SortedSet<String> x, SortedSet<String> y)102     SortedSet<String> opSortedStringSet(SortedSet<String> x,
103                                         SortedSet<String> y);
104 
105     Map<String,List<String>> XMap = Collections.singletonMap("yo", StringList);
106     String XMapTypeName =
107         "java.util.Map<java.lang.String, java.util.List<java.lang.String>>";
108     CompositeType XMapRowType = MerlinMXBean.CompositeTypeMaker.make(
109         XMapTypeName, XMapTypeName,
110         new String[] {"key", "value"},
111         new String[] {"key", "value"},
112         new OpenType[] {SimpleType.STRING, StringListType});
113     TabularType XMapType =
114         TabularTypeMaker.make(XMapTypeName, XMapTypeName, XMapRowType,
115                               new String[] {"key"});
getXMap()116     Map<String,List<String>> getXMap();
setXMap(Map<String,List<String>> x)117     void setXMap(Map<String,List<String>> x);
opXMap(Map<String,List<String>> x, Map<String,List<String>> y)118     Map<String,List<String>> opXMap(Map<String,List<String>> x,
119                                     Map<String,List<String>> y);
120 
121     SortedMap<String,String> XSortedMap =
122         new TreeMap<String,String>(Collections.singletonMap("foo", "bar"));
123     String XSortedMapTypeName =
124         "java.util.SortedMap<java.lang.String, java.lang.String>";
125     CompositeType XSortedMapRowType = MerlinMXBean.CompositeTypeMaker.make(
126         XSortedMapTypeName, XSortedMapTypeName,
127         new String[] {"key", "value"},
128         new String[] {"key", "value"},
129         new OpenType[] {SimpleType.STRING, SimpleType.STRING});
130     TabularType XSortedMapType =
131         TabularTypeMaker.make(XSortedMapTypeName, XSortedMapTypeName,
132                               XSortedMapRowType, new String[] {"key"});
getXSortedMap()133     SortedMap<String,String> getXSortedMap();
setXSortedMap(SortedMap<String,String> x)134     void setXSortedMap(SortedMap<String,String> x);
opXSortedMap(SortedMap<String,String> x, SortedMap<String,String> y)135     SortedMap<String,String> opXSortedMap(SortedMap<String,String> x,
136                                           SortedMap<String,String> y);
137 
138     // For bug 6319960, try constructing Set and Map with non-Comparable
139 
140     Set<Point> PointSet = new HashSet<Point>(Collections.singleton(Point));
141     ArrayType<?> PointSetType =
142         MerlinMXBean.ArrayTypeMaker.make(1, PointType);
getPointSet()143     Set<Point> getPointSet();
setPointSet(Set<Point> x)144     void setPointSet(Set<Point> x);
opPointSet(Set<Point> x, Set<Point> y)145     Set<Point> opPointSet(Set<Point> x, Set<Point> y);
146 
147     Map<Point,Point> PointMap = Collections.singletonMap(Point, Point);
148     String PointMapTypeName =
149         "java.util.Map<" + Point.class.getName() + ", " +
150         Point.class.getName() + ">";
151     CompositeType PointMapRowType = MerlinMXBean.CompositeTypeMaker.make(
152         PointMapTypeName, PointMapTypeName,
153         new String[] {"key", "value"},
154         new String[] {"key", "value"},
155         new OpenType[] {PointType, PointType});
156     TabularType PointMapType =
157         TabularTypeMaker.make(PointMapTypeName, PointMapTypeName,
158                               PointMapRowType, new String[] {"key"});
getPointMap()159     Map<Point,Point> getPointMap();
setPointMap(Map<Point,Point> x)160     void setPointMap(Map<Point,Point> x);
opPointMap(Map<Point,Point> x, Map<Point,Point> y)161     Map<Point,Point> opPointMap(Map<Point,Point> x, Map<Point,Point> y);
162 
163     static class TabularTypeMaker {
make(String typeName, String description, CompositeType rowType, String[] indexNames)164         static TabularType make(String typeName, String description,
165                                 CompositeType rowType, String[] indexNames) {
166             try {
167                 return new TabularType(typeName, description, rowType,
168                                        indexNames);
169             } catch (OpenDataException e) {
170                 throw new Error(e);
171             }
172         }
173     }
174 }
175