/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * DefaultMetaObjectRenderer.java * * Created on 9. Mai 2007, 15:57 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package de.cismet.cids.tools.metaobjectrenderer; import Sirius.server.localserver.attribute.Attribute; import Sirius.server.middleware.types.MetaObject; import java.awt.FlowLayout; import java.awt.GridBagLayout; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Vector; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import de.cismet.tools.gui.TitleComponentProvider; /** * DOCUMENT ME! * * @author hell * @version $Revision$, $Date$ */ public class DefaultMetaObjectRenderer extends MetaObjectRenderer implements TitleComponentProvider { //~ Instance fields -------------------------------------------------------- MetaObject mo; JPanel comp = null; private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); private JLabel titleComponent; //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of DefaultMetaObjectRenderer. */ public DefaultMetaObjectRenderer() { super(); titleComponent = new JLabel(); titleComponent.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N titleComponent.setForeground(new java.awt.Color(255, 255, 255)); } //~ Methods ---------------------------------------------------------------- @Override public double getWidthRatio() { return 0.75; } @Override public JComponent getAggregationRenderer(final Collection<MetaObject> cm, final String title) { return null; } @Override public JComponent getSingleRenderer(final MetaObject mo, final String title) { this.mo = mo; titleComponent.setText(title); try { int y = 0; final GridBagLayout layout = new GridBagLayout(); this.setLayout(layout); java.awt.GridBagConstraints gridBagConstraints; // FILLING STUFF gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.gridwidth = 1; gridBagConstraints.weightx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; final JPanel filler = new JPanel(); filler.setOpaque(false); add(filler, gridBagConstraints); final int columns = 2; final HashMap attributes = mo.getAttributes(); final Iterator keys = attributes.keySet().iterator(); while (keys.hasNext()) { final Object key = keys.next(); final Attribute attr = (Attribute)attributes.get(key); if ((attr != null) && attr.isVisible()) { // ARRAY if ((attr.getValue() instanceof MetaObject) && attr.isArray()) { // Sammeln der richtigen MetaObjects in einem Vector<MetaObject> String attrName = ""; // NOI18N final Vector<MetaObject> arrayObjects = new Vector<MetaObject>(); final MetaObject artificialObject = (MetaObject)attr.getValue(); final HashMap artificialAttributes = artificialObject.getAttributes(); final Iterator artificialKeySetIterator = artificialAttributes.keySet().iterator(); while (artificialKeySetIterator.hasNext()) { final Attribute a = (Attribute)artificialAttributes.get(artificialKeySetIterator.next()); final MetaObject referenceMetaObject = (MetaObject)a.getValue(); // Es gibt nur ein Attribut in diesem Objekt das ein MetaObject ist final Attribute aa = (Attribute) referenceMetaObject.getAttributesByType(MetaObject.class).toArray()[0]; arrayObjects.add((MetaObject)aa.getValue()); attrName = aa.getName(); } comp = new JPanel(); comp.setOpaque(false); comp.setLayout(new GridBagLayout()); // FlowLayout flow=new FlowLayout(FlowLayout.LEADING); // comp.setLayout(flow); int yArray = 0; int xArray = 0; final int ySize = 0; JPanel panel = null; for (final MetaObject arrayElement : arrayObjects) { if (xArray == 0) { gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = yArray; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.gridwidth = 2; panel = new JPanel(); panel.setOpaque(false); panel.setLayout(new FlowLayout(FlowLayout.LEFT)); comp.add(panel, gridBagConstraints); } final JComponent mor = new DefaultMetaObjectRenderer().getSingleRenderer(arrayElement, attrName); panel.add(mor); // ySize+=mor.getPreferredSize().getHeight(); // comp.add(new DefaultMetaObjectRenderer(arrayElement,attrName),gridBagConstraints); // comp.add(mor); if (xArray < (columns - 1)) { xArray++; } else { xArray = 0; yArray++; } } gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = y++; gridBagConstraints.insets = new java.awt.Insets(2, 15, 2, 2); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.gridwidth = 2; // gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; add(comp, gridBagConstraints); // comp.setPreferredSize(new Dimension(800,ySize)); } else { final JLabel lblDesc = new JLabel(attr.getName()); lblDesc.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N String val = " "; // NOI18N if (attr.getValue() != null) { val = attr.getValue().toString(); } gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = y; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; add(lblDesc, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = y; gridBagConstraints.insets = new java.awt.Insets(2, 7, 2, 2); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; final JComponent comp = MetaAttributeRendererFactory.getInstance().getRenderer(attr); add(comp, gridBagConstraints); y++; } } } final Border b = new CompoundBorder(new EmptyBorder(2, 2, 2, 2), javax.swing.BorderFactory.createTitledBorder(title)); this.setBorder(b); } catch (Throwable t) { log.error("Error while creating the MetaObjectRenderer", t); // NOI18N } setOpaque(false); return this; } @Override public JComponent getTitleComponent() { return titleComponent; } }