[Rapforums-developer] src/source/edu/fullcoll/uportal/channels/rap/forum CForum.java,1.3,1.4
Status: Beta
Brought to you by:
brippe
From: Brad R. <br...@us...> - 2004-07-21 17:16:27
|
Update of /cvsroot/rapforums/src/source/edu/fullcoll/uportal/channels/rap/forum In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5496 Modified Files: CForum.java Log Message: no message Index: CForum.java =================================================================== RCS file: /cvsroot/rapforums/src/source/edu/fullcoll/uportal/channels/rap/forum/CForum.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CForum.java 26 Jan 2004 18:50:07 -0000 1.3 --- CForum.java 21 Jul 2004 17:16:16 -0000 1.4 *************** *** 32,37 **** --- 32,43 ---- import org.jasig.portal.groups.IGroupMember; import org.jasig.portal.services.GroupService; + import org.jasig.portal.services.AuthorizationService; import org.xml.sax.ContentHandler; import org.jasig.portal.services.LogService; + import org.jasig.portal.channels.permissionsmanager.CPermissionsManagerServantFactory; + import org.jasig.portal.channels.groupsmanager.CGroupsManagerServantFactory; + import org.jasig.portal.security.IAuthorizationPrincipal; + import org.jasig.portal.IPermissible; + import org.jasig.portal.IMultithreadedChannel; import edu.fullcoll.uportal.channels.rap.forum.database.RAPDBException; *************** *** 44,47 **** --- 50,61 ---- import edu.fullcoll.uportal.channels.rap.forum.commands.PostModeCommand; import edu.fullcoll.uportal.channels.rap.forum.commands.SearchModeCommand; + import edu.fullcoll.uportal.channels.rap.forum.database.RAPDB; + + import java.util.HashMap; + import java.util.Collection; + import java.util.Calendar; + import java.sql.Timestamp; + import org.jasig.portal.security.IPermission; + import edu.fullcoll.uportal.channels.rap.forum.commands.UnAuthorizedModeCommand; /** *************** *** 53,64 **** * @version 0.8.3 $Revision %G% */ ! public class CForum implements IChannel { public static String EVERYONE_KEY = "local.0"; public CForum() { ! mode = MAIN_MODE; // by default view is the main.xsl } /** Required methods by IChannel * */ --- 67,117 ---- * @version 0.8.3 $Revision %G% */ ! public class CForum implements IPermissible, IMultithreadedChannel { public static String EVERYONE_KEY = "local.0"; public CForum() { ! init(); } + private synchronized void init() { + if(tasks == null) { + tasks = new HashMap(); + try { + // This should resemble exact forum + tasks.put("Subscribe", "Subscribe to Forum"); + tasks.put("Post", "Post to Forum"); + tasks.put("Reply", "Reply to Forum"); + tasks.put("Delete", "Delete Forum"); + tasks.put("Create", "Create Forum"); + tasks.put("AssignPermissions", "Assign Permissions for this Forum"); + } catch(Exception e) { + LogService.instance().log(LogService.ERROR, e); + } + } + } + + private synchronized ForumSessionData getSessionData(String uid) { + if(sessions.get(uid) == null) { + ForumSessionData fsd = new ForumSessionData(); + fsd.uid = uid; + sessions.put(uid, fsd); + } + return (ForumSessionData)sessions.get(uid); + } + + private boolean hasValue(Object o) { + if(o != null && !o.toString().trim().equals("")) + return true; + return false; + } + + private boolean hasValue(Object o, String test) { + if(hasValue(o)) { + if(String.valueOf(o).equals(test)) + return true; + } + return false; + } /** Required methods by IChannel * */ *************** *** 67,71 **** * @return handle to runtime properties */ ! public ChannelRuntimeProperties getRuntimeProperties() { return new ChannelRuntimeProperties(); } --- 120,124 ---- * @return handle to runtime properties */ ! public ChannelRuntimeProperties getRuntimeProperties(String uid) { return new ChannelRuntimeProperties(); } *************** *** 79,86 **** * @param PortalEvent ev a portal layout event */ ! public void receiveEvent(PortalEvent ev) { switch (ev.getEventNumber()) { case PortalEvent.ABOUT_BUTTON_EVENT: ! mode = ABOUT_MODE; default: LogService.instance().log(LogService.WARN, "Unknown event: " + ev.getEventName()); --- 132,140 ---- * @param PortalEvent ev a portal layout event */ ! public void receiveEvent(PortalEvent ev, String uid) { ! ForumSessionData session = getSessionData(uid); switch (ev.getEventNumber()) { case PortalEvent.ABOUT_BUTTON_EVENT: ! session.mode = ABOUT_MODE; default: LogService.instance().log(LogService.WARN, "Unknown event: " + ev.getEventName()); *************** *** 92,101 **** * @param ChannelStaticData sd static channel data */ ! public void setStaticData(ChannelStaticData sd) { ! this.staticData = sd; // Configuration for multiple DBs // defaults to a single database called "PortalDb" // MultiDB supports DS for "uPortal" and another DS for "uPortal_Channels" ! String multiDB = staticData.getParameter("multiDB"); if(multiDB != null && multiDB.equals("true")) RAPDBConfig.getInstance().setMultiDS(true); --- 146,156 ---- * @param ChannelStaticData sd static channel data */ ! public void setStaticData(ChannelStaticData sd, String uid) { ! ForumSessionData session = getSessionData(uid); ! session.staticData = sd; // Configuration for multiple DBs // defaults to a single database called "PortalDb" // MultiDB supports DS for "uPortal" and another DS for "uPortal_Channels" ! String multiDB = session.staticData.getParameter("multiDB"); if(multiDB != null && multiDB.equals("true")) RAPDBConfig.getInstance().setMultiDS(true); *************** *** 105,113 **** // ORACLE - // MYSQL - ! String databaseProduct = staticData.getParameter("dbProduct"); if(databaseProduct != null) { RAPDBConfig.getInstance().setDatabaseProduct(databaseProduct.toUpperCase()); } else { RAPDBConfig.getInstance().setDatabaseProduct("MSSQL"); } } --- 160,179 ---- // ORACLE - // MYSQL - ! String databaseProduct = session.staticData.getParameter("dbProduct"); if(databaseProduct != null) { RAPDBConfig.getInstance().setDatabaseProduct(databaseProduct.toUpperCase()); } else { RAPDBConfig.getInstance().setDatabaseProduct("MSSQL"); + } + + try { + IEntityGroup admin = GroupService.getDistinguishedGroup(GroupService.PORTAL_ADMINISTRATORS); + IGroupMember me = AuthorizationService.instance().getGroupMember(sd.getAuthorizationPrincipal()); + session.member = me; + if(admin.deepContains(me)) { + session.isAdminUser = true; + } + } catch (Exception e) { + LogService.instance().log(LogService.ERROR, e); } } *************** *** 117,145 **** * @param ChannelRuntimeData rd handle to channel runtime data */ ! public void setRuntimeData(ChannelRuntimeData rd) { ! this.runtimeData = rd; - if (runtimeData.getParameter("mode") != null) { - String modeStr = (String)runtimeData.getParameter("mode"); if (modeStr.equals("forum")) { ! this.mode = FORUM_MODE; } else if (modeStr.equals("about")) { ! this.mode = ABOUT_MODE; } else if (modeStr.equals("search")) { ! this.mode = SEARCH_MODE; ! } else if (modeStr.equals("thread")) { ! this.mode = THREAD_MODE; } else if (modeStr.equals("post")) { ! this.mode = POST_MODE; } else if (modeStr.equals("admin")) { ! this.mode = ADMIN_MODE; } else if (modeStr.equals("back")) { ! this.mode = mode; ! } else { ! this.mode = MAIN_MODE; ! } ! } else { ! this.mode = MAIN_MODE; ! } } --- 183,343 ---- * @param ChannelRuntimeData rd handle to channel runtime data */ ! public void setRuntimeData(ChannelRuntimeData rd, String uid) { ! ForumSessionData session = getSessionData(uid); ! session.runtimeData = rd; ! ! Timestamp now = new Timestamp(Calendar.getInstance().getTime().getTime()); ! ! /** Previous RuntimeData **/ ! //if (session.runtimeData.getParameter("mode") != null) { ! String modeStr = ""; ! if (session.runtimeData.getParameter("mode") != null) ! modeStr = (String)session.runtimeData.getParameter("mode"); ! else if(session.runtimeData.getParameter("view") != null) ! modeStr = session.runtimeData.getParameter("view"); ! ! // This is a hack -- fix ! session.view = modeStr; ! //rd.setParameter("view", modeStr); ! ! //System.out.println("modeStr "+modeStr); ! if(session.runtimeData.getParameter("grpCommand") != null ! && session.runtimeData.getParameter("grpCommand").equals("Cancel")) { ! modeStr = "admin"; ! session.runtimeData.setParameter("type", "prePerm"); ! } ! ! if(modeStr.equals("AssignPermissions") ! && session.servantChannel == null) { ! session.myvalidity = now; ! try { ! String[] targets = new String[1]; ! targets[0] = rd.getParameter("forumid"); ! session.servantChannel = CPermissionsManagerServantFactory.getPermissionsServant(this, session.staticData, null, null, targets); ! } catch (Exception e) { ! LogService.instance().log(LogService.ERROR, "RapForums.setRuntimeData(): Problem instantiating servant"+e); ! } ! } ! ! if(modeStr.equals("AssignGroup") ! && session.servantChannel == null) { ! session.myvalidity = now; ! if(hasValue(rd.getParameter("subscriberGroup"))) { ! try { ! session.servantChannel = CGroupsManagerServantFactory.getGroupsServantforAddRemove(session.staticData, rd.getParameter("subscriberGroup")); ! } catch (Exception e) { ! LogService.instance().log(LogService.ERROR, "RapForums.setRuntimeData(): Problem instantiating servant"+e); ! } ! } ! ! } ! ! if(session.servantChannel != null) { ! ! if(rd.isRenderingAsRoot()) { ! try { ! ((IChannel)session.servantChannel).setRuntimeData(rd); ! ! if((session.servantChannel).isFinished()) { ! session.servantChannel = null; ! // setup to go back to the original permissions screen ! modeStr = "admin"; ! session.runtimeData.setParameter("mode", "admin"); ! session.runtimeData.setParameter("type", "prePerm"); ! } ! } catch (Exception e) { ! LogService.instance().log(LogService.ERROR,"RapForums.setRuntimeData(): Problem setting runtime data"+e); ! } ! } else { ! //System.out.println("setting servant to null"); ! session.servantChannel = null; ! rd.setParameter("mode", "forum"); ! } ! session.myvalidity = now; ! } ! ! /*if(!hasValue(rd.getParameter("command"))) { ! rd.remove("command"); ! } else { ! session.myvalidity = now; ! }*/ ! ! if (!hasValue(rd.getParameter("view"))) { ! if (hasValue(session.staticData.get("view"))) { ! ! if (hasValue(session.staticData.get("view"), "AssignGroups") || ! hasValue(session.staticData.get("view"), "AssignPermissions")) { ! rd.setParameter("view", (String)session.fromViews.get(session.staticData.getParameter("view"))); ! } else { ! // get the view from the servant, either the groups manager or the permissions manager ! if(rd.isRenderingAsRoot()){ ! rd.setParameter("view", session.staticData.getParameter("view")); ! } else { ! rd.setParameter("view", "forum"); // this can probably be removed... ! if (!rd.getParameter("view").equals(session.staticData.get("view"))) { ! session.myvalidity = now; ! } ! } ! } ! ! } else { ! rd.setParameter("view", "forum"); ! } ! } else if (!rd.getParameter("view").equals(session.staticData.get("view"))) { ! session.myvalidity = now; ! } ! ! // this is really the forum id, but let's get it working first ! /*if(!hasValue(rd.getParameter("topicID"))) { ! if(hasValue(rd.getParameter("topicID")) && !hasValue(rd.get("view"))) { ! rd.setParameter("topicID", session.staticData.getParameter("topicID")); ! } else { ! rd.remove("topicID"); ! session.staticData.remove("topicID"); ! } ! }*/ ! ! if (hasValue(rd.getParameter("fromView"))) { ! session.fromViews.put(rd.getParameter("view"), rd.getParameter("fromView")); ! //staticData.setParameter("fromView", runtimeData.getParameter("fromView")); ! } ! if (hasValue(rd.getParameter("view"))) { ! session.staticData.setParameter("view", rd.getParameter("view")); ! } ! if (hasValue(rd.getParameter("topicID"))) { ! session.staticData.setParameter("topicID", rd.getParameter("topicID")); ! } ! ! if(session.servantChannel == null) { ! if(session.myvalidity == null || (session.lastRenderedDoc).after(session.myvalidity)) { ! session.myvalidity = session.lastRenderedDoc; ! } ! } if (modeStr.equals("forum")) { ! session.mode = FORUM_MODE; } else if (modeStr.equals("about")) { ! session.mode = ABOUT_MODE; } else if (modeStr.equals("search")) { ! session.mode = SEARCH_MODE; ! } else if (modeStr.equals("thread")) { ! session.mode = THREAD_MODE; } else if (modeStr.equals("post")) { ! session.mode = POST_MODE; } else if (modeStr.equals("admin")) { ! session.mode = ADMIN_MODE; ! } else if (modeStr.equals("AssignPermissions")) { ! session.mode = PERMISSIONS_MODE; ! } else if (modeStr.equals("AssignGroups")) { ! session.mode = GROUPS_MODE; } else if (modeStr.equals("back")) { ! //session.mode = modeStr; ! } else { ! session.mode = MAIN_MODE; ! } ! //System.out.println("mode "+session.mode); ! //} else { ! // session.mode = MAIN_MODE; ! //} } *************** *** 148,207 **** * @param out a sax document handler */ ! public void renderXML(ContentHandler out) throws PortalException { ! switch (mode) { ! case MAIN_MODE: { ! MainModeCommand command = new MainModeCommand(); ! command.execute(this, out); ! break; ! } ! case FORUM_MODE: { ! ForumModeCommand command = new ForumModeCommand(); ! command.execute(this, out); ! break; ! } ! case THREAD_MODE: { ! ThreadModeCommand command = new ThreadModeCommand(); ! command.execute(this, out); ! break; ! } ! case POST_MODE: { ! PostModeCommand command = new PostModeCommand(); ! command.execute(this, out); ! break; ! } ! case SEARCH_MODE: { ! SearchModeCommand command = new SearchModeCommand(); ! command.execute(this, out); ! break; ! } ! case ADMIN_MODE: { ! AdminModeCommand command = new AdminModeCommand(); ! command.execute(this, out); ! break; ! } ! case ABOUT_MODE: ! AboutModeCommand aboutCommand = new AboutModeCommand(); ! aboutCommand.execute(this, out); ! break; ! default://TODO ERROR ! throw new PortalException("Default case hit in renderXML()"); ! } ! } ! /** ! * Returns the ChannelRuntimeData ! * @return ChannelRuntimeData ! */ ! public ChannelRuntimeData getRuntimeData() { ! return runtimeData; ! } ! /** ! * Returns the ChannelStaticData ! * @return ChannelStaticData ! */ ! public ChannelStaticData getStaticData() { ! return staticData; } --- 346,454 ---- * @param out a sax document handler */ ! public void renderXML(ContentHandler out, String uid) throws PortalException { ! long time1 = Calendar.getInstance().getTime().getTime(); ! try { ! ForumSessionData session = getSessionData(uid); ! //if using permissions manager or groups manager ! //display their view, instead of the forums ! if(session.servantChannel != null) { ! ((IChannel)session.servantChannel).renderXML(out); ! LogService.instance().log(LogService.DEBUG, "RapForums.renderXML(): defering to servant render"); ! } else { ! switch (session.mode) { ! case MAIN_MODE: { ! MainModeCommand command = new MainModeCommand(); ! command.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } ! case FORUM_MODE: { ! IAuthorizationPrincipal ap = session.staticData.getAuthorizationPrincipal(); ! IPermission[] perms = ap.getAllPermissions(getOwnerToken(), "Subscribe", (session.runtimeData).getParameter("forum") ); ! for(int i = 0; i < perms.length; i++) { ! if(perms[i].getType().equals("GRANT")) { ! ForumModeCommand command = new ForumModeCommand(); ! command.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } else { ! // Unauthorized access to post ! UnAuthorizedModeCommand command = new UnAuthorizedModeCommand(); ! session.unauthorizedMsg = "Sorry, you do not have appropriate permission to view messages in this forum.<br/><br/>"+ ! "Please contact your forum administrator for appropriate access.<br/><br/>Thank you!"; ! command.execute(this, session, out); ! break; ! } ! } ! } ! case THREAD_MODE: { ! IAuthorizationPrincipal ap = session.staticData.getAuthorizationPrincipal(); ! IPermission[] perms = ap.getAllPermissions(getOwnerToken(), "Post", (session.runtimeData).getParameter("forum") ); ! ! for(int i = 0; i < perms.length; i++) { ! if(perms[i].getType().equals("GRANT")) { ! ThreadModeCommand command = new ThreadModeCommand(); ! command.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } else { ! // Unauthorized access to post ! UnAuthorizedModeCommand command = new UnAuthorizedModeCommand(); ! session.unauthorizedMsg = "Sorry, you do not have appropriate permission to post messages to this forum.<br/><br/>"+ ! "Please contact your forum administrator for appropriate access.<br/><br/>Thank you!"; ! command.execute(this, session, out); ! break; ! } ! } ! } ! case POST_MODE: { ! //check authorization for user before displaying a particular view ! IAuthorizationPrincipal ap = session.staticData.getAuthorizationPrincipal(); ! IPermission[] perms = ap.getAllPermissions(getOwnerToken(), "Post", (session.runtimeData).getParameter("forum") ); ! ! for(int i = 0; i < perms.length; i++) { ! if(perms[i].getType().equals("GRANT")) { ! PostModeCommand command = new PostModeCommand(); ! command.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } else { ! // Unauthorized access to post ! UnAuthorizedModeCommand command = new UnAuthorizedModeCommand(); ! session.unauthorizedMsg = "Sorry, you do not have appropriate permission to post messages to this forum.<br/><br/>"+ ! "Please contact your forum administrator for appropriate access.<br/><br/>Thank you!"; ! command.execute(this, session, out); ! break; ! } ! } ! break; ! } ! case SEARCH_MODE: { ! SearchModeCommand command = new SearchModeCommand(); ! command.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } ! case ADMIN_MODE: { ! AdminModeCommand command = new AdminModeCommand(); ! command.execute(this, session, out); ! break; ! } ! case ABOUT_MODE: { ! AboutModeCommand aboutCommand = new AboutModeCommand(); ! aboutCommand.execute(this, session, out); ! session.lastRenderedDoc = new Timestamp(Calendar.getInstance().getTime().getTime()); ! break; ! } ! default: ! throw new PortalException("RapForums view error: default case hit in renderXML()"); ! } ! } ! } catch (Exception e) { ! LogService.instance().log(LogService.ERROR, e); ! } } *************** *** 337,340 **** --- 584,634 ---- } + // IPermissible Interface + /** + * + */ + public String getOwnerName() { + return "Rap Forums Channel (Fullerton College)"; + } + + public String[] getActivityTokens() { + return (String[])tasks.keySet().toArray(new String[0]); + } + + public String getOwnerToken() { + return "edu.fullcoll.uportal.channels.rap.forum.CForum"; + } + + public String getActivityName(String token) { + return (String) tasks.get(token); + } + + public String[] getTargetTokens() { + try { + RAPDB db = new RAPDB(); + Collection forumids = db.getForumIDs(); + Object[] objIDs = forumids.toArray(); + String[] strIDs = new String[objIDs.length]; + for(int i = 0; i < strIDs.length; i++) + strIDs[i] = objIDs[i].toString(); + return strIDs; + } catch(RAPDBException e) { + LogService.instance().log(LogService.ERROR, e); + e.printStackTrace(); + } + return new String[0]; + } + + public String getTargetName(String token) { + try { + RAPDB db = new RAPDB(); + return db.getForumName(Integer.parseInt(token)); + } catch(RAPDBException e) { + LogService.instance().log(LogService.ERROR, e); + e.printStackTrace(); + } + return ""; + } + private static final int MAIN_MODE = 42; private static final int FORUM_MODE = 43; *************** *** 343,351 **** private static final int POST_MODE = 46; private static final int ADMIN_MODE = 47; ! private static final int ABOUT_MODE = 31337; ! private int mode; // determines whether we return in normal or about mode ! private ChannelStaticData staticData; ! private ChannelRuntimeData runtimeData; private IEntityGroup adminGroup; //the uportal admin group, able to add rap forum admins --- 637,648 ---- private static final int POST_MODE = 46; private static final int ADMIN_MODE = 47; ! private static final int PERMISSIONS_MODE = 48; ! private static final int GROUPS_MODE = 49; ! private static final int ABOUT_MODE = 31337; ! // TODO: REMOVE IN ForumSessionData ! //private int mode; // determines whether we return in normal or about mode ! //private ChannelStaticData staticData; ! //private ChannelRuntimeData runtimeData; private IEntityGroup adminGroup; //the uportal admin group, able to add rap forum admins *************** *** 353,356 **** --- 650,657 ---- private IEntityGroup forumManagerGroup; //the rap forum group a step down from admins + // permissions + private static HashMap tasks = null; + protected static HashMap sessions = new HashMap(); + } |