001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.betwixt.strategy;
018
019 /**
020 * <p>Class normalization strategy.</p>
021 *
022 * <p>
023 * The normalized Class is the Class that Betwixt should
024 * introspect.
025 * This strategy class allows the introspected Class to be
026 * varied.
027 * This implementation simply returns the Class given.
028 * </p>
029 *
030 * <p>
031 * Used by Betwixt to allow superclasses or interfaces to be subsittuted
032 * before an object is introspected.
033 * This allows users to feed in logical interfaces and make Betwixt ignore
034 * properties other than those in the interface.
035 * It also allows support for <code>Proxy</code>'s.
036 * Together, these features allow Betwixt to deal with Entity Beans
037 * properly by viewing them through their remote interfaces.
038 * </p>
039 * @author Robert Burrell Donkin
040 * @since 0.5
041 */
042 public class ClassNormalizer {
043
044 /**
045 * Gets the normalized class for the given Object.
046 * The normalized Class is the Class that Betwixt should
047 * introspect.
048 * This strategy class allows the introspected Class to be
049 * varied.
050 *
051 * @param object the <code>Object</code>
052 * for which the normalized Class is to be returned.
053 * @return the normalized Class
054 */
055 public Class getNormalizedClass( Object object ) {
056 if ( object == null ) {
057 throw new IllegalArgumentException("Cannot get class for null object.");
058 }
059 return normalize( object.getClass() );
060 }
061
062 /**
063 * Normalize given class.
064 * The normalized Class is the Class that Betwixt should
065 * introspect.
066 * This strategy class allows the introspected Class to be
067 * varied.
068 *
069 * @param clazz the class to normalize, not null
070 * @return this implementation the same clazz,
071 * subclasses may return any compatible class.
072 */
073 public Class normalize( Class clazz ) {
074 return clazz;
075 }
076 }