diff --git a/ccm-bookmarks/src/com/arsdigita/bookmarks/Initializer.java b/ccm-bookmarks/src/com/arsdigita/bookmarks/Initializer.java
index 579596328..8af677db5 100755
--- a/ccm-bookmarks/src/com/arsdigita/bookmarks/Initializer.java
+++ b/ccm-bookmarks/src/com/arsdigita/bookmarks/Initializer.java
@@ -26,7 +26,6 @@ import com.arsdigita.persistence.SessionManager;
import com.arsdigita.web.*;
import com.arsdigita.kernel.*;
// unused import com.arsdigita.sitenode.*;
-import com.arsdigita.bookmarks.*;
import com.arsdigita.bookmarks.ui.*;
// unused import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObject;
diff --git a/ccm-core/src/com/arsdigita/ui/admin/AdminServlet.java b/ccm-core/src/com/arsdigita/ui/admin/AdminServlet.java
index 31c2bc30a..77ca3e9b3 100644
--- a/ccm-core/src/com/arsdigita/ui/admin/AdminServlet.java
+++ b/ccm-core/src/com/arsdigita/ui/admin/AdminServlet.java
@@ -48,10 +48,6 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
-// We need NonEscapedTableCellRenderer
-// Currently part of (thisPackage) Dispatcher.java
-// When the class will we deleted we must copy first!
-
/**
* Web Developer Support Application Servlet class, central entry point to
* create and process the applications UI.
diff --git a/ccm-core/src/com/arsdigita/util/Assert.java b/ccm-core/src/com/arsdigita/util/Assert.java
index e2392fefc..f93a8c05d 100755
--- a/ccm-core/src/com/arsdigita/util/Assert.java
+++ b/ccm-core/src/com/arsdigita/util/Assert.java
@@ -226,8 +226,8 @@ public class Assert {
* object
* @throws AssertionError if the object is null
*/
- public static final void exists(final Object object,
- final Class clacc) {
+ public static void exists(final Object object,
+ final Class clacc) {
if (object == null) {
final String message = clacc.getName() + " is null";
@@ -245,8 +245,8 @@ public class Assert {
*
* @throws AssertionError if the object is null
*/
- public static final void exists(final Object object,
- final String label) {
+ public static void exists(final Object object,
+ final String label) {
if (object == null) {
final String message =
label != null && label.trim().length() > 0
diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/Loader.java b/ccm-portalserver/src/com/arsdigita/portalserver/Loader.java
index c361d163e..4c8d8b284 100644
--- a/ccm-portalserver/src/com/arsdigita/portalserver/Loader.java
+++ b/ccm-portalserver/src/com/arsdigita/portalserver/Loader.java
@@ -20,7 +20,6 @@
package com.arsdigita.portalserver;
-// import com.arsdigita.db.*;
import com.arsdigita.domain.*;
import com.arsdigita.kernel.ACSObjectInstantiator;
import com.arsdigita.kernel.Kernel;
@@ -138,7 +137,8 @@ public class Loader extends PackageLoader {
private void loadPortalSiteApplicationType() {
/* First try: create a new style, legacy compatible application */
-/* ApplicationType type = ApplicationType.createApplicationType(
+/*
+ ApplicationType type = ApplicationType.createApplicationType(
"portalsite",
"Portal Site",
PortalSite.BASE_DATA_OBJECT_TYPE);
@@ -146,8 +146,9 @@ public class Loader extends PackageLoader {
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.ui.PortalDispatcher");
-*/
+*/
+
// Try: new style legacy free application
ApplicationType type = new
ApplicationType("Portal Site", // title
@@ -229,16 +230,23 @@ public class Loader extends PackageLoader {
// in applications mit primary_url=/portal-admin/
// in acs_object mit default_domain_class=c.ad.ps.admin.PSAdmin und
// object_type=c.ad.admin.CWAdmin, ebenfalls wg. BASE_DATA_OBJ_TYPE
-
+/*
ApplicationType type = ApplicationType.createApplicationType(
"portal-admin",
"Portal Server Site Administration",
PSAdmin.BASE_DATA_OBJECT_TYPE);
- type.setDescription ("Displays common administration tasks.");
// Current code requires an apps specific dispatcher class. Has to be
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.admin.ui.Dispatcher");
+*/
+ // Try: new style legacy free application
+ ApplicationType type = new
+ ApplicationType("Portal Admin", // title
+ PSAdmin.BASE_DATA_OBJECT_TYPE );
+
+ type.setDescription ("Displays common administration tasks.");
+ type.save();
}
@@ -251,6 +259,7 @@ public class Loader extends PackageLoader {
private void loadPortalCreatorApplicationType() {
// formerly private ApplicationType setupPortalCreator() { in ui.admin.Initializer
+/*
ApplicationType type = ApplicationType.createApplicationType(
"portal-create",
"Portal Creator",
@@ -260,6 +269,16 @@ public class Loader extends PackageLoader {
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.ui.admin.PortalCreateDispatcher");
+*/
+
+ // Try: new style legacy free application
+ ApplicationType type = new
+ ApplicationType("Portal Creator", // title
+ PortalCreator.BASE_DATA_OBJECT_TYPE );
+
+ type.setDescription ("Creates portals.");
+ type.save();
+
}
@@ -270,16 +289,17 @@ public class Loader extends PackageLoader {
private void loadPortalSitemapApplicationType() {
// formerly private ApplicationType setupPortalSitemapper() {
+/*
ApplicationType type = ApplicationType.createApplicationType(
"portal-sitemap",
"Portal Site Map",
PortalSiteMap.BASE_DATA_OBJECT_TYPE);
- type.setDescription ("Displays and manages Portals.");
// Current code requires an apps specific dispatcher class. Has to be
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.ui.admin.PortalSiteMapDispatcher");
+*/
/* ApplicationSetup setup = new ApplicationSetup(s_log);
setup.setApplicationObjectType(PortalSiteMap.BASE_DATA_OBJECT_TYPE);
setup.setTitle("Portal Site Map");
@@ -298,7 +318,16 @@ public class Loader extends PackageLoader {
setup.run(); */
// return setup.run();
- }
+
+ // Try: new style legacy free application
+ ApplicationType type = new
+ ApplicationType("Portal SiteMap", // title
+ PortalSiteMap.BASE_DATA_OBJECT_TYPE );
+
+ type.setDescription ("Displays and manages Portals.");
+ type.save();
+
+ }
/* FORMERLY personal.Initializer */
@@ -311,7 +340,7 @@ public class Loader extends PackageLoader {
private void loadPersonalPortalCreatorApplicationType() {
// private ApplicationType loadPersonalPortalCreatorApplicationType() {
// formerly private ApplicationType setupPersonalPortalCreatorApplication() {
-
+/*
ApplicationType type = ApplicationType.createApplicationType(
"personal-portal-creator",
"Personal Portal Creator",
@@ -321,67 +350,41 @@ public class Loader extends PackageLoader {
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.personal.PersonalPortalCreatorDispatcher");
+*/
- // return type;
+ // Try: new style legacy free application
+ ApplicationType type = new
+ ApplicationType("Personal Portal Creator", // title
+ PersonalPortalCreator.BASE_DATA_OBJECT_TYPE );
-/* ApplicationSetup setup = new ApplicationSetup(s_log);
+ type.setDescription ("Displays and manages Portals.");
+ type.save();
- setup.setApplicationObjectType
- (PersonalPortalCreator.BASE_DATA_OBJECT_TYPE);
- setup.setKey("personal-portal-creator");
- setup.setTitle("Personal Portal Creator");
- setup.setDescription("Responsible for creating personal portals.");
- // db based stylesheets nolonger used
- // setup.setStylesheet("/packages/portalserver/xsl/portalserver.xsl");
- setup.setDispatcherClass
- ("com.arsdigita.portalserver.personal.PersonalPortalCreatorDispatcher");
- setup.setPortalApplication(false);
- setup.setInstantiator(new ACSObjectInstantiator() {
- @Override
- protected DomainObject doNewInstance(DataObject dataObject) {
- return new PersonalPortalCreator(dataObject);
- }
- });
-
- return setup.run(); */
- }
+ }
private void loadPersonalPortalApplicationType() {
// private ApplicationType loadPersonalPortalApplicationType() {
// formerly private ApplicationType setupPersonalPortalApplication() {
-
+/*
ApplicationType type = ApplicationType.createApplicationType(
"personal-portal",
"Personal Portal",
PersonalPortal.BASE_DATA_OBJECT_TYPE);
- type.setDescription ("A portal for an individual.");
// Current code requires an apps specific dispatcher class. Has to be
// modified to be able to create a legacy free app type.
type.setDispatcherClass
("com.arsdigita.portalserver.personal.PersonalPortalDispatcher");
+*/
+ // Try: new style legacy free application
+ ApplicationType type = new
+ ApplicationType("Personal Portal", // title
+ PersonalPortal.BASE_DATA_OBJECT_TYPE );
+ type.setDescription ("A portal for an individual.");
+ type.save();
-/* ApplicationSetup setup = new ApplicationSetup(s_log);
-
- setup.setApplicationObjectType(PersonalPortal.BASE_DATA_OBJECT_TYPE);
- setup.setKey("personal-portal");
- setup.setTitle("Personal Portal");
- setup.setDescription("A portal for an individual.");
- // setup.setStylesheet("/packages/portalserver/xsl/portalserver.xsl");
- setup.setDispatcherClass
- ("com.arsdigita.portalserver.personal.PersonalPortalDispatcher");
- setup.setPortalApplication(false);
- setup.setInstantiator(new ACSObjectInstantiator() {
- @Override
- protected DomainObject doNewInstance(DataObject dataObject) {
- return new PersonalPortal(dataObject);
- }
- });
-
- ApplicationType type = setup.run();
-
- // XXX This must go after setup.run(). Need more elegant approach.
+/* // XXX This must go after setup.run(). Need more elegant approach.
// pboy: uses ResourceType.registerResourceTypeConfig() which registers
// in a hash map. Therefore: not suitable for a loader, may have to be
// moved into initializer!
diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/PortalSite.java b/ccm-portalserver/src/com/arsdigita/portalserver/PortalSite.java
index dd24a193b..6aae5b7b1 100644
--- a/ccm-portalserver/src/com/arsdigita/portalserver/PortalSite.java
+++ b/ccm-portalserver/src/com/arsdigita/portalserver/PortalSite.java
@@ -472,16 +472,15 @@ public class PortalSite extends Application {
* @return
*/
public static PortalSiteCollection getRootPortalSites() {
+
DataQuery query = SessionManager.getSession().retrieveQuery
("com.arsdigita.workspace.rootWorkspaces");
DataCollection collection =
new DataQueryDataCollectionAdapter(query, "workspace");
-
query.close();
PortalSiteCollection psc = new PortalSiteCollection(collection);
-
psc.filterForUnarchived();
return psc;
diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/PortalServlet.java b/ccm-portalserver/src/com/arsdigita/portalserver/PortalSiteServlet.java
similarity index 62%
rename from ccm-portalserver/src/com/arsdigita/portalserver/PortalServlet.java
rename to ccm-portalserver/src/com/arsdigita/portalserver/PortalSiteServlet.java
index 637775f82..d57462dd8 100644
--- a/ccm-portalserver/src/com/arsdigita/portalserver/PortalServlet.java
+++ b/ccm-portalserver/src/com/arsdigita/portalserver/PortalSiteServlet.java
@@ -19,13 +19,12 @@
package com.arsdigita.portalserver;
import com.arsdigita.bebop.Page;
-import com.arsdigita.persistence.TransactionContext;
-import com.arsdigita.persistence.SessionManager;
import com.arsdigita.portalserver.ui.PortalHomePage;
import com.arsdigita.portalserver.ui.PortalParticipants;
import com.arsdigita.portalserver.ui.admin.PortalAdminPage;
import com.arsdigita.templating.PresentationManager;
import com.arsdigita.templating.Templating;
+import com.arsdigita.util.Assert;
import com.arsdigita.web.Application;
import com.arsdigita.web.BaseApplicationServlet;
import com.arsdigita.xml.Document;
@@ -39,46 +38,33 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
-// ////////////////////////////////////////////////////////////////////////////
-//
-// UNKNOWN whether this is unfinished work in progress or really used in some
-// way.
-//
-// Might be a first shot to replace ui.PortalDispatcher by a new legacy free
-// servlet because it uses the same pages (PortalHomePage, PortalParticipants
-// but additionally a PortalAdminPage (from package c.ad.ps.ui.admin)
-// On the other hand this is the same as m_portalsiteAdminDispatcher of
-// PortalDispatcher
-//
-// ////////////////////////////////////////////////////////////////////////////
-
-
/**
- *
+ * Portal Site Application Servlet class, central entry point to create and
+ * process the applications UI.
+ *
* @author Justin Ross <jross@redhat.com>
- * @version $Id: PortalServlet.java pboy $
+ * @author Peter Boy
+ * @version $Id: PortalSiteServlet.java pboy $
*/
-public class PortalServlet extends BaseApplicationServlet {
+public class PortalSiteServlet extends BaseApplicationServlet {
- private static final Logger s_log = Logger.getLogger
- (PortalServlet.class);
+ private static final Logger s_log = Logger.getLogger(PortalSiteServlet.class);
private static final PresentationManager s_presManager =
- Templating.getPresentationManager();
+ Templating.getPresentationManager();
private static Page s_homePage = new PortalHomePage();
private static Page s_particPage = PortalParticipants.createPage();
- private static Page s_adminPage = null;
-
- static {
- // TransactionContext ctx = SessionManager.getSession().getTransactionContext();
- // ctx.beginTxn();
-
- s_adminPage = new PortalAdminPage();
-
- // ctx.commitTxn();
- }
+ private static Page s_adminPage = s_adminPage = new PortalAdminPage();
+ /**
+ *
+ * @param sreq
+ * @param sresp
+ * @param app
+ * @throws ServletException
+ * @throws IOException
+ */
public void doService(HttpServletRequest sreq,
HttpServletResponse sresp,
Application app)
@@ -86,12 +72,21 @@ public class PortalServlet extends BaseApplicationServlet {
s_log.debug("PortalServlet.doService called for request '" +
sreq.getRequestURI() + "'");
- String path = sreq.getServletPath();
+ String pathInfo = sreq.getPathInfo();
+ Assert.exists(pathInfo, "String pathInfo");
+ if (pathInfo.length() > 1 && pathInfo.endsWith("/")) {
+ /* NOTE: ServletAPI specifies, pathInfo may be empty or will
+ * start with a '/' character. It currently carries a
+ * trailing '/' if a "virtual" page, i.e. not a real jsp, but
+ * result of a servlet mapping. But Application requires url
+ * NOT to end with a trailing '/' for legacy free applications. */
+ pathInfo = pathInfo.substring(0, pathInfo.length()-1);
+ }
Document doc = null;
- if (path.endsWith("participants")) {
+ if (pathInfo.endsWith("participants")) {
doc = s_particPage.buildDocument(sreq, sresp);
- } else if (path.endsWith("admin")) {
+ } else if (pathInfo.endsWith("admin")) {
doc = s_adminPage.buildDocument(sreq, sresp);
} else {
doc = s_homePage.buildDocument(sreq, sresp);
diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/admin/ui/Dispatcher.java b/ccm-portalserver/src/com/arsdigita/portalserver/admin/Dispatcher.java
similarity index 91%
rename from ccm-portalserver/src/com/arsdigita/portalserver/admin/ui/Dispatcher.java
rename to ccm-portalserver/src/com/arsdigita/portalserver/admin/Dispatcher.java
index dad70fd01..ec3e449fe 100644
--- a/ccm-portalserver/src/com/arsdigita/portalserver/admin/ui/Dispatcher.java
+++ b/ccm-portalserver/src/com/arsdigita/portalserver/admin/Dispatcher.java
@@ -16,9 +16,10 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
-package com.arsdigita.portalserver.admin.ui;
+package com.arsdigita.portalserver.admin;
// import com.arsdigita.bebop.*;
+import com.arsdigita.portalserver.admin.PSAdminPage;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.page.BebopMapDispatcher;
import java.util.*;
@@ -36,7 +37,7 @@ public class Dispatcher extends BebopMapDispatcher {
public Dispatcher() {
Map m = new HashMap();
- Page index = new AdminPage();
+ Page index = new PSAdminPage();
index.lock();
m.put("", index);
m.put("index.jsp", index);
diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/admin/PSAdmin.java b/ccm-portalserver/src/com/arsdigita/portalserver/admin/PSAdmin.java
index 3c6473de2..5c4e63b9d 100644
--- a/ccm-portalserver/src/com/arsdigita/portalserver/admin/PSAdmin.java
+++ b/ccm-portalserver/src/com/arsdigita/portalserver/admin/PSAdmin.java
@@ -21,6 +21,7 @@ package com.arsdigita.portalserver.admin;
// import com.arsdigita.portalserver.*;
import com.arsdigita.web.Application;
import com.arsdigita.persistence.*;
+import com.arsdigita.web.URL;
import org.apache.log4j.Logger;
/**
@@ -36,6 +37,7 @@ import org.apache.log4j.Logger;
*/
public class PSAdmin extends Application {
+ /** Logger instance for debugging */
private static final Logger s_log = Logger.getLogger(PSAdmin.class);
public static final String BASE_DATA_OBJECT_TYPE =
@@ -49,4 +51,44 @@ public class PSAdmin extends Application {
public PSAdmin(DataObject dataObject) {
super(dataObject);
}
+
+ /**
+ * Returns the path name of the location of the applications servlet/JSP.
+ *
+ * Application implementations may overwrite this method to provide an
+ * application specific location, especially if an application (module) is
+ * to be installed along with others in one context.
+ *
+ * If you install the module into its own context you may use a standard
+ * location. In most cases though all modules (applications) of an
+ * webapplication should be installed into one context.
+ *
+ * Frequently it is a symbolic name/path, which will be mapped in the web.xml
+ * to the real location in the file system. Example:
+ *
Experimental
@@ -37,6 +38,11 @@ public class PersonalPortal extends PortalSite { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.workspace.personal.PersonalWorkspace"; + /** + * + * @return + */ + @Override protected String getBaseDataObjectType() { return BASE_DATA_OBJECT_TYPE; } @@ -46,21 +52,33 @@ public class PersonalPortal extends PortalSite { super(dataObject); } + /** + * + * @param user + * @param parent + * @return + */ public static PersonalPortal createPersonalPortal (User user, Application parent) { - // Assert.assertNotNull(user, "user"); + Assert.exists(user, "user"); PersonalPortal portal = (PersonalPortal) - Application.createApplication - (BASE_DATA_OBJECT_TYPE, user.getID().toString(), - "Personal Portal", parent); - + Application.createApplication + (BASE_DATA_OBJECT_TYPE, + user.getID().toString(), + "Personal Portal", + parent); portal.setOwningUser(user); return portal; } + /** + * + * @param user + * @return + */ public static PersonalPortal createPersonalPortal(User user) { Application parent = Application.retrieveApplicationForPath ("/personal-portal/"); @@ -71,7 +89,11 @@ public class PersonalPortal extends PortalSite { return PersonalPortal.createPersonalPortal(user, parent); } - // Can return null. + /** + * + * @param user + * @return (Can return null.) + */ public static PersonalPortal retrievePersonalPortal(User user) { DataCollection portals = SessionManager.getSession().retrieve (BASE_DATA_OBJECT_TYPE); @@ -90,19 +112,66 @@ public class PersonalPortal extends PortalSite { return portal; } + /** + * + * @param user + */ private void setOwningUser(User user) { - // Assert.assertNotNull(user, "user"); + Assert.exists(user, "user"); - setAssociation("user", user); + } + /** + * + * @return + */ public User getOwningUser() { + DataObject dataObject = (DataObject) get("user"); - - // Assert.assertNotNull(dataObject, "dataObject"); Assert.exists(dataObject, "dataObject"); - return User.retrieve(dataObject); + } + + /** + * Returns the path name of the location of the applications servlet/JSP. + * + * Application implementations may overwrite this method to provide an + * application specific location, especially if an application (module) is + * to be installed along with others in one context. + * + * If you install the module into its own context you may use a standard + * location. In most cases though all modules (applications) of an + * webapplication should be installed into one context. + * + * Frequently it is a symbolic name/path, which will be mapped in the web.xml + * to the real location in the file system. Example: + *Experimental
@@ -36,12 +37,62 @@ public class PersonalPortalCreator extends Application { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.workspace.personal.PersonalWorkspaceCreator"; - protected String getBaseDataObjectType() { - return BASE_DATA_OBJECT_TYPE; - } - + /** + * Constructor + * + * @param dataObject + */ // protected PersonalPortalCreator(DataObject dataObject) { public PersonalPortalCreator(DataObject dataObject) { super(dataObject); } + + /** + * + * @return + */ + @Override + protected String getBaseDataObjectType() { + return BASE_DATA_OBJECT_TYPE; + } + + /** + * Returns the path name of the location of the applications servlet/JSP. + * + * Application implementations may overwrite this method to provide an + * application specific location, especially if an application (module) is + * to be installed along with others in one context. + * + * If you install the module into its own context you may use a standard + * location. In most cases though all modules (applications) of an + * webapplication should be installed into one context. + * + * Frequently it is a symbolic name/path, which will be mapped in the web.xml + * to the real location in the file system. Example: + *Experimental
* * @author Justin Ross - * @version $Id: //portalserver/dev/src/com/arsdigita/portalserver/personal/PersonalPortalHomePage.java#8 $ + * @version $Id: PersonalPortalHomePage.java#8 $ */ public class PersonalPortalHomePage extends PortalHomePage { - public static final String versionId = - "$Id: //portalserver/dev/src/com/arsdigita/portalserver/personal/PersonalPortalHomePage.java#8 $" + - "$Author: dennis $" + - "$DateTime: 2004/08/17 23:19:25 $"; + + /** + * Constructor + */ + public PersonalPortalHomePage() { + super(); + } private final RequestLocal m_adminPermission = new RequestLocal() { + @Override protected Object initialValue(PageState state) { UniversalPermissionDescriptor descriptor = new UniversalPermissionDescriptor @@ -65,10 +69,7 @@ public class PersonalPortalHomePage extends PortalHomePage { } }; - public PersonalPortalHomePage() { - super(); - } - + @Override protected void buildHeader(Container header) { // Add a link to edit profile. Link profileLink = new Link( new Label(GlobalizationUtil.globalize("cw.workspace.personal.edit_your_profile")), "/register/edit-profile"); @@ -84,6 +85,7 @@ public class PersonalPortalHomePage extends PortalHomePage { // the Portal admin page. Link adminLink = new Link( new Label(GlobalizationUtil.globalize("cw.workspace.personal.site_administration")), "/portal-admin/") { + @Override public boolean isVisible(PageState state) { Boolean bool = (Boolean) m_adminPermission.get(state); return bool.booleanValue(); @@ -96,6 +98,7 @@ public class PersonalPortalHomePage extends PortalHomePage { super.buildHeader(header); } + @Override protected void buildTitle() { class TitlePrintListener implements PrintListener { public void prepare(PrintEvent e) { @@ -128,6 +131,7 @@ public class PersonalPortalHomePage extends PortalHomePage { setTitle(new Label(new TitlePrintListener())); } + @Override protected void buildContextBar() { DimensionalNavbar navbar = new DimensionalNavbar(); diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/personal/PersonalPortalServlet.java b/ccm-portalserver/src/com/arsdigita/portalserver/personal/PersonalPortalServlet.java new file mode 100644 index 000000000..41a76cecb --- /dev/null +++ b/ccm-portalserver/src/com/arsdigita/portalserver/personal/PersonalPortalServlet.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +package com.arsdigita.portalserver.personal; + +import com.arsdigita.bebop.DimensionalNavbar; +import com.arsdigita.bebop.Link; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Page; +import com.arsdigita.portalserver.ui.PortalParticipants; +import com.arsdigita.portalserver.ui.admin.PortalAdminPage; +import com.arsdigita.portalserver.util.GlobalizationUtil; +import com.arsdigita.templating.PresentationManager; +import com.arsdigita.templating.Templating; +import com.arsdigita.util.Assert; +import com.arsdigita.web.Application; +import com.arsdigita.web.BaseApplicationServlet; +import com.arsdigita.xml.Document; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; + + + +/** + * + * @author pb + * @version $Id: PersonalPortalServlet.java pboy $ + */ +public class PersonalPortalServlet extends BaseApplicationServlet { + + private static final Logger s_log = Logger.getLogger(PersonalPortalServlet.class); + + private static final PresentationManager s_presManager = + Templating.getPresentationManager(); + + private static Page s_homePage = new PersonalPortalHomePage(); + private static Page s_particPage = PortalParticipants.createPage(); + private static Page s_adminPage = s_adminPage = new PortalAdminPage() { + @Override + protected void buildContextBar() { + DimensionalNavbar navbar = new DimensionalNavbar(); + navbar.setClassAttr("portalNavbar"); + navbar.add(new Link(new PersonalPortalLinkPrinter())); + navbar.add(new Label(GlobalizationUtil + .globalize( + "cw.workspace.personal.configure_workspace"))); + getHeader().add(navbar); + } + }; + + /** + * + * @param sreq + * @param sresp + * @param app + * @throws ServletException + * @throws IOException + */ + public void doService(HttpServletRequest sreq, + HttpServletResponse sresp, + Application app) + throws ServletException, IOException { + s_log.debug("PortalServlet.doService called for request '" + + sreq.getRequestURI() + "'"); + + String pathInfo = sreq.getPathInfo(); + Assert.exists(pathInfo, "String pathInfo"); + if (pathInfo.length() > 1 && pathInfo.endsWith("/")) { + /* NOTE: ServletAPI specifies, pathInfo may be empty or will + * start with a '/' character. It currently carries a + * trailing '/' if a "virtual" page, i.e. not a real jsp, but + * result of a servlet mapping. But Application requires url + * NOT to end with a trailing '/' for legacy free applications. */ + pathInfo = pathInfo.substring(0, pathInfo.length()-1); + } + Document doc = null; + + if (pathInfo.endsWith("participants")) { + doc = s_particPage.buildDocument(sreq, sresp); + } else if (pathInfo.endsWith("admin")) { + doc = s_adminPage.buildDocument(sreq, sresp); + } else { + doc = s_homePage.buildDocument(sreq, sresp); + } + + s_presManager.servePage(doc, sreq, sresp); + } + +} diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalDispatcher.java b/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalDispatcher.java index aac31e84b..8b6436f2c 100644 --- a/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalDispatcher.java +++ b/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalDispatcher.java @@ -33,6 +33,7 @@ import java.io.IOException; import org.apache.log4j.Logger; /** + * Dispatcher for the PortalSite ApplicationType *Experimental
* * @author Justin Ross diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalHomePage.java b/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalHomePage.java index e7a6c08f8..80e212bea 100644 --- a/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalHomePage.java +++ b/ccm-portalserver/src/com/arsdigita/portalserver/ui/PortalHomePage.java @@ -21,7 +21,6 @@ package com.arsdigita.portalserver.ui; import com.arsdigita.portalserver.util.GlobalizationUtil; -import com.arsdigita.web.ApplicationCollection; import com.arsdigita.portalserver.PortalSite; import com.arsdigita.portalserver.LoggedInLinkWrapper; import com.arsdigita.portalserver.PortalPage; @@ -45,7 +44,6 @@ import com.arsdigita.bebop.event.RequestListener; import com.arsdigita.bebop.event.RequestEvent; import com.arsdigita.bebop.event.ChangeListener; import com.arsdigita.bebop.event.ChangeEvent; -import com.arsdigita.bebop.portal.Portal; import com.arsdigita.bebop.portal.PortalModel; import com.arsdigita.bebop.portal.PortalModelBuilder; import com.arsdigita.kernel.permissions.PrivilegeDescriptor; @@ -75,6 +73,7 @@ public class PortalHomePage extends PortalPage { List m_tabs; private RequestLocal m_hasAdmin = new RequestLocal() { + @Override public Object initialValue(PageState ps) { PortalSite psite = PortalSite.getCurrentPortalSite(ps.getRequest()); @@ -146,6 +145,7 @@ public class PortalHomePage extends PortalPage { header.add(adminLink); class SearchComponent extends SimpleContainer { + @Override public void generateXML(PageState state, Element parent) { /*XXXjbp - ************************************************* ****This needs to be modified to use core search*********** @@ -392,10 +392,10 @@ public class PortalHomePage extends PortalPage { private class CookieChangeListener implements ChangeListener { public void stateChanged(ChangeEvent e) { - PageState ps = e.getPageState(); - PortalSite psite = getPortalSite(ps); - // Assert.assertNotNull(psite, "workspace"); + PageState ps = e.getPageState(); + + PortalSite psite = getPortalSite(ps); Assert.exists(psite, "workspace"); HttpServletResponse response = ps.getResponse(); @@ -403,10 +403,8 @@ public class PortalHomePage extends PortalPage { String tabName = (String)m_tabs.getSelectedKey(ps); Cookie cookie = new Cookie(cookieNameString,tabName); cookie.setMaxAge(36000); - cookie.setComment( - "This cookie returns you to the tab you " + - "had open when you last visited this portal." - ); + cookie.setComment("This cookie returns you to the tab you " + + "had open when you last visited this portal."); response.addCookie(cookie); } } diff --git a/ccm-portalserver/src/com/arsdigita/portalserver/ui/admin/PortalCreator.java b/ccm-portalserver/src/com/arsdigita/portalserver/ui/admin/PortalCreator.java index dd4cc3512..61c1b8ef1 100644 --- a/ccm-portalserver/src/com/arsdigita/portalserver/ui/admin/PortalCreator.java +++ b/ccm-portalserver/src/com/arsdigita/portalserver/ui/admin/PortalCreator.java @@ -20,6 +20,8 @@ package com.arsdigita.portalserver.ui.admin; import com.arsdigita.web.Application; import com.arsdigita.persistence.*; +import com.arsdigita.web.URL; + import org.apache.log4j.Logger; /** @@ -27,24 +29,72 @@ import org.apache.log4j.Logger; * * @author rhs@mit.edu * @version $Revision: #5 $ $Date: 2004/08/17 $ + * @version $Id: PortalCreator.java#5 $ */ public class PortalCreator extends Application { - public static final String versionId = - "$Id: //portalserver/dev/src/com/arsdigita/portalserver/ui/admin/PortalCreator.java#5 $" + - "$Author: dennis $" + - "$DateTime: 2004/08/17 23:19:25 $"; - private static final Logger s_log = Logger.getLogger - (PortalCreator.class); + /** Logger instance for debugging */ + private static final Logger s_log = Logger.getLogger(PortalCreator.class); public static final String BASE_DATA_OBJECT_TYPE = - "com.arsdigita.workspace.ui.WorkspaceCreator"; + "com.arsdigita.workspace.ui.WorkspaceCreator"; + + /** + * Constructor + * + * @param dataObject + */ + public PortalCreator(DataObject dataObject) { + super(dataObject); + } + + /** + * + * @return + */ + @Override protected String getBaseDataObjectType() { return BASE_DATA_OBJECT_TYPE; } - public PortalCreator(DataObject dataObject) { - super(dataObject); + /** + * Returns the path name of the location of the applications servlet/JSP. + * + * Application implementations may overwrite this method to provide an + * application specific location, especially if an application (module) is + * to be installed along with others in one context. + * + * If you install the module into its own context you may use a standard + * location. In most cases though all modules (applications) of an + * webapplication should be installed into one context. + * + * Frequently it is a symbolic name/path, which will be mapped in the web.xml + * to the real location in the file system. Example: + *