All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.exolab.castor.xml.util.ResolverStrategy Maven / Gradle / Ivy

Go to download

The core XML data binding framework with support for marshalling Java objects to and unmarshalling from XML documents.

The newest version!
/*
 * Copyright 2007 Joachim Grueneis
 *
 * 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.exolab.castor.xml.util;

import java.util.Map;

import org.castor.xml.AbstractInternalContext;
import org.exolab.castor.mapping.ClassDescriptor;
import org.exolab.castor.xml.ResolverException;
import org.exolab.castor.xml.XMLClassDescriptor;

/**
 * A resolver strategy implements how ClassDescriptor's are found for a given class. It uses
 * multiple ResolveCommand's for first time resolution, but also some caching of already evaluated
 * classes.
 * 
 * @author Joachim Grueneis
 * @version $Revision$ $Date$
 * @since 1.2
 */
public interface ResolverStrategy {
  /** To set the class loader property for resolving. */
  String PROPERTY_CLASS_LOADER = "org.exolab.castor.xml.util.ResolverStrategy.ClassLoader";

  /** To set the use introspection property for resolving. */
  String PROPERTY_USE_INTROSPECTION =
      "org.exolab.castor.xml.util.ResolverStrategy.useIntrospection";

  /** To set the introspector property for resolving. */
  String PROPERTY_INTROSPECTOR = "org.exolab.castor.xml.util.ResolverStrategy.Introspector";

  /** To set the LoadPackageMappings property for resolving. */
  String PROPERTY_LOAD_PACKAGE_MAPPINGS =
      "org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings";

  /** To set the mapping loader property for resolving. */
  String PROPERTY_MAPPING_LOADER = "org.exolab.castor.xml.util.ResolverStrategy.MappingLoader";

  /**
   * To set properties for strategy and/or commands.
   * 
   * @param key name of the property
   * @param value value the property is set to
   */
  void setProperty(final String key, final Object value);

  /**
   * Implementes a strategy how a class is resolved into a list of class descriptors.
   * 
   * @param resolverResults to put the resolver reszlts into
   * @param className the class to resolve
   * @return the ClassDescriptor for the class or null if the class couldn't be resolved
   * @throws ResolverException in case that resolving fails fatally
   */
  ClassDescriptor resolveClass(final ResolverResults resolverResults, final String className)
      throws ResolverException;

  /**
   * Implementes a strategy how a package is resolved into a list of class descriptors.
   * 
   * @param resolverResults to put the resolver reszlts into
   * @param packageName the package to resolve
   * @throws ResolverException in case that resolving fails fatally
   */
  void resolvePackage(ResolverResults resolverResults, String packageName) throws ResolverException;

  /**
   * As a strategy generate one or more class descriptors it needs a place to put the results to.
   * This is a minimal interface to give the strategy a place where to put generated class
   * descriptors to.
   * 
   * @author Joachim Grueneis
   * @version $Revision$
   */
  public interface ResolverResults {
    /**
     * Adds a descriptor to this caches maps.
* The descriptor is mapped both with the class name and its XML name. * * The descriptor will not be mapped with its XML name is null, the empty string * (""), or has the value of the constant INTERNAL_CONTAINER_NAME. * * If there already is a descriptor for the given className and/or the descriptor's * XML name the previously cached descriptor is replaced. * * @param className The class name to be used for mapping the given descriptor. * @param descriptor The descriptor to be mapped. * * @see #INTERNAL_CONTAINER_NAME */ void addDescriptor(String className, XMLClassDescriptor descriptor); /** * To add not only a single descriptor but a map of descriptors at once. * * @param descriptors a Map of className (String) and XMLClassDescriptor pairs */ void addAllDescriptors(Map descriptors); /** * Gets the descriptor that is mapped to the given class name. * * @param className The class name to get a descriptor for. * @return The descriptor mapped to the given name or null if no descriptor is * stored in this cache. */ XMLClassDescriptor getDescriptor(String className); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy