/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.search;
import Sirius.navigator.actiontag.ActionTagProtected;
import Sirius.navigator.ui.ComponentRegistry;
import Sirius.navigator.ui.GUIContainer;
import Sirius.navigator.ui.MutableConstraints;
import Sirius.navigator.ui.MutableMenuBar;
import Sirius.navigator.ui.MutableToolBar;
import org.apache.log4j.Logger;
import org.openide.util.Lookup;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Iterator;
import javax.swing.JDialog;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import de.cismet.cids.tools.search.clientstuff.CidsDialogSearch;
import de.cismet.cids.tools.search.clientstuff.CidsToolbarSearch;
import de.cismet.cids.tools.search.clientstuff.CidsWindowSearch;
import de.cismet.cids.tools.search.clientstuff.CidsWindowSearchWithMenuEntry;
import de.cismet.tools.StaticDebuggingTools;
import de.cismet.tools.gui.StaticSwingTools;
/**
* This class is responsibility is to lookup all relevant search components, to initialize and to plug them into the
* navigator gui.
*
* @author stefan
* @version $Revision$, $Date$
*/
public class CidsSearchInitializer {
//~ Static fields/initializers ---------------------------------------------
private static final Logger LOG = Logger.getLogger(CidsSearchInitializer.class);
//~ Constructors -----------------------------------------------------------
/**
* Creates a new CidsSearchInitializer object.
*/
public CidsSearchInitializer() {
initializeSearch();
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
private void initializeSearch() {
final Collection<? extends CidsToolbarSearch> toolbarSearches = Lookup.getDefault()
.lookupAll(CidsToolbarSearch.class);
final Collection<? extends CidsDialogSearch> dialogeSearches = Lookup.getDefault()
.lookupAll(CidsDialogSearch.class);
final Collection<? extends CidsWindowSearch> windowSearches = Lookup.getDefault()
.lookupAll(CidsWindowSearch.class);
//
final MutableMenuBar menuBar = ComponentRegistry.getRegistry().getMutableMenuBar();
final MutableToolBar toolBar = ComponentRegistry.getRegistry().getMutableToolBar();
final GUIContainer guiContainer = ComponentRegistry.getRegistry().getGUIContainer();
// Toolbar Searches
if (StaticDebuggingTools.checkHomeForFile("cidsNewServerSearchEnabled")) {
if (!toolbarSearches.isEmpty()) {
final CidsSearchComboBar searchBar = new CidsSearchComboBar();
final Iterator<? extends CidsToolbarSearch> itTS = toolbarSearches.iterator();
while (itTS.hasNext()) {
if (!checkActionTag(itTS.next())) {
itTS.remove();
}
}
searchBar.setSearches(toolbarSearches);
final JPanel innerPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
innerPanel.add(searchBar);
toolBar.add(innerPanel, -1);
}
}
// Dialog Searches
if (!dialogeSearches.isEmpty()) {
final JMenu menu = menuBar.getSearchMenu();
menu.add(new JSeparator());
for (final CidsDialogSearch dialogSearch : dialogeSearches) {
if (checkActionTag(dialogSearch)) {
final JMenuItem item = new JMenuItem(dialogSearch.getName());
menu.add(item);
item.setIcon(dialogSearch.getIcon());
item.addActionListener(new DialogActionListener(dialogSearch));
}
}
}
// Window Searches
if (!windowSearches.isEmpty()) {
if (LOG.isDebugEnabled()) {
LOG.debug("Initializing " + windowSearches.size() + " window searches.");
}
for (final CidsWindowSearch windowSearch : windowSearches) {
if (LOG.isDebugEnabled()) {
LOG.debug("Initializing window search '" + windowSearch.getName() + "'.");
}
if (checkActionTag(windowSearch)) {
final MutableConstraints mutableConstraints = new MutableConstraints();
final String name = windowSearch.getName();
mutableConstraints.addAsComponent(windowSearch.getClass().getName(),
windowSearch.getSearchWindowComponent(),
name,
name,
windowSearch.getIcon(),
MutableConstraints.P1,
MutableConstraints.ANY_INDEX);
guiContainer.add(mutableConstraints);
if (windowSearch instanceof CidsWindowSearchWithMenuEntry) {
final JMenu menu = menuBar.getSearchMenu();
menu.add(new JSeparator());
final JMenuItem item = new JMenuItem(windowSearch.getName());
menu.add(item);
item.setIcon(windowSearch.getIcon());
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
ComponentRegistry.getRegistry()
.getGUIContainer()
.select(windowSearch.getClass().getName());
}
});
}
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Could not initialize window search '" + windowSearch.getName()
+ "' due to restricted permissions.");
}
}
}
}
}
/**
* DOCUMENT ME!
*
* @param toCheck DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private boolean checkActionTag(final Object toCheck) {
if (toCheck instanceof ActionTagProtected) {
final ActionTagProtected atp = (ActionTagProtected)toCheck;
return atp.checkActionTag();
}
return true;
}
//~ Inner Classes ----------------------------------------------------------
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
static final class DialogActionListener implements ActionListener {
//~ Instance fields ----------------------------------------------------
private final JDialog dialoge;
//~ Constructors -------------------------------------------------------
/**
* Creates a new DialogActionListener object.
*
* @param search DOCUMENT ME!
*/
public DialogActionListener(final CidsDialogSearch search) {
this.dialoge = search.getDialogComponent();
}
//~ Methods ------------------------------------------------------------
@Override
public void actionPerformed(final ActionEvent e) {
final java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
dialoge.setLocation((screenSize.width - dialoge.getWidth()) / 2,
(screenSize.height - dialoge.getHeight())
/ 2);
StaticSwingTools.showDialog(dialoge);
}
}
}