/*
* Created on Dec 10, 2008
*
* Copyright 2005 CafeSip.org
*
* 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 org.cafesip.jiplet.console.client;
import org.cafesip.gwtcomp.client.ui.PopupMenu;
import org.cafesip.gwtcomp.client.ui.SuperTree;
import org.cafesip.gwtcomp.client.ui.SuperTreeItem;
import org.cafesip.gwtcomp.client.ui.SuperTreeListener;
import org.cafesip.gwtcomp.client.utils.HTMLHelper;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TreeItem;
/**
* @author Becky McElroy
*
*/
public class TreeView extends ScrollPanel
{
private static TreeView instance = null;
private SuperTree tree;
private SuperTreeItem connectors;
private SuperTreeItem contexts;
private SuperTreeItem realms;
public TreeView()
{
super();
setStyleName("jiplet-MenuTree");
setSize("100%", "100%");
tree = new SuperTree();
tree.setMultiSelectionEnabled(false);
setWidget(tree);
init();
instance = this;
}
public static TreeView getInstance()
{
if (instance == null)
{
new TreeView();
}
return instance;
}
private void init()
{
SuperTreeItem root = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/gohome.png", "Home"), 1);
root.setUserObject(new RootOperationListener());
tree.addItem(root);
connectors = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/folder.png", "Connectors"), 1);
connectors.setUserObject(new ConnectorOperationListener(
ConnectorOperationListener.CONNECTORS_REFRESH));
connectors.setContextMenu(createConnectorsContextMenu());
root.addItem(connectors);
connectors.addItem("");
contexts = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/folder_html.png", "Contexts"), 1);
contexts.setUserObject(new ContextOperationListener(
ContextOperationListener.CONTEXTS_REFRESH));
contexts.setContextMenu(createContextsContextMenu());
root.addItem(contexts);
contexts.addItem("");
realms = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/folder_locked.png", "Realms"), 1);
realms.setUserObject(new RealmOperationListener(
RealmOperationListener.REALMS_REFRESH));
realms.setContextMenu(createRealmsContextMenu());
root.addItem(realms);
realms.addItem("");
initTreeListeners();
root.setState(true);
}
private void initTreeListeners()
{
tree.addTreeListener(new SuperTreeListener()
{
public void onCollapse(TreeItem item)
{
// item.setState(false);
}
public void onExpand(TreeItem item)
{
if (item.getUserObject() != null)
{
// children in tree have never been seen, get them
((ClickListener) item.getUserObject()).onClick(item
.getWidget());
}
// else
// {
// item.setState(true);
// }
}
public void onPopup(String level, PopupMenu menu,
TreeItem[] treeItems)
{
}
public void onSelect(String level, TreeItem[] treeItems)
{
if (treeItems.length != 1)
{
return;
}
if (treeItems[0].getUserObject() != null)
{
// single action treeItem with no context menu
((ClickListener) treeItems[0].getUserObject())
.onClick(treeItems[0].getWidget());
}
}
});
}
private PopupMenu createConnectorsContextMenu()
{
PopupMenu menu = new PopupMenu();
HTML refresh = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/reload.png", "Refresh"));
ClickListener listener = new ConnectorOperationListener(
ConnectorOperationListener.CONNECTORS_REFRESH);
refresh
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(refresh);
menu.addSeparator();
HTML list = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/view_tree.png", "List Connectors")); // icon?
listener = new ConnectorOperationListener(
ConnectorOperationListener.CONNECTORS_LIST);
list.addClickListener(new TreeContextMenuItemListener(menu, listener));
menu.addMenuItem(list);
return menu;
}
private PopupMenu createContextsContextMenu()
{
PopupMenu menu = new PopupMenu();
HTML refresh = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/reload.png", "Refresh"));
ClickListener listener = new ContextOperationListener(
ContextOperationListener.CONTEXTS_REFRESH);
refresh
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(refresh);
HTML list = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/view_tree.png", "List Contexts"));
listener = new ContextOperationListener(
ContextOperationListener.CONTEXTS_LIST);
list.addClickListener(new TreeContextMenuItemListener(menu, listener));
menu.addMenuItem(list);
HTML create = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/edit_add.png", "Add a Context"));
listener = new ContextOperationListener(
ContextOperationListener.CONTEXT_ADD);
create
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(create);
return menu;
}
private PopupMenu createContextContextMenu(String contextName,
SuperTreeItem contextItem)
{
PopupMenu menu = new PopupMenu();
HTML refresh = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/reload.png", "Refresh"));
ClickListener listener = new ContextOperationListener(
ContextOperationListener.CONTEXT_JIPLETS_REFRESH, contextName,
contextItem);
refresh
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(refresh);
HTML view = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/view_detailed.png", "View Properties"));
listener = new ContextOperationListener(
ContextOperationListener.CONTEXT_VIEW_PROPERTIES, contextName);
view.addClickListener(new TreeContextMenuItemListener(menu, listener));
menu.addMenuItem(view);
HTML delete = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/editdelete.png", "Remove the Context"));
listener = new ContextOperationListener(
ContextOperationListener.CONTEXT_DELETE, contextName);
delete
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(delete);
return menu;
}
private PopupMenu createRealmsContextMenu()
{
PopupMenu menu = new PopupMenu();
HTML refresh = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/reload.png", "Refresh"));
ClickListener listener = new RealmOperationListener(
RealmOperationListener.REALMS_REFRESH);
refresh
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(refresh);
menu.addSeparator();
HTML list = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/view_tree.png", "List Realms")); // icon?
listener = new RealmOperationListener(
RealmOperationListener.REALMS_LIST);
list.addClickListener(new TreeContextMenuItemListener(menu, listener));
menu.addMenuItem(list);
HTML create = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/edit_add.png", "Add a Realm"));
listener = new RealmOperationListener(RealmOperationListener.REALM_ADD);
create
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(create);
return menu;
}
private PopupMenu createRealmContextMenu(String realm)
{
PopupMenu menu = new PopupMenu();
HTML view = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/view_detailed.png", "View Properties"));
ClickListener listener = new RealmOperationListener(
RealmOperationListener.REALM_VIEW_PROPERTIES, realm);
view.addClickListener(new TreeContextMenuItemListener(menu, listener));
menu.addMenuItem(view);
HTML manage = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/kuser.png", "Manage Users"));
listener = new RealmOperationListener(
RealmOperationListener.REALM_USER_MANAGE, realm);
manage
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(manage);
HTML delete = new HTML(HTMLHelper.imageWithText(GWT.getModuleBaseURL()
+ "gwtcomp-icons/editdelete.png", "Remove the Realm"));
listener = new RealmOperationListener(
RealmOperationListener.REALM_DELETE, realm);
delete
.addClickListener(new TreeContextMenuItemListener(menu,
listener));
menu.addMenuItem(delete);
return menu;
}
public void refreshConnectors(String[] list)
{
connectors.removeItems();
for (String element : list)
{
SuperTreeItem item = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/usbpendrive_mount.png", element), 1);
ConnectorOperationListener actionListener = new ConnectorOperationListener(
ConnectorOperationListener.CONNECTOR_VIEW_PROPERTIES,
element);
item.setUserObject(actionListener);
connectors.addItem(item);
}
connectors.setState(true);
connectors.setUserObject(null);
}
public void refreshContexts(String[] list)
{
contexts.removeItems();
for (String element : list)
{
SuperTreeItem item = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/www.png", element), 1);
item.setUserObject(new ContextOperationListener(
ContextOperationListener.CONTEXT_JIPLETS_REFRESH, element,
item));
item.setContextMenu(createContextContextMenu(element, item));
item.addItem("");
contexts.addItem(item);
}
contexts.setState(true);
contexts.setUserObject(null);
}
public void refreshJiplets(String contextName, String[] list,
Object userParm)
{
SuperTreeItem context = (SuperTreeItem) userParm;
context.removeItems();
for (String element : list)
{
SuperTreeItem item = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/networksettings.png", element), 1);
ContextOperationListener actionListener = new ContextOperationListener(
ContextOperationListener.CONTEXT_JIPLET_VIEW_PROPERTIES,
contextName, element);
item.setUserObject(actionListener);
context.addItem(item);
}
context.setState(true);
context.setUserObject(null);
}
public void refreshRealms(String[] list)
{
realms.removeItems();
for (String element : list)
{
SuperTreeItem item = new SuperTreeItem(HTMLHelper.imageWithText(GWT
.getModuleBaseURL()
+ "gwtcomp-icons/encrypted.png", element), 1);
item.setContextMenu(createRealmContextMenu(element));
realms.addItem(item);
}
realms.setState(true);
realms.setUserObject(null);
}
}