/* * Copyright (C) 2011 Red Hat, Inc. and/or its affiliates. * * 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.jboss.errai.marshalling.rebind; import java.util.Collection; import java.util.Map; import java.util.Set; import org.jboss.errai.codegen.meta.MetaClass; import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; /** * The definitions factory is responsible for loading / registering mapping definitions for entities that will * be marshalled. * * @author Mike Brock */ public interface DefinitionsFactory { /** * Returns true if a definition is registered matching fully-qualified class name provided. * If this DefinitionsFactory has a definition for {@param clazz}, that means it can marshall and demarshall * instances of clazz. * @param clazz fully qualified class name. * @return boolean true if defined. */ boolean hasDefinition(String clazz); /** * Return true if a definition is registered for the specified {@link MetaClass} * @param clazz class reference * @return boolean true if defined. */ boolean hasDefinition(MetaClass clazz); /** * Return true if a definition is registered for the specified Class reference. * @param clazz class reference. * @return boolean true if defined. */ boolean hasDefinition(Class<?> clazz); /** * Registers a mapping definition with the factory * @param definition a mapping definition */ void addDefinition(MappingDefinition definition); /** * Returns a definition for the fully-qualified class name provided. * @param clazz fully qualified class name. * @return an instance of the mapping definition, if defined. returns null if not defined. */ MappingDefinition getDefinition(String clazz); /** * Returns a definition for the specified {@link MetaClass} reference. * @param clazz class reference * @return an instance of the mapping definition, if defined. returns null if not defined. */ MappingDefinition getDefinition(MetaClass clazz); /** * Returns a definition for the sepcified Class reference. * @param clazz class reference * @return an instance of the mapping definition, if defined. returns null if not defined. */ MappingDefinition getDefinition(Class<?> clazz); /** * Merge the specified definition with any existing definitions in the specified definitions class hierarchy. * In general, if a mapping exists for the parent class of the specified definition, then its mappings * will be merged in -- if they're not covered by the specified mapping. Overloaded constructor mappings will * be detected, if the specified mapping does not define a constructor mapping. * @param def a mapping definition to merge. */ void mergeDefinition(MappingDefinition def); /** * Returns true if the class is exposed for marshalling. This is not the same as whether or not it has a defined * definition.Just that the class is expected to be marshallable. * @param clazz fully qualified class name. * @return boolean true if exposed. */ boolean isExposedClass(MetaClass clazz); /** * Returns a set of all exposed classes. * @return a set of exposed classes. */ Set<MetaClass> getExposedClasses(); /** * Returns a map of aliases mappers. The keys represent the aliases and values represent the concrete mapping * classes to use as a basis. * @return a map of aliases. */ Map<String, String> getMappingAliases(); /** * Returns true if the marshalling system should treat the given type as polymorphic. * * @param type * The type to test for the existence of portable implementation/subtypes. */ boolean shouldUseObjectMarshaller(MetaClass type); /** * Returns a collection of all registered mapping definitions. * * @retur a collection of mapping definitions. */ Collection<MappingDefinition> getMappingDefinitions(); void resetDefinitionsAndReload(); Set<MetaClass> getArraySignatures(); boolean hasBuiltInDefinition(MetaClass type); }