38 * Abstract factory for creating specialized types |
38 * Abstract factory for creating specialized types |
39 */ |
39 */ |
40 public abstract class ObjectFactory<T> { |
40 public abstract class ObjectFactory<T> { |
41 private static final JdkJfrConsumer PRIVATE_ACCESS = JdkJfrConsumer.instance(); |
41 private static final JdkJfrConsumer PRIVATE_ACCESS = JdkJfrConsumer.instance(); |
42 |
42 |
43 public final static String TYPE_PREFIX_VERSION_1 = "com.oracle.jfr.types."; |
43 private final static String TYPE_PREFIX_VERSION_1 = "com.oracle.jfr.types."; |
44 public final static String TYPE_PREFIX_VERSION_2 = Type.TYPES_PREFIX; |
44 private final static String TYPE_PREFIX_VERSION_2 = Type.TYPES_PREFIX; |
45 public final static String STACK_FRAME_VERSION_1 = TYPE_PREFIX_VERSION_1 + "StackFrame"; |
45 public final static String STACK_FRAME_VERSION_1 = TYPE_PREFIX_VERSION_1 + "StackFrame"; |
46 public final static String STACK_FRAME_VERSION_2 = TYPE_PREFIX_VERSION_2 + "StackFrame"; |
46 public final static String STACK_FRAME_VERSION_2 = TYPE_PREFIX_VERSION_2 + "StackFrame"; |
47 |
47 |
48 public static ObjectFactory<?> create(Type type, TimeConverter timeConverter) { |
48 static ObjectFactory<?> create(Type type, TimeConverter timeConverter) { |
49 switch (type.getName()) { |
49 switch (type.getName()) { |
50 case "java.lang.Thread": |
50 case "java.lang.Thread": |
51 return createThreadFactory(type, timeConverter); |
51 return createThreadFactory(type, timeConverter); |
52 case TYPE_PREFIX_VERSION_1 + "StackFrame": |
52 case TYPE_PREFIX_VERSION_1 + "StackFrame": |
53 case TYPE_PREFIX_VERSION_2 + "StackFrame": |
53 case TYPE_PREFIX_VERSION_2 + "StackFrame": |
134 }; |
134 }; |
135 } |
135 } |
136 |
136 |
137 private final ObjectContext objectContext; |
137 private final ObjectContext objectContext; |
138 |
138 |
139 ObjectFactory(Type type, TimeConverter timeConverter) { |
139 private ObjectFactory(Type type, TimeConverter timeConverter) { |
140 this.objectContext = new ObjectContext(null, type.getFields(), timeConverter); |
140 this.objectContext = new ObjectContext(null, type.getFields(), timeConverter); |
141 } |
141 } |
142 |
142 |
143 T createObject(long id, Object value) { |
143 T createObject(long id, Object value) { |
144 if (value == null) { |
144 if (value == null) { |