Branch renderer. String change. Config section name changes.
1 files added
8 files modified
New file |
| | |
| | | /*
|
| | | * 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.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;
|
| | |
|
| | | /**
|
| | | * Branch renderer displays refs/heads and refs/remotes in a style like the
|
| | | * site.
|
| | | * |
| | | * @author James Moger
|
| | | * |
| | | */
|
| | | public class BranchRenderer extends JPanel implements TableCellRenderer, Serializable {
|
| | |
|
| | | private static final long serialVersionUID = 1L;
|
| | |
|
| | | private static final String R_HEADS = "refs/heads/";
|
| | |
|
| | | 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());
|
| | |
|
| | | String name = value.toString();
|
| | | Color bg = getBackground();
|
| | | Border border = null;
|
| | | if (name.startsWith(R_HEADS)) {
|
| | | bg = Color.decode("#CCFFCC");
|
| | | name = name.substring(R_HEADS.length());
|
| | | border = new LineBorder(Color.decode("#00CC33"), 1, true);
|
| | | } else if (name.startsWith(R_REMOTES)) {
|
| | | bg = Color.decode("#CAC2F5");
|
| | | name = name.substring(R_REMOTES.length());
|
| | | border = new LineBorder(Color.decode("#6C6CBF"), 1, true);
|
| | | }
|
| | | branchLabel.setText(" " + name + " ");
|
| | | branchLabel.setBackground(bg);
|
| | | branchLabel.setBorder(border);
|
| | | return this;
|
| | | }
|
| | | } |
| | |
| | |
|
| | | NameRenderer nameRenderer = new NameRenderer();
|
| | | tableModel = new SyndicatedEntryTableModel();
|
| | | header = new HeaderPanel(Translation.get("gb.recentActivity"), "feed_16x16.png");
|
| | | header = new HeaderPanel(Translation.get("gb.timeline"), "feed_16x16.png");
|
| | | table = Utils.newTable(tableModel, Utils.DATE_FORMAT);
|
| | | String name = table.getColumnName(SyndicatedEntryTableModel.Columns.Author.ordinal());
|
| | | table.setRowHeight(nameRenderer.getFont().getSize() + 8);
|
| | |
| | | table.getColumn(name).setCellRenderer(nameRenderer);
|
| | |
|
| | | name = table.getColumnName(SyndicatedEntryTableModel.Columns.Branch.ordinal());
|
| | | table.getColumn(name).setCellRenderer(nameRenderer);
|
| | | table.getColumn(name).setCellRenderer(new BranchRenderer());
|
| | |
|
| | | table.addMouseListener(new MouseAdapter() {
|
| | | public void mouseClicked(MouseEvent e) {
|
| | |
| | | tableModel.entries.clear();
|
| | | tableModel.entries.addAll(gitblit.getSyndicatedEntries());
|
| | | tableModel.fireTableDataChanged();
|
| | | header.setText(Translation.get("gb.recentActivity") + " ("
|
| | | header.setText(Translation.get("gb.timeline") + " ("
|
| | | + gitblit.getSyndicatedEntries().size() + ")");
|
| | | if (pack) {
|
| | | Utils.packColumns(table, Utils.MARGIN);
|
| | |
| | | for (FeedModel feed : reg.feeds) {
|
| | | feed.lastRefresh = new Date();
|
| | | List<SyndicatedEntryModel> entries = SyndicationUtils.readFeed(url,
|
| | | feed.repository, feed.branch, feed.maxRetrieval, account, password);
|
| | | feed.repository, feed.branch, -1, account, password);
|
| | | allEntries.addAll(entries);
|
| | | }
|
| | | }
|
| | |
| | | public class GitblitManager extends JFrame implements RegistrationsDialog.RegistrationListener {
|
| | |
|
| | | private static final long serialVersionUID = 1L;
|
| | | private static final String SERVER = "server";
|
| | | private static final String FEED = "feed";
|
| | | private final SimpleDateFormat dateFormat;
|
| | | private JTabbedPane serverTabs;
|
| | | private File configFile = new File(System.getProperty("user.home"), ".gitblit/config");
|
| | |
| | | private void loadRegistrations() {
|
| | | try {
|
| | | StoredConfig config = getConfig();
|
| | | Set<String> servers = config.getSubsections("servers");
|
| | | Set<String> servers = config.getSubsections(SERVER);
|
| | | for (String server : servers) {
|
| | | Date lastLogin = new Date(0);
|
| | | String date = config.getString("servers", server, "lastLogin");
|
| | | String date = config.getString(SERVER, server, "lastLogin");
|
| | | if (!StringUtils.isEmpty(date)) {
|
| | | lastLogin = dateFormat.parse(date);
|
| | | }
|
| | | String url = config.getString("servers", server, "url");
|
| | | String account = config.getString("servers", server, "account");
|
| | | String url = config.getString(SERVER, server, "url");
|
| | | String account = config.getString(SERVER, server, "account");
|
| | | char[] password;
|
| | | String pw = config.getString("servers", server, "password");
|
| | | String pw = config.getString(SERVER, server, "password");
|
| | | if (StringUtils.isEmpty(pw)) {
|
| | | password = new char[0];
|
| | | } else {
|
| | | password = new String(Base64.decode(pw)).toCharArray();
|
| | | }
|
| | | GitblitRegistration reg = new GitblitRegistration(server, url, account, password);
|
| | | String[] feeds = config.getStringList("servers", server, "feeds");
|
| | | String[] feeds = config.getStringList(SERVER, server, FEED);
|
| | | if (feeds != null) {
|
| | | // deserialize the field definitions
|
| | | for (String definition : feeds) {
|
| | |
| | | if (!StringUtils.isEmpty(name) && !name.equals(reg.name)) {
|
| | | // delete old registration
|
| | | registrations.remove(name);
|
| | | config.unsetSection("servers", name);
|
| | | config.unsetSection(SERVER, name);
|
| | | }
|
| | |
|
| | | // update registration
|
| | | config.setString("servers", reg.name, "url", reg.url);
|
| | | config.setString("servers", reg.name, "account", reg.account);
|
| | | config.setString(SERVER, reg.name, "url", reg.url);
|
| | | config.setString(SERVER, reg.name, "account", reg.account);
|
| | | if (reg.savePassword) {
|
| | | config.setString("servers", reg.name, "password",
|
| | | config.setString(SERVER, reg.name, "password",
|
| | | Base64.encodeBytes(new String(reg.password).getBytes("UTF-8")));
|
| | | } else {
|
| | | config.setString("servers", reg.name, "password", "");
|
| | | config.setString(SERVER, reg.name, "password", "");
|
| | | }
|
| | | if (reg.lastLogin != null) {
|
| | | config.setString("servers", reg.name, "lastLogin", dateFormat.format(reg.lastLogin));
|
| | | config.setString(SERVER, reg.name, "lastLogin", dateFormat.format(reg.lastLogin));
|
| | | }
|
| | | // serialize the feed definitions
|
| | | List<String> definitions = new ArrayList<String>();
|
| | |
| | | definitions.add(feed.toString());
|
| | | }
|
| | | if (definitions.size() > 0) {
|
| | | config.setStringList("servers", reg.name, "feeds", definitions);
|
| | | config.setStringList(SERVER, reg.name, FEED, definitions);
|
| | | }
|
| | | config.save();
|
| | | return true;
|
| | |
| | | try {
|
| | | StoredConfig config = getConfig();
|
| | | for (GitblitRegistration reg : list) {
|
| | | config.unsetSection("servers", reg.name);
|
| | | config.unsetSection(SERVER, reg.name);
|
| | | registrations.remove(reg.name);
|
| | | }
|
| | | config.save();
|
| | |
| | | import com.gitblit.models.FeedModel;
|
| | |
|
| | | /**
|
| | | * GitblitPanel performs the login, all business logic, and contains all widgets
|
| | | * to represent the state of a repository for the given account credentials.
|
| | | * GitblitPanel is a container for the repository, users, settings, etc panels.
|
| | | *
|
| | | * @author James Moger
|
| | | *
|
| | |
| | |
|
| | | tabs = new JTabbedPane(JTabbedPane.BOTTOM);
|
| | | tabs.addTab(Translation.get("gb.repositories"), createRepositoriesPanel());
|
| | | tabs.addTab(Translation.get("gb.recentActivity"), createFeedsPanel());
|
| | | tabs.addTab(Translation.get("gb.timeline"), createFeedsPanel());
|
| | | tabs.addTab(Translation.get("gb.users"), createUsersPanel());
|
| | | tabs.addTab(Translation.get("gb.settings"), createSettingsPanel());
|
| | | tabs.addTab(Translation.get("gb.status"), createStatusPanel());
|
| | |
| | | settingsPanel.updateTable(true);
|
| | | statusPanel.updateTable(false);
|
| | | } else {
|
| | | // remove the settings tab
|
| | | // remove the settings and status tab
|
| | | String[] titles = { Translation.get("gb.settings"), Translation.get("gb.status") };
|
| | | for (String title : titles) {
|
| | | for (int i = 0; i < tabs.getTabCount(); i++) {
|
| | |
| | | List<SyndicatedEntryModel> entries;
|
| | |
|
| | | enum Columns {
|
| | | Date, Repository, Branch, Author, Message;
|
| | | Date, Repository,Author, Message, Branch;
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | |
| | | package com.gitblit.models;
|
| | |
|
| | | import java.io.Serializable;
|
| | | import java.text.MessageFormat;
|
| | | import java.text.ParseException;
|
| | | import java.text.SimpleDateFormat;
|
| | | import java.util.Date;
|
| | |
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
| | |
|
| | | public String repository;
|
| | | public String branch;
|
| | | public int maxRetrieval;
|
| | | public Date lastRefresh;
|
| | |
|
| | | public boolean subscribed;
|
| | |
| | |
|
| | | public FeedModel() {
|
| | | this("");
|
| | | subscribed = false;
|
| | | }
|
| | |
|
| | | public FeedModel(String definition) {
|
| | | maxRetrieval = -1;
|
| | | subscribed = true;
|
| | | lastRefresh = new Date(0);
|
| | |
|
| | | String[] fields = definition.split(":");
|
| | | repository = fields[0];
|
| | | if (fields.length > 1) {
|
| | | branch = fields[1];
|
| | | maxRetrieval = Integer.parseInt(fields[2]);
|
| | | try {
|
| | | lastRefresh = new SimpleDateFormat("yyyyMMddHHmmss").parse(fields[3]);
|
| | | } catch (ParseException e) {
|
| | | }
|
| | | subscribed = true;
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return MessageFormat.format("{0}:{1}:{2,number,0}:{3,date,yyyyMMddHHmmss}", repository,
|
| | | branch, maxRetrieval, lastRefresh);
|
| | | if (StringUtils.isEmpty(branch)) {
|
| | | return repository;
|
| | | }
|
| | | return repository + ":" + branch;
|
| | | }
|
| | |
|
| | | @Override
|
| | |
| | | */
|
| | | public static List<SyndicatedEntryModel> readFeed(String url, String repository, String branch,
|
| | | int numberOfEntries, String username, char[] password) throws IOException {
|
| | | String feedUrl;
|
| | | if (StringUtils.isEmpty(branch)) {
|
| | | // no branch specified
|
| | | // build feed url
|
| | | List<String> parameters = new ArrayList<String>();
|
| | | if (numberOfEntries > 0) {
|
| | | // fixed number of entries
|
| | | feedUrl = MessageFormat.format("{0}/feed/{1}?l={2,number,0}", url, repository);
|
| | | } else {
|
| | | // server default number of entries
|
| | | feedUrl = MessageFormat.format("{0}/feed/{1}", url, repository);
|
| | | parameters.add("l=" + numberOfEntries);
|
| | | }
|
| | | if (!StringUtils.isEmpty(branch)) {
|
| | | parameters.add("h=" + branch);
|
| | | }
|
| | | StringBuilder sb = new StringBuilder();
|
| | | sb.append(MessageFormat.format("{0}/feed/{1}", url, repository));
|
| | | if (parameters.size() > 0) {
|
| | | boolean first = true;
|
| | | for (String parameter : parameters) {
|
| | | if (first) {
|
| | | sb.append('?');
|
| | | first = false;
|
| | | } else {
|
| | | // branch specified
|
| | | if (numberOfEntries > 0) {
|
| | | // fixed number of entries
|
| | | feedUrl = MessageFormat.format("{0}/feed/{1}?h={2}&l={3,number,0}", url,
|
| | | repository, branch, numberOfEntries);
|
| | | } else {
|
| | | // server default number of entries
|
| | | feedUrl = MessageFormat.format("{0}/feed/{1}?h={2}", url, repository, branch);
|
| | | sb.append('&');
|
| | | }
|
| | | sb.append(parameter);
|
| | | }
|
| | | }
|
| | | String feedUrl = sb.toString();
|
| | |
|
| | | URLConnection conn = ConnectionUtils.openReadConnection(feedUrl, username, password);
|
| | | InputStream is = conn.getInputStream();
|
| | | SyndFeedInput input = new SyndFeedInput();
|
| | |
| | | gb.version = version
|
| | | gb.releaseDate = release date
|
| | | gb.date = date
|
| | | gb.recentActivity = recent activity
|
| | | gb.timeline = timeline
|
| | | gb.subscribe = subscribe
|
| | | gb.branch = branch |