/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.custom.switchon.objectrenderer;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import java.awt.Component;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import javax.swing.ImageIcon;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import de.cismet.cids.client.tools.DevelopmentTools;
import de.cismet.cids.custom.switchon.gui.utils.ImageGetterUtils;
import de.cismet.cids.custom.switchon.objecteditors.EditorShowableInDialog;
import de.cismet.cids.dynamics.CidsBean;
import de.cismet.cids.tools.metaobjectrenderer.CidsBeanRenderer;
import de.cismet.tools.gui.downloadmanager.DownloadManager;
import de.cismet.tools.gui.downloadmanager.DownloadManagerDialog;
import de.cismet.tools.gui.downloadmanager.HttpOrFtpDownload;
/**
* DOCUMENT ME!
*
* @author Gilles Baatz
* @version $Revision$, $Date$
*/
public class MetadataRenderer extends javax.swing.JPanel implements CidsBeanRenderer, EditorShowableInDialog {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(
MetadataRenderer.class);
//~ Instance fields --------------------------------------------------------
private CidsBean cidsBean;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.Box.Filler filler1;
private org.jdesktop.swingx.JXHyperlink hypDownload;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel pnlDocument;
private javax.swing.JScrollPane scpTxtaDocument;
private javax.swing.JTextArea txtaDescription;
private javax.swing.JTextArea txtaDocument;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form MetadataRenderer.
*/
public MetadataRenderer() {
initComponents();
}
//~ Methods ----------------------------------------------------------------
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
txtaDescription = new javax.swing.JTextArea();
pnlDocument = new javax.swing.JPanel();
hypDownload = new org.jdesktop.swingx.JXHyperlink();
scpTxtaDocument = new javax.swing.JScrollPane();
txtaDocument = new javax.swing.JTextArea();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 32767));
setOpaque(false);
setLayout(new java.awt.GridBagLayout());
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(MetadataRenderer.class, "MetadataRenderer.jPanel1.border.title"))); // NOI18N
jPanel1.setOpaque(false);
jPanel1.setLayout(new java.awt.GridBagLayout());
txtaDescription.setEditable(false);
txtaDescription.setColumns(20);
txtaDescription.setLineWrap(true);
txtaDescription.setRows(5);
txtaDescription.setWrapStyleWord(true);
final org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(
org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE,
this,
org.jdesktop.beansbinding.ELProperty.create("${cidsBean.description}"),
txtaDescription,
org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
jScrollPane1.setViewportView(txtaDescription);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
jPanel1.add(jScrollPane1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
add(jPanel1, gridBagConstraints);
pnlDocument.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
MetadataRenderer.class,
"MetadataRenderer.pnlDocument.border.title"))); // NOI18N
pnlDocument.setOpaque(false);
pnlDocument.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(
hypDownload,
org.openide.util.NbBundle.getMessage(MetadataRenderer.class, "MetadataRenderer.hypDownload.text")); // NOI18N
hypDownload.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
hypDownloadActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 10);
pnlDocument.add(hypDownload, gridBagConstraints);
txtaDocument.setEditable(false);
txtaDocument.setColumns(20);
txtaDocument.setRows(10);
scpTxtaDocument.setViewportView(txtaDocument);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
pnlDocument.add(scpTxtaDocument, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
add(pnlDocument, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
add(filler1, gridBagConstraints);
bindingGroup.bind();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void hypDownloadActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_hypDownloadActionPerformed
final String urlString = (String)cidsBean.getProperty("contentlocation");
URL url = null;
try {
url = new URL(urlString);
} catch (MalformedURLException ex) {
LOG.error(urlString + " is not a valid URL.", ex);
}
if (url != null) {
if (DownloadManagerDialog.showAskingForUserTitle(MetadataRenderer.this)) {
final String filename = FilenameUtils.getBaseName(urlString);
final String extension = FilenameUtils.getExtension(urlString);
DownloadManager.instance()
.add(
new HttpOrFtpDownload(
url,
"",
DownloadManagerDialog.getJobname(),
cidsBean.toString(),
filename,
"."
+ extension));
}
}
} //GEN-LAST:event_hypDownloadActionPerformed
@Override
public CidsBean getCidsBean() {
return cidsBean;
}
@Override
public void setCidsBean(final CidsBean cidsBean) {
bindingGroup.unbind();
if (cidsBean != null) {
this.cidsBean = cidsBean;
bindingGroup.bind();
final String content = (String)cidsBean.getProperty("content");
final String urlString = (String)cidsBean.getProperty("contentlocation");
if (StringUtils.isBlank(content) && StringUtils.isBlank(urlString)) {
pnlDocument.setVisible(false);
} else {
if (StringUtils.isBlank(content)) {
scpTxtaDocument.setVisible(false);
} else {
txtaDocument.setText(prettyFormat(content));
txtaDocument.setVisible(true);
}
if (StringUtils.isBlank(urlString)) {
scpTxtaDocument.setVisible(false);
} else {
final String contentTypeName = (String)cidsBean.getProperty("contenttype.name");
final String extension = FilenameUtils.getExtension(urlString);
hypDownload.setIcon(new ImageIcon(
ImageGetterUtils.getImageForContentType(
contentTypeName,
ImageGetterUtils.ImageSize.PIXEL_16,
extension)));
hypDownload.setToolTipText(urlString);
hypDownload.setVisible(true);
}
}
}
}
@Override
public void dispose() {
bindingGroup.unbind();
}
@Override
public String getTitle() {
if (cidsBean != null) {
return cidsBean.toString();
} else {
return "Meta-Data";
}
}
@Override
public void setTitle(final String title) {
}
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public static void main(final String[] args) throws Exception {
DevelopmentTools.createRendererInFrameFromRMIConnectionOnLocalhost(
"SWITCHON",
"Administratoren",
"admin",
"cismet",
"metadata",
14066,
"Meta-Data",
1280,
1024);
}
/**
* Method found at http://javakafunda.blogspot.de/2012/04/how-to-format-xml-string-in-java.html.
*
* @param input DOCUMENT ME!
* @param indent DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static String prettyFormat(final String input, final int indent) {
try {
final Source xmlInput = new StreamSource(new StringReader(input));
final StringWriter stringWriter = new StringWriter();
final StreamResult xmlOutput = new StreamResult(stringWriter);
final TransformerFactory transformerFactory = TransformerFactory.newInstance();
// This statement works with JDK 6
transformerFactory.setAttribute("indent-number", indent);
final Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);
return xmlOutput.getWriter().toString();
} catch (Throwable e) {
// You'll come here if you are using JDK 1.5
// you are getting an the following exeption
// java.lang.IllegalArgumentException: Not supported: indent-number
// Use this code (Set the output property in transformer.
try {
final Source xmlInput = new StreamSource(new StringReader(input));
final StringWriter stringWriter = new StringWriter();
final StreamResult xmlOutput = new StreamResult(stringWriter);
final TransformerFactory transformerFactory = TransformerFactory.newInstance();
final Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", String.valueOf(indent));
transformer.transform(xmlInput, xmlOutput);
return xmlOutput.getWriter().toString();
} catch (Throwable t) {
return input;
}
}
}
/**
* DOCUMENT ME!
*
* @param input DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static String prettyFormat(final String input) {
return prettyFormat(input, 2);
}
/**
* DOCUMENT ME!
*
* @return a empty hash set
*
* @deprecated Do not use this for a renderer
*/
@Override
public HashSet<CidsBean> getNewlyAddedCidsBeans() {
LOG.error("This is a renderer, no CidsBeans can be created.", new Exception()); // NOI18N
return new HashSet<CidsBean>();
}
/**
* DOCUMENT ME!
*
* @return a empty hash set
*
* @deprecated Do not use this for a renderer
*/
@Override
public HashSet<CidsBean> getModifiedCidsBeans() {
LOG.error("This is a renderer, no CidsBeans can be edited.", new Exception()); // NOI18N
return new HashSet<CidsBean>();
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*
* @deprecated Do not use this for a renderer
*/
@Override
public void saveChanges() throws Exception {
LOG.error("A renderer can not save changes.", new Exception()); // NOI18N
}
@Override
public Component getComponent() {
return this;
}
}