Package org.eclipse.jst.pagedesigner.editors.palette

Source Code of org.eclipse.jst.pagedesigner.editors.palette.MetadataTagDropSourceData

/**
*
*/
package org.eclipse.jst.pagedesigner.editors.palette;

import java.util.List;

import org.eclipse.jst.jsf.common.metadata.Entity;
import org.eclipse.jst.jsf.common.metadata.Model;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfo;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfos;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationAttribute;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationInfo;
import org.eclipse.jst.pagedesigner.utils.CommandUtil;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;

/**
* A source data that is enhanced by metadata.
*
* @author cbateman
*
*/
public final class MetadataTagDropSourceData implements ITagDropSourceData
{
    private final IDOMModel _model;
    private final TagCreationInfo _tagCreationInfo;
    private final ITagDropSourceData _delegate;

    /**
     * @param creationProvider
     * @param model
     */
    public MetadataTagDropSourceData(
            final ITagDropSourceData creationProvider,
            final IDOMModel model)
    {
        _delegate = creationProvider;
        _model = model;
        _tagCreationInfo = getTagCreationInfo();
    }

    /**
     * @return the pre-defined attributes for the tag from meta-data or
     *  null if none.
     */
    public List<TagCreationAttribute> getAttributes()
    {
        if (_tagCreationInfo != null)
        {
            return _tagCreationInfo.getAttributes();
        }
        return null;
    }

    /**
     * @return the template derived from metadata for tag drop or null if none.
     */
    public String getTemplate()
    {
        if (_tagCreationInfo != null)
        {
            return (String) _tagCreationInfo.getTemplate();
        }
        return null;
    }

    public String getDefaultPrefix()
    {
        return _delegate.getDefaultPrefix();
    }

    public String getTagName()
    {
        return _delegate.getTagName();
    }

    public String getNamespace()
    {
        return _delegate.getNamespace();
    }

    private TagCreationInfo getTagCreationInfo()
    {
        final ITaglibDomainMetaDataModelContext metadataContext = CommandUtil
                .getMetadataContext(getNamespace(), _model);
        TagCreationInfo tagCreationInfo = null;
        String id = getId();
        if (metadataContext != null && id != null)
        {
            tagCreationInfo = createCreationInfo(metadataContext, id,
                    getTagName());
        }
        return tagCreationInfo;
    }

    public String getId()
    {
        return _delegate.getId();
    }
   
    /**
     * @param metaDataContext
     * @param id
     * @param tagName
     * @return a tag creation info for the tag and id in the metadata context
     */
    static TagCreationInfo createCreationInfo(
            final ITaglibDomainMetaDataModelContext metaDataContext,
            final String id, final String tagName)
    {
        final Model model = TaglibDomainMetaDataQueryHelper
                .getModel(metaDataContext);
        if (model != null)
        {
            Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model,
                    PaletteInfos.TRAIT_ID);
            if (trait != null)
            {
                final PaletteInfos pis = (PaletteInfos) trait.getValue();
                final PaletteInfo pi = pis.findPaletteInfoById(id);
                if (pi != null)
                {
                    return pi.getTagCreation();
                }
            }
            // tag-creation trait on entity directly?
            final Entity tag = getTagEntity(metaDataContext, tagName);
            if (tag != null)
            {// metadata exists
                trait = TaglibDomainMetaDataQueryHelper.getTrait(tag,
                        "tag-create"); //$NON-NLS-1$
                if (trait != null && trait.getValue() != null)
                {
                    return (TagCreationInfo) trait.getValue();
                }
            }
        }
        return null;
    }
    /**
     * @param metaDataContext
     * @param tagName
     * @return the {@link Entity} for this tag element being created
     */
    private static Entity getTagEntity(
            final ITaglibDomainMetaDataModelContext metaDataContext,
            final String tagName)
    {
        return TaglibDomainMetaDataQueryHelper.getEntity(metaDataContext,
                tagName);
    }
}
TOP

Related Classes of org.eclipse.jst.pagedesigner.editors.palette.MetadataTagDropSourceData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.