ItEr24S08CUAsignacionGrupoRecursosAPlanificacionItEr23S10: Adding registry for storing objects at Desktop.

This commit is contained in:
Óscar González Fernández 2009-08-31 16:58:07 +02:00
parent 8527fa13dd
commit 1e4d68383c
4 changed files with 62 additions and 47 deletions

View file

@ -15,7 +15,8 @@ import org.zkoss.ganttz.extensions.ICommandOnTask;
import org.zkoss.ganttz.extensions.IContext;
import org.zkoss.ganttz.extensions.ITab;
import org.zkoss.ganttz.extensions.ITabFactory;
import org.zkoss.ganttz.util.MenuItemsRegisterLocator;
import org.zkoss.ganttz.util.IMenuItemsRegister;
import org.zkoss.ganttz.util.OnZKDesktopRegistry;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zul.impl.XulElement;
@ -114,8 +115,7 @@ public class Planner extends XulElement {
this.context = context;
clear();
context.add(configuration.getData());
visualizeTabs(context, configuration
.getTabFactories());
visualizeTabs(context, configuration.getTabFactories());
}
private <T> TabsRegistry createTabs(IContext<T> context,
@ -141,9 +141,13 @@ public class Planner extends XulElement {
}
private void registryTabs(TabsRegistry tabs) {
if (!MenuItemsRegisterLocator.isRegistered())
if (!getMenuItemsRegisterLocator().isRegistered())
return;
tabs.registerAtMenu(MenuItemsRegisterLocator.retrieve());
tabs.registerAtMenu(getMenuItemsRegisterLocator().retrieve());
}
private OnZKDesktopRegistry<IMenuItemsRegister> getMenuItemsRegisterLocator() {
return OnZKDesktopRegistry.getLocatorFor(IMenuItemsRegister.class);
}
private void clear() {

View file

@ -1,40 +0,0 @@
package org.zkoss.ganttz.util;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Executions;
public class MenuItemsRegisterLocator {
private static final String MENU_ATTRIBUTE = MenuItemsRegisterLocator.class
.getSimpleName()
+ "_menu";
private MenuItemsRegisterLocator() {
}
public static void store(IMenuItemsRegister register) {
getDesktop().setAttribute(MENU_ATTRIBUTE, register);
}
private static Desktop getDesktop() {
return Executions.getCurrent().getDesktop();
}
public static boolean isRegistered() {
Object result = get();
return result != null;
}
private static Object get() {
return getDesktop().getAttribute(MENU_ATTRIBUTE);
}
public static IMenuItemsRegister retrieve()
throws IllegalStateException {
if (!isRegistered())
throw new IllegalStateException("no "
+ IMenuItemsRegister.class.getSimpleName() + " registered");
return (IMenuItemsRegister) get();
}
}

View file

@ -0,0 +1,47 @@
package org.zkoss.ganttz.util;
import org.apache.commons.lang.Validate;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Executions;
public class OnZKDesktopRegistry<T> {
public static <T> OnZKDesktopRegistry<T> getLocatorFor(Class<T> klass) {
return new OnZKDesktopRegistry<T>(klass);
}
private final Class<T> klass;
private final String attributeName;
public OnZKDesktopRegistry(Class<T> klass) {
Validate.notNull(klass);
this.klass = klass;
this.attributeName = klass.getName() + "_locator";
}
public void store(T object) {
getDesktop().setAttribute(attributeName, object);
}
private static Desktop getDesktop() {
return Executions.getCurrent().getDesktop();
}
public boolean isRegistered() {
Object result = get();
return result != null;
}
private Object get() {
return getDesktop().getAttribute(attributeName);
}
public T retrieve() throws IllegalStateException {
if (!isRegistered())
throw new IllegalStateException("no " + klass.getSimpleName()
+ " registered");
return klass.cast(get());
}
}

View file

@ -6,7 +6,7 @@ import java.util.ArrayList;
import java.util.List;
import org.zkoss.ganttz.util.IMenuItemsRegister;
import org.zkoss.ganttz.util.MenuItemsRegisterLocator;
import org.zkoss.ganttz.util.OnZKDesktopRegistry;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Events;
@ -70,7 +70,11 @@ public class CustomMenuController extends Div implements IMenuItemsRegister {
public CustomMenuController() {
initializeMenu();
MenuItemsRegisterLocator.store(this);
getLocator().store(this);
}
private OnZKDesktopRegistry<IMenuItemsRegister> getLocator() {
return OnZKDesktopRegistry.getLocatorFor(IMenuItemsRegister.class);
}
public void initializeMenu() {