| /* | |
| * Copyright 2011 gitblit.com. | |
| * | |
| * 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 com.gitblit.client; | |
| import java.awt.Color; | |
| import java.awt.Component; | |
| import java.awt.Desktop; | |
| import java.awt.Dimension; | |
| import java.awt.Font; | |
| import java.awt.Insets; | |
| import java.io.PrintWriter; | |
| import java.io.StringWriter; | |
| import java.net.URI; | |
| import java.text.MessageFormat; | |
| import java.util.Date; | |
| import javax.swing.JOptionPane; | |
| import javax.swing.JScrollPane; | |
| import javax.swing.JTable; | |
| import javax.swing.JTextArea; | |
| import javax.swing.table.DefaultTableColumnModel; | |
| import javax.swing.table.TableCellRenderer; | |
| import javax.swing.table.TableColumn; | |
| import javax.swing.table.TableModel; | |
| import com.gitblit.Constants.RpcRequest; | |
| public class Utils { | |
| public final static int MARGIN = 5; | |
| public final static Insets INSETS = new Insets(MARGIN, MARGIN, MARGIN, MARGIN); | |
| public final static String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm"; | |
| public final static String DATE_FORMAT = "yyyy-MM-dd"; | |
| public static JTable newTable(TableModel model, String datePattern) { | |
| return newTable(model, datePattern, null); | |
| } | |
| public static JTable newTable(TableModel model, String datePattern, final RowRenderer rowRenderer) { | |
| JTable table; | |
| if (rowRenderer == null) { | |
| table = new JTable(model); | |
| } else { | |
| table = new JTable(model) { | |
| @Override | |
| public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { | |
| Component c = super.prepareRenderer(renderer, row, column); | |
| boolean isSelected = isCellSelected(row, column); | |
| rowRenderer.prepareRow(c, isSelected, row, column); | |
| return c; | |
| } | |
| }; | |
| } | |
| table.setRowHeight(table.getFont().getSize() + 8); | |
| table.setCellSelectionEnabled(false); | |
| table.setRowSelectionAllowed(true); | |
| table.getTableHeader().setReorderingAllowed(false); | |
| table.setGridColor(new Color(0xd9d9d9)); | |
| table.setBackground(Color.white); | |
| table.setDefaultRenderer(Date.class, | |
| new DateCellRenderer(datePattern, Color.orange.darker())); | |
| return table; | |
| } | |
| public static void explainNotAllowed(Component c, RpcRequest request) { | |
| String msg = MessageFormat.format("The Gitblit server does not allow the request \"{0}\".", | |
| request.name()); | |
| JOptionPane.showMessageDialog(c, msg, "Not Allowed", JOptionPane.ERROR_MESSAGE); | |
| } | |
| public static void explainForbidden(Component c, RpcRequest request) { | |
| String msg = MessageFormat.format( | |
| "The request \"{0}\" has been forbidden for the account by the Gitblit server.", | |
| request.name()); | |
| JOptionPane.showMessageDialog(c, msg, "Forbidden", JOptionPane.ERROR_MESSAGE); | |
| } | |
| public static void explainUnauthorized(Component c, RpcRequest request) { | |
| String msg = MessageFormat.format( | |
| "This account is not authorized to execute the request \"{0}\".", request.name()); | |
| JOptionPane.showMessageDialog(c, msg, "Unauthorized", JOptionPane.ERROR_MESSAGE); | |
| } | |
| public static void explainUnknown(Component c, RpcRequest request) { | |
| String msg = MessageFormat.format( | |
| "The request \"{0}\" is not recognized by the Gitblit server.", request.name()); | |
| JOptionPane.showMessageDialog(c, msg, "Unknown Request", JOptionPane.ERROR_MESSAGE); | |
| } | |
| public static void showException(Component c, Throwable t) { | |
| StringWriter writer = new StringWriter(); | |
| t.printStackTrace(new PrintWriter(writer)); | |
| String stacktrace = writer.toString(); | |
| try { | |
| writer.close(); | |
| } catch (Throwable x) { | |
| } | |
| JTextArea textArea = new JTextArea(stacktrace); | |
| textArea.setFont(new Font("monospaced", Font.PLAIN, 11)); | |
| JScrollPane jsp = new JScrollPane(textArea); | |
| jsp.setPreferredSize(new Dimension(800, 400)); | |
| JOptionPane.showMessageDialog(c, jsp, Translation.get("gb.error"), | |
| JOptionPane.ERROR_MESSAGE); | |
| } | |
| public static void packColumns(JTable table, int margin) { | |
| for (int c = 0; c < table.getColumnCount(); c++) { | |
| packColumn(table, c, 4); | |
| } | |
| } | |
| // Sets the preferred width of the visible column specified by vColIndex. | |
| // The column will be just wide enough to show the column head and the | |
| // widest cell in the column. margin pixels are added to the left and right | |
| // (resulting in an additional width of 2*margin pixels). | |
| private static void packColumn(JTable table, int vColIndex, int margin) { | |
| DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); | |
| TableColumn col = colModel.getColumn(vColIndex); | |
| int width = 0; | |
| // Get width of column header | |
| TableCellRenderer renderer = col.getHeaderRenderer(); | |
| if (renderer == null) { | |
| renderer = table.getTableHeader().getDefaultRenderer(); | |
| } | |
| Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, | |
| false, 0, 0); | |
| width = comp.getPreferredSize().width; | |
| // Get maximum width of column data | |
| for (int r = 0; r < table.getRowCount(); r++) { | |
| renderer = table.getCellRenderer(r, vColIndex); | |
| comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), | |
| false, false, r, vColIndex); | |
| width = Math.max(width, comp.getPreferredSize().width); | |
| } | |
| // Add margin | |
| width += 2 * margin; | |
| // Set the width | |
| col.setPreferredWidth(width); | |
| } | |
| public static void browse(String url) { | |
| try { | |
| Desktop.getDesktop().browse(new URI(url)); | |
| } catch (Exception x) { | |
| showException(null, x); | |
| } | |
| } | |
| public static abstract class RowRenderer { | |
| public abstract void prepareRow(Component c, boolean isSelected, int row, int column); | |
| } | |
| } |