/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* AttributeNode.java
*
* Created on 4. Mai 2004, 17:52
*/
package Sirius.navigator.ui.attributes;
import Sirius.navigator.connection.*;
import Sirius.navigator.types.iterator.AttributeIterator;
import Sirius.navigator.types.iterator.AttributeRestriction;
import Sirius.navigator.types.iterator.SimpleAttributeRestriction;
import Sirius.navigator.types.iterator.SingleAttributeIterator;
import Sirius.navigator.types.treenode.ClassTreeNode;
import Sirius.navigator.types.treenode.ObjectTreeNode;
import Sirius.server.localserver.attribute.Attribute;
import Sirius.server.middleware.types.*;
import org.apache.log4j.Logger;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.tree.DefaultMutableTreeNode;
/**
* DOCUMENT ME!
*
* @author pascal
* @version $Revision$, $Date$
*/
public abstract class AttributeNode extends DefaultMutableTreeNode {
//~ Static fields/initializers ---------------------------------------------
protected static final AttributeRestriction objectAttributeRestriction = new SimpleAttributeRestriction(
AttributeRestriction.OBJECT,
AttributeRestriction.TRUE,
null,
null,
MetaObject.class);
protected static final AttributeRestriction classAttributeRestriction = new SimpleAttributeRestriction(
AttributeRestriction.CLASS,
AttributeRestriction.TRUE,
null,
null,
MetaObject.class);
//~ Instance fields --------------------------------------------------------
protected final Logger logger;
protected Object attributeKey = null;
/**
* Anzeigen der Struktur komplexer Objekte.
*
* <p>Bei true wird die Struktur angezeigt, bei false wird die Sturktur aufgel\u00F6st und nur das flache Objekt
* angezeigt.</p>
*/
protected boolean ignoreSubstitute = true;
/**
* Anzeigen der Array Hilfsobjekte.
*
* <p>Bei true wird das Hilfsobjekt nicht angezeigt</p>
*/
protected boolean ignoreArrayHelperObjects = true;
protected boolean ignoreInvisibleAttributes = false;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new AttributeNode object.
*
* @param name DOCUMENT ME!
*/
public AttributeNode(final String name) {
this(name, true, true, false, name);
}
/**
* Creates a new AttributeNode object.
*
* @param name DOCUMENT ME!
* @param ignoreSubstitute DOCUMENT ME!
* @param ignoreArrayHelperObjects DOCUMENT ME!
* @param ignoreInvisibleAttributes DOCUMENT ME!
*/
public AttributeNode(final String name,
final boolean ignoreSubstitute,
final boolean ignoreArrayHelperObjects,
final boolean ignoreInvisibleAttributes) {
this(name, ignoreSubstitute, ignoreArrayHelperObjects, ignoreInvisibleAttributes, name);
if (logger.isDebugEnabled()) {
logger.debug("AttributeNode(): this must be the root node (" + name + ")"); // NOI18N
}
}
/**
* Creates a new AttributeNode object.
*
* @param name DOCUMENT ME!
* @param ignoreSubstitute DOCUMENT ME!
* @param ignoreArrayHelperObjects DOCUMENT ME!
* @param ignoreInvisibleAttributes DOCUMENT ME!
* @param attributeKey DOCUMENT ME!
*/
public AttributeNode(final String name,
final boolean ignoreSubstitute,
final boolean ignoreArrayHelperObjects,
final boolean ignoreInvisibleAttributes,
final Object attributeKey) {
super(name);
this.logger = Logger.getLogger(this.getClass());
this.attributeKey = attributeKey;
this.ignoreSubstitute = ignoreSubstitute;
this.ignoreArrayHelperObjects = ignoreArrayHelperObjects;
this.ignoreInvisibleAttributes = ignoreInvisibleAttributes;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param attributeIterator DOCUMENT ME!
*/
protected void addAttributeNodes(final AttributeIterator attributeIterator) {
while (attributeIterator.hasNext()) {
final Attribute metaAttribute = attributeIterator.next();
// ignorieren (isSubstitute)
if ((this.ignoreSubstitute || !metaAttribute.isSubstitute())
&& (this.ignoreInvisibleAttributes || metaAttribute.isVisible())) {
if (logger.isDebugEnabled()) {
logger.debug("adding new complex object '" + metaAttribute.getName() + "'"); // NOI18N
}
final MetaObject childMetaObject = (MetaObject)metaAttribute.getValue();
this.add(new ObjectAttributeNode(
metaAttribute.getName(),
this.ignoreSubstitute,
this.ignoreArrayHelperObjects,
this.ignoreInvisibleAttributes,
metaAttribute.getKey(),
childMetaObject));
} else if (logger.isDebugEnabled()) {
logger.warn("ignoring complex object '" + metaAttribute.getName() + "' (isSubstitute or !isVisible)"); // NOI18N
}
}
}
/**
* Konstruiert den anzuzeigenden Attributnamen.
*
* @param metaAttribute DOCUMENT ME!
* @param MetaObject DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected String getName(final Attribute metaAttribute, final MetaObject MetaObject) {
if (metaAttribute.referencesObject() && metaAttribute.isArray()) {
final StringBuffer name = new StringBuffer();
name.append(metaAttribute.getName()).append(' ');
name.append('(').append(MetaObject.getName()).append(')');
return name.toString();
} else {
return metaAttribute.getName();
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Object getAttributeKey() {
return this.attributeKey;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public abstract java.util.Collection getAttributes();
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public abstract Icon getIcon();
}