/*
 * This file is part of the Poliqarp suite.
 * 
 * Copyright (C) 2004-2009 by Instytut Podstaw Informatyki Polskiej
 * Akademii Nauk (IPI PAN; Institute of Computer Science, Polish
 * Academy of Sciences; cf. www.ipipan.waw.pl).  All rights reserved.
 * 
 * This file may be distributed and/or modified under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation and appearing in the file gpl.txt included in the packaging
 * of this file.  (See http://www.gnu.org/licenses/translations.html for
 * unofficial translations.)
 * 
 * A commercial license is available from IPI PAN (contact
 * Michal.Ciesiolka@ipipan.waw.pl or ipi@ipipan.waw.pl for more
 * information).  Licensees holding a valid commercial license from IPI
 * PAN may use this file in accordance with that license.
 * 
 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.
 */

package ipipan.poliqarp.gui;

import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 * A table that displays metadata for a query result.
 */
public class MetaDataTable extends JTable implements MultilingualEntity,
   ListSelectionListener
{
   private MetaDataModel model;
   private MultiColorCellRenderer renderer;
   
   /**
    * Constructs a default <code>MetaDataTable</code>.
    */
   public MetaDataTable()
   {
      super();
      model = new MetaDataModel();
      setModel(model);
      setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      setCellSelectionEnabled(false);
      setRowSelectionAllowed(true);
      Color[] colors = { new Color(192,255,192), new Color(255,255,255) };
      renderer = new MultiColorCellRenderer(colors);
      setDefaultRenderer(Object.class, renderer);
      TableCellSizeAdjustor.adjustorForTable(this, 
         TableCellSizeAdjustor.ADJUST_WIDTH);
      getSelectionModel().addListSelectionListener(this);
   }
         
   public void valueChanged(ListSelectionEvent lse)
   {
      int[] rows = getSelectedRows();
      StringBuilder buf = new StringBuilder();
      for (int row : rows) {
         buf.append(model.getValueAt(row, 0) + "=>" + 
            model.getValueAt(row, 1) + "\n");
      }
      StringSelection sel = new StringSelection(buf.toString());
      Toolkit.getDefaultToolkit().getSystemClipboard().
         setContents(sel, sel);
      repaint();
   }

   /**
    * Returns the model for this table as a <code>MetaDataModel</code>.
    */
   public MetaDataModel getModel()
   {
      return model;
   }

   public void updateLanguage(Configuration config)
   {
      model.setColumnNames(config);
      setDefaultRenderer(String.class, renderer);
   }
}
