Package com.gitblit.client

Source Code of com.gitblit.client.MessageRenderer

/*
* 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.FlowLayout;
import java.awt.Font;
import java.io.Serializable;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.table.TableCellRenderer;

import org.eclipse.jgit.lib.Constants;

import com.gitblit.models.FeedEntryModel;

/**
* Message renderer displays the short log message and then any refs in a style
* like the site.
*
* @author James Moger
*
*/
public class MessageRenderer extends JPanel implements TableCellRenderer, Serializable {

  private static final long serialVersionUID = 1L;

  private final GitblitClient gitblit;

  private final ImageIcon mergeIcon;

  private final ImageIcon blankIcon;

  private final JLabel messageLabel;

  private final JLabel headLabel;

  private final JLabel branchLabel;

  private final JLabel remoteLabel;

  private final JLabel tagLabel;

  public MessageRenderer() {
    this(null);
  }

  public MessageRenderer(GitblitClient gitblit) {
    super(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 1));
    this.gitblit = gitblit;

    mergeIcon = new ImageIcon(getClass().getResource("/commit_merge_16x16.png"));
    blankIcon = new ImageIcon(getClass().getResource("/blank.png"));

    messageLabel = new JLabel();

    headLabel = newRefLabel();
    branchLabel = newRefLabel();
    remoteLabel = newRefLabel();
    tagLabel = newRefLabel();

    add(messageLabel);
    add(headLabel);
    add(branchLabel);
    add(remoteLabel);
    add(tagLabel);
  }

  private JLabel newRefLabel() {
    JLabel label = new JLabel();
    label.setOpaque(true);
    Font font = label.getFont();
    label.setFont(font.deriveFont(font.getSize2D() - 1f));
    return label;
  }

  private void resetRef(JLabel label) {
    label.setText("");
    label.setBackground(messageLabel.getBackground());
    label.setBorder(null);
    label.setVisible(false);
  }

  private void showRef(String ref, JLabel label) {
    String name = ref;
    Color bg = getBackground();
    Border border = null;
    if (name.startsWith(Constants.R_HEADS)) {
      // local branch
      bg = Color.decode("#CCFFCC");
      name = name.substring(Constants.R_HEADS.length());
      border = new LineBorder(Color.decode("#00CC33"), 1);
    } else if (name.startsWith(Constants.R_REMOTES)) {
      // remote branch
      bg = Color.decode("#CAC2F5");
      name = name.substring(Constants.R_REMOTES.length());
      border = new LineBorder(Color.decode("#6C6CBF"), 1);
    } else if (name.startsWith(Constants.R_TAGS)) {
      // tag
      bg = Color.decode("#FFFFAA");
      name = name.substring(Constants.R_TAGS.length());
      border = new LineBorder(Color.decode("#FFCC00"), 1);
    } else if (name.equals(Constants.HEAD)) {
      // HEAD
      bg = Color.decode("#FFAAFF");
      border = new LineBorder(Color.decode("#FF00EE"), 1);
    } else {
    }
    label.setText(name);
    label.setBackground(bg);
    label.setBorder(border);
    label.setVisible(true);
  }

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column) {
    if (isSelected)
      setBackground(table.getSelectionBackground());
    else
      setBackground(table.getBackground());
    messageLabel.setForeground(isSelected ? table.getSelectionForeground() : table
        .getForeground());
    if (value == null) {
      return this;
    }
    FeedEntryModel entry = (FeedEntryModel) value;

    if (gitblit == null) {
      // no gitblit client, just display message
      messageLabel.setText(entry.title);
    } else {
      // show message in BOLD if its a new entry
      if (entry.published.after(gitblit.getLastFeedRefresh(entry.repository, entry.branch))) {
        messageLabel.setText("<html><body><b>" + entry.title);
      } else {
        messageLabel.setText(entry.title);
      }
    }

    // reset ref label
    resetRef(headLabel);
    resetRef(branchLabel);
    resetRef(remoteLabel);
    resetRef(tagLabel);

    int parentCount = 0;
    if (entry.tags != null) {
      for (String tag : entry.tags) {
        if (tag.startsWith("ref:")) {
          // strip ref:
          tag = tag.substring("ref:".length());
        } else {
          // count parents
          if (tag.startsWith("parent:")) {
            parentCount++;
          }
        }
        if (tag.equals(entry.branch)) {
          // skip current branch label
          continue;
        }
        if (tag.startsWith(Constants.R_HEADS)) {
          // local branch
          showRef(tag, branchLabel);
        } else if (tag.startsWith(Constants.R_REMOTES)) {
          // remote branch
          showRef(tag, remoteLabel);
        } else if (tag.startsWith(Constants.R_TAGS)) {
          // tag
          showRef(tag, tagLabel);
        } else if (tag.equals(Constants.HEAD)) {
          // HEAD
          showRef(tag, headLabel);
        }
      }
    }

    if (parentCount > 1) {
      // multiple parents, show merge icon
      messageLabel.setIcon(mergeIcon);
    } else {
      messageLabel.setIcon(blankIcon);
    }
    return this;
  }
}
TOP

Related Classes of com.gitblit.client.MessageRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.