/* * Copyright 2014 NAVER Corp. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.bootstrap.plugin; /** * @author Jongho Moon * */ public abstract class ObjectFactory { private final String className; private final Object[] arguments; private ObjectFactory(String className, Object[] arguments) { this.className = className; this.arguments = arguments; } public String getClassName() { return className; } public Object[] getArguments() { return arguments; } public static ObjectFactory byConstructor(String className, Object... args) { return new ByConstructor(className, args); } public static ObjectFactory byStaticFactory(String className, String factoryMethodName, Object... args) { return new ByStaticFactoryMethod(className, factoryMethodName, args); } public static class ByConstructor extends ObjectFactory { public ByConstructor(String className, Object[] arguments) { super(className, arguments); } } public static class ByStaticFactoryMethod extends ObjectFactory { private final String factoryMethodName; public ByStaticFactoryMethod(String className, String factoryMethodName, Object[] arguments) { super(className, arguments); this.factoryMethodName = factoryMethodName; } public String getFactoryMethodName() { return factoryMethodName; } } public static class ByFactoryObject extends ObjectFactory { private final ObjectFactory recipe; private final String factoryMethod; public ByFactoryObject(String className, ObjectFactory recipe, String factoryMethod, Object[] arguments) { super(className, arguments); this.recipe = recipe; this.factoryMethod = factoryMethod; } public ObjectFactory getRecipe() { return recipe; } public String getFactoryMethod() { return factoryMethod; } } }