/*************************************************** * * 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 AbstractEmbeddedComponentsMap extends HashMap implements EmbeddedComponentsMap { //~ Instance fields -------------------------------------------------------- protected Logger logger = Logger.getLogger(AbstractEmbeddedComponentsMap.class); //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of AbstractEmbeddedComponentsMap. */ public AbstractEmbeddedComponentsMap() { super(); } //~ Methods ---------------------------------------------------------------- @Override public synchronized void add(final EmbeddedComponent component) { if (logger.isDebugEnabled()) { logger.debug("adding new component '" + component.getName() + "' : '" + component.getId() + "' (" + component.getClass().getName() + ")"); // NOI18N } if (!this.isAvailable(component.getId())) { this.put(component.getId(), component); if (SwingUtilities.isEventDispatchThread()) { doAdd(component); } else { if (logger.isDebugEnabled()) { logger.debug("add(): synchronizing method"); // NOI18N } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { doAdd(component); } }); } } else { logger.warn("add(): component '" + component.getId() + "' already in map"); // NOI18N } } /** * DOCUMENT ME! * * @param component DOCUMENT ME! */ protected abstract void doAdd(EmbeddedComponent component); /** * Getter for property name. * * @param id DOCUMENT ME! * * @return Value of property name. */ @Override public String getName(final String id) { if (isAvailable(id)) { return this.get(id).getName(); } else { logger.warn("getName(): component '" + id + "' not found"); // NOI18N return null; } } /** * Getter for property enabled. * * @param id DOCUMENT ME! * * @return Value of property enabled. */ @Override public boolean isEnabled(final String id) { if (isAvailable(id)) { return this.get(id).isEnabled(); } else { logger.warn("isEnabled(): component '" + id + "' not found"); // NOI18N return false; } } /** * Getter for property visible. * * @param id DOCUMENT ME! * * @return Value of property visible. */ @Override public boolean isVisible(final String id) { if (isAvailable(id)) { return this.get(id).isVisible(); } else { logger.warn("isVisible(): component '" + id + "' not found"); // NOI18N return false; } } @Override public synchronized void remove(final String id) { if (logger.isDebugEnabled()) { logger.debug("removing component '" + id + "'"); // NOI18N } if (this.isAvailable(id)) { final EmbeddedComponent component = (EmbeddedComponent)super.remove(id); if (SwingUtilities.isEventDispatchThread()) { doRemove(component); } else { if (logger.isDebugEnabled()) { logger.debug("remove(): synchronizing method"); // NOI18N } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { doRemove(component); } }); } } else { logger.warn("remove(): component '" + id + "' not found"); // NOI18N } } /** * DOCUMENT ME! * * @param component DOCUMENT ME! */ protected abstract void doRemove(EmbeddedComponent component); /** * Setter for property enabled. * * @param id DOCUMENT ME! * @param enabled New value of property enabled. */ @Override public synchronized void setEnabled(final String id, final boolean enabled) { if (isAvailable(id)) { if (SwingUtilities.isEventDispatchThread()) { doSetEnabled(this.get(id), enabled); } else { if (logger.isDebugEnabled()) { logger.debug("setEnabled(): synchronizing method"); // NOI18N } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { doSetEnabled(get(id), enabled); } }); } } else { logger.warn("setEnabled(): component '" + id + "' not found"); // NOI18N } } /** * DOCUMENT ME! * * @param component DOCUMENT ME! * @param enabled DOCUMENT ME! */ protected void doSetEnabled(final EmbeddedComponent component, final boolean enabled) { component.setEnabled(enabled); } /** * Setter for property name. * * @param id name New value of property name. * @param visible DOCUMENT ME! */ /*public synchronized void setName(final String id, final String name) * { if(isAvailable(id)) { if(SwingUtilities.isEventDispatchThread()) { doSetName(this.get(id), * name); } else { logger.debug("setName(): synchronizing method"); * SwingUtilities.invokeLater(new Runnable() { public void run() { * doSetName(get(id), name); } }); } } else { logger.warn("setName(): component '" + id * + "' not found"); } } * * protected void doSetName(EmbeddedComponent component, String name) { component.setName(name);}*/ /** * Setter for property visible. * * @param id DOCUMENT ME! * @param visible New value of property visible. */ @Override public synchronized void setVisible(final String id, final boolean visible) { if (isAvailable(id)) { if (SwingUtilities.isEventDispatchThread()) { doSetVisible(this.get(id), visible); } else { if (logger.isDebugEnabled()) { logger.debug("setVisible(): synchronizing method"); // NOI18N } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { doSetVisible(get(id), visible); } }); } } else { logger.warn("setVisible(): component '" + id + "' not found"); // NOI18N } } /** * DOCUMENT ME! * * @param component DOCUMENT ME! * @param visible DOCUMENT ME! */ protected void doSetVisible(final EmbeddedComponent component, final boolean visible) { component.setVisible(visible); } @Override public EmbeddedComponent get(final String id) { if (logger.isDebugEnabled()) { logger.debug("retrieving component: '" + id + "'"); // NOI18N } if (isAvailable(id)) { return (EmbeddedComponent)super.get(id); } else { logger.warn("get(): component '" + id + "' not found"); // NOI18N return null; } } @Override public boolean isAvailable(final String id) { return this.containsKey(id); } @Override public Iterator getEmbeddedComponents() { return this.values().iterator(); } }