Package org.sintef.umt.umtmain

Source Code of org.sintef.umt.umtmain.XmlTreeViewer$XmlTreeCellRenderer

// UML Model Transformation Tool (UMT)
// Copyright (C) 2003, 2004, 2005 SINTEF
// Authors:  jon.oldevik at sintef.no | roy.gronmo at sintef.no | tor.neple at sintef.no | fredrik.vraalsen at sintef.no
// Webpage: http://umt.sourceforge.net
// Deloped in the projects:  ACEGIS (EU project - IST-2002-37724),
//    CAFE (EUREKA/ITEA - ip00004), FAMILIES (ITEA project ip02009)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either version 2.1
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write to the Free
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
// 02111-1307 USA

package org.sintef.umt.umtmain;

/**
* @author    Jon Oldevik, (jon.oldevik@sintef.no)
* @copyright (c) SINTEF 2002 (www.sintef.no)
*
*/

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.tree.*;

import org.sintef.umt.propertyeditor.PropertyManager;
import org.sintef.umt.transformer.XMLUtility;
import org.w3c.dom.*;


public class XmlTreeViewer extends JPanel
{
  private PropertyManager _actionPropertyMgr; 
  private volatile boolean _isLoading, _indicator;
  private int tmp_x, tmp_y;
  private JTree _tree;
  private XMLEditor _editor;
  private OutputListener _listener;
 
  public XmlTreeViewer (OutputListener listener)
  {
    super (new BorderLayout ());
    _listener = listener;
    initTree ();
         _editor = new XMLEditor ();
         add (_editor, BorderLayout.CENTER);
 
 
  public void readXML (File xmlsource) {
    try {
      XMLUtility util = new XMLUtility (_listener);       
      Collection coll = util.readXML(new FileReader(xmlsource));
      if (coll.size() > 0) {
        setModelElements (coll);
        Node docnode = (Node)(coll.iterator().next());
        _editor.setStyledInput(docnode);
      //  util.doParseValidate(new FileReader(xmlsource));
      }
    } catch (Exception ex) {
      System.out.println ("XmlTreeViewer::readXML - " + ex);
    }
  }
 
  public Reader getReader () {
    return _editor.getReader();
  }
 
  private void initTree () {
    if (_tree != null) this.remove(_tree);
       _tree = new JTree ();
         _tree.setShowsRootHandles (true);
         _tree.setRootVisible(false);
         _tree.setModel (new XmlTreeModel ());
         _tree.setCellRenderer(new XmlTreeCellRenderer ());
         _tree.setPreferredSize(new Dimension (200,200));
       add (_tree, BorderLayout.WEST);        
    ToolTipManager ttmanager = ToolTipManager.sharedInstance ();
    ttmanager.registerComponent(_tree);      
  }
 
  public void setModelElements (Collection modelelements
  {   
    initTree ();
    Iterator elements = modelelements.iterator ();   
    Object root = _tree.getModel().getRoot();
   
    while (elements.hasNext()){
      Object obj = elements.next();
      addModelElement (obj, (DefaultMutableTreeNode)root);
    }
   
    for (Enumeration children = ((DefaultMutableTreeNode)root).children();children.hasMoreElements();)
    {
      TreeNode child = (TreeNode)children.nextElement ();
      TreeNode[] path = ((DefaultMutableTreeNode)child).getPath ();
      _tree.makeVisible (new TreePath(path));
    }
  }
 
  public void addModelElement (Object modelelement, DefaultMutableTreeNode treeparent){
    Element e = (Element) modelelement;
     
    NodeList children = e.getChildNodes ();
    DefaultMutableTreeNode treechild = new DefaultMutableTreeNode (e);   
    treeparent.add (treechild);
   
    for (int i = 0; i < children.getLength(); i++){
      Node n = children.item(i);
      if (n.getNodeType () == org.w3c.dom.Node.ELEMENT_NODE)
        addModelElement (n, treechild);
    }
  } 
 
  private class XmlTreeModel extends DefaultTreeModel
  {
    public XmlTreeModel ()
    {
      super (new DefaultMutableTreeNode (null));
    }
  } 
 
 
  private class XmlTreeCellRenderer extends DefaultTreeCellRenderer
  {
          public Component getTreeCellRendererComponent(JTree tree,
                Object value,
                boolean selected,
                boolean expanded,
                boolean leaf,
                int row,
                boolean hasFocus)
    {   
      Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);     
      try {
        Object userobj = ((DefaultMutableTreeNode)value).getUserObject ();
        JLabel l = new JLabel (userobj.toString());
        ToolTipManager ttmanager = ToolTipManager.sharedInstance ();
        ttmanager.registerComponent(l);
       
        if (userobj instanceof Element) {
          Element elem = (Element)userobj;
          l.setText(elem.getNodeName());         
          l.setToolTipText(l.getText());
          Node attr;
          NamedNodeMap attrs = elem.getAttributes();
          for (int i = 0; i < attrs.getLength();i++) {
            attr = attrs.item(i);
            l.setText (l.getText() + " " + attr.getNodeName() + "='" + attr.getNodeValue() + "'");
            l.setToolTipText(l.getToolTipText() + " " + attr.getNodeName() + "='" + attr.getNodeValue()+"'");
          }
        }
        return l;
      } catch (Exception ex) {
      }   
      return c;     
    }
  }
}
TOP

Related Classes of org.sintef.umt.umtmain.XmlTreeViewer$XmlTreeCellRenderer

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.