Package org.eclipse.wst.xml.ui.internal.taginfo

Source Code of org.eclipse.wst.xml.ui.internal.taginfo.MarkupTagInfoProvider

/*******************************************************************************
* Copyright (c) 2001, 2006 IBM 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:
*     IBM Corporation - initial API and implementation
*     Jens Lukowski/Innoopract - initial renaming/restructuring
*    
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.taginfo;

import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocumentation;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNodeList;
import org.eclipse.wst.xml.core.internal.contentmodel.util.CMDescriptionBuilder;
import org.eclipse.wst.xml.ui.internal.XMLUIMessages;

/**
* Provides basic tag information such as element/attribute name, data type,
* and tag info/documentation for CMNodes. Uses HTML to enhance presentation.
*/
public class MarkupTagInfoProvider {
  protected final static String BOLD_END = "</b>"; //$NON-NLS-1$
  protected final static String BOLD_START = "<b>"; //$NON-NLS-1$
  protected final static String HEADING_END = "</h5>"; //$NON-NLS-1$
  protected final static String HEADING_START = "<h5>"; //$NON-NLS-1$
  protected final static String LIST_BEGIN = "<ul>"; //$NON-NLS-1$
  protected final static String LIST_ELEMENT = "<li>"; //$NON-NLS-1$
  protected final static String NEW_LINE = "<dl>"; //$NON-NLS-1$
  protected final static String PARAGRAPH_END = "</p>"; //$NON-NLS-1$
  protected final static String PARAGRAPH_START = "<p>"; //$NON-NLS-1$
  protected final static String SPACE = " "; //$NON-NLS-1$

  /**
   * Returns basic tag information for display given a CMNode
   *
   * @return String
   */
  public String getInfo(CMNode node) {
    if (node == null) {
      return null;
    }
    StringBuffer sb = new StringBuffer();
    // we assume that if there is tagInfo present, only display tagInfo
    printTagInfo(sb, node);

    // no tagInfo present, so try to display tag description
    if (sb.length() == 0) {
      printDescription(sb, node);
    }

    // no tag description present either, so display default info
    if (sb.length() == 0) {
      printDefaultInfo(node, sb);
    }

    return sb.toString();
  }

  /**
   * Adds dataType's data type information, including enumerated type values
   * to string buffer, sb
   *
   */
  protected void printDataTypeInfo(StringBuffer sb, CMDataType dataType) {
    String dataTypeName = dataType.getNodeName();
    if ((dataTypeName != null) && (dataTypeName.length() > 0)) {
      sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Data_Type____4 + SPACE + BOLD_END);
      sb.append(dataTypeName);
      sb.append(PARAGRAPH_END);
    }
    String defaultValue = dataType.getImpliedValue();
    if(defaultValue != null) {
      sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Default_Value____6 + SPACE + BOLD_END);
      sb.append(defaultValue);
      sb.append(PARAGRAPH_END);
    }
    String[] enumeratedValue = dataType.getEnumeratedValues();
    if ((enumeratedValue != null) && (enumeratedValue.length > 0)) {
      sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Enumerated_Values____5 + SPACE + BOLD_END);
      sb.append(LIST_BEGIN);
      for (int i = 0; i < enumeratedValue.length; i++) {
        sb.append(LIST_ELEMENT + enumeratedValue[i]);
      }
      sb.append(PARAGRAPH_END);
    }
  }

  /**
   * Adds the default info (element name, content model, data type) of
   * CMNode to the string buffer, sb
   *
   */
  protected void printDefaultInfo(CMNode node, StringBuffer sb) {
    {

      if (node.getNodeType() == CMNode.ELEMENT_DECLARATION) {
        CMElementDeclaration ed = (CMElementDeclaration) node;
        sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Element____1 + SPACE + BOLD_END);
        sb.append(node.getNodeName());
        sb.append(PARAGRAPH_END);
        printDocumentation(sb, node);
        if (ed.getContentType() == CMElementDeclaration.PCDATA) {
          CMDataType dataType = ed.getDataType();
          if (dataType != null) {
            printDataTypeInfo(sb, dataType);
          }
        }
        else {
          CMDescriptionBuilder builder = new CMDescriptionBuilder();
          String description = builder.buildDescription(node);
          if ((description != null) && (description.length() > 0)) {
            sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Content_Model____2 + SPACE + BOLD_END);
            sb.append(description + PARAGRAPH_END);
          }
        }
      }
      else if (node.getNodeType() == CMNode.ATTRIBUTE_DECLARATION) {
        CMAttributeDeclaration ad = (CMAttributeDeclaration) node;
        sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Attribute____3 + SPACE + BOLD_END);
        sb.append(node.getNodeName());
        sb.append(PARAGRAPH_END);
        printDocumentation(sb, node);
        CMDataType dataType = ad.getAttrType();
        if (dataType != null) {
          printDataTypeInfo(sb, dataType);
        }
      }
      else if (node.getNodeType() == CMNode.DATA_TYPE) {
        sb.append(PARAGRAPH_START + BOLD_START + XMLUIMessages.Data_Type____4 + SPACE + BOLD_END);
        sb.append(node.getNodeName());
        sb.append(PARAGRAPH_END);
        printDocumentation(sb, node);
      }
    }
  }

  /**
   * Adds the description property of the CMNode to the string buffer, sb
   *
   */
  protected void printDescription(StringBuffer sb, CMNode node) {
    String tagInfo = (String) node.getProperty("description"); //$NON-NLS-1$
    if (tagInfo != null) {
      sb.append(PARAGRAPH_START + tagInfo.trim() + PARAGRAPH_END);
    }
  }

  /**
   * Adds the tag documentation property of the CMNode to the string buffer,
   * sb
   *
   */
  protected void printDocumentation(StringBuffer sb, CMNode node) {
    CMNodeList nodeList = (CMNodeList) node.getProperty("documentation"); //$NON-NLS-1$
    if ((nodeList != null) && (nodeList.getLength() > 0)) {
      for (int i = 0; i < nodeList.getLength(); i++) {
        CMDocumentation documentation = (CMDocumentation) nodeList.item(i);
        String doc = documentation.getValue();
        if (doc != null) {
          sb.append(PARAGRAPH_START + doc.trim() + PARAGRAPH_END);
        }
      }
      sb.append(NEW_LINE);
    }
  }

  /**
   * Adds the tag info property of the CMNode to the string buffer, sb
   *
   */
  protected void printTagInfo(StringBuffer sb, CMNode node) {
    String tagInfo = (String) node.getProperty("tagInfo"); //$NON-NLS-1$
    if (tagInfo != null) {
      sb.append(PARAGRAPH_START + tagInfo.trim() + PARAGRAPH_END);
    }
  }
}
TOP

Related Classes of org.eclipse.wst.xml.ui.internal.taginfo.MarkupTagInfoProvider

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.