/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * 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 org.seasar.framework.container.deployer; import org.seasar.framework.container.AutoBindingDef; import org.seasar.framework.container.ComponentDef; import org.seasar.framework.container.ComponentDeployer; import org.seasar.framework.container.ConstructorAssembler; import org.seasar.framework.container.MethodAssembler; import org.seasar.framework.container.PropertyAssembler; import org.seasar.framework.container.assembler.AssemblerFactory; import org.seasar.framework.util.ClassUtil; import org.seasar.framework.util.StringUtil; /** * {@link ComponentDeployer}の抽象クラスです。 * * @author higa * */ public abstract class AbstractComponentDeployer implements ComponentDeployer { private ComponentDef componentDef; private ConstructorAssembler constructorAssembler; private PropertyAssembler propertyAssembler; private MethodAssembler initMethodAssembler; private MethodAssembler destroyMethodAssembler; /** * {@link AbstractComponentDeployer}を作成します。 * * @param componentDef */ public AbstractComponentDeployer(ComponentDef componentDef) { this.componentDef = componentDef; setupAssembler(); } /** * {@link ComponentDef}を返します。 * * @return {@link ComponentDef} */ protected final ComponentDef getComponentDef() { return componentDef; } /** * {@link ConstructorAssembler}を返します。 * * @return {@link ConstructorAssembler} */ protected final ConstructorAssembler getConstructorAssembler() { return constructorAssembler; } /** * {@link PropertyAssembler}を返します。 * * @return {@link PropertyAssembler} */ protected final PropertyAssembler getPropertyAssembler() { return propertyAssembler; } /** * 初期化用の {@link MethodAssembler}を返します。 * * @return 初期化用の {@link MethodAssembler} */ protected final MethodAssembler getInitMethodAssembler() { return initMethodAssembler; } /** * 破棄用の {@link MethodAssembler}を返します。 * * @return 破棄用の {@link MethodAssembler} */ protected final MethodAssembler getDestroyMethodAssembler() { return destroyMethodAssembler; } /** * アセンブラを準備します。 */ protected void setupAssembler() { AutoBindingDef autoBindingDef = componentDef.getAutoBindingDef(); constructorAssembler = autoBindingDef .createConstructorAssembler(componentDef); propertyAssembler = autoBindingDef .createPropertyAssembler(componentDef); initMethodAssembler = AssemblerFactory .createInitMethodAssembler(componentDef); destroyMethodAssembler = AssemblerFactory .createDestroyMethodAssembler(componentDef); } /** * コンポーネント名を返します。 * * @return コンポーネント名 */ protected String getComponentName() { String componentName = componentDef.getComponentName(); if (componentName == null) { componentName = ClassUtil.getShortClassName(componentDef .getComponentClass()); componentName = StringUtil.decapitalize(componentName); } return componentName; } }