package org.openntf.domino.xsp.helpers; import java.util.Map; import javax.faces.context.FacesContext; import org.openntf.domino.ext.Session.Fixes; import org.openntf.domino.utils.Factory; import org.openntf.domino.xsp.Activator; import org.openntf.domino.xsp.XspOpenLogErrorHolder; import com.ibm.xsp.context.FacesContextEx; import com.ibm.xsp.el.ImplicitObjectFactory; import com.ibm.xsp.util.TypedUtil; //import org.openntf.domino.Session; /** * No longer used, superseded by OpenntfDominoImplicitObjectFactory2 */ @SuppressWarnings("unchecked") public class OpenntfDominoImplicitObjectFactory implements ImplicitObjectFactory { // TODO this is really just a sample on how to get to an entry point in the API private static Boolean GODMODE; private static boolean isGodMode() { if (GODMODE == null) { GODMODE = Boolean.FALSE; String[] envs = Activator.getEnvironmentStrings(); if (envs != null) { for (String s : envs) { if (s.equalsIgnoreCase("godmode")) { GODMODE = Boolean.TRUE; } } } } return GODMODE.booleanValue(); } private static boolean isAppGodMode(final FacesContext ctx) { Map<String, Object> appMap = ctx.getExternalContext().getApplicationMap(); Object current = appMap.get(OpenntfDominoImplicitObjectFactory.class.getName() + "_GODMODE"); if (current == null) { // System.out.println("Current not found. Creating..."); current = Boolean.FALSE; String[] envs = Activator.getXspProperty(Activator.PLUGIN_ID); if (envs != null) { // if (envs.length == 0) { // System.out.println("Got an empty string array!"); // } for (String s : envs) { // System.out.println("Xsp check: " + s); if (s.equalsIgnoreCase("godmode")) { current = Boolean.TRUE; } } } else { // System.out.println("XSP ENV IS NULL!!"); } appMap.put(OpenntfDominoImplicitObjectFactory.class.getName() + "_GODMODE", current); } else { // System.out.println("Current found: " + String.valueOf(current)); } return (Boolean) current; } private static boolean isAppMimeFriendly(final FacesContext ctx) { Map<String, Object> appMap = ctx.getExternalContext().getApplicationMap(); Object current = appMap.get(OpenntfDominoImplicitObjectFactory.class.getName() + "_MARCEL"); if (current == null) { current = Boolean.FALSE; String[] envs = Activator.getXspProperty(Activator.PLUGIN_ID); if (envs != null) { for (String s : envs) { if (s.equalsIgnoreCase("marcel")) { current = Boolean.TRUE; } } } appMap.put(OpenntfDominoImplicitObjectFactory.class.getName() + "_MARCEL", current); } return (Boolean) current; } private static boolean isAppAllFix(final FacesContext ctx) { Map<String, Object> appMap = ctx.getExternalContext().getApplicationMap(); Object current = appMap.get(OpenntfDominoImplicitObjectFactory.class.getName() + "_KHAN"); if (current == null) { current = Boolean.FALSE; String[] envs = Activator.getXspProperty(Activator.PLUGIN_ID); if (envs != null) { for (String s : envs) { if (s.equalsIgnoreCase("khan")) { current = Boolean.TRUE; } } } appMap.put(OpenntfDominoImplicitObjectFactory.class.getName() + "_KHAN", current); } return (Boolean) current; } private static boolean isAppDebug(final FacesContext ctx) { Map<String, Object> appMap = ctx.getExternalContext().getApplicationMap(); Object current = appMap.get(OpenntfDominoImplicitObjectFactory.class.getName() + "_RAID"); if (current == null) { current = Boolean.FALSE; String[] envs = Activator.getXspProperty(Activator.PLUGIN_ID); if (envs != null) { for (String s : envs) { if (s.equalsIgnoreCase("raid")) { current = Boolean.TRUE; } } } appMap.put(OpenntfDominoImplicitObjectFactory.class.getName() + "_RAID", current); } return (Boolean) current; } private final String[][] implicitObjectList = { { (isGodMode() ? "session" : "opensession"), org.openntf.domino.Session.class.getName() }, { (isGodMode() ? "database" : "opendatabase"), org.openntf.domino.Database.class.getName() }, { (Activator.isAPIEnabled() ? "openLogBean" : "openNtfLogBean"), org.openntf.domino.xsp.XspOpenLogErrorHolder.class.getName() } }; public OpenntfDominoImplicitObjectFactory() { } private org.openntf.domino.Session createSession(final FacesContextEx ctx) { org.openntf.domino.Session session = null; String sessionKey = isAppGodMode(ctx) ? "session" : "opensession"; Map<String, Object> localMap = TypedUtil.getRequestMap(ctx.getExternalContext()); lotus.domino.Session rawSession = (lotus.domino.Session) localMap.get("session"); if (rawSession == null) { rawSession = (lotus.domino.Session) ctx.getApplication().getVariableResolver().resolveVariable(ctx, "session"); } if (rawSession != null) { session = Factory.fromLotus(rawSession, org.openntf.domino.Session.class, null); if (isAppAllFix(ctx)) { for (Fixes fix : Fixes.values()) { session.setFixEnable(fix, true); } } if (isAppMimeFriendly(ctx)) session.setConvertMIME(false); localMap.put(sessionKey, session); } else { System.out.println("Unable to locate 'session' through request map or variable resolver. Unable to auto-wrap."); } return session; } private org.openntf.domino.Database createDatabase(final FacesContextEx ctx, final org.openntf.domino.Session session) { org.openntf.domino.Database database = null; String dbKey = isAppGodMode(ctx) ? "database" : "opendatabase"; Map<String, Object> localMap = TypedUtil.getRequestMap(ctx.getExternalContext()); lotus.domino.Database rawDatabase = (lotus.domino.Database) localMap.get("database"); if (rawDatabase == null) { rawDatabase = (lotus.domino.Database) ctx.getApplication().getVariableResolver().resolveVariable(ctx, "database"); } if (rawDatabase != null) { database = Factory.fromLotus(rawDatabase, org.openntf.domino.Database.class, session); localMap.put(dbKey, database); } else { System.out.println("Unable to locate 'database' through request map or variable resolver. Unable to auto-wrap."); } return database; } public void createLogHolder(final FacesContextEx ctx) { if (isAppDebug(ctx)) { System.out.println("Beginning creation of log holder..."); } if (Activator.isAPIEnabled()) { Map<String, Object> localMap = TypedUtil.getSessionMap(ctx.getExternalContext()); XspOpenLogErrorHolder ol_ = new XspOpenLogErrorHolder(); localMap.put("openLogBean", ol_); if (isAppDebug(ctx)) { System.out.println("Created log holder..."); } } } @Override public void createImplicitObjects(final FacesContextEx ctx) { if (isAppDebug(ctx)) { System.out.println("Beginning creation of implicit objects..."); } Factory.setClassLoader(ctx.getContextClassLoader()); ctx.addRequestListener(new ContextListener()); org.openntf.domino.Session session = createSession(ctx); @SuppressWarnings("unused") org.openntf.domino.Database database = createDatabase(ctx, session); createLogHolder(ctx); if (isAppDebug(ctx)) { System.out.println("Done creating implicit objects."); } } @Override public Object getDynamicImplicitObject(final FacesContextEx paramFacesContextEx, final String paramString) { // TODO Auto-generated method stub return null; } @Override public void destroyImplicitObjects(final FacesContext paramFacesContext) { // TODO Auto-generated method stub } @Override public String[][] getImplicitObjectList() { return this.implicitObjectList; } }