/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.custom.switchon.objectrenderer;
import Sirius.navigator.ui.RequestsFullSizeComponent;
import org.apache.commons.lang.StringUtils;
import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.ResourceBundle;
import java.util.concurrent.ExecutionException;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.SwingWorker;
import javax.swing.border.TitledBorder;
import de.cismet.cids.client.tools.DevelopmentTools;
import de.cismet.cids.custom.switchon.gui.utils.ImageGetterUtils;
import de.cismet.cids.custom.switchon.utils.Taggroups;
import de.cismet.cids.dynamics.CidsBean;
import de.cismet.cids.tools.metaobjectrenderer.CidsBeanRenderer;
import de.cismet.tools.gui.TitleComponentProvider;
import static de.cismet.cids.custom.switchon.gui.utils.ResourceUtils.filterTagsOfResource;
/**
* DOCUMENT ME!
*
* @author Gilles Baatz
* @version $Revision$, $Date$
*/
public class ResourceRenderer extends javax.swing.JPanel implements CidsBeanRenderer,
TitleComponentProvider,
RequestsFullSizeComponent {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ResourceRenderer.class);
//~ Instance fields --------------------------------------------------------
private boolean firstRepresentationPreviewPane = false;
private CidsBean cidsBean;
private final ResourceBundle roleBundle = ResourceBundle.getBundle(
"de/cismet/cids/custom/switchon/tagBundles/role");
// Variables declaration - do not modify//GEN-BEGIN:variables
private de.cismet.cids.custom.switchon.objectrenderer.ContactRenderer contactRenderer;
private javax.swing.Box.Filler filler1;
private javax.swing.Box.Filler filler2;
private de.cismet.cids.custom.switchon.objectrenderer.GeographicInformationPanel geographicInformationPanel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JLabel lblKeywords;
private javax.swing.JLabel lblTitle;
private javax.swing.JLabel lblTopic;
private de.cismet.cids.custom.switchon.objecteditors.LicenseInformationPanel licenseInformationPanel;
private de.cismet.cids.custom.switchon.objectrenderer.LoadRelationshipPanel loadRelationshipPanel;
private javax.swing.JPanel panTitle;
private javax.swing.JPanel panTitleString;
private javax.swing.JPanel pnlContact;
private javax.swing.JPanel pnlDataAccess;
private javax.swing.JPanel pnlDataPreview;
private javax.swing.JPanel pnlDescription;
private javax.swing.JPanel pnlGeographic;
private javax.swing.JPanel pnlLicense;
private javax.swing.JPanel pnlMetaData;
private javax.swing.JPanel pnlRelationship;
private javax.swing.JPanel pnlTemporal;
private javax.swing.JTabbedPane tabs;
private org.jdesktop.swingx.JXTaskPaneContainer taskPaneContainerDataAccess;
private org.jdesktop.swingx.JXTaskPaneContainer taskPaneContainerMetaData;
private org.jdesktop.swingx.JXTaskPaneContainer taskPaneDataPreview;
private de.cismet.cids.custom.switchon.objecteditors.TemporalInformationPanel temporalInformationPanel;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form ResourceRenderer.
*/
public ResourceRenderer() {
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();
panTitle = new javax.swing.JPanel();
panTitleString = new javax.swing.JPanel();
lblTitle = new javax.swing.JLabel();
tabs = new javax.swing.JTabbedPane();
pnlDescription = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jPanel2 = new javax.swing.JPanel();
lblKeywords = new javax.swing.JLabel();
lblTopic = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 32767));
pnlContact = new javax.swing.JPanel();
contactRenderer = new de.cismet.cids.custom.switchon.objectrenderer.ContactRenderer();
filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 32767));
pnlGeographic = new javax.swing.JPanel();
geographicInformationPanel = new de.cismet.cids.custom.switchon.objectrenderer.GeographicInformationPanel();
pnlTemporal = new javax.swing.JPanel();
temporalInformationPanel = new de.cismet.cids.custom.switchon.objecteditors.TemporalInformationPanel();
pnlLicense = new javax.swing.JPanel();
licenseInformationPanel = new de.cismet.cids.custom.switchon.objecteditors.LicenseInformationPanel();
pnlMetaData = new javax.swing.JPanel();
taskPaneContainerMetaData = new org.jdesktop.swingx.JXTaskPaneContainer();
pnlDataAccess = new javax.swing.JPanel();
taskPaneContainerDataAccess = new org.jdesktop.swingx.JXTaskPaneContainer();
pnlDataPreview = new javax.swing.JPanel();
taskPaneDataPreview = new org.jdesktop.swingx.JXTaskPaneContainer();
pnlRelationship = new javax.swing.JPanel();
loadRelationshipPanel = new de.cismet.cids.custom.switchon.objectrenderer.LoadRelationshipPanel();
panTitle.setOpaque(false);
panTitle.setLayout(new java.awt.BorderLayout());
panTitleString.setOpaque(false);
panTitleString.setLayout(new java.awt.GridBagLayout());
lblTitle.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
lblTitle.setForeground(new java.awt.Color(255, 255, 255));
org.openide.awt.Mnemonics.setLocalizedText(
lblTitle,
org.openide.util.NbBundle.getMessage(ResourceRenderer.class, "ResourceRenderer.lblTitle.text")); // NOI18N
lblTitle.setIconTextGap(5);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
panTitleString.add(lblTitle, gridBagConstraints);
panTitle.add(panTitleString, java.awt.BorderLayout.CENTER);
setOpaque(false);
setLayout(new java.awt.BorderLayout());
tabs.setTabPlacement(javax.swing.JTabbedPane.RIGHT);
tabs.addChangeListener(new javax.swing.event.ChangeListener() {
@Override
public void stateChanged(final javax.swing.event.ChangeEvent evt) {
tabsStateChanged(evt);
}
});
pnlDescription.setOpaque(false);
pnlDescription.setLayout(new java.awt.GridBagLayout());
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(ResourceRenderer.class, "ResourceRenderer.jPanel1.border.title"))); // NOI18N
jPanel1.setOpaque(false);
jPanel1.setLayout(new java.awt.GridBagLayout());
jTextArea1.setEditable(false);
jTextArea1.setLineWrap(true);
jTextArea1.setWrapStyleWord(true);
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}"),
jTextArea1,
org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
jScrollPane1.setViewportView(jTextArea1);
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.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.2;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 10);
pnlDescription.add(jPanel1, gridBagConstraints);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(ResourceRenderer.class, "ResourceRenderer.jPanel2.border.title"))); // NOI18N
jPanel2.setOpaque(false);
jPanel2.setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 0, 5, 10);
jPanel2.add(lblKeywords, gridBagConstraints);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(
org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE,
this,
org.jdesktop.beansbinding.ELProperty.create("${cidsBean.topiccategory.name}"),
lblTopic,
org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(10, 0, 5, 10);
jPanel2.add(lblTopic, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(
jLabel1,
org.openide.util.NbBundle.getMessage(ResourceRenderer.class, "ResourceRenderer.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 10);
jPanel2.add(jLabel1, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(
jLabel2,
org.openide.util.NbBundle.getMessage(ResourceRenderer.class, "ResourceRenderer.jLabel2.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 10);
jPanel2.add(jLabel2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
pnlDescription.add(jPanel2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
pnlDescription.add(filler1, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlDescription.TabConstraints.tabTitle"),
null,
pnlDescription,
org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlDescription.TabConstraints.tabToolTip")); // NOI18N
pnlContact.setOpaque(false);
pnlContact.setLayout(new java.awt.GridBagLayout());
contactRenderer.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.contactRenderer.border.title"))); // NOI18N
contactRenderer.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlContact.add(contactRenderer, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
pnlContact.add(filler2, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlContact.TabConstraints.tabTitle"),
pnlContact); // NOI18N
pnlGeographic.setOpaque(false);
pnlGeographic.setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlGeographic.add(geographicInformationPanel, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlGeographic.TabConstraints.tabTitle"),
pnlGeographic); // NOI18N
pnlTemporal.setOpaque(false);
pnlTemporal.setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlTemporal.add(temporalInformationPanel, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlTemporal.TabConstraints.tabTitle"),
pnlTemporal); // NOI18N
pnlLicense.setOpaque(false);
pnlLicense.setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlLicense.add(licenseInformationPanel, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlLicense.TabConstraints.tabTitle"),
pnlLicense); // NOI18N
pnlMetaData.setOpaque(false);
pnlMetaData.setLayout(new java.awt.GridBagLayout());
taskPaneContainerMetaData.setOpaque(false);
final org.jdesktop.swingx.VerticalLayout verticalLayout1 = new org.jdesktop.swingx.VerticalLayout();
verticalLayout1.setGap(14);
taskPaneContainerMetaData.setLayout(verticalLayout1);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlMetaData.add(taskPaneContainerMetaData, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlMetaData.TabConstraints.tabTitle"),
pnlMetaData); // NOI18N
pnlDataAccess.setOpaque(false);
pnlDataAccess.setLayout(new java.awt.GridBagLayout());
taskPaneContainerDataAccess.setOpaque(false);
final org.jdesktop.swingx.VerticalLayout verticalLayout2 = new org.jdesktop.swingx.VerticalLayout();
verticalLayout2.setGap(14);
taskPaneContainerDataAccess.setLayout(verticalLayout2);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
pnlDataAccess.add(taskPaneContainerDataAccess, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlDataAccess.TabConstraints.tabTitle"),
pnlDataAccess); // NOI18N
pnlDataPreview.setOpaque(false);
pnlDataPreview.setLayout(new java.awt.GridBagLayout());
taskPaneDataPreview.setOpaque(false);
final org.jdesktop.swingx.VerticalLayout verticalLayout3 = new org.jdesktop.swingx.VerticalLayout();
verticalLayout3.setGap(14);
taskPaneDataPreview.setLayout(verticalLayout3);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
pnlDataPreview.add(taskPaneDataPreview, gridBagConstraints);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlDataPreview.TabConstraints.tabTitle"),
pnlDataPreview); // NOI18N
pnlRelationship.setLayout(new java.awt.BorderLayout());
pnlRelationship.add(loadRelationshipPanel, java.awt.BorderLayout.CENTER);
tabs.addTab(org.openide.util.NbBundle.getMessage(
ResourceRenderer.class,
"ResourceRenderer.pnlRelationship.TabConstraints.tabTitle"),
pnlRelationship); // NOI18N
add(tabs, java.awt.BorderLayout.CENTER);
bindingGroup.bind();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void tabsStateChanged(final javax.swing.event.ChangeEvent evt) { //GEN-FIRST:event_tabsStateChanged
if (tabs.getSelectedComponent() == pnlRelationship) {
if (cidsBean != null) {
loadRelationshipPanel.setResourceId(cidsBean.getPrimaryKeyValue());
}
}
} //GEN-LAST:event_tabsStateChanged
@Override
public CidsBean getCidsBean() {
return cidsBean;
}
@Override
public void setCidsBean(final CidsBean cidsBean) {
bindingGroup.unbind();
if (cidsBean != null) {
this.cidsBean = cidsBean;
final CidsBean contact = (CidsBean)cidsBean.getProperty("contact");
contactRenderer.setCidsBean(contact);
if (contact != null) {
final TitledBorder contactBorder = (TitledBorder)contactRenderer.getBorder();
final String role = (String)contact.getProperty("role.name");
if (StringUtils.isNotBlank(role)) {
final String borderTitle = roleBundle.getString(role);
contactBorder.setTitle(borderTitle);
}
}
geographicInformationPanel.setCidsBean(cidsBean);
temporalInformationPanel.setCidsBean(cidsBean);
licenseInformationPanel.setCidsBean(cidsBean);
generateMetadataPanels();
generateDataAccessPanels();
generateRepresentationPreviewPanels();
bindingGroup.bind();
generateListWithKeywords();
setTitle();
}
}
/**
* DOCUMENT ME!
*/
private void generateListWithKeywords() {
final List<CidsBean> keywords = filterTagsOfResource(cidsBean, Taggroups.KEYWORDS_INSPIRE_THEMES_1_0);
keywords.addAll(filterTagsOfResource(cidsBean, Taggroups.KEYWORDS_OPEN));
keywords.addAll(filterTagsOfResource(cidsBean, Taggroups.KEYWORDS_XCUAHSI));
Collections.sort(keywords, new Comparator<CidsBean>() {
@Override
public int compare(final CidsBean o1, final CidsBean o2) {
return o1.toString().compareTo(o2.toString());
}
});
lblKeywords.setText("<html>" + StringUtils.join(keywords, ", ") + "</html>");
}
@Override
public void dispose() {
bindingGroup.unbind();
temporalInformationPanel.dispose();
}
@Override
public String getTitle() {
return lblTitle.getText();
}
@Override
public void setTitle(final String title) {
setTitle();
}
/**
* DOCUMENT ME!
*/
public void setTitle() {
String title = "new Resource";
ImageIcon icon = null;
if (cidsBean != null) {
title = cidsBean.toString();
final String resourceType = (String)cidsBean.getProperty("type.name");
if ("experiment result data".equalsIgnoreCase(resourceType)) {
icon = new ImageIcon(ImageGetterUtils.getImageForLetter('x', ImageGetterUtils.CIRCLE_LETTER_PATH));
} else {
icon = new ImageIcon(ImageGetterUtils.getImageForString(
resourceType,
ImageGetterUtils.CIRCLE_LETTER_PATH));
}
}
lblTitle.setIcon(icon);
lblTitle.setText(title);
}
@Override
public JComponent getTitleComponent() {
return panTitle;
}
/**
* 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",
"resource",
1,
"Resource",
1280,
1024);
}
/**
* DOCUMENT ME!
*/
private void generateMetadataPanels() {
final List<CidsBean> metadatas = cidsBean.getBeanCollectionProperty("metadata");
boolean firstPane = true;
for (final CidsBean metadata : metadatas) {
final String metadataType = (String)metadata.getProperty("type.name");
if ((metadataType != null) && !"basic meta-data".equalsIgnoreCase(metadataType)) {
final JXTaskPane taskPane = new JXTaskPane();
taskPane.setTitle(metadataType);
taskPane.setIcon(new ImageIcon(
ImageGetterUtils.getImageForString(metadataType, ImageGetterUtils.DOCUMENT_LETTER_PATH)));
taskPane.setTitle(metadata.toString());
final MetadataRenderer metadataRenderer = new MetadataRenderer();
metadataRenderer.setCidsBean(metadata);
taskPane.add(metadataRenderer);
taskPane.setCollapsed(!firstPane);
firstPane = false;
taskPane.addPropertyChangeListener(new CollapseListener(taskPaneContainerMetaData, taskPane));
taskPaneContainerMetaData.add(taskPane);
}
}
}
/**
* DOCUMENT ME!
*/
private void generateDataAccessPanels() {
final List<CidsBean> representations = cidsBean.getBeanCollectionProperty("representation");
boolean firstPane = true;
for (final CidsBean representation : representations) {
final String representationType = (String)representation.getProperty("type.name");
if ("original data".equalsIgnoreCase(representationType)) {
final String function = (String)representation.getProperty("function.name");
final JXTaskPane taskPane = new JXTaskPane();
taskPane.setTitle(representation.toString());
taskPane.setIcon(new ImageIcon(
ImageGetterUtils.getImageForString(function, ImageGetterUtils.DOCUMENT_LETTER_PATH)));
final RepresentationRenderer representationRenderer = new RepresentationRenderer();
representationRenderer.setCidsBean(representation);
taskPane.add(representationRenderer);
taskPane.setCollapsed(!firstPane);
firstPane = false;
taskPane.addPropertyChangeListener(new CollapseListener(taskPaneContainerDataAccess, taskPane));
taskPaneContainerDataAccess.add(taskPane);
}
}
}
/**
* DOCUMENT ME!
*/
private void generateRepresentationPreviewPanels() {
final List<CidsBean> representations = cidsBean.getBeanCollectionProperty("representation");
firstRepresentationPreviewPane = true;
for (final CidsBean representation : representations) {
final String urlString = (String)representation.getProperty("contentlocation");
final CidsBean type = (CidsBean)representation.getProperty("type");
if (StringUtils.isNotBlank(urlString) && "preview data".equalsIgnoreCase(String.valueOf(type))) {
new GenerateRepresentationPreviewWorker(representation).execute();
}
}
}
//~ Inner Classes ----------------------------------------------------------
/**
* Checks if the content type of the content of a Representation is an image via an HEAD-request, if this is the
* case, a preview panel will be added in the Preview pane.
*
* <p><b>Note:</b> The HEAD request does NOT use the WebAccessManager.</p>
*
* @version $Revision$, $Date$
*/
private class GenerateRepresentationPreviewWorker extends SwingWorker<String, Void> {
//~ Instance fields ----------------------------------------------------
CidsBean representation;
//~ Constructors -------------------------------------------------------
/**
* Creates a new GenerateRepresentationPreviewWorker object.
*
* @param representation DOCUMENT ME!
*/
public GenerateRepresentationPreviewWorker(final CidsBean representation) {
this.representation = representation;
}
//~ Methods ------------------------------------------------------------
@Override
protected String doInBackground() throws Exception {
final String urlString = (String)representation.getProperty("contentlocation");
final URL url = new URL(urlString);
final HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("HEAD");
connection.connect();
return connection.getContentType();
}
@Override
protected void done() {
try {
final String contentType = get();
if (contentType.startsWith("image")) {
final JXTaskPane taskPane = new JXTaskPane();
final RepresentationPreview preview = new RepresentationPreview();
preview.setSizeReference(pnlDataAccess);
taskPane.setTitle(representation.toString());
taskPane.add(preview);
preview.setCidsBean(representation);
taskPane.setCollapsed(!firstRepresentationPreviewPane);
firstRepresentationPreviewPane = false;
taskPane.addPropertyChangeListener(new CollapseListener(taskPaneDataPreview, taskPane));
taskPaneDataPreview.add(taskPane);
}
} catch (InterruptedException ex) {
LOG.error(ex, ex);
} catch (ExecutionException ex) {
LOG.error(ex, ex);
}
}
}
/**
* A listener for JXTaskPanes which makes sure that only one JXTaskPane in a JXTaskPaneContainer is not collapsed.
*
* @version $Revision$, $Date$
*/
private static class CollapseListener implements PropertyChangeListener {
//~ Instance fields ----------------------------------------------------
private final JXTaskPaneContainer taskPaneContainer;
private final JXTaskPane pane;
//~ Constructors -------------------------------------------------------
/**
* Creates a new CollapseListener object.
*
* @param taskPaneContainer DOCUMENT ME!
* @param pane DOCUMENT ME!
*/
public CollapseListener(final JXTaskPaneContainer taskPaneContainer, final JXTaskPane pane) {
this.taskPaneContainer = taskPaneContainer;
this.pane = pane;
}
//~ Methods ------------------------------------------------------------
@Override
public void propertyChange(final PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("collapsed") && evt.getNewValue().toString().equals("false")) {
for (final Component c : taskPaneContainer.getComponents()) {
if ((c instanceof JXTaskPane) && !c.equals(pane)) {
((JXTaskPane)c).setCollapsed(true);
}
}
}
}
}
}