/* * 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.BorderLayout; import java.awt.Component; import java.awt.Insets; import java.io.IOException; import java.util.List; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import com.gitblit.client.ClosableTabComponent.CloseTabListener; import com.gitblit.models.FeedModel; /** * GitblitPanel is a container for the repository, users, settings, etc panels. * * @author James Moger * */ public class GitblitPanel extends JPanel implements CloseTabListener { private static final long serialVersionUID = 1L; private final RegistrationsDialog.RegistrationListener listener; private GitblitClient gitblit; private JTabbedPane tabs; private RepositoriesPanel repositoriesPanel; private FeedsPanel feedsPanel; private UsersPanel usersPanel; private TeamsPanel teamsPanel; private SettingsPanel settingsPanel; private StatusPanel statusPanel; public GitblitPanel(GitblitRegistration reg, RegistrationsDialog.RegistrationListener listener) { this.gitblit = new GitblitClient(reg); this.listener = listener; tabs = new JTabbedPane(JTabbedPane.BOTTOM); tabs.addTab(Translation.get("gb.repositories"), createRepositoriesPanel()); tabs.addTab(Translation.get("gb.activity"), createFeedsPanel()); tabs.addTab(Translation.get("gb.teams"), createTeamsPanel()); tabs.addTab(Translation.get("gb.users"), createUsersPanel()); tabs.addTab(Translation.get("gb.settings"), createSettingsPanel()); tabs.addTab(Translation.get("gb.status"), createStatusPanel()); tabs.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { tabs.getSelectedComponent().requestFocus(); } }); setLayout(new BorderLayout()); add(tabs, BorderLayout.CENTER); } private JPanel createRepositoriesPanel() { repositoriesPanel = new RepositoriesPanel(gitblit) { private static final long serialVersionUID = 1L; @Override protected void subscribeFeeds(List<FeedModel> feeds) { GitblitPanel.this.subscribeFeeds(feeds); } @Override protected void updateUsersTable() { usersPanel.updateTable(false); } @Override protected void updateTeamsTable() { teamsPanel.updateTable(false); } }; return repositoriesPanel; } private JPanel createFeedsPanel() { feedsPanel = new FeedsPanel(gitblit) { private static final long serialVersionUID = 1L; @Override protected void subscribeFeeds(List<FeedModel> feeds) { GitblitPanel.this.subscribeFeeds(feeds); } }; return feedsPanel; } private JPanel createUsersPanel() { usersPanel = new UsersPanel(gitblit) { private static final long serialVersionUID = 1L; @Override protected void updateTeamsTable() { teamsPanel.updateTable(false); } }; return usersPanel; } private JPanel createTeamsPanel() { teamsPanel = new TeamsPanel(gitblit) { private static final long serialVersionUID = 1L; @Override protected void updateUsersTable() { usersPanel.updateTable(false); } }; return teamsPanel; } private JPanel createSettingsPanel() { settingsPanel = new SettingsPanel(gitblit); return settingsPanel; } private JPanel createStatusPanel() { statusPanel = new StatusPanel(gitblit); return statusPanel; } public void login() throws IOException { gitblit.login(); repositoriesPanel.updateTable(true); feedsPanel.updateTable(true); if (gitblit.allowManagement()) { if (gitblit.getProtocolVersion() >= 2) { // refresh teams panel teamsPanel.updateTable(false); } else { // remove teams panel String teams = Translation.get("gb.teams"); for (int i = 0; i < tabs.getTabCount(); i++) { if (teams.equals(tabs.getTitleAt(i))) { tabs.removeTabAt(i); break; } } } usersPanel.updateTable(false); } else { // user does not have administrator privileges // hide admin repository buttons repositoriesPanel.disableManagement(); while (tabs.getTabCount() > 2) { // remove all management/administration tabs tabs.removeTabAt(2); } } if (gitblit.allowAdministration()) { settingsPanel.updateTable(true); statusPanel.updateTable(false); } else { // 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++) { if (tabs.getTitleAt(i).equals(title)) { tabs.removeTabAt(i); break; } } } } } @Override public Insets getInsets() { return Utils.INSETS; } @Override public void closeTab(Component c) { gitblit = null; } protected void subscribeFeeds(final List<FeedModel> feeds) { SubscriptionsDialog dialog = new SubscriptionsDialog(feeds) { private static final long serialVersionUID = 1L; @Override public void save() { gitblit.updateSubscribedFeeds(feeds); listener.saveRegistration(gitblit.reg.name, gitblit.reg); setVisible(false); repositoriesPanel.updateTable(false); } }; dialog.setLocationRelativeTo(GitblitPanel.this); dialog.setVisible(true); } }