/* * 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. */ package ro.nextreports.designer.querybuilder; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.util.Collections; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.jdesktop.swingx.JXTable; import ro.nextreports.designer.Globals; import ro.nextreports.designer.dbviewer.common.DBColumn; import ro.nextreports.designer.dbviewer.common.DBViewer; import ro.nextreports.designer.dbviewer.common.MalformedTableNameException; import ro.nextreports.designer.dbviewer.common.NextSqlException; import ro.nextreports.designer.querybuilder.table.DBColumnTableModel; import ro.nextreports.designer.util.CopyTableMouseAdapter; import ro.nextreports.designer.util.ImageUtil; import ro.nextreports.designer.util.Show; /** * Created by IntelliJ IDEA. * User: mihai.panaitescu * Date: Jun 19, 2006 * Time: 10:15:49 AM */ public class DBColumnViewerPanel extends JPanel { private Dimension viewerDim = new Dimension(400, 200); private DBColumnTableModel model; private JXTable table; private boolean error = false; public DBColumnViewerPanel(DBObject tableObject) { String tableName = tableObject.getName(); model = new DBColumnTableModel(); final DBViewer viewer = Globals.getDBViewer(); try { List<DBColumn> columns = null; try { columns = viewer.getColumns(tableObject.getSchemaName(), tableName); } catch (MalformedTableNameException e1) { Show.error(e1); error = true; return; } Collections.sort(columns); model.addElements(columns); table = new JXTable(model); table.getColumnModel().getColumn(0).setCellRenderer(new DBKeyRenderer()); table.getTableHeader().setReorderingAllowed(false); //table.setBackground(ColorUtil.PANEL_BACKROUND_COLOR); table.setGridColor(Color.LIGHT_GRAY); table.addMouseListener(new CopyTableMouseAdapter(table) { protected Object getFormattedValue(Object value) { if (value instanceof DBColumn) { // first column is primary key hint : no need to copy it return ""; } else { return super.getFormattedValue(value); } } }); //the only way to completely prevent a selection in a JTable component //table.setFocusable(false); //table.setCellSelectionEnabled(false); setLayout(new BorderLayout()); add(new JScrollPane(table)); table.setPreferredScrollableViewportSize(viewerDim); JTableHeader header = table.getTableHeader(); final Font boldFont = header.getFont().deriveFont(Font.BOLD); final TableCellRenderer headerRenderer = header.getDefaultRenderer(); header.setDefaultRenderer(new TableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component comp = headerRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); comp.setFont(boldFont); return comp; } }); setPrefferedColumnsSize(); } catch (NextSqlException e1) { error = true; e1.printStackTrace(); Show.error(e1); } } private void setPrefferedColumnsSize() { TableColumn col = table.getColumnModel().getColumn(0); int width = 20; col.setMinWidth(width); col.setMaxWidth(width); col.setPreferredWidth(width); col = table.getColumnModel().getColumn(1); width = 160; col.setPreferredWidth(width); col = table.getColumnModel().getColumn(2); width = 120; col.setPreferredWidth(width); col = table.getColumnModel().getColumn(3); width = 80; col.setPreferredWidth(width); col = table.getColumnModel().getColumn(4); width = 80; col.setPreferredWidth(width); col = table.getColumnModel().getColumn(5); width = 80; col.setPreferredWidth(width); } class DBKeyRenderer extends JLabel implements TableCellRenderer { public Component getTableCellRendererComponent( JTable table, Object element, boolean isSelected, boolean hasFocus, int row, int column) { DBColumn value = (DBColumn) element; ImageIcon icon = null; if (value != null) { if (value.isPrimaryKey()) { icon = ImageUtil.getImageIcon("keycolumn"); } else if (value.isForeignKey()) { icon = ImageUtil.getImageIcon("fkeycolumn"); } else if (value.isIndex()) { icon = ImageUtil.getImageIcon("icolumn"); } else { icon = ImageUtil.getImageIcon("column"); } } setIcon(icon); return this; } } public boolean isError() { return error; } }