package com.limegroup.gnutella.gui.xml.editor;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import com.limegroup.gnutella.FileDesc;
import com.limegroup.gnutella.FileEventListener;
import com.limegroup.gnutella.FileManagerEvent;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.gui.GUIUtils;
import com.limegroup.gnutella.gui.MessageService;
import com.limegroup.gnutella.licenses.PublishedCCLicense;
import com.limegroup.gnutella.util.CommonUtils;
public class CCRDFOuptut implements FileEventListener{
private final String CCPUBLISHER_TITLE = GUIMediator.getStringResource("CC_RDFOUTPUT_TITLE");
private static final int DIALOG_WIDTH = 480;
private static final int DIALOG_HEIGHT = 280;
private final JLabel RDF_OUTPUT_LABEL = new JLabel(GUIMediator.getStringResource("CC_PUBLISHER_RDF_OUTPUT"));
private final JTextArea RDF_OUTPUT = new JTextArea();
private final JScrollPane OUPUT_PANE = new JScrollPane(RDF_OUTPUT);
private JDialog _dialog;
private final FileDesc _fd;
private final String _holder,_title,_year,_description,_url;
private final int _type;
private boolean _isEventHandled;
public CCRDFOuptut(FileDesc fd,String holder, String title,
String year, String description, String url,int type) {
_fd = fd;
_holder = holder;
_title = title;
_year = year;
_description = description;
_url = url;
_type = type;
}
public void handleFileEvent(FileManagerEvent evt) {
if(!evt.isChangeEvent() ||
evt.getFileDescs() == null ||
evt.getFileDescs().length == 0)
return;
if(_fd.equals(evt.getFileDescs()[0])) {
synchronized(this) {
if (_isEventHandled)
return;
_isEventHandled = true;
}
init();
FileDesc newFD = evt.getFileDescs()[1];
String RDFString =
PublishedCCLicense.getRDFRepresentation(_holder,_title,_year,_description,
newFD.getSHA1Urn().httpStringValue(),_type);
RDF_OUTPUT.setText(RDFString);
_dialog.setLocationRelativeTo(MessageService.getParentComponent());
_dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
finish();
}
});
_dialog.setVisible(true);
}
}
public void init() {
_dialog = new JDialog(GUIMediator.getAppFrame(),true);
GUIUtils.addHideAction((JComponent)_dialog.getContentPane());
_dialog.setResizable(false);
_dialog.setTitle(CCPUBLISHER_TITLE);
//content here
JPanel publishPanel = new JPanel(new GridBagLayout());
publishPanel.setOpaque(false);
GridBagConstraints con = new GridBagConstraints();
publishPanel.add(RDF_OUTPUT_LABEL,con);
con.insets = new Insets(2,2,2,2);
con.gridy=1;
JLabel uriLabel = new JLabel(_url);
uriLabel.setForeground(Color.BLUE);
publishPanel.add(uriLabel,con);
RDF_OUTPUT.setEditable(false);
RDF_OUTPUT.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(153, 153, 153)));
RDF_OUTPUT.setLineWrap(true);
OUPUT_PANE.setMinimumSize(new Dimension(DIALOG_WIDTH-30,DIALOG_HEIGHT-180));
OUPUT_PANE.setPreferredSize(new Dimension(DIALOG_WIDTH-30,DIALOG_HEIGHT-180));
con.gridy=2;
con.insets = new Insets(20,2,2,2);
publishPanel.add(OUPUT_PANE,con);
con.gridy=3;
con.insets = new Insets(10,2,2,2);
JButton copyButton = new JButton(GUIMediator.getStringResource("CC_PUBLISHER_COPY_BUTTON"));
copyButton.setPreferredSize(new Dimension(120,20));
copyButton.addActionListener(new CopyButtonListener());
publishPanel.add(copyButton,con);
JButton finishButton = new JButton(GUIMediator.getStringResource("CC_RDF_FINISH_LABEL"));
finishButton.addActionListener(new FinishButtonListener());
con.gridy=4;
JSeparator separator = new JSeparator();
separator.setPreferredSize(new Dimension(DIALOG_WIDTH-10,2));
publishPanel.add(separator,con);
con.gridy=5;
con.anchor=GridBagConstraints.EAST;
con.insets= new Insets(10,2,2,2);
publishPanel.add(finishButton,con);
publishPanel.setPreferredSize(new Dimension(DIALOG_WIDTH-10, DIALOG_HEIGHT-10));
_dialog.getContentPane().add(publishPanel);
_dialog.setSize(new Dimension(DIALOG_WIDTH, DIALOG_HEIGHT));
}
private void finish() {
_dialog.setVisible(false);
_dialog.dispose();
}
private class CopyButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
try {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(RDF_OUTPUT.getText()),null);
} catch (HeadlessException doNothingException) {}
}
}
private class FinishButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
finish();
}
}
}