/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.spring; import java.util.Map; import org.joda.beans.BeanBuilder; import org.joda.beans.BeanDefinition; import org.joda.beans.JodaBeanUtils; import org.joda.beans.MetaProperty; import org.joda.beans.impl.direct.DirectBean; import org.joda.beans.impl.direct.DirectMetaBean; import org.joda.beans.impl.direct.DirectMetaPropertyMap; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; /** * Spring factory bean that builds on Joda-Beans. * <p> * This provides a singleton factory bean, where the configuration can be set using Joda-Beans. * * @param <T> the type */ @BeanDefinition public abstract class SpringFactoryBean<T> extends DirectBean implements FactoryBean<T>, InitializingBean { /** * The created type. */ private final Class<T> _type; /** * The created object. */ private T _object; /** * Creates an instance. * * @param type the type of the factory, not null */ public SpringFactoryBean(Class<T> type) { _type = type; } //------------------------------------------------------------------------- @Override public final void afterPropertiesSet() throws Exception { _object = createObject(); } @Override public final T getObject() { return _object; } /** * Gets the object, creating if necessary. * * @return the object */ public final T getObjectCreating() { T object = getObject(); if (object == null) { object = createObject(); } return object; } @Override public final Class<?> getObjectType() { return _type; } @Override public final boolean isSingleton() { return true; } /** * Override to create the singleton. * * @return the singleton, not null */ protected abstract T createObject(); //------------------------- AUTOGENERATED START ------------------------- ///CLOVER:OFF /** * The meta-bean for {@code SpringFactoryBean}. * @return the meta-bean, not null */ @SuppressWarnings("rawtypes") public static SpringFactoryBean.Meta meta() { return SpringFactoryBean.Meta.INSTANCE; } /** * The meta-bean for {@code SpringFactoryBean}. * @param <R> the bean's generic type * @param cls the bean's generic type * @return the meta-bean, not null */ @SuppressWarnings("unchecked") public static <R> SpringFactoryBean.Meta<R> metaSpringFactoryBean(Class<R> cls) { return SpringFactoryBean.Meta.INSTANCE; } static { JodaBeanUtils.registerMetaBean(SpringFactoryBean.Meta.INSTANCE); } @SuppressWarnings("unchecked") @Override public SpringFactoryBean.Meta<T> metaBean() { return SpringFactoryBean.Meta.INSTANCE; } //----------------------------------------------------------------------- @Override public SpringFactoryBean<T> clone() { return JodaBeanUtils.cloneAlways(this); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj != null && obj.getClass() == this.getClass()) { return true; } return false; } @Override public int hashCode() { int hash = getClass().hashCode(); return hash; } @Override public String toString() { StringBuilder buf = new StringBuilder(32); buf.append("SpringFactoryBean{"); int len = buf.length(); toString(buf); if (buf.length() > len) { buf.setLength(buf.length() - 2); } buf.append('}'); return buf.toString(); } protected void toString(StringBuilder buf) { } //----------------------------------------------------------------------- /** * The meta-bean for {@code SpringFactoryBean}. * @param <T> the type */ public static class Meta<T> extends DirectMetaBean { /** * The singleton instance of the meta-bean. */ @SuppressWarnings("rawtypes") static final Meta INSTANCE = new Meta(); /** * The meta-properties. */ private final Map<String, MetaProperty<?>> _metaPropertyMap$ = new DirectMetaPropertyMap( this, null); /** * Restricted constructor. */ protected Meta() { } @Override public BeanBuilder<? extends SpringFactoryBean<T>> builder() { throw new UnsupportedOperationException("SpringFactoryBean is an abstract class"); } @SuppressWarnings({"unchecked", "rawtypes" }) @Override public Class<? extends SpringFactoryBean<T>> beanType() { return (Class) SpringFactoryBean.class; } @Override public Map<String, MetaProperty<?>> metaPropertyMap() { return _metaPropertyMap$; } //----------------------------------------------------------------------- } ///CLOVER:ON //-------------------------- AUTOGENERATED END -------------------------- }