private void flattenFaceletTag()

in maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/Flattener.java [363:510]


    private void flattenFaceletTag(FaceletTagMeta faceletTag)
    {
        if (flattened.contains(faceletTag))
        {
            // already done
            return;
        }
          
        if (faceletTag.getSourceClassParentClassName() == null)
        {
            //No need to scan
            return;
        }
        
        // In order of precedence
        // 1. Merge base parent tag handler
        String parentClassName = faceletTag.getParentClassName();
        if (parentClassName != null)
        {
            FaceletTagMeta parent = model
                    .findFaceletTagByClassName(parentClassName);
            if (parent != null)
            {
                flattenFaceletTag(parent);
                faceletTag.merge(parent);
            }
            else
            {
                //do nothing.
            }
        }
        
        //1.1 Mark all attributes on the facelets tag hierarchy as faceletsOnly
        for (Iterator it = faceletTag.attributes(); it.hasNext();)
        {
            AttributeMeta a = (AttributeMeta) it.next();
            a.setFaceletsOnly(Boolean.TRUE);
        }

        // 2. Merge from tag class
        if (faceletTag.getTagClass() != null)
        {
            TagMeta tag = model.findTagByClassName(faceletTag.getTagClass());
            
            if (null != tag)
            {
                if (tag.getLongDescription() != null)
                {
                    faceletTag.setLongDescription(
                            tag.getLongDescription()+"<p>"+faceletTag.getLongDescription()+"</p>");
                }
                if (tag.getDescription() != null)
                {
                    faceletTag.setDescription(
                            tag.getDescription()+" "+faceletTag.getDescription());
                }
                ModelUtils.mergeAttributes(faceletTag, tag);
            }
        }

        // 3. Merge from converter/validator/component class

        if (faceletTag.getConverterClass() != null)
        {
            ConverterMeta converter = model.findConverterByClassName(
                        faceletTag.getConverterClass());        
            
            if (null != converter)
            {
                if (converter.getLongDescription() != null)
                {
                    faceletTag.setLongDescription(
                            converter.getLongDescription()+"<p>"+faceletTag.getLongDescription()+"</p>");
                }
                if (converter.getDescription() != null)
                {
                    faceletTag.setDescription(
                            converter.getDescription()+" "+faceletTag.getDescription());
                }
                addOrMergePropertiesToAttributeHolder(faceletTag, converter);
            }
        }

        if (faceletTag.getValidatorClass() != null)
        {
            ValidatorMeta validator = model.findValidatorByClassName(
                        faceletTag.getValidatorClass());        
            
            if (null != validator)
            {
                if (validator.getLongDescription() != null)
                {
                    faceletTag.setLongDescription(
                            validator.getLongDescription()+"<p>"+faceletTag.getLongDescription()+"</p>");
                }
                if (validator.getDescription() != null)
                {
                    faceletTag.setDescription(
                            validator.getDescription()+" "+faceletTag.getDescription());
                }
                addOrMergePropertiesToAttributeHolder(faceletTag, validator);
            }
        }
        
        if (faceletTag.getBehaviorClass() != null)
        {
            BehaviorMeta behavior = model.findBehaviorByClassName(
                        faceletTag.getBehaviorClass());
            
            if (null != behavior)
            {
                if (behavior.getLongDescription() != null)
                {
                    faceletTag.setLongDescription(
                            behavior.getLongDescription()+"<p>"+faceletTag.getLongDescription()+"</p>");
                }
                if (behavior.getDescription() != null)
                {
                    faceletTag.setDescription(
                            behavior.getDescription()+" "+faceletTag.getDescription());
                }
                addOrMergePropertiesToAttributeHolder(faceletTag, behavior);
            }
        }

        if (faceletTag.getComponentClass() != null)
        {
            ComponentMeta component = model.findComponentByClassName(
                        faceletTag.getComponentClass());        
            
            if (null != component)
            {
                if (component.getLongDescription() != null)
                {
                    faceletTag.setLongDescription(
                            component.getLongDescription()+"<p>"+faceletTag.getLongDescription()+"</p>");
                }
                if (component.getDescription() != null)
                {
                    faceletTag.setDescription(
                            component.getDescription()+" "+faceletTag.getDescription());
                }
                addOrMergePropertiesToAttributeHolder(faceletTag, component);
            }
        }
                
        flattened.add(faceletTag);
    }