/**
* Copyright 1999-2009 The Pegadi Team
*
* Licensed 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.
*/
package org.pegadi.storysketch.views.plugins;
import org.apache.xerces.parsers.DOMParser;
import org.pegadi.storysketch.views.RDFItem;
import org.pegadi.storysketch.views.RDFTable;
import org.pegadi.storysketch.views.RDFTableModel;
import org.pegadi.storysketch.views.RDFTransferable;
import org.w3c.dom.Document;
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
public class UDArchiveSearchPanel extends ArchiveSearchPanel {
// RDFList results;
RDFTable results;
JScrollPane resultsScroll = new JScrollPane();
JTextField searchField;
DOMParser parser;
public UDArchiveSearchPanel() {
RDFTableModel model = new RDFTableModel();
results = new RDFTable(model, false);
resultsScroll.setViewportView(results);
results.setDragEnabled(true);
results.setTransferHandler(new ResultsTransferHandler());
setLayout(new BorderLayout());
JPanel topPanel = new JPanel();
searchField = new JTextField(13);
searchField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setCursor(new Cursor(Cursor.WAIT_CURSOR));
performSearch();
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
});
// Search button
URL searchUrl = getClass().getClassLoader().getResource("images/org/pegadi/storysketch/swing_search.gif");
ImageIcon searchIcon = new ImageIcon(searchUrl);
JButton searchButton = new JButton(new AbstractAction("", searchIcon) {
public void actionPerformed(ActionEvent e) {
setCursor(new Cursor(Cursor.WAIT_CURSOR));
performSearch();
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
});
topPanel.add(new JLabel("Søk:"));
topPanel.add(searchField);
topPanel.add(searchButton);
add(topPanel, BorderLayout.NORTH);
add(resultsScroll, BorderLayout.CENTER);
}
public void clear() {
searchField.setText("");
RDFTableModel model = (RDFTableModel) results.getModel();
model.clear();
}
public RDFTable getResultTable() {
return results;
}
private void performSearch() {
if(parser == null)
parser = new DOMParser();
Document doc = null;
String encoded;
try {
encoded = java.net.URLEncoder.encode(searchField.getText(), "iso-8859-1");
} catch (java.io.UnsupportedEncodingException e) {
encoded = searchField.getText();
}
String url = "http://underdusken.no:8888/storysketch/udarchive/search?queryString="+
encoded;
try {
parser.parse(url);
} catch (Exception se) {
JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(results), "Kunne ikke utføre søk",
"Feil ved søk",
JOptionPane.ERROR_MESSAGE);
se.printStackTrace();
return;
}
RDFTableModel model = (RDFTableModel) results.getModel();
model.clear();
model.loadRDF(parser.getDocument().getDocumentElement());
if(model.getRowCount() == 0) {
resultsScroll.setViewportView(new JLabel("<html><font size=\"+1\"><b>Beklager</b></font><br>Fant ingen saker i arkivet.<br> (\"" +searchField.getText() +"\")</html>"));
} else {
resultsScroll.setViewportView(results);
}
}
class ResultsTransferHandler extends TransferHandler {
public int getSourceActions(JComponent c) {
return COPY;
}
protected Transferable createTransferable(JComponent c) {
if(c instanceof JTable) {
JTable table = (JTable)c;
Object selected = table.getValueAt(table.getSelectedRow(), 0);
if(selected instanceof RDFItem) {
RDFItem i = (RDFItem) selected;
return new RDFTransferable(i);
}
}
return null;
}
public boolean canImport(JComponent c, DataFlavor[] flavors) {
return false;
}
}
}