Package org.eclipse.jst.pagedesigner.itemcreation

Source Code of org.eclipse.jst.pagedesigner.itemcreation.CreationData

/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.itemcreation;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.jsf.common.dom.TagIdentifier;
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.internal.TraitValueHelper;
import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData;
import org.eclipse.jst.pagedesigner.utils.JSPUtil;
import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;

/**
* Value object that wraps creation data
* <p><b>Provisional API - subject to change</b></p>
* @author cbateman
*
*/
public final class CreationData
{
    private final ITagDropSourceData  _creationProvider;
    private final String                _prefix;
    private final IDOMPosition          _domPosition;
    private final IDOMModel             _model;
    private final IAdaptable            _customizationData;

    private TagIdentifier               _tagId; // = null; lazy init on creation
   
    /**
     * The tag {@link Entity} being created
     */
    private Entity _tagEntity; // = null; lazy load because derived from
                               // potentially expensive meta-data search
   
    /**
     * The {@link ITaglibDomainMetaDataModelContext} for the tag creation
     */
    private final ITaglibDomainMetaDataModelContext _taglibMetaDataContext;

    // mutable because it may be changed from the original _domPosition
    private IDOMPosition _adjustedPosition;

   
    /**
     * @param creationProvider
     * @param model
     * @param domPosition
     * @param taglibMetaDataContext
     * @param customizationData
     */
    public CreationData(final ITagDropSourceData creationProvider,
            final IDOMModel model, final IDOMPosition domPosition,
            final ITaglibDomainMetaDataModelContext taglibMetaDataContext,
            final IAdaptable customizationData)
    {
        super();
        this._creationProvider = creationProvider;
        this._taglibMetaDataContext = taglibMetaDataContext;
        this._domPosition = domPosition;
        this._adjustedPosition = _domPosition;
        this._model = model;
        this._customizationData = customizationData;
        this._prefix = getPrefix(getUri(), model, getDefaultPrefix());
    }

    /**
     * Returns the ns prefix for the tag and also creates taglib reference if necessary
     * @param uri
     * @param model
     * @param suggested
     * @return prefix to use
     */
    protected static String getPrefix(String uri, IDOMModel model,
            String suggested) {
        // TODO: this shouldn't really add to the document
        if (uri==null || ITLDConstants.URI_HTML.equalsIgnoreCase(uri)
                || ITLDConstants.URI_JSP.equalsIgnoreCase(uri)
                || CMDocType.JSP11_DOC_TYPE.equalsIgnoreCase(uri) || CMDocType.TAPESTRY5_DOC_TYPE.equalsIgnoreCase(uri)) {
            return null;
        }

        // now handles custom tag lib
        return JSPUtil.getOrCreatePrefix(model, uri, suggested);
    }
   
    /**
     * @return the tag identifier uri
     */
    public String getUri() {
         ITagDropOverrider overrider = getTagDropOverrider();
      if (overrider != null && overrider.getUriOverride() != null)
         return overrider.getUriOverride();
     
        return _creationProvider.getNamespace();
    }

    /**
     * @return the default prefix
     */
    public String getDefaultPrefix() {
      ITagDropOverrider overrider = getTagDropOverrider();
      if (overrider != null && overrider.getDefaultPrefixOverride() != null)
         return overrider.getDefaultPrefixOverride();
           
        return _creationProvider.getDefaultPrefix();
    }

    private ITagDropOverrider getTagDropOverrider() {
      if (getDropCustomizationData() != null
          && getDropCustomizationData()
            .getAdapter(ITagDropOverrider.class) != null) {
       
         return (ITagDropOverrider)getDropCustomizationData()
             .getAdapter(ITagDropOverrider.class);
      }
      return null;
    }
    /**
     * @return the local prefix for the  tag
     */
    public String getPrefix() {
        return _prefix;
    }

    /**
     * @return the tag name
     */
    public String getTagName() {
      ITagDropOverrider overrider = getTagDropOverrider();
      if (overrider != null && overrider.getTagNameOverride() != null)
         return overrider.getTagNameOverride();
     
        return _creationProvider.getTagName();
    }

    /**
     * @return the creation provider
     */
    public ITagDropSourceData getTagCreationProvider()
    {
        return _creationProvider;
    }

    /**
     * @return the {@link Entity} for this tag element being created
     */
    public Entity getTagEntity() {
        if (_tagEntity == null){
            _tagEntity = TaglibDomainMetaDataQueryHelper.getEntity(_taglibMetaDataContext, getTagName());
           
        }
        return _tagEntity;
    }
   
    /**
     * @return flag indicating that html form container ancestor is required
     */
    public boolean isHTMLFormRequired() {
        Trait t = TaglibDomainMetaDataQueryHelper.getTrait(getTagEntity(), "requires-html-form"); //$NON-NLS-1$
        if (t != null)
            return TraitValueHelper.getValueAsBoolean(t);
       
        return false;
    }
   
    /**
     * @return flag indicating that jsf component
     */
    public boolean isJSFComponent() {     
        Model model = TaglibDomainMetaDataQueryHelper.getModel(_taglibMetaDataContext);
        Trait t = TaglibDomainMetaDataQueryHelper.getTrait(model, "is-jsf-component-library"); //$NON-NLS-1$
        if (t != null)
            return TraitValueHelper.getValueAsBoolean(t);
       
        return false;
    }

  /**
   * @return flag indicating that jsf view container ancestor is required
   */
  public boolean isJSFViewTagRequired() {
    return JSPUtil.isJSPModel(_model);   
  }
 
    /**
     * @return the metadata context for the tag
     */
    public ITaglibDomainMetaDataModelContext getTaglibMetaDataContext() {
        return _taglibMetaDataContext;
    }

    /**
     * @return the original dom position of the tag creation
     */
    public IDOMPosition getDomPosition() {
        return _domPosition;
    }

    /**
     * @return the dom model
     */
    public IDOMModel getModel()
    {
        return _model;
    }

    /**
     * @return the adjusted position (calculated to account for containers etc.)
     */
    public IDOMPosition getAdjustedPosition() {
        return _adjustedPosition;
    }

    /**
     * @param adjustedPosition
     */
    /*package*/ void setAdjustedPosition(IDOMPosition adjustedPosition) {
        _adjustedPosition = adjustedPosition;
    }

    /**
     * @return the TagIdentifer for the tag to be created
     */
    public TagIdentifier getTagId()
    {
        if (_tagId == null)
        {
            _tagId = TagIdentifierFactory.createJSPTagWrapper(getUri(), getTagName());
        }
        return _tagId;
    }

    /**
     * @return the customization data passed in from the tool.  May be null.
     */
    public IAdaptable getDropCustomizationData() {
        return _customizationData;
    }
}
TOP

Related Classes of org.eclipse.jst.pagedesigner.itemcreation.CreationData

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.