/*
* Copyright 2003,2004 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package hermes.browser.actions;
import hermes.browser.HermesBrowser;
import hermes.browser.IconCache;
import hermes.browser.components.ContextTree;
import hermes.browser.model.tree.ContextTreeModel;
import hermes.browser.tasks.JNDIBrowseTask;
import hermes.browser.tasks.Task;
import hermes.config.NamingConfig;
import java.awt.BorderLayout;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.apache.log4j.Logger;
import com.jidesoft.document.DocumentComponent;
import com.jidesoft.swing.JideScrollPane;
/**
* A document component that contains a tree of a JNDI InitialContext.
*
* @author colincrist@hermesjms.com last changed by: $Author: colincrist $
* @version $Id: BrowseContextAction.java,v 1.3 2004/11/17 17:22:54 colincrist
* Exp $
*/
public class BrowseContextAction extends DocumentComponent
{
private static final Logger log = Logger.getLogger(BrowseContextAction.class);
private NamingConfig namingConfig;
private volatile boolean keepRunning = true;
private JPanel rootPanel;
private boolean firstTime = true;
private JideScrollPane treeSP = new JideScrollPane();
private JLabel lastUpdate = new JLabel();
private ContextTree contextTree = new ContextTree();
/**
* @param content
* @param title
* @param listener
*/
public BrowseContextAction(NamingConfig namingConfig)
{
super(new JPanel(), "JNDI: " + namingConfig.getId());
this.namingConfig = namingConfig;
setIcon(IconCache.getIcon("jndi.context"));
rootPanel = (JPanel) getComponent();
update();
}
public void update()
{
Task task = new JNDIBrowseTask(namingConfig, this);
task.start();
}
public ContextTree getContextTree()
{
return contextTree;
}
public synchronized void update(final ContextTreeModel model)
{
if (firstTime)
{
rootPanel.setLayout(new BorderLayout());
// Header
JPanel header = new JPanel();
header.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
header.setLayout(new BoxLayout(header, BoxLayout.X_AXIS));
lastUpdate.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
header.add(lastUpdate);
// Put it together
rootPanel.add(header, BorderLayout.NORTH);
rootPanel.add(treeSP, BorderLayout.CENTER);
}
try
{
lastUpdate.setText("Last update " + new Date());
contextTree.setModel(model);
treeSP.setViewportView(contextTree);
if (firstTime)
{
HermesBrowser.getBrowser().addDocumentComponent(BrowseContextAction.this);
firstTime = false;
}
}
catch (Exception e)
{
log.error(e.getMessage(), e);
}
}
}