docs/05_roadmap.mkd | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/BranchRenderer.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/FeedsPanel.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/GitblitManager.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/GitblitPanel.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/GitblitRegistration.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/MessageRenderer.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/client/SyndicatedEntryTableModel.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/models/SyndicatedEntryModel.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/wicket/GitBlitWebApp.properties | ●●●●● patch | view | raw | blame | history |
docs/05_roadmap.mkd
@@ -7,7 +7,6 @@ * Eclipse: create plugin to enumerate repositories and delegate cloning to EGit * Manager: support federation RPCs * Manager: RSS feed reader tab ### TODO (medium priority) src/com/gitblit/client/BranchRenderer.java
@@ -17,24 +17,18 @@ import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.io.Serializable; 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 javax.swing.table.DefaultTableCellRenderer; /** * Branch renderer displays refs/heads and refs/remotes in a style like the * site. * Branch renderer displays refs/heads and refs/remotes in a color similar to * the site. * * @author James Moger * */ public class BranchRenderer extends JPanel implements TableCellRenderer, Serializable { public class BranchRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; @@ -42,37 +36,20 @@ private static final String R_REMOTES = "refs/remotes/"; private JLabel branchLabel; public BranchRenderer() { super(new FlowLayout(FlowLayout.CENTER, 0, 1)); branchLabel = new JLabel(); branchLabel.setOpaque(true); add(branchLabel); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (isSelected) setBackground(table.getSelectionBackground()); else setBackground(table.getBackground()); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); String name = value.toString(); Color bg = getBackground(); Border border = null; Color fg = getForeground(); if (name.startsWith(R_HEADS)) { bg = Color.decode("#CCFFCC"); name = name.substring(R_HEADS.length()); border = new LineBorder(Color.decode("#00CC33"), 1); fg = new Color(0, 0x80, 0); } else if (name.startsWith(R_REMOTES)) { bg = Color.decode("#CAC2F5"); name = name.substring(R_REMOTES.length()); border = new LineBorder(Color.decode("#6C6CBF"), 1); fg = Color.decode("#6C6CBF"); } branchLabel.setText(" " + name + " "); branchLabel.setBackground(bg); branchLabel.setBorder(border); setText(name); setForeground(isSelected ? table.getSelectionForeground() : fg); return this; } } src/com/gitblit/client/FeedsPanel.java
@@ -41,7 +41,6 @@ import javax.swing.event.ListSelectionListener; import javax.swing.table.TableRowSorter; import com.gitblit.Constants.RpcRequest; import com.gitblit.models.FeedModel; import com.gitblit.models.SyndicatedEntryModel; import com.gitblit.utils.StringUtils; @@ -130,8 +129,8 @@ controls.add(viewTree); NameRenderer nameRenderer = new NameRenderer(); tableModel = new SyndicatedEntryTableModel(gitblit); header = new HeaderPanel(Translation.get("gb.timeline"), "feed_16x16.png"); tableModel = new SyndicatedEntryTableModel(); header = new HeaderPanel(Translation.get("gb.activity"), "feed_16x16.png"); table = Utils.newTable(tableModel, Utils.DATE_FORMAT); defaultSorter = new TableRowSorter<SyndicatedEntryTableModel>(tableModel); String name = table.getColumnName(SyndicatedEntryTableModel.Columns.Author.ordinal()); @@ -142,6 +141,9 @@ name = table.getColumnName(SyndicatedEntryTableModel.Columns.Branch.ordinal()); table.getColumn(name).setCellRenderer(new BranchRenderer()); name = table.getColumnName(SyndicatedEntryTableModel.Columns.Message.ordinal()); table.getColumn(name).setCellRenderer(new MessageRenderer(gitblit)); table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { @@ -220,8 +222,7 @@ } protected void refreshFeeds() { // TODO change request type here GitblitWorker worker = new GitblitWorker(FeedsPanel.this, RpcRequest.LIST_USERS) { GitblitWorker worker = new GitblitWorker(FeedsPanel.this, null) { @Override protected Boolean doRequest() throws IOException { gitblit.refreshSubscribedFeeds(); @@ -242,7 +243,7 @@ tableModel.entries.clear(); tableModel.entries.addAll(gitblit.getSyndicatedEntries()); tableModel.fireTableDataChanged(); header.setText(Translation.get("gb.timeline") + " (" header.setText(Translation.get("gb.activity") + " (" + gitblit.getSyndicatedEntries().size() + ")"); if (pack) { Utils.packColumns(table, Utils.MARGIN); src/com/gitblit/client/GitblitManager.java
@@ -400,7 +400,7 @@ } private void loadFeedCache(GitblitRegistration reg) { File feedCache = new File(configFile.getParentFile(), StringUtils.getSHA1(reg.url) File feedCache = new File(configFile.getParentFile(), StringUtils.getSHA1(reg.toString()) + ".cache"); if (!feedCache.exists()) { // no cache for this registration @@ -429,8 +429,8 @@ private void writeFeedCache(GitblitRegistration reg) { try { File feedCache = new File(configFile.getParentFile(), StringUtils.getSHA1(reg.url) + ".cache"); File feedCache = new File(configFile.getParentFile(), StringUtils.getSHA1(reg .toString()) + ".cache"); FileWriter writer = new FileWriter(feedCache); for (FeedModel feed : reg.feeds) { writer.append(MessageFormat.format("{0}={1,date,yyyy-MM-dd'T'HH:mm:ss}\n", src/com/gitblit/client/GitblitPanel.java
@@ -61,7 +61,7 @@ tabs = new JTabbedPane(JTabbedPane.BOTTOM); tabs.addTab(Translation.get("gb.repositories"), createRepositoriesPanel()); tabs.addTab(Translation.get("gb.timeline"), createFeedsPanel()); tabs.addTab(Translation.get("gb.activity"), createFeedsPanel()); tabs.addTab(Translation.get("gb.users"), createUsersPanel()); tabs.addTab(Translation.get("gb.settings"), createSettingsPanel()); tabs.addTab(Translation.get("gb.status"), createStatusPanel()); src/com/gitblit/client/GitblitRegistration.java
@@ -71,11 +71,16 @@ } } protected void cacheFeeds() { } @Override public int compareTo(GitblitRegistration o) { return name.toLowerCase().compareTo(o.name.toLowerCase()); } protected void cacheFeeds() { @Override public String toString() { return name + " (" + url + ")"; } } src/com/gitblit/client/MessageRenderer.java
New file @@ -0,0 +1,129 @@ /* * 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.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 com.gitblit.models.SyndicatedEntryModel; /** * 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 static final String R_TAGS = "refs/tags/"; private static final String R_HEADS = "refs/heads/"; private static final String R_REMOTES = "refs/remotes/"; private final GitblitClient gitblit; private final JLabel messageLabel; private final JLabel branchLabel; public MessageRenderer(GitblitClient gitblit) { super(new FlowLayout(FlowLayout.LEFT, 10, 1)); this.gitblit = gitblit; messageLabel = new JLabel(); branchLabel = new JLabel(); branchLabel.setOpaque(true); Font font = branchLabel.getFont(); branchLabel.setFont(font.deriveFont(font.getSize2D() - 1f)); add(messageLabel); add(branchLabel); } 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()); SyndicatedEntryModel entry = (SyndicatedEntryModel) value; // 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 branchLabel.setText(""); branchLabel.setBackground(messageLabel.getBackground()); branchLabel.setBorder(null); if (entry.tags != null) { for (String tag : entry.tags) { if (tag.equals(entry.branch)) { continue; } String name = tag; Color bg = getBackground(); Border border = null; if (name.startsWith(R_HEADS)) { // local branch bg = Color.decode("#CCFFCC"); name = name.substring(R_HEADS.length()); border = new LineBorder(Color.decode("#00CC33"), 1); } else if (name.startsWith(R_REMOTES)) { // origin branch bg = Color.decode("#CAC2F5"); name = name.substring(R_REMOTES.length()); border = new LineBorder(Color.decode("#6C6CBF"), 1); } else if (name.startsWith(R_TAGS)) { // tag bg = Color.decode("#FFFFAA"); name = name.substring(R_TAGS.length()); border = new LineBorder(Color.decode("#FFCC00"), 1); } else if (name.equals("HEAD")) { // HEAD bg = Color.decode("#FFAAFF"); border = new LineBorder(Color.decode("#FF00EE"), 1); } else { } branchLabel.setText(" " + name + " "); branchLabel.setBackground(bg); branchLabel.setBorder(border); } } return this; } } src/com/gitblit/client/SyndicatedEntryTableModel.java
@@ -34,12 +34,10 @@ private static final long serialVersionUID = 1L; private final GitblitClient gitblit; List<SyndicatedEntryModel> entries; enum Columns { Date, Repository, Author, Message, Branch; Date, Repository, Branch, Author, Message; @Override public String toString() { @@ -47,8 +45,7 @@ } } public SyndicatedEntryTableModel(GitblitClient gitblit) { this.gitblit = gitblit; public SyndicatedEntryTableModel() { this.entries = new ArrayList<SyndicatedEntryModel>(); } @@ -95,6 +92,8 @@ public Class<?> getColumnClass(int columnIndex) { if (Columns.Date.ordinal() == columnIndex) { return Date.class; } else if (Columns.Message.ordinal() == columnIndex) { return SyndicatedEntryModel.class; } return String.class; } @@ -113,11 +112,7 @@ case Author: return entry.author; case Message: Date lastRefresh = gitblit.getLastFeedRefresh(entry.repository, entry.branch); if (entry.published.after(lastRefresh)) { return "<html><body><b>" + entry.title; } return entry.title; return entry; } return null; } src/com/gitblit/models/SyndicatedEntryModel.java
@@ -17,6 +17,7 @@ import java.io.Serializable; import java.util.Date; import java.util.List; /** * SyndicationEntryModel represents an entry in a syndication (RSS) feed. @@ -33,6 +34,7 @@ public String link; public String content; public String contentType; public List<String> tags; private static final long serialVersionUID = 1L; src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -177,6 +177,6 @@ gb.version = version gb.releaseDate = release date gb.date = date gb.timeline = timeline gb.activity = activity gb.subscribe = subscribe gb.branch = branch