package com.limegroup.gnutella.gui.xml.editor; import java.awt.Font; import java.awt.Insets; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.util.ArrayList; import java.util.Iterator; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import com.limegroup.gnutella.FileDesc; import com.limegroup.gnutella.gui.MultiLineLabel; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.GUIUtils; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLNames; import com.limegroup.gnutella.xml.LimeXMLReplyCollection; import com.limegroup.gnutella.xml.LimeXMLSchema; import com.limegroup.gnutella.xml.LimeXMLSchemaRepository; import com.limegroup.gnutella.xml.SchemaFieldInfo; import com.limegroup.gnutella.xml.SchemaReplyCollectionMapper; public class DetailsPanel extends JPanel { private int maxRows = 7; private Font boldFont = null; private ArrayList list = new ArrayList(); public DetailsPanel() { } public void setMaxRows(int maxRows) { this.maxRows = maxRows; } private void add(String name, String value) { list.add(new NameValuePair(name, value)); } public void initWithFileDesc(FileDesc fd, String schemaUri) { String kind = MetaEditorUtil.getKind(fd.getFile()); if (kind != null) { add(GUIMediator.getStringResource("META_EDITOR_KIND_LABEL"), kind); } SchemaReplyCollectionMapper map = SchemaReplyCollectionMapper.instance(); LimeXMLReplyCollection collection = map.getReplyCollection(schemaUri); LimeXMLDocument doc = collection.getDocForHash(fd.getSHA1Urn()); LimeXMLSchemaRepository rep = LimeXMLSchemaRepository.instance(); LimeXMLSchema schema = rep.getSchema(schemaUri); if (doc != null) { java.util.List fields = schema.getCanonicalizedFields(); java.util.Iterator it = fields.iterator(); while(it.hasNext()) { SchemaFieldInfo infoField = (SchemaFieldInfo)it.next(); String field = infoField.getCanonicalizedFieldName(); if (skipField(field)) continue; String value = doc.getValue(field); if (value != null && !value.equals("")) { String name = MetaEditorUtil.getStringResource(field); add(name, value); } } } String name = GUIMediator.getStringResource("META_EDITOR_SIZE_LABEL"); String value = GUIUtils.toUnitbytes(fd.getFileSize()); add(name, value); name = GUIMediator.getStringResource("META_EDITOR_DATE_MODIFIED_LABEL"); value = GUIUtils.msec2DateTime(fd.lastModified()); list.add(new NameValuePair(name, value)); GridBagLayout layout = new GridBagLayout(); setLayout(layout); GridBagConstraints c = new GridBagConstraints(); for(Iterator it = list.iterator(); it.hasNext(); ) addLabel((NameValuePair)it.next(), layout, c); } protected void addLabel(NameValuePair pair, GridBagLayout bag, GridBagConstraints c) { JLabel name = new JLabel(pair.name, SwingConstants.TRAILING); if (boldFont == null) { Font currentFont = name.getFont(); boldFont = new Font(currentFont.getName(), Font.BOLD, currentFont.getSize()); } name.setFont(boldFont); c.anchor = GridBagConstraints.NORTHEAST; c.gridwidth = GridBagConstraints.RELATIVE; c.insets = new Insets(0, 0, 2, 3); bag.setConstraints(name, c); add(name); MultiLineLabel value = new MultiLineLabel(pair.value, 300); c.anchor = GridBagConstraints.WEST; c.gridwidth = GridBagConstraints.REMAINDER; c.insets = new Insets(0, 0, 0, 0); bag.setConstraints(value, c); add(value); } private static boolean skipField(String field) { if (field.equals(LimeXMLNames.AUDIO_TITLE)) return true; else if (field.equals(LimeXMLNames.AUDIO_ARTIST)) return true; else if (field.equals(LimeXMLNames.AUDIO_ALBUM)) return true; else if (field.equals(LimeXMLNames.AUDIO_SECONDS)) return true; else if (field.equals(LimeXMLNames.AUDIO_COMMENTS)) return true; else if (!MetaEditorUtil.contains(field)) return true; else return false; } private static final class NameValuePair { private final String name; private final String value; private NameValuePair(String name, String value) { this.name = name; this.value = value; } } }