Package org.eclipse.jst.pagedesigner.preview

Source Code of org.eclipse.jst.pagedesigner.preview.PreviewConvertContext

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

import java.util.List;

import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.converter.ConvertPosition;
import org.eclipse.jst.pagedesigner.converter.IConverterFactory;
import org.eclipse.jst.pagedesigner.converter.ITagConverter;
import org.eclipse.jst.pagedesigner.dtmanager.DTManager;
import org.eclipse.wst.xml.core.internal.document.InvalidCharacterException;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

/**
* @author mengbo
* @version 1.5
*/
public class PreviewConvertContext {
  private Logger _log = PDPlugin.getLogger(PreviewConvertContext.class);

  private IDOMDocument _destDocument;

  /**
   * Instantiates an instance for the specified IDOMDocument.
   *
   * @param destDocument IDOMDocument instance.
   */
  public PreviewConvertContext(IDOMDocument destDocument) {
    this._destDocument = destDocument;
  }

  /**
   * Converts specified Node for preview.
   *
   * @param ele Node instance to convert.
   * @return Converted Node instance.
   */
  public Node previewConvert(Node ele) {
    if (ele instanceof Element) {
      return previewConvertElement((Element) ele);
    } else if (ele instanceof Text) {
      return createText((Text) ele);
    } else {
      // XXX: we'll support other node like doctype etc in the future.
      // so they should also be rendered into preview.

      return null;
    }
  }

  /**
   * @param text
   * @return
   */
  private Node createText(Text text) {
    Text previewText = this._destDocument.createTextNode(text.getData());
    try {
      ((IDOMText) previewText).setSource(((IDOMText) text).getSource());
    } catch (InvalidCharacterException e) {
      // "Error"
      _log.info("PreviewConvertContext.Error.0", e); //$NON-NLS-1$
    }
    return previewText;
  }

  /**
   * Converts specified Element instance for preview.
   *
   * @param ele Element instance to be converted.
   * @return Converted Node instance.
   */
  protected Node previewConvertElement(Element ele) {
    ITagConverter converter = createTagConverter(ele);
    if (!converter.isVisualByHTML()) {
      return null;
    }
    converter.convertRefresh(null);
    Element result = converter.getResultElement();
    List children = converter.getChildModeList();
    if (children != null) {
      for (int i = 0, size = children.size(); i < size; i++) {
        Node child = (Node) children.get(i);
        if (child != null) {
          Node childPreview = previewConvert(child);
          if (childPreview != null) {
            ConvertPosition position = converter
                .getChildVisualPosition(child);
            if (position != null) {
              /* FIX for bug #179403
              // FIXME: not using index here, need fix.
              position.getParentNode().appendChild(childPreview);
              */
              NodeList childNodes = position.getParentNode().getChildNodes();
              if (childNodes.getLength() > position.getIndex()) {
                Node item = childNodes.item(position.getIndex());
                position.getParentNode().insertBefore(childPreview, item);
              } else {
                position.getParentNode().appendChild(childPreview);
              }
            }
          }
        }
      }
    }
    return result;
  }

  /**
   * @param ele
   * @return
   */
  private ITagConverter createTagConverter(Element ele) {
    return DTManager.getInstance().getTagConverter(ele,
        IConverterFactory.MODE_PREVIEW, _destDocument);
  }
}
TOP

Related Classes of org.eclipse.jst.pagedesigner.preview.PreviewConvertContext

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.