Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntology_Toolssrcgatecreoleontologyocat 〉 CheckRenderer.java
 
/*
 *  CheckRenderer.java
 *
 *  Niraj Aswani, 12/March/07
 *
 *  $Id: CheckRenderer.html,v 1.0 2007/03/12 16:13:01 niraj Exp $
 */
package gate.creole.ontology.ocat;

import gate.creole.ontology.OClass;
import gate.creole.ontology.OInstance;
import gate.gui.MainFrame;

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

import com.ontotext.gate.vr.ClassNode;
import com.ontotext.gate.vr.IFolder;

/**
 * Description: This class provides the renderer for the Ontology Tree Nodes.
 * 
 * @author Niraj Aswani
 * @version 1.0
 */
public class CheckRenderer extends JPanel implements TreeCellRenderer {

  /**
   * Serial Version ID
   */
  private static final long serialVersionUID = 3257004371551204912L;

  /**
   * Allows user to select/deselect class in the ontology Tree
   */
  private JCheckBox check;

  /**
   * Class label is shown using this label
   */
  private JLabel label;

  /**
   * ICon label
   */
  private JLabel iconLabel;

  /**
   * Label Panel
   */
  private JPanel iconPanel, labelPanel;

  /**
   * The instance of ontologyTreePanel
   */
  private OntologyTreePanel ontologyTreePanel;

  /**
   * Constructor
   * 
   * @param owner
   */
  public CheckRenderer(OntologyTreePanel owner) {
    this.ontologyTreePanel = owner;
    check = new JCheckBox();
    check.setBackground(Color.white);
    label = new JLabel();
    iconLabel = new JLabel();

    iconPanel = new JPanel(new BorderLayout(5, 10));
    ((BorderLayout)iconPanel.getLayout()).setHgap(0);
    iconPanel.setOpaque(true);
    iconPanel.add(check, BorderLayout.WEST);
    iconPanel.add(iconLabel, BorderLayout.EAST);

    labelPanel = new JPanel(new BorderLayout(5, 10));
    ((BorderLayout)labelPanel.getLayout()).setHgap(0);
    // labelPanel.setOpaque(true);
    labelPanel.add(label);

    setLayout(new BorderLayout(5, 10));
    ((BorderLayout)getLayout()).setHgap(1);
    add(iconPanel, BorderLayout.WEST);
    add(labelPanel, BorderLayout.EAST);
  }

  /**
   * Renderer method
   */
  public Component getTreeCellRendererComponent(JTree tree, Object value,
    boolean isSelected, boolean expanded, boolean leaf, int row,
    boolean hasFocus) {

    Object userObject = value;
    if(!(userObject instanceof IFolder)) {
      label.setBackground(Color.white);
      return this;
    }

    javax.swing.Icon icon = null;
    ClassNode node = (ClassNode)userObject;
    String conceptName = node.toString();

    if(row == 0) {
      // this is the ontology name
      check.setVisible(false);
      iconLabel.setVisible(false);
      label.setText(conceptName);
      labelPanel.setBackground(Color.white);
      iconPanel.setBackground(Color.WHITE);
      return this;
    }
    else {
      check.setVisible(true);
      iconLabel.setVisible(true);
    }

    Boolean bValue =
      ontologyTreePanel.currentOResource2IsSelectedMap.get(conceptName);
    if(bValue == null) {
      bValue = new Boolean(false);
      ontologyTreePanel.currentOResource2IsSelectedMap.put(conceptName, bValue);
    }

    // if node should be selected
    boolean selected = bValue.booleanValue();

    check.setSelected(selected);
    if(node.getSource() instanceof OClass) {
      iconLabel.setIcon(MainFrame.getIcon("ontology-class"));
    }
    else if(node.getSource() instanceof OInstance) {
      iconLabel.setIcon(MainFrame.getIcon("ontology-instance"));
    }
    else {
      iconLabel.setIcon(null);
    }

    label.setText(conceptName);
    label.setFont(tree.getFont());

    // We assign the automatically generated random colors to the
    // concept,
    // but randomly generation of colors for different classes takes
    // place
    // only once when that ontology is loaded for the first time
    if(ontologyTreePanel.currentOResource2ColorMap.containsKey(conceptName)) {
      Color color =
        (Color)ontologyTreePanel.currentOResource2ColorMap.get(conceptName);
      labelPanel.setBackground(color);
      iconPanel.setBackground(Color.WHITE);
    }
    if(!ontologyTreePanel.ontologyViewerOptions.shouldShow(conceptName)) {
      check.setEnabled(false);
      label.setEnabled(false);
    }
    else {
      check.setEnabled(true);
      label.setEnabled(true);
    }
    return this;
  }
}