/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* 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 org.jivesoftware.sparkimpl.plugin.viewer;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.jivesoftware.resource.Default;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.PluginManager;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.plugin.PublicPlugin;
import org.jivesoftware.spark.util.BrowserLauncher;
import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log;
public class SparkPlugUI extends JPanel {
private static final long serialVersionUID = -4206533328807591854L;
private PublicPlugin _plugin;
private final JButton installButton = new JButton();
private JLabel imageIcon = new JLabel();
public SparkPlugUI(PublicPlugin plugin) {
_plugin = plugin;
setLayout(new GridBagLayout());
setBackground(Color.white);
JLabel titleLabel = new JLabel();
JLabel versionLabel = new JLabel();
JLabel descriptionLabel = new JLabel();
imageIcon.setIcon(SparkRes.getImageIcon(SparkRes.PLUGIN_IMAGE));
add(imageIcon, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
add(titleLabel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 0), 0, 0));
titleLabel.setFont(new Font("dialog", Font.BOLD, 11));
titleLabel.setForeground(new Color(80, 93, 198));
add(versionLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
titleLabel.setText(plugin.getName());
if (plugin.getVersion() != null && plugin.getAuthor() != null) {
versionLabel.setText(_plugin.getVersion() + " by "
+ _plugin.getAuthor());
}
descriptionLabel.setText(plugin.getDescription());
add(installButton, new GridBagConstraints(4, 0, 1, 2, 1.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));
if (_plugin.getChangeLog()!=null && _plugin.getReadMeURL() != null) {
RolloverButton changeLogButton = new RolloverButton(SparkRes.getImageIcon(SparkRes.CHANGELOG_IMAGE));
RolloverButton readMeButton = new RolloverButton(SparkRes.getImageIcon(SparkRes.README_IMAGE));
changeLogButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
BrowserLauncher.openURL(_plugin.getChangeLog());
}
catch (Exception e1) {
Log.error(e1);
}
}
});
readMeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
BrowserLauncher.openURL(_plugin.getReadMeURL());
}
catch (Exception e1) {
Log.error(e1);
}
}
});
final JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
buttonPanel.setOpaque(false);
buttonPanel.add(changeLogButton);
buttonPanel.add(readMeButton);
changeLogButton.setToolTipText(Res.getString("tooltip.view.changelog"));
readMeButton.setToolTipText(Res.getString("tooltip.view.readme"));
add(descriptionLabel, new GridBagConstraints(1, 1, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5), 0, 0));
add(buttonPanel, new GridBagConstraints(3, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
}
else {
add(descriptionLabel, new GridBagConstraints(1, 1, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5), 0, 0));
}
installButton.setVisible(false);
}
public void showOperationButton() {
final PluginManager pluginManager = PluginManager.getInstance();
if (!pluginManager.isInstalled(_plugin)) {
installButton.setIcon(SparkRes.getImageIcon(SparkRes.SMALL_ADD_IMAGE));
}
else {
installButton.setIcon(SparkRes.getImageIcon(SparkRes.SMALL_DELETE));
}
installButton.setVisible(true);
}
public void setSelected(boolean isSelected) {
if (isSelected) {
setBackground(new Color(234, 230, 212));
showOperationButton();
setBorder(BorderFactory.createEtchedBorder());
if (Default.getBoolean(Default.DEINSTALL_PLUGINS_DISABLED)) {
installButton.setVisible(false);
}
}
else {
setBackground(Color.white);
installButton.setVisible(false);
setBorder(null);
}
}
public void updateState() {
showOperationButton();
}
public PublicPlugin getPlugin() {
return _plugin;
}
public JButton getInstallButton() {
return installButton;
}
public void useLocalIcon() {
File pluginDIR = _plugin.getPluginDir();
try {
File smallIcon = new File(pluginDIR, "logo_small.gif");
File largeIcon = new File(pluginDIR, "logo_large.gif");
if (largeIcon.exists()) {
setIcon(new ImageIcon(largeIcon.toURI().toURL()));
}
else if (smallIcon.exists()) {
setIcon(new ImageIcon(smallIcon.toURI().toURL()));
}
}
catch (MalformedURLException e) {
Log.error(e);
}
}
/**
* Returns the Filename of provided Download URL
* @return
*/
public String getFilename() {
String filename = null;
try {
URL downloadURL = new URL(_plugin.getDownloadURL());
filename = URLFileSystem.getFileName(downloadURL);
}
catch (MalformedURLException e) {
// Nothing to do
}
return filename;
}
public void setIcon(Icon icon) {
imageIcon.setIcon(icon);
}
}