/*
* Copyright (C) NetStruxr, Inc. All rights reserved.
*
* This software is published under the terms of the NetStruxr
* Public Software License version 0.5, a copy of which has been
* included with this distribution in the LICENSE.NPL file. */
package er.bugtracker;
import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WOComponent;
import com.webobjects.directtoweb.D2W;
import com.webobjects.directtoweb.D2WPage;
import com.webobjects.directtoweb.EditPageInterface;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSKeyValueCoding;
import com.webobjects.foundation.NSMutableDictionary;
import er.corebusinesslogic.ERCoreBusinessLogic;
import er.extensions.appserver.ERXSession;
import er.extensions.eof.ERXEC;
import er.extensions.foundation.ERXStringUtilities;
public class Session extends ERXSession {
public class Handler implements NSKeyValueCoding, NSKeyValueCoding.ErrorHandling {
private String _key;
public Handler(String key) {
_key = key;
handlers.setObjectForKey(this, key);
}
public void takeValueForKey(Object value, String key) {
throw new UnsupportedOperationException("Can't takeValueForKey");
}
public Object valueForKey(String key) {
String keyPath = ERXStringUtilities.uncapitalize(key);
WOActionResults result = (WOActionResults) NSKeyValueCoding.DefaultImplementation.valueForKey(this, keyPath);
if (result instanceof D2WPage) {
D2WPage page = (D2WPage) result;
String state = ERXStringUtilities.capitalize(_key) + "." + key;
page.d2wContext().takeValueForKey(state, "navigationState");
}
return result;
}
public Object handleQueryWithUnboundKey(String key) {
return NSKeyValueCoding.Utility.valueForKey(Factory.bugTracker(), key);
}
public void handleTakeValueForUnboundKey(Object value, String key) {
throw new UnsupportedOperationException("Can't handleTakeValueForUnboundKey");
}
public void unableToSetNullForKey(String key) {
throw new UnsupportedOperationException("Can't unableToSetNullForKey");
}
}
public class ComponentHandler extends Handler {
public ComponentHandler() {
super("components");
}
}
public class PeopleHandler extends Handler {
public PeopleHandler() {
super("peoples");
}
}
public class FrameworkHandler extends Handler {
public FrameworkHandler() {
super("frameworks");
}
}
public class RequirementHandler extends Handler {
public RequirementHandler() {
super("requirements");
}
}
public class TestItemHandler extends Handler {
public TestItemHandler() {
super("testItems");
}
}
public class ReleaseHandler extends Handler {
public ReleaseHandler() {
super("releases");
}
}
public class BugHandler extends Handler {
public BugHandler() {
super("bugs");
}
}
public class ReportHandler extends Handler {
public ReportHandler() {
super("reports");
}
@Override
public Object handleQueryWithUnboundKey(String key) {
String keyPath = ERXStringUtilities.capitalize(key);
return Factory.bugTracker().reportForName("Report" + keyPath);
}
}
public NSMutableDictionary handlers = new NSMutableDictionary();
public Session() {
super();
new ReleaseHandler();
new BugHandler();
new ComponentHandler();
new PeopleHandler();
new FrameworkHandler();
new TestItemHandler();
new RequirementHandler();
new ReportHandler();
setStoresIDsInCookies(true);
}
@Override
public void setDefaultEditingContext(EOEditingContext newEc) {
super.setDefaultEditingContext(newEc);
}
public WOComponent editMyInfo() {
People user = user();
EditPageInterface epi = (EditPageInterface) D2W.factory().pageForConfigurationNamed("EditMyPeople", this);
EOEditingContext ec = ERXEC.newEditingContext();
ec.lock();
try {
user = (People) user.localInstanceIn(ec);
epi.setObject(user);
epi.setNextPage(context().page());
return (WOComponent) epi;
} finally {
ec.unlock();
}
}
public NSArray indentedComponents() {
return Component.clazz.orderedComponents(defaultEditingContext());
}
private String _lastname;
private String _firstname;
private NSArray _activeUsers;
public NSArray activeUsers() {
if (_activeUsers == null) {
_activeUsers = People.clazz.activeUsers(defaultEditingContext());
}
return _activeUsers;
}
protected People _user;
public People user() {
return _user;
}
public void setUser(People user) {
_user = user;
ERCoreBusinessLogic.setActor(user());
}
@Override
public void awake() {
super.awake();
if (user() != null) {
ERCoreBusinessLogic.setActor(user());
}
}
public boolean hasValidUser() {
return user() != null;
}
@Override
public void sleep() {
ERCoreBusinessLogic.setActor(null);
super.sleep();
}
private People _signUp;
public People signUp() {
return _signUp;
}
public void setSignUp(People value) {
_signUp = value;
}
public void finishSignUp() {
setUser(_signUp);
_signUp = null;
}
public String navigationRootChoice() {
People user = user();
if(user != null && user.isActive()) {
if(user.isAdmin()) {
return "admin";
}
if(user.isEngineering()) {
return "engineer";
}
}
return "none";
}
}