Package org.eclipse.jst.pagedesigner.commands.single

Source Code of org.eclipse.jst.pagedesigner.commands.single.ChangeTagCommand

/*******************************************************************************
* 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.commands.single;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
import org.eclipse.jst.pagedesigner.utils.JSPUtil;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.w3c.dom.Attr;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
* This is for command that changes an element's tagname and some attributes.
*
* @author mengbo
*/
public class ChangeTagCommand extends SingleNodeCommand {
    private final IDOMElement _element;

    private final Map _attributes;

    private final boolean _moveContent;

    private String _uri;

    private String _localTag;

    private  String _totalTag;

  /**
   * @param label
   * @param node
   * @param totaltag
   * @param attributes
   * @param movecontent
   */
  public ChangeTagCommand(String label, IDOMElement node, String totaltag,
      Map attributes, boolean movecontent) {
    super(label, node);
    this._element = node;
    this._totalTag = totaltag;
    this._attributes = attributes;
    this._moveContent = movecontent;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute()
   */
  protected void doExecute() {
    String tag = null;

    if (_totalTag != null) {
      tag = _totalTag;
    } else {
      if (ITLDConstants.URI_HTML.equals(_uri)) {
        tag = _localTag;
      } else if (ITLDConstants.URI_JSP.equals(_uri)) {
        tag = "jsp:" + _localTag; //$NON-NLS-1$
      } else {
        tag = JSPUtil.getOrCreatePrefix(getModel(), _uri, null)
            + _localTag;
      }
    }
    // we need to remove the old element and create a new one with the new
    // tag.
    IDOMElement replacement = (IDOMElement) _element.getOwnerDocument()
        .createElement(tag);
    NamedNodeMap attrs = _element.getAttributes();
    for (int i = 0, n = attrs.getLength(); i < n; i++) {
      Attr a = (Attr) attrs.item(i);
      replacement.setAttribute(a.getName(), a.getValue());
    }
    if (_attributes != null) {
      for (Iterator iter = _attributes.keySet().iterator(); iter
          .hasNext();) {
        String name = (String) iter.next();
        String value = (String) _attributes.get(name);
        replacement.setAttribute(name, value);
      }
    }
    if (_moveContent) {
      NodeList nl = _element.getChildNodes();
      ArrayList list = new ArrayList();
      for (int i = 0, n = nl.getLength(); i < n; i++) {
        list.add(nl.item(i));

      }
      for (int i = 0, n = list.size(); i < n; i++) {
        replacement.appendChild((Node) list.get(i));
      }
    }
    _element.getParentNode().replaceChild(replacement, _element);
    setReplacedElement(replacement);
  }

  /**
   * @return the replacemd element
   */
  public IDOMElement getNewElement() {
    return getReplacedElment();
  }
}
TOP

Related Classes of org.eclipse.jst.pagedesigner.commands.single.ChangeTagCommand

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.