Package org.apache.bval

Source Code of org.apache.bval.MetaBeanBuilder

/**
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You 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.apache.bval;


import org.apache.bval.model.MetaBean;
import org.apache.commons.lang.ClassUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.HashMap;
import java.util.Map;

/**
* Description: internal implementation class to construct
* metabeans with factories<br/>
*/
public class MetaBeanBuilder {
  private static final Log log = LogFactory.getLog(MetaBeanBuilder.class);

  /**
   * here you can install different kinds of factories to create MetaBeans from
   */
  private MetaBeanFactory[] factories;

  /**
   * Create a new MetaBeanBuilder instance.
   */
  public MetaBeanBuilder() {
    this(new MetaBeanFactory[]{new IntrospectorMetaBeanFactory()});
  }

  /**
   * Create a new MetaBeanBuilder instance.
   * @param factories
   */
  public MetaBeanBuilder(MetaBeanFactory[] factories) {
    setFactories(factories);
  }

  /**
   * Get the configured set of {@link MetaBeanFactory} objects.
   * @return {@link MetaBeanFactory} array
   */
  public MetaBeanFactory[] getFactories() {
    return factories;
  }

  /**
   * Set the array of {@link MetaBeanFactory} instances with which to enrich {@link MetaBean}s.
   * @param factories
   */
  public void setFactories(MetaBeanFactory[] factories) {
    this.factories = factories;
  }

  /**
   * Build a {@link MetaBean} for a given id.
   * @param beanInfoId
   * @return MetaBean
   * @throws Exception if unable to build
   */
  public MetaBean buildForId(String beanInfoId) throws Exception {
    throw new IllegalArgumentException("MetaBean " + beanInfoId + " not found");
  }

/*
    *//* convenience method *//*
    public void addLastFactory(MetaBeanFactory metaBeanFactory) {
        if (factories == null) factories = new MetaBeanFactory[1];
        else {
            MetaBeanFactory[] facold = factories;
            factories = new MetaBeanFactory[facold.length + 1];
            System.arraycopy(facold, 0, factories, 0, facold.length);
        }
        factories[factories.length - 1] = metaBeanFactory;
        updateXmlFactory();
    }

    */

  /*
   * convenience method
   *//*
    public void addFirstFactory(MetaBeanFactory metaBeanFactory) {
        if (factories == null) factories = new MetaBeanFactory[1];
        else {
            MetaBeanFactory[] facold = factories;
            factories = new MetaBeanFactory[facold.length + 1];
            System.arraycopy(facold, 0, factories, 1, facold.length);
        }
        factories[0] = metaBeanFactory;
        updateXmlFactory();
    }*/

  /**
   * Build beans for all known ids.  Default implementation returns an empty map.
   * @return Map of String : MetaBean
   */
  public Map<String, MetaBean> buildAll() throws Exception {
    return new HashMap<String, MetaBean>();
  }

  /**
   * Find the named class.
   * @param className
   * @return Class found or null
   */
  protected Class<?> findLocalClass(String className) {
    if (className != null) {
      try {
        return ClassUtils.getClass(className);
      } catch (ClassNotFoundException e) {
        log.trace("class not found: " + className, e);
      }
    }
    return null;
  }

  /**
   * Build a MetaBean for the specified class.
   * @param clazz
   * @return MetaBean
   * @throws Exception
   */
  public MetaBean buildForClass(Class<?> clazz) throws Exception {
    MetaBean meta = new MetaBean();
    if (clazz != null) { // local class here?
      meta.setBeanClass(clazz);
      meta.setId(clazz.getName()); // default id = full class name!
    }
    for (MetaBeanFactory factory : factories) {
      factory.buildMetaBean(meta);
    }
    return meta;
  }

}
TOP

Related Classes of org.apache.bval.MetaBeanBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.