/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.plugin.ui;
import Sirius.navigator.method.*;
import Sirius.navigator.plugin.*;
import Sirius.navigator.plugin.interfaces.*;
import Sirius.navigator.ui.embedded.*;
import org.apache.log4j.Logger;
import java.awt.*;
import java.util.*;
import javax.swing.*;
/**
* DOCUMENT ME!
*
* @author pascal
* @version $Revision$, $Date$
*/
public class PluginMenu extends EmbeddedMenu {
//~ Instance fields --------------------------------------------------------
/** Holds value of property hideUnavailableItems. */
private boolean hideUnavailableItems = false;
/** Holds value of property disableUnavailableItems. */
private boolean disableUnavailableItems = true;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new PluginMenu object.
*
* @param id DOCUMENT ME!
*/
public PluginMenu(final String id) {
super(id);
}
/**
* Creates a new PluginMenu object.
*
* @param id DOCUMENT ME!
* @param name DOCUMENT ME!
*/
public PluginMenu(final String id, final String name) {
this(id);
this.setText(name);
}
//~ Methods ----------------------------------------------------------------
/**
* Getter for property hideUnavailableItems.
*
* @return Value of property hideUnavailableItems.
*/
public boolean isHideUnavailableItems() {
return this.hideUnavailableItems;
}
/**
* Setter for property hideUnavailableItems.
*
* @param hideUnavailableItems New value of property hideUnavailableItems.
*/
public void setHideUnavailableItems(final boolean hideUnavailableItems) {
this.hideUnavailableItems = hideUnavailableItems;
}
/**
* Getter for property disableUnavailableItems.
*
* @return Value of property disableUnavailableItems.
*/
public boolean isDisableUnavailableItems() {
return this.disableUnavailableItems;
}
/**
* Setter for property disableUnavailableItems.
*
* @param disableUnavailableItems New value of property disableUnavailableItems.
*/
public void setDisableUnavailableItems(final boolean disableUnavailableItems) {
this.disableUnavailableItems = disableUnavailableItems;
}
/**
* Setter for property availability.
*
* @param methodAvailability New value of property availability.
*/
public void setAvailability(final MethodAvailability methodAvailability) {
if (logger.isDebugEnabled()) {
logger.debug("setting plugin menu items availability '" + methodAvailability.getAvailability() + "' of '"
+ this.getMenuComponentCount() + "' components"); // NOI18N
}
final Component[] components = this.getMenuComponents();
for (int i = 0; i < components.length; i++) {
if (components[i] instanceof PluginMenuItem) {
final PluginMenuItem pluginMenuItem = (PluginMenuItem)components[i];
// if(logger.isDebugEnabled())logger.debug("changing availability '" + pluginMenuItem.getAvailability()
// + "' of '" + pluginMenuItem.getText() + "' to '" + availability + "': '" +
// (pluginMenuItem.getAvailability() & availability) + "'");
boolean available = (pluginMenuItem.getAvailability() & methodAvailability.getAvailability()) > 0;
if (logger.isDebugEnabled()) {
logger.debug(pluginMenuItem.getText() + " is available: " + available + " ("
+ pluginMenuItem.getAvailability() + " & " + methodAvailability.getAvailability()
+ " > 0)"); // NOI18N
}
if ((pluginMenuItem.getMethod() != null) && available) {
available = methodAvailability.containsClasses(pluginMenuItem.getMethod().getClassKeys());
if (logger.isDebugEnabled()) {
logger.debug(pluginMenuItem.getText() + " is available for selected classes: " + available); // NOI18N
}
Iterator iterator = methodAvailability.getClassKeys().iterator();
while (iterator.hasNext()) {
if (logger.isDebugEnabled()) {
logger.debug("class key of selected nodes: " + iterator.next()); // NOI18N
}
}
iterator = pluginMenuItem.getMethod().getClassKeys().iterator();
while (iterator.hasNext()) {
if (logger.isDebugEnabled()) {
logger.debug("class key of selected method: " + iterator.next()); // NOI18N
}
}
}
if (disableUnavailableItems) {
pluginMenuItem.setEnabled(available);
} else if (hideUnavailableItems) {
pluginMenuItem.setVisible(available);
}
} else if (!(components[i] instanceof JSeparator)) {
logger.warn("could not set availability of component '" + components[i].getClass().getName() + "'"); // NOI18N
}
}
}
}