1 package org.apache.ojb.broker.metadata.fieldaccess;2 3 /* Copyright 2003-2004 The Apache Software Foundation4 *5 * Licensed under the Apache License, Version 2.0 (the "License");6 * you may not use this file except in compliance with the License.7 * You may obtain a copy of the License at8 *9 * http://www.apache.org/licenses/LICENSE-2.010 *11 * Unless required by applicable law or agreed to in writing, software12 * distributed under the License is distributed on an "AS IS" BASIS,13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14 * See the License for the specific language governing permissions and15 * limitations under the License.16 */17 18 import java.util.Iterator ;19 import java.util.Map ;20 import java.util.Vector ;21 22 import org.apache.ojb.broker.metadata.AnonymousFieldDescriptor;23 import org.apache.ojb.broker.metadata.ClassDescriptor;24 import org.apache.ojb.broker.metadata.CollectionDescriptor;25 import org.apache.ojb.broker.metadata.DescriptorRepository;26 import org.apache.ojb.broker.metadata.FieldDescriptor;27 import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;28 29 /**30 * Helper class for anonymous fields.31 *32 * @author Houar TINE33 * @version $Id: AnonymousPersistentFieldHelper.java,v 1.7.2.2 2004/12/23 22:03:25 brj Exp $34 */35 public class AnonymousPersistentFieldHelper36 {37 public static void computeInheritedPersistentFields(final DescriptorRepository repository)38 {39 Map descriptorTable = repository.getDescriptorTable();40 final String OBJECT = Object .class.getName();41 for (Iterator iter = descriptorTable.entrySet().iterator(); iter.hasNext();)42 {43 Map.Entry me = (Map.Entry ) iter.next();44 ClassDescriptor cld = (ClassDescriptor) me.getValue();45 String baseClass = cld.getBaseClass();46 if (null != baseClass)47 {48 Vector inheritedFields = new Vector ();49 do50 {51 ClassDescriptor baseCld = repository.getDescriptorFor(baseClass);52 FieldDescriptor[] baseFields = baseCld.getFieldDescriptions();53 for (int i = baseFields.length - 1; i >= 0; i--)54 {55 FieldDescriptor f = baseFields[i];56 if (!(f instanceof AnonymousFieldDescriptor))57 {58 inheritedFields.add(f.getPersistentField());59 }60 }61 Vector ords = baseCld.getObjectReferenceDescriptors();62 for (int i = ords.size() - 1; i >= 0; i--)63 {64 ObjectReferenceDescriptor ord = (ObjectReferenceDescriptor) ords.get(i);65 PersistentField pf = ord.getPersistentField();66 if (!(pf instanceof AnonymousPersistentFieldForInheritance))67 {68 inheritedFields.add(pf);69 }70 }71 Vector cds = baseCld.getCollectionDescriptors();72 for (int i = cds.size() - 1; i >= 0; i--)73 {74 CollectionDescriptor cd = (CollectionDescriptor) cds.get(i);75 inheritedFields.add(cd.getPersistentField());76 }77 baseClass = baseCld.getBaseClass();78 }79 while ((null != baseClass) && !(baseClass.equals(OBJECT)));80 cld.setSuperPersistentFieldDescriptors(inheritedFields);81 }82 }83 }84 }85