/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.ui.embedded;
import org.apache.log4j.Logger;
import java.util.*;
import javax.swing.*;
/**
* DOCUMENT ME!
*
* @author pascal
* @version $Revision$, $Date$
*/
public abstract class EmbeddedContainer implements EmbeddedComponent {
//~ Static fields/initializers ---------------------------------------------
private static final Logger logger = Logger.getLogger(EmbeddedContainer.class);
//~ Instance fields --------------------------------------------------------
private final String id;
private final Collection components;
private boolean enabled = false;
private boolean visible = false;
/** Holds value of property name. */
private String name;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new EmbeddedContainer object.
*
* @param id DOCUMENT ME!
* @param components DOCUMENT ME!
*/
public EmbeddedContainer(final String id, final Collection components) {
this.id = id;
this.components = components;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
protected abstract void addComponents();
/**
* DOCUMENT ME!
*/
protected abstract void removeComponents();
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected ComponentIterator iterator() {
return new ComponentIterator(components.iterator());
}
@Override
public void setEnabled(final boolean enabled) {
final ComponentIterator iterator = this.iterator();
while (iterator.hasNext()) {
final JComponent component = iterator.next();
if (component != null) {
component.setEnabled(enabled);
}
}
this.enabled = enabled;
}
@Override
public boolean isEnabled() {
return this.enabled;
}
@Override
public void setVisible(final boolean visible) {
if (this.isVisible() != visible) {
final ComponentIterator iterator = this.iterator();
while (iterator.hasNext()) {
final JComponent component = iterator.next();
if (component != null) {
component.setVisible(visible);
}
}
this.visible = visible;
} else {
this.logger.warn("unexpected call to 'setVisible()': '" + visible + "'"); // NOI18N
}
}
@Override
public boolean isVisible() {
return this.visible;
}
/**
* Getter for property name.
*
* @return Value of property name.
*/
@Override
public String getName() {
return this.name;
}
/**
* Setter for property name.
*
* @param name New value of property name.
*/
@Override
public void setName(final String name) {
this.name = name;
}
/**
* Getter for property id.
*
* @return Value of property id.
*/
@Override
public String getId() {
return this.id;
}
//~ Inner Classes ----------------------------------------------------------
/**
* Setter for property id.
*
* @param id New value of property id.
*
* @version $Revision$, $Date$
*/
/*public void setId(String id)
* { this.id = id; }*/
protected final class ComponentIterator {
//~ Instance fields ----------------------------------------------------
Iterator iterator;
//~ Constructors -------------------------------------------------------
/**
* Creates a new ComponentIterator object.
*
* @param iterator DOCUMENT ME!
*/
private ComponentIterator(final Iterator iterator) {
this.iterator = iterator;
}
//~ Methods ------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean hasNext() {
return iterator.hasNext();
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public JComponent next() {
final Object next = iterator.next();
if (JComponent.class.isAssignableFrom(next.getClass())) {
return (JComponent)next;
} else {
logger.error("object '" + next + "' is not of type 'javax.swing.JComponent' but '"
+ next.getClass().getName() + "'"); // NOI18N
iterator.remove();
return null;
}
}
}
}