Package org.eclipse.jst.pagedesigner.actions.single

Source Code of org.eclipse.jst.pagedesigner.actions.single.StyleClassSupport

/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
*     Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.actions.single;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.css2.CSSUtil;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;

/**
* @author mengbo
* @version 1.5
*/
public class StyleClassSupport {
  private final static String DEFAULT = PDPlugin
      .getResourceString("StyleClassSupport.Default"); //$NON-NLS-1$

  /**
   * @param classmenu
   * @param ele
   */
  public static void createStyleClassActions(IMenuManager classmenu,
      IDOMElement ele) {
    String styleClassAttr = getStyleClassAttributeName(ele);
    if (styleClassAttr == null) {
      return; // don't support style class
    }
    String styleClass = getStyleClass(ele);

    boolean needAdditional = true;
    ChangeAttributeAction action = new ChangeAttributeAction(DEFAULT, ele,
        styleClassAttr, null);
    if (styleClass == null || styleClass.length() == 0) {
      action.setChecked(true);
      needAdditional = false;
    }
    classmenu.add(action);
    String[] classes = CSSUtil.getCSSClasses(ele.getOwnerDocument());
    if (classes.length > 0) {
      classmenu.add(new Separator());
    }
    for (int i = 0; i < classes.length; i++) {
      ChangeAttributeAction action2 = new ChangeAttributeAction(
          classes[i], ele, styleClassAttr, classes[i]);
      if (classes[i].equalsIgnoreCase(styleClass)) {
        action2.setChecked(true);
        needAdditional = false;
      }
      classmenu.add(action2);
    }
    if (needAdditional) {
      ChangeAttributeAction action2 = new ChangeAttributeAction(
          styleClass, ele, styleClassAttr, styleClass);
      action2.setChecked(true);
      classmenu.add(action2);
    }
  }

  /**
   * @param ele
   * @return the style class for ele or null if none
   */
  public static String getStyleClass(IDOMElement ele) {
    String styleClassAttr = getStyleClassAttributeName(ele);
    if (styleClassAttr != null) {
      return ele.getAttribute(styleClassAttr);
    }
        return null;
  }

  /**
   * FIXME: This is a temparary impelementation, with everything hard coded.
   * In the future, should have some INodeAdapter mechanism for each node to
   * tell the style class attribute name.
   *
   * @param ele
   * @return the style class attribute name or null if none applies
   */
  public static String getStyleClassAttributeName(IDOMElement ele) {
    CMElementDeclaration decl = CMUtil.getElementDeclaration(ele);
    if (decl == null) {
      return null;
    }
    String taguri = CMUtil.getTagURI(decl);
    if (taguri == null || ITLDConstants.URI_HTML.equals(taguri)) {
      if (decl.getAttributes().getNamedItem("class") != null) { //$NON-NLS-1$
        return "class"; //$NON-NLS-1$
      }
            return null;
    } else if (decl.getAttributes().getNamedItem("styleClass") != null) { //$NON-NLS-1$
      return "styleClass"; //$NON-NLS-1$
    } else if (decl.getAttributes().getNamedItem("class") != null) { //$NON-NLS-1$
      return "class"; //$NON-NLS-1$
    } else {
      return null;
    }
  }

}
TOP

Related Classes of org.eclipse.jst.pagedesigner.actions.single.StyleClassSupport

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.