Package org.example.clerezza.scb.tutorial1

Source Code of org.example.clerezza.scb.tutorial1.Tutorial1App$GraphChangedListener

package org.example.clerezza.scb.tutorial1;
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import org.apache.clerezza.rdf.core.Graph;
import org.apache.clerezza.rdf.core.MGraph;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.Triple;
import org.apache.clerezza.rdf.core.access.TcManager;
import org.apache.clerezza.rdf.core.serializedform.Parser;
import org.apache.clerezza.rdf.ontologies.RDF;
import org.apache.clerezza.rdf.utils.GraphNode;

/**
* A panel allowing browsing the context of resoures, a main method loads
* the panel in a new windows.
* @author rbn
*/

public class Tutorial1App extends JPanel {

  //where our knowledge is stored
  private MGraph mGraph;
  //the URI for which the context is shown
  private String selectedUri;
  //These get notified when the selected URI changes
  private Set<UriChangedListener> uriChangedListeners
      = new HashSet<UriChangedListener>();
  //these get notified when mGraph was modified
  private Set<GraphChangedListener> graphChangedListeners
      = new HashSet<GraphChangedListener>();

  public static void main(String[] args) throws Exception {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

      public void run() {
        //Create and set up the window.
        JFrame frame = new JFrame("Triple GUI");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Tutorial1App tutorial1App = new Tutorial1App("http://dbpedia.org/resource/Category:BBC_television_sitcoms");
        frame.getContentPane().add(tutorial1App);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
      }
    });
  }

  /**
   * Constructs a Tutorial1App with an initially selected URI for which the
   * describing triples are retrieved from the web.
   *
   * @param selectedUri the initial selected URI
   */
  public Tutorial1App(final String selectedUri) {
    this.selectedUri = selectedUri;
    //get the singleton instance of TcManager
    final TcManager tcManager = TcManager.getInstance();
    //the arbitrary name we use for our mutable graph
    final UriRef mGraphName = new UriRef("http://tutorial.example.org/");
    //the m-graph into which we'll put the triples we collect
    mGraph = tcManager.createMGraph(mGraphName);
    try {
      loadContextFromWeb();
    } catch (IOException ex) {
      System.err.println("Error retrieving " + selectedUri);
      ex.printStackTrace();
    }

    Iterator<Triple> typeTriples = mGraph.filter(new UriRef(selectedUri), RDF.type, null);
    while (typeTriples.hasNext()) {
      System.out.println(typeTriples.next());
    }

    setLayout(new BorderLayout());
    add(createNavigation(), BorderLayout.PAGE_START);
    add(createMainArea(), BorderLayout.CENTER);
    add(createFooter(), BorderLayout.PAGE_END);
  }

  public String getSelectedUri() {
    return selectedUri;
  }

  public void setSelectedUri(String selectedUri) {
    this.selectedUri = selectedUri;
    for (UriChangedListener uriChangedListener : uriChangedListeners) {
      uriChangedListener.uriChanged();
    }
  }

  public void addGraphChangedListeners(GraphChangedListener gcl) {
    graphChangedListeners.add(gcl);
  }

  public void addUriChangedListeners(UriChangedListener ucl) {
    uriChangedListeners.add(ucl);
  }

  /**
   *
   * @return the context of the currently selected URI
   */
  public Graph getCurrentContext() {
    return new GraphNode(new UriRef(selectedUri), mGraph).getNodeContext();
  }

  /**
   * Dereference the selected URI and add the retroieved triples to mGraph
   *
   * @throws java.io.IOException
   */
  private void loadContextFromWeb() throws IOException {
    final URL url = new URL(selectedUri);
    final URLConnection con = url.openConnection();
    con.addRequestProperty("Accept", "application/rdf+xml");
    final InputStream inputStream = con.getInputStream();

    //get the singleton instance of Parser
    final Parser parser = Parser.getInstance();
    Graph deserializedGraph = parser.parse(inputStream, "application/rdf+xml");

    mGraph.addAll(deserializedGraph);
    for (GraphChangedListener graphChangedListener : graphChangedListeners) {
      graphChangedListener.graphChanged();
    }
  }

  private JPanel createNavigation() {
    JPanel navigation = new JPanel();
    navigation.add(new JLabel("URI: "));
    final JTextField selectedUriField = new JTextField(selectedUri, 80);
    navigation.add(selectedUriField);
    addUriChangedListeners(new UriChangedListener() {

      @Override
      public void uriChanged() {
        selectedUriField.setText(selectedUri);
      }
    });
    JButton showContextButton = new JButton("Show Context");
    navigation.add(showContextButton);
    JButton loadContextButton = new JButton("Load Context from Web");
    navigation.add(loadContextButton);
    loadContextButton.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        try {
          setSelectedUri(selectedUriField.getText());
          loadContextFromWeb();
         
        } catch (IOException ex) {
          Logger.getLogger(Tutorial1App.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    });
    showContextButton.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        setSelectedUri(selectedUriField.getText());
      }
    });
    return navigation;
  }

  private Component createMainArea() {
    //main area with triple-table
    final TripleDataTableModel dataModel = new TripleDataTableModel();
    addUriChangedListeners(dataModel);
    addGraphChangedListeners(dataModel);
    final JTable table = new JTable(dataModel);
    table.setCellSelectionEnabled(true);
    table.addMouseListener(new MouseAdapter() {

      @Override
      public void mouseClicked(MouseEvent e) {
        int col = table.getSelectedColumn();
        if (col == 1) {
          return;
        }
        int row = table.getSelectedRow();
        final Object cellValue = dataModel.getValueAt(row, col);
        if (cellValue instanceof UriRef) {
          setSelectedUri(((UriRef) cellValue).getUnicodeString());
        }
      }
    });
    JScrollPane scrollpane = new JScrollPane(table);
    return scrollpane;
  }

  private Component createFooter() {
    JPanel footer = new JPanel();
    footer.add(new JLabel("Size of local graph: "));
    final JLabel sizeLabel = new JLabel(Integer.toString(mGraph.size()));
    addGraphChangedListeners(new GraphChangedListener() {

      @Override
      public void graphChanged() {
        sizeLabel.setText(Integer.toString(mGraph.size()));
      }
    });
    sizeLabel.setText(Integer.toString(mGraph.size()));
    footer.add(sizeLabel);
    return footer;
  }

  class TripleDataTableModel extends AbstractTableModel implements UriChangedListener, GraphChangedListener {

    private final List<Triple> tripleList = new ArrayList<Triple>();

    public TripleDataTableModel() {
      tripleList.addAll(getCurrentContext());
    }

    public int getColumnCount() {
      return 3;
    }

    public int getRowCount() {
      return tripleList.size();
    }

    public Object getValueAt(int row, int col) {
      Triple triple = tripleList.get(row);
      switch (col) {
        case 0:
          return triple.getSubject();
        case 1:
          return triple.getPredicate();
        default:
          return triple.getObject();
      }
    }


    @Override
    public void uriChanged() {
      tripleList.clear();
      tripleList.addAll(getCurrentContext());
      fireTableDataChanged();
    }

    @Override
    public void graphChanged() {
      tripleList.clear();
      tripleList.addAll(getCurrentContext());
      fireTableDataChanged();
    }
  }

  public interface UriChangedListener {
    void uriChanged();
  }

  public interface GraphChangedListener {
    void graphChanged();
  }
}
TOP

Related Classes of org.example.clerezza.scb.tutorial1.Tutorial1App$GraphChangedListener

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.