PackageDialog.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.xnap.gui.pkg |
![]() |
![]() |
XNap 3 |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* XNap - A P2P framework and client.
*
* See the file AUTHORS for copyright information.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.xnap.gui.pkg;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import org.apache.log4j.Logger;
import org.xnap.XNap;
import org.xnap.gui.Dialogs;
import org.xnap.gui.StatusBar;
import org.xnap.gui.component.DefaultDialog;
import org.xnap.gui.component.ProgressDialog;
import org.xnap.gui.component.XNapButton;
import org.xnap.pkg.DefaultDependencyParser;
import org.xnap.pkg.DefaultResolver;
import org.xnap.pkg.DependencyGraph;
import org.xnap.pkg.PackageInfo;
import org.xnap.pkg.ParseException;
import org.xnap.pkg.UnsatisfiedDependenciesException;
import org.xnap.pkg.XNapPackageManager;
public class PackageDialog extends DefaultDialog
implements TreeSelectionListener {
//--- Constant(s) ---
//--- Data field(s) ---
private static Logger logger = Logger.getLogger(PackageDialog.class);
private static PackageDialog me = null;
private JLabel jlStatus;
private PackageInfoTree jtPackages;
private PackageInfoPanel jpInfo;
private boolean canClose = true;
private Action acInstall = new InstallAction();
private Action acRemove = new RemoveAction();
private Action acShowDepends = new ShowDependsAction();
private Action acUpdateList = new UpdateListAction();
//--- Constructor(s) ---
private PackageDialog()
{
super(BUTTON_CLOSE);
StatusBar.setText(XNap.tr("Reading list of packages") + "...");
XNapPackageManager.getInstance().initialize();
StatusBar.setText("");
initialize();
pack();
setSize(600, 500);
jtPackages.updatePackages
(XNapPackageManager.getInstance().packages());
valueChanged();
}
//--- Method(s) ---
private void initialize()
{
setTitle(XNap.tr("Manage Packages"));
// info
JPanel jpIconInfo = new JPanel(new FlowLayout(FlowLayout.LEFT));
jpIconInfo.add(new JLabel(XNap.tr("Available"),
PackageInfoCellRenderer.ICON_NOT_INSTALLED,
SwingConstants.LEFT));
jpIconInfo.add(new JLabel(XNap.tr("Installed"),
PackageInfoCellRenderer.ICON_INSTALLED,
SwingConstants.LEFT));
jpIconInfo.add
(new JLabel(XNap.tr("Update Available"),
PackageInfoCellRenderer.ICON_UPDATE_AVAILABLE,
SwingConstants.LEFT));
jpIconInfo.add(new JLabel(XNap.tr("New"),
PackageInfoCellRenderer.ICON_NEW,
SwingConstants.LEFT));
// status
jlStatus = new JLabel(" ");
jlStatus.setBorder(new EmptyBorder(5, 5, 5, 5));
// package list
jtPackages = new PackageInfoTree();
jtPackages.setCellRenderer(new PackageInfoCellRenderer());
jtPackages.addTreeSelectionListener(this);
// info panel
jpInfo = new PackageInfoPanel();
jpInfo.getButtonPanel().add(new XNapButton(acInstall));
jpInfo.getButtonPanel().add(new XNapButton(acRemove));
jpInfo.getButtonPanel().add(new XNapButton(acShowDepends));
JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
jsp.setDividerSize(2);
jsp.setDividerLocation(180);
jsp.add(new JScrollPane(jtPackages), JSplitPane.LEFT);
jsp.add(new JScrollPane(jpInfo), JSplitPane.RIGHT);
getMainPanel().setLayout(new BorderLayout());
getMainPanel().add(jpIconInfo, BorderLayout.NORTH);
getMainPanel().add(jsp, BorderLayout.CENTER);
getMainPanel().add(jlStatus, BorderLayout.SOUTH);
getButtonPanel().add(new XNapButton(acUpdateList), 1);
}
public static void showDialog(Component c)
{
if (me == null) {
me = new PackageDialog();
}
me.show(c);
}
public void close()
{
if (canClose) {
dispose();
me = null;
}
}
private void setStatus(String newValue)
{
jlStatus.setText(newValue);
jlStatus.setToolTipText(newValue);
}
/**
* Updates the package info panel.
*/
public void valueChanged(TreeSelectionEvent e)
{
PackageInfo info = jtPackages.getSelectedInfo();
if (info != null) {
if (!canClose) {
return;
}
jpInfo.setInfo(info);
acInstall.setEnabled(!info.isInstalled());
acRemove.setEnabled(false);
}
jpInfo.setVisible(info != null);
}
public void valueChanged()
{
valueChanged(null);
}
private DependencyGraph buildGraph()
{
DependencyGraph graph
= new DependencyGraph(XNapPackageManager.getInstance());
graph.add(jtPackages.getSelectedInfo());
try {
graph.buildDependencies(new DefaultDependencyParser());
}
catch (ParseException e) {
Dialogs.error(PackageDialog.this, e.getLocalizedMessage());
return null;
}
return graph;
}
/**
* Enables or disables all widgets.
*/
public void setDialogEnabled(boolean enabled)
{
acInstall.setEnabled(enabled);
acRemove.setEnabled(enabled);
canClose = enabled;
if (enabled) {
valueChanged();
}
}
// --- Inner Class(es) ---
private class InstallAction extends AbstractAction {
public InstallAction()
{
putValue(Action.NAME, XNap.tr("Install") + "...");
putValue(Action.SHORT_DESCRIPTION,
XNap.tr("Downloads the selected package."));
}
public void actionPerformed(ActionEvent event)
{
DependencyGraph graph = buildGraph();
if (graph != null) {
PackageInfo[] packages;
try {
DefaultResolver r = new DefaultResolver(graph, false);
r.resolve();
packages = r.getRequiredUninstalled();
}
catch (UnsatisfiedDependenciesException e) {
String message
= XNap.tr("Unsatisfied dependency: Missing {0}.",
e.getLocalizedMessage());
Dialogs.error(PackageDialog.this, message);
return;
}
PackageInstallerDialog d
= new PackageInstallerDialog(packages);
d.addWindowListener(new DisposeListener());
d.show(PackageDialog.this);
setDialogEnabled(false);
}
}
private class DisposeListener extends WindowAdapter
{
public void windowClosed(WindowEvent event)
{
// update
jtPackages.reload();
valueChanged(null);
XNapPackageManager.getInstance().write();
setDialogEnabled(true);
}
}
}
private class RemoveAction extends AbstractAction {
public RemoveAction()
{
putValue(Action.NAME, XNap.tr("Remove") + "...");
putValue(Action.SHORT_DESCRIPTION,
XNap.tr("Removes the package."));
}
public void actionPerformed(ActionEvent event)
{
}
}
private class ShowDependsAction extends AbstractAction {
public ShowDependsAction()
{
putValue(Action.NAME, XNap.tr("Dependencies") + "...");
putValue(Action.SHORT_DESCRIPTION,
XNap.tr("Shows the dependency graph."));
}
public void actionPerformed(ActionEvent event)
{
DependencyGraph graph = buildGraph();
if (graph != null) {
DependencyGraphDialog d = new DependencyGraphDialog(graph);
d.setModal(true);
d.show(PackageDialog.this);
}
}
}
private class UpdateListAction extends AbstractAction {
public UpdateListAction()
{
putValue(Action.NAME, XNap.tr("Update List"));
putValue(Action.SHORT_DESCRIPTION,
XNap.tr("Updates the list packages from the internet."));
}
public void actionPerformed(ActionEvent event)
{
setStatus(XNap.tr("Getting list of packages") + "...");
ProgressDialog dialog
= new ProgressDialog(XNap.tr("Updating packages"));
XNapPackageManager.getInstance().update(dialog);
dialog.show(PackageDialog.this);
int count = XNapPackageManager.getInstance().getPackageCount();
setStatus(XNap.tr("{0} packages available", new Integer(count)));
jtPackages.updatePackages
(XNapPackageManager.getInstance().packages());
}
}
}
The table below shows all metrics for PackageDialog.java.




