protected List solveReferences()

in src/main/java/org/apache/jackrabbit/ocm/mapper/impl/AbstractMapperImpl.java [88:156]


    protected List solveReferences(List errors) {
        for(Iterator it = this.mappingDescriptor.getClassDescriptorsByClassName().entrySet().iterator(); it.hasNext(); ) {
            Map.Entry entry = (Map.Entry) it.next();
            ClassDescriptor cd = (ClassDescriptor) entry.getValue();
            
            // Check if the ancestor is a persistent class
            if (null != cd.getExtend() && !"".equals(cd.getExtend()))
            {
                ClassDescriptor superClassDescriptor = this.mappingDescriptor.getClassDescriptorByName(cd.getExtend());

                if (null == superClassDescriptor)
                {
                	// Just a debug info because we can have a non persisted ancestor class
                	log.debug("Cannot find mapping for class "
                            + cd.getExtend()
                            + " referenced as extends from "
                            + cd.getClassName());
                	
                	// This is not necessary to keep a non persisted ancestor class
                	cd.setExtend(null);

                }
                else
                {
            	    log.debug("Class " +cd.getClassName() +  " extends " + cd.getExtend());
                    cd.setSuperClassDescriptor(superClassDescriptor);
                }
            }
            else
            {
                   rootClassDescriptors.add(cd);
            }

            // Check if the implemented interfaces are persistent classes
            Set interfaces = cd.getImplements();
            Set mappedInterfaces  = new HashSet();
            
            if (interfaces.size() > 0)
            {	
            	      for (Iterator iterator = interfaces.iterator(); iterator.hasNext();)
            	      {
            	    	  String interfaceName= (String) iterator.next();
                          ClassDescriptor interfaceClassDescriptor = this.mappingDescriptor.getClassDescriptorByName(interfaceName);

                          if (null == interfaceClassDescriptor)
                          {
                        	  // Just a debug info because we can have a non persisted interface reference 
                        	  log.debug("Cannot find mapping for interface "
                                      + interfaceName
                                      + " referenced as implements from "
                                      + cd.getClassName());
                        	  
                          }
                          else
                          {
                      	      log.debug("Class " +cd.getClassName() +  " implements " + interfaceName);
                      	      interfaceClassDescriptor.addDescendantClassDescriptor(cd);
                      	      mappedInterfaces.add(interfaceName);
                          }
            	    	
            	      }
            	      
            	      cd.setImplements(mappedInterfaces); 
            }

        }

        return errors;
    }