/** * 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; } } }