Package edu.stanford.bmir.protegex.icd.diff

Source Code of edu.stanford.bmir.protegex.icd.diff.TreeComponent

package edu.stanford.bmir.protegex.icd.diff;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;

import edu.stanford.smi.protege.model.Cls;
import edu.stanford.smi.protege.model.Frame;
import edu.stanford.smi.protege.model.KnowledgeBase;
import edu.stanford.smi.protege.model.Project;
import edu.stanford.smi.protege.ui.ClsesPanel;
import edu.stanford.smi.protege.ui.ProjectManager;
import edu.stanford.smi.protege.util.CollectionUtilities;
import edu.stanford.smi.protege.util.ExtensionFilter;
import edu.stanford.smi.protege.util.FileField;
import edu.stanford.smi.protege.util.LabeledComponent;
import edu.stanford.smi.protege.util.Log;
import edu.stanford.smi.protege.util.ModalDialog;
import edu.stanford.smi.protegex.owl.ProtegeOWL;
import edu.stanford.smi.protegex.owl.model.OWLModel;

public class TreeComponent extends JPanel {
 
  private static final long serialVersionUID = -7471727828011399326L;

  private KnowledgeBase kb;
 
  private LabeledComponent bogusPanel;
  private FileField fileField;

  private ClsesPanel clsesPanel;

  private Map<Cls, FrameStatus> cls2Status;

  public TreeComponent(Map<Cls, FrameStatus> cls2Status) {
    this.cls2Status = cls2Status;
    buildUI();
  }

  private void buildUI() {
    setLayout(new BorderLayout());
   
    java.util.List<String> extensions = (java.util.List<String>) Arrays.asList((new String[]{"pprj", "owl" , "rdfs", "rdf"}));
    fileField = new FileField("Select file", null, new ExtensionFilter(extensions.iterator(), "Files"));
    JPanel filePanel = new JPanel(new BorderLayout());
    filePanel.add(fileField, BorderLayout.CENTER);
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
    JButton button = new JButton(getLoadAction());
    button.setAlignmentY(Component.BOTTOM_ALIGNMENT);   
    buttonPanel.add(Box.createVerticalGlue());
    buttonPanel.add(button);   
    filePanel.add(buttonPanel, BorderLayout.EAST);
    add(filePanel, BorderLayout.NORTH);
    bogusPanel = new LabeledComponent(null, new Panel(), true);
    add(bogusPanel, BorderLayout.CENTER)
  }
 
 
  protected JComponent createTreeComponent() {
    if (kb == null) { return null;}
    Collection rootClasses = CollectionUtilities.createCollection(kb.getRootCls());
    makeSystemClassesHidden(kb);   
    clsesPanel = new ClsesPanel(kb.getProject())
    clsesPanel.setRenderer(new ChangedFrameRenderer(cls2Status));
    return clsesPanel; 
  }
 
 
  @SuppressWarnings({"deprecation" })
  private void makeSystemClassesHidden(KnowledgeBase kb) {
    Collection systemFrames = new HashSet(kb.getSystemFrames().getFrames());
       
    for (Iterator iterator = systemFrames.iterator(); iterator.hasNext();) {
      Frame frame = (Frame) iterator.next();
      frame.setVisible(false);
    }
    kb.getRootCls().setVisible(true);
    kb.getProject().setDisplayHiddenClasses(false);   
  }
 
 
 
  protected Action getLoadAction() {
    return new AbstractAction("Load") {
      public void actionPerformed(ActionEvent arg0) {
        if (fileField.getPath() == null) {
          ModalDialog.showMessageDialog(TreeComponent.this, "Please select a file first, and then click Load");
          return;
        }
        kb = loadKnowledgeBase(fileField.getFilePath().toURI());
        if (kb == null) {
          ModalDialog.showMessageDialog(TreeComponent.this, "Could not load file. Check console for details.");
          return;
        }
        JComponent treeComp = createTreeComponent();
        if (treeComp == null) {  return}
        bogusPanel.setCenterComponent(treeComp);
        //bogusPanel.add(treeComp);
        bogusPanel.revalidate();
        bogusPanel.repaint();       
      }     
    };
  }
 
 
  private KnowledgeBase loadKnowledgeBase(URI uri) {
    if (kb != null) {
      try {
        kb.getProject().dispose();
      } catch (Exception e) {
        Log.getLogger().log(Level.WARNING, "Errors at disposing " + kb, e);
      }
    }
    kb = null;
    String uriStr = uri.toString();
    if (uriStr.endsWith(".owl") || uriStr.endsWith(".rdf") || uriStr.endsWith(".rdfs")) {
      return loadOwlModel(uri);
    } else if (uriStr.endsWith(".pprj")) {
      return loadProject(uri);
    }
    return null;
  }
 
  private KnowledgeBase loadProject(URI uri) {
    ArrayList errors = new ArrayList();
    Project project = null;
    try {
      project = Project.loadProjectFromURI(uri, errors)
    } catch (Exception e) {
      Log.getLogger().log(Level.SEVERE, "Errors at loading " + uri, e);
    }
   
    if (errors.size() > 0) {
      ProjectManager.getProjectManager().displayErrors("Errors at loading project " + uri, errors);
    }
   
    return project == null ? null : project.getKnowledgeBase();
  }

  private OWLModel loadOwlModel(URI uri) {
    OWLModel owlModel = null;
    try {
      owlModel = ProtegeOWL.createJenaOWLModelFromURI(uri.toURL().toString());
    } catch (Exception e) {
      Log.getLogger().log(Level.WARNING, "Error at loading ontology from: " + uri, e);
    }
   
    return owlModel;
  }
 
  public KnowledgeBase getKb() {
    return kb;
  }
 
  public ClsesPanel getClsesPanel() {
    return clsesPanel;
  }
 
}
TOP

Related Classes of edu.stanford.bmir.protegex.icd.diff.TreeComponent

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.