/*
* Copyright 2005 Werner Guttmann
*
* 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.castor.cpa.util;
import java.util.Iterator;
import org.exolab.castor.mapping.ClassDescriptor;
import org.exolab.castor.xml.ClassDescriptorResolver;
import org.exolab.castor.xml.ResolverException;
/**
* JDO-specific {@link ClassDescriptorResolver} instance that provides functionality
* to find or "resolve" {@link ClassDescriptor}s from a given class (name).
*
* @since 1.2.1
*/
public interface JDOClassDescriptorResolver extends ClassDescriptorResolver {
/**
* Returns the ClassDescriptor for the given class.
*
* @param type the class name to find the ClassDescriptor for
* @exception ResolverException Indicates that the given {@link Class}
* cannot be resolved.
* @return the ClassDescriptor for the given class
*/
ClassDescriptor resolve(String type) throws ResolverException;
/**
* Adds a given {@link Class} instance manually, so that it can be loaded from
* the file system.
*
* @param domainClass A given {@link Class} instance.
*/
void addClass(Class<?> domainClass);
/**
* Adds a given package name manually, so that class descriptors can be loaded from
* this package (from the file system).
*
* @param packageName A given package name.
*/
void addPackage(String packageName);
/**
* Returns an iterator over all the known descriptors in the original order they have been
* added. Each element is of type {@link ClassDescriptor}.
*
* @return an {@link Iterator} over all the known JDO class descriptors.
*/
Iterator<ClassDescriptor> descriptorIterator();
/**
* Returns the {@link ClassLoader} instance as used internally.
*
* @return The {@link ClassLoader} instance used internally.
*/
ClassLoader getClassLoader();
/**
* Registers a {@link ClassDescriptor} with the descriptor cache.
*
* @param type Type of the class described by the {@link ClassDescriptor} to register.
* @param classDescriptor The {@link ClassDescriptor} to register with the cache.
*/
void registerDescriptor(Class<?> type, ClassDescriptor classDescriptor);
}