/*************************************************** * * 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; } }