Modul ccm-portalserver Portal /ccm/administration gefixt, einschl. Verwaltung von Applications, alle Module legacy free, PersonalPortalSite noch fehlerhaft bei einer Abfrage. Update Skript nicht erforderlich, da Modul bisher nicht verwendet.
git-svn-id: https://svn.libreccm.org/ccm/trunk@1528 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
e7e1e73e97
commit
150ce9cdad
|
|
@ -26,7 +26,6 @@ import com.arsdigita.persistence.SessionManager;
|
||||||
import com.arsdigita.web.*;
|
import com.arsdigita.web.*;
|
||||||
import com.arsdigita.kernel.*;
|
import com.arsdigita.kernel.*;
|
||||||
// unused import com.arsdigita.sitenode.*;
|
// unused import com.arsdigita.sitenode.*;
|
||||||
import com.arsdigita.bookmarks.*;
|
|
||||||
import com.arsdigita.bookmarks.ui.*;
|
import com.arsdigita.bookmarks.ui.*;
|
||||||
// unused import com.arsdigita.domain.DomainObjectFactory;
|
// unused import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.domain.DomainObject;
|
import com.arsdigita.domain.DomainObject;
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import org.apache.log4j.Logger;
|
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
|
* Web Developer Support Application Servlet class, central entry point to
|
||||||
* create and process the applications UI.
|
* create and process the applications UI.
|
||||||
|
|
|
||||||
|
|
@ -226,8 +226,8 @@ public class Assert {
|
||||||
* <code>object</code>
|
* <code>object</code>
|
||||||
* @throws AssertionError if the object is null
|
* @throws AssertionError if the object is null
|
||||||
*/
|
*/
|
||||||
public static final void exists(final Object object,
|
public static void exists(final Object object,
|
||||||
final Class clacc) {
|
final Class clacc) {
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
final String message = clacc.getName() + " is null";
|
final String message = clacc.getName() + " is null";
|
||||||
|
|
||||||
|
|
@ -245,8 +245,8 @@ public class Assert {
|
||||||
*
|
*
|
||||||
* @throws AssertionError if the object is null
|
* @throws AssertionError if the object is null
|
||||||
*/
|
*/
|
||||||
public static final void exists(final Object object,
|
public static void exists(final Object object,
|
||||||
final String label) {
|
final String label) {
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
final String message =
|
final String message =
|
||||||
label != null && label.trim().length() > 0
|
label != null && label.trim().length() > 0
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
package com.arsdigita.portalserver;
|
package com.arsdigita.portalserver;
|
||||||
|
|
||||||
|
|
||||||
// import com.arsdigita.db.*;
|
|
||||||
import com.arsdigita.domain.*;
|
import com.arsdigita.domain.*;
|
||||||
import com.arsdigita.kernel.ACSObjectInstantiator;
|
import com.arsdigita.kernel.ACSObjectInstantiator;
|
||||||
import com.arsdigita.kernel.Kernel;
|
import com.arsdigita.kernel.Kernel;
|
||||||
|
|
@ -138,7 +137,8 @@ public class Loader extends PackageLoader {
|
||||||
private void loadPortalSiteApplicationType() {
|
private void loadPortalSiteApplicationType() {
|
||||||
|
|
||||||
/* First try: create a new style, legacy compatible application */
|
/* First try: create a new style, legacy compatible application */
|
||||||
/* ApplicationType type = ApplicationType.createApplicationType(
|
/*
|
||||||
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"portalsite",
|
"portalsite",
|
||||||
"Portal Site",
|
"Portal Site",
|
||||||
PortalSite.BASE_DATA_OBJECT_TYPE);
|
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.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.ui.PortalDispatcher");
|
("com.arsdigita.portalserver.ui.PortalDispatcher");
|
||||||
*/
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// Try: new style legacy free application
|
// Try: new style legacy free application
|
||||||
ApplicationType type = new
|
ApplicationType type = new
|
||||||
ApplicationType("Portal Site", // title
|
ApplicationType("Portal Site", // title
|
||||||
|
|
@ -229,16 +230,23 @@ public class Loader extends PackageLoader {
|
||||||
// in applications mit primary_url=/portal-admin/
|
// in applications mit primary_url=/portal-admin/
|
||||||
// in acs_object mit default_domain_class=c.ad.ps.admin.PSAdmin und
|
// 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
|
// object_type=c.ad.admin.CWAdmin, ebenfalls wg. BASE_DATA_OBJ_TYPE
|
||||||
|
/*
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"portal-admin",
|
"portal-admin",
|
||||||
"Portal Server Site Administration",
|
"Portal Server Site Administration",
|
||||||
PSAdmin.BASE_DATA_OBJECT_TYPE);
|
PSAdmin.BASE_DATA_OBJECT_TYPE);
|
||||||
type.setDescription ("Displays common administration tasks.");
|
|
||||||
// Current code requires an apps specific dispatcher class. Has to be
|
// Current code requires an apps specific dispatcher class. Has to be
|
||||||
// modified to be able to create a legacy free app type.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.admin.ui.Dispatcher");
|
("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() {
|
private void loadPortalCreatorApplicationType() {
|
||||||
// formerly private ApplicationType setupPortalCreator() { in ui.admin.Initializer
|
// formerly private ApplicationType setupPortalCreator() { in ui.admin.Initializer
|
||||||
|
|
||||||
|
/*
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"portal-create",
|
"portal-create",
|
||||||
"Portal Creator",
|
"Portal Creator",
|
||||||
|
|
@ -260,6 +269,16 @@ public class Loader extends PackageLoader {
|
||||||
// modified to be able to create a legacy free app type.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.ui.admin.PortalCreateDispatcher");
|
("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() {
|
private void loadPortalSitemapApplicationType() {
|
||||||
// formerly private ApplicationType setupPortalSitemapper() {
|
// formerly private ApplicationType setupPortalSitemapper() {
|
||||||
|
|
||||||
|
/*
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"portal-sitemap",
|
"portal-sitemap",
|
||||||
"Portal Site Map",
|
"Portal Site Map",
|
||||||
PortalSiteMap.BASE_DATA_OBJECT_TYPE);
|
PortalSiteMap.BASE_DATA_OBJECT_TYPE);
|
||||||
type.setDescription ("Displays and manages Portals.");
|
|
||||||
// Current code requires an apps specific dispatcher class. Has to be
|
// Current code requires an apps specific dispatcher class. Has to be
|
||||||
// modified to be able to create a legacy free app type.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.ui.admin.PortalSiteMapDispatcher");
|
("com.arsdigita.portalserver.ui.admin.PortalSiteMapDispatcher");
|
||||||
|
|
||||||
|
*/
|
||||||
/* ApplicationSetup setup = new ApplicationSetup(s_log);
|
/* ApplicationSetup setup = new ApplicationSetup(s_log);
|
||||||
setup.setApplicationObjectType(PortalSiteMap.BASE_DATA_OBJECT_TYPE);
|
setup.setApplicationObjectType(PortalSiteMap.BASE_DATA_OBJECT_TYPE);
|
||||||
setup.setTitle("Portal Site Map");
|
setup.setTitle("Portal Site Map");
|
||||||
|
|
@ -298,7 +318,16 @@ public class Loader extends PackageLoader {
|
||||||
|
|
||||||
setup.run(); */
|
setup.run(); */
|
||||||
// return 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 */
|
/* FORMERLY personal.Initializer */
|
||||||
|
|
@ -311,7 +340,7 @@ public class Loader extends PackageLoader {
|
||||||
private void loadPersonalPortalCreatorApplicationType() {
|
private void loadPersonalPortalCreatorApplicationType() {
|
||||||
// private ApplicationType loadPersonalPortalCreatorApplicationType() {
|
// private ApplicationType loadPersonalPortalCreatorApplicationType() {
|
||||||
// formerly private ApplicationType setupPersonalPortalCreatorApplication() {
|
// formerly private ApplicationType setupPersonalPortalCreatorApplication() {
|
||||||
|
/*
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"personal-portal-creator",
|
"personal-portal-creator",
|
||||||
"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.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.personal.PersonalPortalCreatorDispatcher");
|
("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 void loadPersonalPortalApplicationType() {
|
||||||
// private ApplicationType loadPersonalPortalApplicationType() {
|
// private ApplicationType loadPersonalPortalApplicationType() {
|
||||||
// formerly private ApplicationType setupPersonalPortalApplication() {
|
// formerly private ApplicationType setupPersonalPortalApplication() {
|
||||||
|
/*
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"personal-portal",
|
"personal-portal",
|
||||||
"Personal Portal",
|
"Personal Portal",
|
||||||
PersonalPortal.BASE_DATA_OBJECT_TYPE);
|
PersonalPortal.BASE_DATA_OBJECT_TYPE);
|
||||||
type.setDescription ("A portal for an individual.");
|
|
||||||
// Current code requires an apps specific dispatcher class. Has to be
|
// Current code requires an apps specific dispatcher class. Has to be
|
||||||
// modified to be able to create a legacy free app type.
|
// modified to be able to create a legacy free app type.
|
||||||
type.setDispatcherClass
|
type.setDispatcherClass
|
||||||
("com.arsdigita.portalserver.personal.PersonalPortalDispatcher");
|
("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);
|
/* // XXX This must go after setup.run(). Need more elegant approach.
|
||||||
|
|
||||||
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.
|
|
||||||
// pboy: uses ResourceType.registerResourceTypeConfig() which registers
|
// pboy: uses ResourceType.registerResourceTypeConfig() which registers
|
||||||
// in a hash map. Therefore: not suitable for a loader, may have to be
|
// in a hash map. Therefore: not suitable for a loader, may have to be
|
||||||
// moved into initializer!
|
// moved into initializer!
|
||||||
|
|
|
||||||
|
|
@ -472,16 +472,15 @@ public class PortalSite extends Application {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static PortalSiteCollection getRootPortalSites() {
|
public static PortalSiteCollection getRootPortalSites() {
|
||||||
|
|
||||||
DataQuery query = SessionManager.getSession().retrieveQuery
|
DataQuery query = SessionManager.getSession().retrieveQuery
|
||||||
("com.arsdigita.workspace.rootWorkspaces");
|
("com.arsdigita.workspace.rootWorkspaces");
|
||||||
|
|
||||||
DataCollection collection =
|
DataCollection collection =
|
||||||
new DataQueryDataCollectionAdapter(query, "workspace");
|
new DataQueryDataCollectionAdapter(query, "workspace");
|
||||||
|
|
||||||
query.close();
|
query.close();
|
||||||
|
|
||||||
PortalSiteCollection psc = new PortalSiteCollection(collection);
|
PortalSiteCollection psc = new PortalSiteCollection(collection);
|
||||||
|
|
||||||
psc.filterForUnarchived();
|
psc.filterForUnarchived();
|
||||||
|
|
||||||
return psc;
|
return psc;
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,12 @@
|
||||||
package com.arsdigita.portalserver;
|
package com.arsdigita.portalserver;
|
||||||
|
|
||||||
import com.arsdigita.bebop.Page;
|
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.PortalHomePage;
|
||||||
import com.arsdigita.portalserver.ui.PortalParticipants;
|
import com.arsdigita.portalserver.ui.PortalParticipants;
|
||||||
import com.arsdigita.portalserver.ui.admin.PortalAdminPage;
|
import com.arsdigita.portalserver.ui.admin.PortalAdminPage;
|
||||||
import com.arsdigita.templating.PresentationManager;
|
import com.arsdigita.templating.PresentationManager;
|
||||||
import com.arsdigita.templating.Templating;
|
import com.arsdigita.templating.Templating;
|
||||||
|
import com.arsdigita.util.Assert;
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.web.BaseApplicationServlet;
|
import com.arsdigita.web.BaseApplicationServlet;
|
||||||
import com.arsdigita.xml.Document;
|
import com.arsdigita.xml.Document;
|
||||||
|
|
@ -39,46 +38,33 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import org.apache.log4j.Logger;
|
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 <<a href="mailto:jross@redhat.com">jross@redhat.com</a>>
|
* @author Justin Ross <<a href="mailto:jross@redhat.com">jross@redhat.com</a>>
|
||||||
* @version $Id: PortalServlet.java pboy $
|
* @author Peter Boy <a href="mailto:pboy@zes.uni-bremen.de">
|
||||||
|
* @version $Id: PortalSiteServlet.java pboy $
|
||||||
*/
|
*/
|
||||||
public class PortalServlet extends BaseApplicationServlet {
|
public class PortalSiteServlet extends BaseApplicationServlet {
|
||||||
|
|
||||||
private static final Logger s_log = Logger.getLogger
|
private static final Logger s_log = Logger.getLogger(PortalSiteServlet.class);
|
||||||
(PortalServlet.class);
|
|
||||||
|
|
||||||
private static final PresentationManager s_presManager =
|
private static final PresentationManager s_presManager =
|
||||||
Templating.getPresentationManager();
|
Templating.getPresentationManager();
|
||||||
|
|
||||||
private static Page s_homePage = new PortalHomePage();
|
private static Page s_homePage = new PortalHomePage();
|
||||||
private static Page s_particPage = PortalParticipants.createPage();
|
private static Page s_particPage = PortalParticipants.createPage();
|
||||||
private static Page s_adminPage = null;
|
private static Page s_adminPage = s_adminPage = new PortalAdminPage();
|
||||||
|
|
||||||
static {
|
|
||||||
// TransactionContext ctx = SessionManager.getSession().getTransactionContext();
|
|
||||||
// ctx.beginTxn();
|
|
||||||
|
|
||||||
s_adminPage = new PortalAdminPage();
|
|
||||||
|
|
||||||
// ctx.commitTxn();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sreq
|
||||||
|
* @param sresp
|
||||||
|
* @param app
|
||||||
|
* @throws ServletException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
public void doService(HttpServletRequest sreq,
|
public void doService(HttpServletRequest sreq,
|
||||||
HttpServletResponse sresp,
|
HttpServletResponse sresp,
|
||||||
Application app)
|
Application app)
|
||||||
|
|
@ -86,12 +72,21 @@ public class PortalServlet extends BaseApplicationServlet {
|
||||||
s_log.debug("PortalServlet.doService called for request '" +
|
s_log.debug("PortalServlet.doService called for request '" +
|
||||||
sreq.getRequestURI() + "'");
|
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;
|
Document doc = null;
|
||||||
|
|
||||||
if (path.endsWith("participants")) {
|
if (pathInfo.endsWith("participants")) {
|
||||||
doc = s_particPage.buildDocument(sreq, sresp);
|
doc = s_particPage.buildDocument(sreq, sresp);
|
||||||
} else if (path.endsWith("admin")) {
|
} else if (pathInfo.endsWith("admin")) {
|
||||||
doc = s_adminPage.buildDocument(sreq, sresp);
|
doc = s_adminPage.buildDocument(sreq, sresp);
|
||||||
} else {
|
} else {
|
||||||
doc = s_homePage.buildDocument(sreq, sresp);
|
doc = s_homePage.buildDocument(sreq, sresp);
|
||||||
|
|
@ -16,9 +16,10 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* 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.bebop.*;
|
||||||
|
import com.arsdigita.portalserver.admin.PSAdminPage;
|
||||||
import com.arsdigita.bebop.Page;
|
import com.arsdigita.bebop.Page;
|
||||||
import com.arsdigita.bebop.page.BebopMapDispatcher;
|
import com.arsdigita.bebop.page.BebopMapDispatcher;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -36,7 +37,7 @@ public class Dispatcher extends BebopMapDispatcher {
|
||||||
|
|
||||||
public Dispatcher() {
|
public Dispatcher() {
|
||||||
Map m = new HashMap();
|
Map m = new HashMap();
|
||||||
Page index = new AdminPage();
|
Page index = new PSAdminPage();
|
||||||
index.lock();
|
index.lock();
|
||||||
m.put("", index);
|
m.put("", index);
|
||||||
m.put("index.jsp", index);
|
m.put("index.jsp", index);
|
||||||
|
|
@ -21,6 +21,7 @@ package com.arsdigita.portalserver.admin;
|
||||||
// import com.arsdigita.portalserver.*;
|
// import com.arsdigita.portalserver.*;
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.persistence.*;
|
import com.arsdigita.persistence.*;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -36,6 +37,7 @@ import org.apache.log4j.Logger;
|
||||||
*/
|
*/
|
||||||
public class PSAdmin extends Application {
|
public class PSAdmin extends Application {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
private static final Logger s_log = Logger.getLogger(PSAdmin.class);
|
private static final Logger s_log = Logger.getLogger(PSAdmin.class);
|
||||||
|
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
|
|
@ -49,4 +51,44 @@ public class PSAdmin extends Application {
|
||||||
public PSAdmin(DataObject dataObject) {
|
public PSAdmin(DataObject dataObject) {
|
||||||
super(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:
|
||||||
|
* <servlet>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
|
* <init-param>
|
||||||
|
* <param-name>template-path</param-name>
|
||||||
|
* <param-value>/templates/ccm-applicationName</param-value>
|
||||||
|
* </init-param>
|
||||||
|
* </servlet>
|
||||||
|
*
|
||||||
|
* <servlet-mapping>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <url-pattern>/ccm-applicationName/files/*</url-pattern>
|
||||||
|
* </servlet-mapping>
|
||||||
|
*
|
||||||
|
* NOTE: According to Servlet API the path always starts with a leading '/'
|
||||||
|
* and includes either the servlet name or a path to the servlet, but does
|
||||||
|
* not include any extra path information or a query string. Returns an
|
||||||
|
* empry string ("") is the servlet used was matched using the "/*" pattern.
|
||||||
|
*
|
||||||
|
* @return path name to the applications servlet/JSP
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getServletPath() {
|
||||||
|
return URL.SERVLET_DIR + "/psadmin";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* 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.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.web.ApplicationCollection;
|
import com.arsdigita.web.ApplicationCollection;
|
||||||
|
|
@ -32,14 +32,14 @@ import com.arsdigita.xml.Document;
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AdminPage
|
* PSAdminPage
|
||||||
* -
|
* -
|
||||||
* This class is the UI component for Portal-admin.
|
* This class is the UI component for Portal-admin.
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:rhs@mit.edu">rhs@mit.edu</a>
|
* @author <a href="mailto:rhs@mit.edu">rhs@mit.edu</a>
|
||||||
* @version $Revision: #8 $ $Date: 2004/08/17 $
|
* @version $Revision: #8 $ $Date: 2004/08/17 $
|
||||||
*/
|
*/
|
||||||
class AdminPage extends PortalPage {
|
class PSAdminPage extends PortalPage {
|
||||||
public static final String versionId =
|
public static final String versionId =
|
||||||
"$Id: //portalserver/dev/src/com/arsdigita/portalserver/admin/ui/AdminPage.java#8 $" +
|
"$Id: //portalserver/dev/src/com/arsdigita/portalserver/admin/ui/AdminPage.java#8 $" +
|
||||||
"$Author: dennis $" +
|
"$Author: dennis $" +
|
||||||
|
|
@ -48,7 +48,7 @@ class AdminPage extends PortalPage {
|
||||||
BoxPanel m_bpanel;
|
BoxPanel m_bpanel;
|
||||||
|
|
||||||
private static Logger s_log = Logger.getLogger
|
private static Logger s_log = Logger.getLogger
|
||||||
(AdminPage.class.getName());
|
(PSAdminPage.class.getName());
|
||||||
|
|
||||||
private RequestLocal m_children = new RequestLocal() {
|
private RequestLocal m_children = new RequestLocal() {
|
||||||
public Object initialValue(PageState ps) {
|
public Object initialValue(PageState ps) {
|
||||||
|
|
@ -58,7 +58,7 @@ class AdminPage extends PortalPage {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public AdminPage() {
|
public PSAdminPage() {
|
||||||
getHeader().setIdAttr("admin");
|
getHeader().setIdAttr("admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Peter Boy 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.admin;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Page;
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
public class PSAdminServlet extends BaseApplicationServlet {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
|
private static final Logger s_log = Logger.getLogger(PSAdminServlet.class);
|
||||||
|
|
||||||
|
private static final PresentationManager s_presManager =
|
||||||
|
Templating.getPresentationManager();
|
||||||
|
|
||||||
|
/** Page object to hold the PortalSite Admin page */
|
||||||
|
private static Page s_psAdminPage;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User extension point, initialize PortalCreator (index) page and add
|
||||||
|
* authentication check.
|
||||||
|
*
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doInit() throws ServletException {
|
||||||
|
|
||||||
|
s_psAdminPage = new PSAdminPage();
|
||||||
|
s_psAdminPage.lock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
doc = s_psAdminPage.buildDocument(sreq, sresp);
|
||||||
|
s_presManager.servePage(doc, sreq, sresp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -28,9 +28,11 @@ import com.arsdigita.persistence.DataObject;
|
||||||
* @version $Revision #1 $DateTime: 2004/08/17 23:19:25 $
|
* @version $Revision #1 $DateTime: 2004/08/17 23:19:25 $
|
||||||
*/
|
*/
|
||||||
public class MyItemsApplication extends Application {
|
public class MyItemsApplication extends Application {
|
||||||
|
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
"com.arsdigita.workspace.personal.MyItemsApplication";
|
"com.arsdigita.workspace.personal.MyItemsApplication";
|
||||||
|
|
||||||
|
@Override
|
||||||
protected String getBaseDataObjectType() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
return BASE_DATA_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,56 +36,86 @@ import com.arsdigita.kernel.Party;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class MyPortalsPortlet extends AppPortlet {
|
public class MyPortalsPortlet extends AppPortlet {
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
|
||||||
"com.arsdigita.workspace.personal.MyWorkspacesPortlet";
|
|
||||||
|
|
||||||
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
|
"com.arsdigita.workspace.personal.MyWorkspacesPortlet";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
protected String getBaseDataObjectType() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
return BASE_DATA_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dataObject
|
||||||
|
*/
|
||||||
public MyPortalsPortlet(DataObject dataObject) {
|
public MyPortalsPortlet(DataObject dataObject) {
|
||||||
super(dataObject);
|
super(dataObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected AbstractPortletRenderer doGetPortletRenderer() {
|
protected AbstractPortletRenderer doGetPortletRenderer() {
|
||||||
return new MyPortalsPortletRenderer(this);
|
return new MyPortalsPortletRenderer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param party
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
protected DataQuery getMyPortalsDataQuery(Party party) {
|
protected DataQuery getMyPortalsDataQuery(Party party) {
|
||||||
// Assert.assertTrue
|
|
||||||
Assert.isTrue
|
Assert.isTrue
|
||||||
(!isNew(),
|
(!isNew(),
|
||||||
"You must save this portlet before you call " +
|
"You must save this portlet before you call " +
|
||||||
"getMyPortalsDataQuery(User) on it.");
|
"getMyPortalsDataQuery(User) on it.");
|
||||||
|
|
||||||
DataQuery query = SessionManager.getSession().retrieveQuery
|
DataQuery query = SessionManager.getSession().retrieveQuery
|
||||||
("com.arsdigita.workspace.personal.MyWorkspaces");
|
("com.arsdigita.workspace.personal.MyWorkspaces");
|
||||||
|
|
||||||
// Assert.assertNotNull(query, "query");
|
|
||||||
Assert.exists(query, "query");
|
Assert.exists(query, "query");
|
||||||
|
|
||||||
query.setParameter("userID", party.getID());
|
query.setParameter("userID", party.getID());
|
||||||
|
|
||||||
Application parent = getParentApplication();
|
Application parent = getParentApplication();
|
||||||
|
|
||||||
// Assert.assertNotNull(parent, "parent");
|
|
||||||
Assert.exists(parent, "parent");
|
Assert.exists(parent, "parent");
|
||||||
|
|
||||||
query.setParameter
|
query.setParameter("personalWorkspaceID", getParentApplication().getID());
|
||||||
("personalWorkspaceID", getParentApplication().getID());
|
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
class MyPortalsPortletRenderer extends AbstractPortletRenderer {
|
class MyPortalsPortletRenderer extends AbstractPortletRenderer {
|
||||||
|
|
||||||
private MyPortalsPortlet m_portlet;
|
private MyPortalsPortlet m_portlet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param portlet
|
||||||
|
*/
|
||||||
public MyPortalsPortletRenderer(MyPortalsPortlet portlet) {
|
public MyPortalsPortletRenderer(MyPortalsPortlet portlet) {
|
||||||
m_portlet = portlet;
|
m_portlet = portlet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param pageState
|
||||||
|
* @param parent
|
||||||
|
*/
|
||||||
protected void generateBodyXML(PageState pageState, Element parent) {
|
protected void generateBodyXML(PageState pageState, Element parent) {
|
||||||
Party party = Kernel.getContext().getParty();
|
Party party = Kernel.getContext().getParty();
|
||||||
|
|
||||||
|
|
@ -107,8 +137,6 @@ class MyPortalsPortletRenderer extends AbstractPortletRenderer {
|
||||||
title = (String) query.get("title");
|
title = (String) query.get("title");
|
||||||
primaryURL = (String) query.get("primaryURL");
|
primaryURL = (String) query.get("primaryURL");
|
||||||
|
|
||||||
// Assert.assertNotNull(title, "title");
|
|
||||||
// Assert.assertNotNull(primaryURL, "primaryURL");
|
|
||||||
Assert.exists(title, "title");
|
Assert.exists(title, "title");
|
||||||
Assert.exists(primaryURL, "primaryURL");
|
Assert.exists(primaryURL, "primaryURL");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import com.arsdigita.persistence.DataCollection;
|
||||||
import com.arsdigita.persistence.SessionManager;
|
import com.arsdigita.persistence.SessionManager;
|
||||||
import com.arsdigita.kernel.User;
|
import com.arsdigita.kernel.User;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p><strong>Experimental</strong></p>
|
* <p><strong>Experimental</strong></p>
|
||||||
|
|
@ -37,6 +38,11 @@ public class PersonalPortal extends PortalSite {
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
"com.arsdigita.workspace.personal.PersonalWorkspace";
|
"com.arsdigita.workspace.personal.PersonalWorkspace";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
protected String getBaseDataObjectType() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
return BASE_DATA_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
@ -46,21 +52,33 @@ public class PersonalPortal extends PortalSite {
|
||||||
super(dataObject);
|
super(dataObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* @param parent
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static PersonalPortal createPersonalPortal
|
public static PersonalPortal createPersonalPortal
|
||||||
(User user, Application parent) {
|
(User user, Application parent) {
|
||||||
// Assert.assertNotNull(user, "user");
|
|
||||||
Assert.exists(user, "user");
|
Assert.exists(user, "user");
|
||||||
|
|
||||||
PersonalPortal portal = (PersonalPortal)
|
PersonalPortal portal = (PersonalPortal)
|
||||||
Application.createApplication
|
Application.createApplication
|
||||||
(BASE_DATA_OBJECT_TYPE, user.getID().toString(),
|
(BASE_DATA_OBJECT_TYPE,
|
||||||
"Personal Portal", parent);
|
user.getID().toString(),
|
||||||
|
"Personal Portal",
|
||||||
|
parent);
|
||||||
portal.setOwningUser(user);
|
portal.setOwningUser(user);
|
||||||
|
|
||||||
return portal;
|
return portal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static PersonalPortal createPersonalPortal(User user) {
|
public static PersonalPortal createPersonalPortal(User user) {
|
||||||
Application parent = Application.retrieveApplicationForPath
|
Application parent = Application.retrieveApplicationForPath
|
||||||
("/personal-portal/");
|
("/personal-portal/");
|
||||||
|
|
@ -71,7 +89,11 @@ public class PersonalPortal extends PortalSite {
|
||||||
return PersonalPortal.createPersonalPortal(user, parent);
|
return PersonalPortal.createPersonalPortal(user, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can return null.
|
/**
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* @return (Can return null.)
|
||||||
|
*/
|
||||||
public static PersonalPortal retrievePersonalPortal(User user) {
|
public static PersonalPortal retrievePersonalPortal(User user) {
|
||||||
DataCollection portals = SessionManager.getSession().retrieve
|
DataCollection portals = SessionManager.getSession().retrieve
|
||||||
(BASE_DATA_OBJECT_TYPE);
|
(BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
@ -90,19 +112,66 @@ public class PersonalPortal extends PortalSite {
|
||||||
return portal;
|
return portal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
*/
|
||||||
private void setOwningUser(User user) {
|
private void setOwningUser(User user) {
|
||||||
// Assert.assertNotNull(user, "user");
|
|
||||||
Assert.exists(user, "user");
|
Assert.exists(user, "user");
|
||||||
|
|
||||||
setAssociation("user", user);
|
setAssociation("user", user);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public User getOwningUser() {
|
public User getOwningUser() {
|
||||||
|
|
||||||
DataObject dataObject = (DataObject) get("user");
|
DataObject dataObject = (DataObject) get("user");
|
||||||
|
|
||||||
// Assert.assertNotNull(dataObject, "dataObject");
|
|
||||||
Assert.exists(dataObject, "dataObject");
|
Assert.exists(dataObject, "dataObject");
|
||||||
|
|
||||||
return User.retrieve(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:
|
||||||
|
* <servlet>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
|
* <init-param>
|
||||||
|
* <param-name>template-path</param-name>
|
||||||
|
* <param-value>/templates/ccm-applicationName</param-value>
|
||||||
|
* </init-param>
|
||||||
|
* </servlet>
|
||||||
|
*
|
||||||
|
* <servlet-mapping>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <url-pattern>/ccm-applicationName/files/*</url-pattern>
|
||||||
|
* </servlet-mapping>
|
||||||
|
*
|
||||||
|
* NOTE: According to Servlet API the path always starts with a leading '/'
|
||||||
|
* and includes either the servlet name or a path to the servlet, but does
|
||||||
|
* not include any extra path information or a query string. Returns an
|
||||||
|
* empry string ("") is the servlet used was matched using the "/*" pattern.
|
||||||
|
*
|
||||||
|
* @return path name to the applications servlet/JSP
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getServletPath() {
|
||||||
|
return URL.SERVLET_DIR + "/personal-portal";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ public class PersonalPortalConfig extends ResourceTypeConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void configureApplication(Application application) {
|
public void configureApplication(Application application) {
|
||||||
// Assert.assertTrue(application instanceof PersonalPortal);
|
|
||||||
Assert.isTrue(application instanceof PersonalPortal);
|
Assert.isTrue(application instanceof PersonalPortal);
|
||||||
|
|
||||||
PersonalPortal portal = (PersonalPortal) application;
|
PersonalPortal portal = (PersonalPortal) application;
|
||||||
|
|
@ -61,22 +61,23 @@ public class PersonalPortalConfig extends ResourceTypeConfig {
|
||||||
|
|
||||||
Portlet portlet = null;
|
Portlet portlet = null;
|
||||||
|
|
||||||
portlet = Portlet.createPortlet
|
portlet = Portlet.createPortlet(MyPortalsPortlet.BASE_DATA_OBJECT_TYPE,
|
||||||
(MyPortalsPortlet.BASE_DATA_OBJECT_TYPE, portal);
|
portal);
|
||||||
tab.addPortlet(portlet, 1);
|
tab.addPortlet(portlet, 1);
|
||||||
|
|
||||||
tab.setPortalSite(portal);
|
tab.setPortalSite(portal);
|
||||||
tab.save();
|
tab.save();
|
||||||
|
|
||||||
portal.addPortalTab(tab);
|
portal.addPortalTab(tab);
|
||||||
portal.addMember(portal.getOwningUser());
|
portal.addMember(portal.getOwningUser());
|
||||||
|
|
||||||
portal.save();
|
portal.save();
|
||||||
|
|
||||||
// Permissions
|
// Permissions
|
||||||
|
|
||||||
PermissionDescriptor perm = new PermissionDescriptor
|
PermissionDescriptor perm = new PermissionDescriptor
|
||||||
(PrivilegeDescriptor.ADMIN, portal, portal.getOwningUser());
|
(PrivilegeDescriptor.ADMIN,
|
||||||
|
portal,
|
||||||
|
portal.getOwningUser());
|
||||||
PermissionService.grantPermission(perm);
|
PermissionService.grantPermission(perm);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ package com.arsdigita.portalserver.personal;
|
||||||
|
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.persistence.DataObject;
|
import com.arsdigita.persistence.DataObject;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p><strong>Experimental</strong></p>
|
* <p><strong>Experimental</strong></p>
|
||||||
|
|
@ -36,12 +37,62 @@ public class PersonalPortalCreator extends Application {
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
"com.arsdigita.workspace.personal.PersonalWorkspaceCreator";
|
"com.arsdigita.workspace.personal.PersonalWorkspaceCreator";
|
||||||
|
|
||||||
protected String getBaseDataObjectType() {
|
/**
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
* Constructor
|
||||||
}
|
*
|
||||||
|
* @param dataObject
|
||||||
|
*/
|
||||||
// protected PersonalPortalCreator(DataObject dataObject) {
|
// protected PersonalPortalCreator(DataObject dataObject) {
|
||||||
public PersonalPortalCreator(DataObject dataObject) {
|
public PersonalPortalCreator(DataObject dataObject) {
|
||||||
super(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:
|
||||||
|
* <servlet>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
|
* <init-param>
|
||||||
|
* <param-name>template-path</param-name>
|
||||||
|
* <param-value>/templates/ccm-applicationName</param-value>
|
||||||
|
* </init-param>
|
||||||
|
* </servlet>
|
||||||
|
*
|
||||||
|
* <servlet-mapping>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <url-pattern>/ccm-applicationName/files/*</url-pattern>
|
||||||
|
* </servlet-mapping>
|
||||||
|
*
|
||||||
|
* NOTE: According to Servlet API the path always starts with a leading '/'
|
||||||
|
* and includes either the servlet name or a path to the servlet, but does
|
||||||
|
* not include any extra path information or a query string. Returns an
|
||||||
|
* empry string ("") is the servlet used was matched using the "/*" pattern.
|
||||||
|
*
|
||||||
|
* @return path name to the applications servlet/JSP
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getServletPath() {
|
||||||
|
return URL.SERVLET_DIR + "/personal-portal-creator";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,11 +128,11 @@ public class PersonalPortalCreatorDispatcher implements Dispatcher {
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dispatch
|
public void dispatch(HttpServletRequest request,
|
||||||
(HttpServletRequest request, HttpServletResponse response,
|
HttpServletResponse response,
|
||||||
RequestContext context)
|
RequestContext context)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
// Assert.assertTrue(context instanceof SiteNodeRequestContext);
|
|
||||||
Assert.isTrue(context instanceof SiteNodeRequestContext);
|
Assert.isTrue(context instanceof SiteNodeRequestContext);
|
||||||
|
|
||||||
// XXX has to be replaced by a way NOT built upon SiteNode*
|
// XXX has to be replaced by a way NOT built upon SiteNode*
|
||||||
|
|
@ -183,12 +183,14 @@ public class PersonalPortalCreatorDispatcher implements Dispatcher {
|
||||||
if (m_introDispatcher == null) {
|
if (m_introDispatcher == null) {
|
||||||
m_introDispatcher = new PageDispatcher(buildIntroPage());
|
m_introDispatcher = new PageDispatcher(buildIntroPage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assert.assertNotNull(m_introDispatcher, "m_introDispatcher");
|
|
||||||
Assert.exists(m_introDispatcher, "m_introDispatcher");
|
Assert.exists(m_introDispatcher, "m_introDispatcher");
|
||||||
|
|
||||||
DispatcherHelper.sendRedirect
|
// Don't understand: Above we create a new PageDisüpatcher but don't
|
||||||
(request, response, snrc.getOriginalURL());
|
// call it's dispatch() method.
|
||||||
|
// What does the sendRedirect here?
|
||||||
|
DispatcherHelper.sendRedirect(request,
|
||||||
|
response,
|
||||||
|
snrc.getOriginalURL());
|
||||||
|
|
||||||
// The following does not work because I need to be able to
|
// The following does not work because I need to be able to
|
||||||
// reset the RequestContext before I invoke it. Otherwise,
|
// reset the RequestContext before I invoke it. Otherwise,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,243 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Peter Boy 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.Page;
|
||||||
|
import com.arsdigita.bebop.PageFactory;
|
||||||
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
|
import com.arsdigita.dispatcher.DispatcherHelper;
|
||||||
|
import com.arsdigita.dispatcher.RequestContext;
|
||||||
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
|
import com.arsdigita.kernel.Kernel;
|
||||||
|
import com.arsdigita.kernel.KernelExcursion;
|
||||||
|
import com.arsdigita.kernel.ResourceTypeConfig;
|
||||||
|
import com.arsdigita.kernel.User;
|
||||||
|
import com.arsdigita.templating.PresentationManager;
|
||||||
|
import com.arsdigita.templating.Templating;
|
||||||
|
import com.arsdigita.ui.login.UserAuthenticationListener;
|
||||||
|
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 java.math.BigDecimal;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author pb
|
||||||
|
*/
|
||||||
|
public class PersonalPortalCreatorServlet extends BaseApplicationServlet {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
|
private static final Logger s_log = Logger.getLogger(
|
||||||
|
PersonalPortalCreatorServlet.class);
|
||||||
|
|
||||||
|
private static final String XSL_HOOK = "portal-sitemap";
|
||||||
|
|
||||||
|
private static final PresentationManager s_presManager =
|
||||||
|
Templating.getPresentationManager();
|
||||||
|
|
||||||
|
private static Page s_introPage ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User extension point, do some initializing
|
||||||
|
*
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doInit() throws ServletException {
|
||||||
|
s_log.debug("PortalSiteMapServlet doInit() initialization executing!");
|
||||||
|
|
||||||
|
// do nothing for now.
|
||||||
|
s_introPage = buildIntroPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @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("PortalSiteMApServlet.doService called for request '" +
|
||||||
|
sreq.getRequestURI() + "'");
|
||||||
|
|
||||||
|
/* NOTE:
|
||||||
|
* Resolves currently to SiteNodeRequestContext which will be removed.*/
|
||||||
|
RequestContext ctx = DispatcherHelper.getRequestContext();
|
||||||
|
/* Problem: what application is treated as parent? We assume it is the
|
||||||
|
* application of the current request, so we get is as parameter.
|
||||||
|
* The original dispatcher class uses the current context to determine
|
||||||
|
* the parent application which should provide the same result. */
|
||||||
|
// final Application parent = getApplication(ctx);
|
||||||
|
final Application parent = app;
|
||||||
|
|
||||||
|
BigDecimal userID = scanUserID(sreq);
|
||||||
|
|
||||||
|
if (userID == null) {
|
||||||
|
s_log.warn
|
||||||
|
("Failed to read a user ID from a personal-portal link.");
|
||||||
|
} else {
|
||||||
|
final User user = getUser(userID);
|
||||||
|
|
||||||
|
PersonalPortal portal = PersonalPortal.retrievePersonalPortal(user);
|
||||||
|
|
||||||
|
if (portal == null) {
|
||||||
|
// This is what we expect to happen so we have to create a new
|
||||||
|
// PersonalPortal for that user.
|
||||||
|
KernelExcursion rootExcursion = new KernelExcursion() {
|
||||||
|
protected void excurse() {
|
||||||
|
setParty(Kernel.getSystemParty());
|
||||||
|
PersonalPortal ps = PersonalPortal
|
||||||
|
.createPersonalPortal(user, parent);
|
||||||
|
Assert.exists(ps, "portal");
|
||||||
|
|
||||||
|
configurePortal(ps);
|
||||||
|
ps.save();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
rootExcursion.run();
|
||||||
|
} else {
|
||||||
|
// There's a problem. We should never get here if the
|
||||||
|
// portal already exists, since the site node
|
||||||
|
// dispatcher will go to an existing portal
|
||||||
|
// directly, skipping this dispatcher.
|
||||||
|
|
||||||
|
s_log.error("PersonalPortalCreator invoked when the portalsite " +
|
||||||
|
"already exists.", new IllegalStateException());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* After crfeation of a new PersonalPortal show intro page. */
|
||||||
|
Document doc = null;
|
||||||
|
doc = s_introPage.buildDocument(sreq, sresp);
|
||||||
|
s_presManager.servePage(doc, sreq, sresp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Page buildIntroPage() {
|
||||||
|
|
||||||
|
Page page = new Page("", new SimpleContainer());
|
||||||
|
page.lock();
|
||||||
|
|
||||||
|
return page;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Has to be replaced by a way not to use SiteNode / SiteNodeRequestContext
|
||||||
|
* @param snrc
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Application getApplication(RequestContext ctx) {
|
||||||
|
|
||||||
|
// SiteNode siteNode = snrc.getSiteNode();
|
||||||
|
|
||||||
|
// Application parent = Application.retrieveApplicationForSiteNode
|
||||||
|
// (siteNode);
|
||||||
|
// Assert.exists(parent, "parent");
|
||||||
|
|
||||||
|
// return parent;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scan the ServletRequest for the userId part.
|
||||||
|
* We expect something like "1023/"
|
||||||
|
|
||||||
|
* @param sreq
|
||||||
|
* @return UserId as BigDecimal
|
||||||
|
*/
|
||||||
|
private BigDecimal scanUserID(HttpServletRequest sreq) {
|
||||||
|
|
||||||
|
String url = sreq.getPathInfo();
|
||||||
|
|
||||||
|
int delimIndex = url.indexOf("/");
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (delimIndex == -1) {
|
||||||
|
return new BigDecimal(url);
|
||||||
|
} else {
|
||||||
|
return new BigDecimal(url.substring(0, delimIndex));
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
return null;
|
||||||
|
} catch (IndexOutOfBoundsException iobe) {
|
||||||
|
// BigDecimal(String) fails to validate its input. An
|
||||||
|
// empty string makes it bomb, throwing this exception.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the user object based on userId.
|
||||||
|
*
|
||||||
|
* @param userID
|
||||||
|
* @return User object
|
||||||
|
*/
|
||||||
|
private User getUser(BigDecimal userID) {
|
||||||
|
User user = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
user = User.retrieve(userID);
|
||||||
|
} catch (DataObjectNotFoundException nfe) {
|
||||||
|
s_log.error
|
||||||
|
("Failed to retrieve user " + userID + ".",
|
||||||
|
new IllegalStateException());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert.assertNotNull(user, "user");
|
||||||
|
Assert.exists(user, "user");
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param portal
|
||||||
|
*/
|
||||||
|
private void configurePortal(PersonalPortal portal) {
|
||||||
|
|
||||||
|
ResourceTypeConfig config = portal.getApplicationType().getConfig();
|
||||||
|
Assert.exists(config, "config");
|
||||||
|
config.configureResource(portal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -74,7 +74,9 @@ public class PersonalPortalDispatcher extends PortalDispatcher {
|
||||||
|
|
||||||
if (remainingURLPart.startsWith(PORTAL_ADMIN_PAGE)) {
|
if (remainingURLPart.startsWith(PORTAL_ADMIN_PAGE)) {
|
||||||
if (m_portalAdminDispatcher == null) {
|
if (m_portalAdminDispatcher == null) {
|
||||||
|
|
||||||
PortalAdminPage page = new PortalAdminPage() {
|
PortalAdminPage page = new PortalAdminPage() {
|
||||||
|
@Override
|
||||||
protected void buildContextBar() {
|
protected void buildContextBar() {
|
||||||
DimensionalNavbar navbar = new DimensionalNavbar();
|
DimensionalNavbar navbar = new DimensionalNavbar();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,15 +42,19 @@ import com.arsdigita.bebop.Container;
|
||||||
* <p><strong>Experimental</strong></p>
|
* <p><strong>Experimental</strong></p>
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:justin@arsdigita.com">Justin Ross</a>
|
* @author <a href="mailto:justin@arsdigita.com">Justin Ross</a>
|
||||||
* @version $Id: //portalserver/dev/src/com/arsdigita/portalserver/personal/PersonalPortalHomePage.java#8 $
|
* @version $Id: PersonalPortalHomePage.java#8 $
|
||||||
*/
|
*/
|
||||||
public class PersonalPortalHomePage extends PortalHomePage {
|
public class PersonalPortalHomePage extends PortalHomePage {
|
||||||
public static final String versionId =
|
|
||||||
"$Id: //portalserver/dev/src/com/arsdigita/portalserver/personal/PersonalPortalHomePage.java#8 $" +
|
/**
|
||||||
"$Author: dennis $" +
|
* Constructor
|
||||||
"$DateTime: 2004/08/17 23:19:25 $";
|
*/
|
||||||
|
public PersonalPortalHomePage() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
private final RequestLocal m_adminPermission = new RequestLocal() {
|
private final RequestLocal m_adminPermission = new RequestLocal() {
|
||||||
|
@Override
|
||||||
protected Object initialValue(PageState state) {
|
protected Object initialValue(PageState state) {
|
||||||
UniversalPermissionDescriptor descriptor =
|
UniversalPermissionDescriptor descriptor =
|
||||||
new UniversalPermissionDescriptor
|
new UniversalPermissionDescriptor
|
||||||
|
|
@ -65,10 +69,7 @@ public class PersonalPortalHomePage extends PortalHomePage {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public PersonalPortalHomePage() {
|
@Override
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void buildHeader(Container header) {
|
protected void buildHeader(Container header) {
|
||||||
// Add a link to edit profile.
|
// Add a link to edit profile.
|
||||||
Link profileLink = new Link( new Label(GlobalizationUtil.globalize("cw.workspace.personal.edit_your_profile")), "/register/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.
|
// the Portal admin page.
|
||||||
|
|
||||||
Link adminLink = new Link( new Label(GlobalizationUtil.globalize("cw.workspace.personal.site_administration")), "/portal-admin/") {
|
Link adminLink = new Link( new Label(GlobalizationUtil.globalize("cw.workspace.personal.site_administration")), "/portal-admin/") {
|
||||||
|
@Override
|
||||||
public boolean isVisible(PageState state) {
|
public boolean isVisible(PageState state) {
|
||||||
Boolean bool = (Boolean) m_adminPermission.get(state);
|
Boolean bool = (Boolean) m_adminPermission.get(state);
|
||||||
return bool.booleanValue();
|
return bool.booleanValue();
|
||||||
|
|
@ -96,6 +98,7 @@ public class PersonalPortalHomePage extends PortalHomePage {
|
||||||
super.buildHeader(header);
|
super.buildHeader(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void buildTitle() {
|
protected void buildTitle() {
|
||||||
class TitlePrintListener implements PrintListener {
|
class TitlePrintListener implements PrintListener {
|
||||||
public void prepare(PrintEvent e) {
|
public void prepare(PrintEvent e) {
|
||||||
|
|
@ -128,6 +131,7 @@ public class PersonalPortalHomePage extends PortalHomePage {
|
||||||
setTitle(new Label(new TitlePrintListener()));
|
setTitle(new Label(new TitlePrintListener()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void buildContextBar() {
|
protected void buildContextBar() {
|
||||||
DimensionalNavbar navbar = new DimensionalNavbar();
|
DimensionalNavbar navbar = new DimensionalNavbar();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -33,6 +33,7 @@ import java.io.IOException;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Dispatcher for the PortalSite ApplicationType
|
||||||
* <p><strong>Experimental</strong></p>
|
* <p><strong>Experimental</strong></p>
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:justin@arsdigita.com">Justin Ross</a>
|
* @author <a href="mailto:justin@arsdigita.com">Justin Ross</a>
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ package com.arsdigita.portalserver.ui;
|
||||||
|
|
||||||
import com.arsdigita.portalserver.util.GlobalizationUtil;
|
import com.arsdigita.portalserver.util.GlobalizationUtil;
|
||||||
|
|
||||||
import com.arsdigita.web.ApplicationCollection;
|
|
||||||
import com.arsdigita.portalserver.PortalSite;
|
import com.arsdigita.portalserver.PortalSite;
|
||||||
import com.arsdigita.portalserver.LoggedInLinkWrapper;
|
import com.arsdigita.portalserver.LoggedInLinkWrapper;
|
||||||
import com.arsdigita.portalserver.PortalPage;
|
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.RequestEvent;
|
||||||
import com.arsdigita.bebop.event.ChangeListener;
|
import com.arsdigita.bebop.event.ChangeListener;
|
||||||
import com.arsdigita.bebop.event.ChangeEvent;
|
import com.arsdigita.bebop.event.ChangeEvent;
|
||||||
import com.arsdigita.bebop.portal.Portal;
|
|
||||||
import com.arsdigita.bebop.portal.PortalModel;
|
import com.arsdigita.bebop.portal.PortalModel;
|
||||||
import com.arsdigita.bebop.portal.PortalModelBuilder;
|
import com.arsdigita.bebop.portal.PortalModelBuilder;
|
||||||
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
||||||
|
|
@ -75,6 +73,7 @@ public class PortalHomePage extends PortalPage {
|
||||||
List m_tabs;
|
List m_tabs;
|
||||||
|
|
||||||
private RequestLocal m_hasAdmin = new RequestLocal() {
|
private RequestLocal m_hasAdmin = new RequestLocal() {
|
||||||
|
@Override
|
||||||
public Object initialValue(PageState ps) {
|
public Object initialValue(PageState ps) {
|
||||||
PortalSite psite =
|
PortalSite psite =
|
||||||
PortalSite.getCurrentPortalSite(ps.getRequest());
|
PortalSite.getCurrentPortalSite(ps.getRequest());
|
||||||
|
|
@ -146,6 +145,7 @@ public class PortalHomePage extends PortalPage {
|
||||||
header.add(adminLink);
|
header.add(adminLink);
|
||||||
|
|
||||||
class SearchComponent extends SimpleContainer {
|
class SearchComponent extends SimpleContainer {
|
||||||
|
@Override
|
||||||
public void generateXML(PageState state, Element parent) {
|
public void generateXML(PageState state, Element parent) {
|
||||||
/*XXXjbp - *************************************************
|
/*XXXjbp - *************************************************
|
||||||
****This needs to be modified to use core search***********
|
****This needs to be modified to use core search***********
|
||||||
|
|
@ -392,10 +392,10 @@ public class PortalHomePage extends PortalPage {
|
||||||
|
|
||||||
private class CookieChangeListener implements ChangeListener {
|
private class CookieChangeListener implements ChangeListener {
|
||||||
public void stateChanged(ChangeEvent e) {
|
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");
|
Assert.exists(psite, "workspace");
|
||||||
|
|
||||||
HttpServletResponse response = ps.getResponse();
|
HttpServletResponse response = ps.getResponse();
|
||||||
|
|
@ -403,10 +403,8 @@ public class PortalHomePage extends PortalPage {
|
||||||
String tabName = (String)m_tabs.getSelectedKey(ps);
|
String tabName = (String)m_tabs.getSelectedKey(ps);
|
||||||
Cookie cookie = new Cookie(cookieNameString,tabName);
|
Cookie cookie = new Cookie(cookieNameString,tabName);
|
||||||
cookie.setMaxAge(36000);
|
cookie.setMaxAge(36000);
|
||||||
cookie.setComment(
|
cookie.setComment("This cookie returns you to the tab you " +
|
||||||
"This cookie returns you to the tab you " +
|
"had open when you last visited this portal.");
|
||||||
"had open when you last visited this portal."
|
|
||||||
);
|
|
||||||
response.addCookie(cookie);
|
response.addCookie(cookie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ package com.arsdigita.portalserver.ui.admin;
|
||||||
|
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.persistence.*;
|
import com.arsdigita.persistence.*;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -27,24 +29,72 @@ import org.apache.log4j.Logger;
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:rhs@mit.edu">rhs@mit.edu</a>
|
* @author <a href="mailto:rhs@mit.edu">rhs@mit.edu</a>
|
||||||
* @version $Revision: #5 $ $Date: 2004/08/17 $
|
* @version $Revision: #5 $ $Date: 2004/08/17 $
|
||||||
|
* @version $Id: PortalCreator.java#5 $
|
||||||
*/
|
*/
|
||||||
public class PortalCreator extends Application {
|
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
|
/** Logger instance for debugging */
|
||||||
(PortalCreator.class);
|
private static final Logger s_log = Logger.getLogger(PortalCreator.class);
|
||||||
|
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
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() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
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:
|
||||||
|
* <servlet>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
|
* <init-param>
|
||||||
|
* <param-name>template-path</param-name>
|
||||||
|
* <param-value>/templates/ccm-applicationName</param-value>
|
||||||
|
* </init-param>
|
||||||
|
* </servlet>
|
||||||
|
*
|
||||||
|
* <servlet-mapping>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <url-pattern>/ccm-applicationName/files/*</url-pattern>
|
||||||
|
* </servlet-mapping>
|
||||||
|
*
|
||||||
|
* NOTE: According to Servlet API the path always starts with a leading '/'
|
||||||
|
* and includes either the servlet name or a path to the servlet, but does
|
||||||
|
* not include any extra path information or a query string. Returns an
|
||||||
|
* empry string ("") is the servlet used was matched using the "/*" pattern.
|
||||||
|
*
|
||||||
|
* @return path name to the applications servlet/JSP
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getServletPath() {
|
||||||
|
return URL.SERVLET_DIR + "/portal-creator";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Peter Boy 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.ui.admin;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Page;
|
||||||
|
import com.arsdigita.templating.PresentationManager;
|
||||||
|
import com.arsdigita.templating.Templating;
|
||||||
|
import com.arsdigita.ui.login.UserAuthenticationListener;
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
public class PortalCreatorServlet extends BaseApplicationServlet {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
|
private static final Logger s_log = Logger.getLogger(PortalCreatorServlet.class);
|
||||||
|
|
||||||
|
private static final PresentationManager s_presManager =
|
||||||
|
Templating.getPresentationManager();
|
||||||
|
|
||||||
|
private static Page s_prtlCreatePage ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User extension point, initialize PortalCreator (index) page and add
|
||||||
|
* authentication check.
|
||||||
|
*
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doInit() throws ServletException {
|
||||||
|
|
||||||
|
s_prtlCreatePage = new PortalCreatePage();
|
||||||
|
s_prtlCreatePage.addRequestListener(new UserAuthenticationListener());
|
||||||
|
s_prtlCreatePage.lock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @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("PortalCreatorServlet.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;
|
||||||
|
doc = s_prtlCreatePage.buildDocument(sreq, sresp);
|
||||||
|
s_presManager.servePage(doc, sreq, sresp);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,8 @@ package com.arsdigita.portalserver.ui.admin;
|
||||||
|
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.persistence.*;
|
import com.arsdigita.persistence.*;
|
||||||
|
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -29,17 +31,65 @@ import org.apache.log4j.Logger;
|
||||||
*/
|
*/
|
||||||
public class PortalSiteMap extends Application {
|
public class PortalSiteMap extends Application {
|
||||||
|
|
||||||
private static final Logger s_log = Logger.getLogger
|
/** Logger instance for debugging */
|
||||||
(PortalSiteMap.class);
|
private static final Logger s_log = Logger.getLogger(PortalSiteMap.class);
|
||||||
|
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
"com.arsdigita.workspace.ui.PortalSiteMap";
|
"com.arsdigita.workspace.ui.PortalSiteMap";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constgructor
|
||||||
|
* @param dataObject
|
||||||
|
*/
|
||||||
|
public PortalSiteMap(DataObject dataObject) {
|
||||||
|
super(dataObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
protected String getBaseDataObjectType() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
return BASE_DATA_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PortalSiteMap(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:
|
||||||
|
* <servlet>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
|
* <init-param>
|
||||||
|
* <param-name>template-path</param-name>
|
||||||
|
* <param-value>/templates/ccm-applicationName</param-value>
|
||||||
|
* </init-param>
|
||||||
|
* </servlet>
|
||||||
|
*
|
||||||
|
* <servlet-mapping>
|
||||||
|
* <servlet-name>applicationName-files</servlet-name>
|
||||||
|
* <url-pattern>/ccm-applicationName/files/*</url-pattern>
|
||||||
|
* </servlet-mapping>
|
||||||
|
*
|
||||||
|
* NOTE: According to Servlet API the path always starts with a leading '/'
|
||||||
|
* and includes either the servlet name or a path to the servlet, but does
|
||||||
|
* not include any extra path information or a query string. Returns an
|
||||||
|
* empry string ("") is the servlet used was matched using the "/*" pattern.
|
||||||
|
*
|
||||||
|
* @return path name to the applications servlet/JSP
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getServletPath() {
|
||||||
|
return URL.SERVLET_DIR + "/portal-sitemap";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Peter Boy 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.ui.admin;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Page;
|
||||||
|
import com.arsdigita.bebop.PageFactory;
|
||||||
|
import com.arsdigita.templating.PresentationManager;
|
||||||
|
import com.arsdigita.templating.Templating;
|
||||||
|
import com.arsdigita.ui.login.UserAuthenticationListener;
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
public class PortalSiteMapServlet extends BaseApplicationServlet {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
|
private static final Logger s_log = Logger.getLogger(PortalSiteMapServlet.class);
|
||||||
|
|
||||||
|
private static final String XSL_HOOK = "portal-sitemap";
|
||||||
|
|
||||||
|
private static final PresentationManager s_presManager =
|
||||||
|
Templating.getPresentationManager();
|
||||||
|
|
||||||
|
private static Page s_indexPage = buildSiteMapPage();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User extension point, do some initializing
|
||||||
|
*
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doInit() throws ServletException {
|
||||||
|
s_log.debug("PortalSiteMapServlet doInit() initialization executing!");
|
||||||
|
|
||||||
|
// do nothing for now.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @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("PortalSiteMApServlet.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;
|
||||||
|
doc = s_indexPage.buildDocument(sreq, sresp);
|
||||||
|
s_presManager.servePage(doc, sreq, sresp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
static Page buildSiteMapPage() {
|
||||||
|
Page page = PageFactory.buildPage(XSL_HOOK, "Portal Site Map");
|
||||||
|
PortalSiteMapPanel sitemapPanel = new PortalSiteMapPanel(page);
|
||||||
|
page.add(sitemapPanel);
|
||||||
|
page.addRequestListener(new UserAuthenticationListener());
|
||||||
|
|
||||||
|
page.lock();
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -7,12 +7,63 @@
|
||||||
<!-- Servlets for the portalserver applications -->
|
<!-- Servlets for the portalserver applications -->
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>portalsite</servlet-name>
|
<servlet-name>portalsite</servlet-name>
|
||||||
<servlet-class>com.arsdigita.portalserver.PortalServlet</servlet-class>
|
<servlet-class>com.arsdigita.portalserver.PortalSiteServlet</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>portalsite-admin</servlet-name>
|
||||||
|
<servlet-class>com.arsdigita.portalserver.admin.PSAdminServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>portal-creator</servlet-name>
|
||||||
|
<servlet-class>com.arsdigita.portalserver.ui.admin.PortalCreatorServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>portal-sitemap</servlet-name>
|
||||||
|
<servlet-class>com.arsdigita.portalserver.ui.admin.PortalSiteMapServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>portal-personalportal</servlet-name>
|
||||||
|
<servlet-class>com.arsdigita.portalserver.personal.PersonalPortalServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>portal-personalportal</servlet-name>
|
||||||
|
<servlet-class>com.arsdigita.portalserver.personal.PersonalPortalCreatorServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>portalsite</servlet-name>
|
<servlet-name>portalsite</servlet-name>
|
||||||
<url-pattern>/templates/servlet/portalsite/*</url-pattern>
|
<url-pattern>/templates/servlet/portalsite/*</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>portalsite-admin</servlet-name>
|
||||||
|
<url-pattern>/templates/servlet/psadmin/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>portal-creator</servlet-name>
|
||||||
|
<url-pattern>/templates/servlet/portal-creator/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>portal-sitemap</servlet-name>
|
||||||
|
<url-pattern>/templates/servlet/portal-sitemap/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>portal-personalportal</servlet-name>
|
||||||
|
<url-pattern>/templates/servlet/personal-portal/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>portal-personalportal</servlet-name>
|
||||||
|
<url-pattern>/templates/servlet/personal-portal-creator/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
</web-app>
|
</web-app>
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<xsl:stylesheet
|
|
||||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
||||||
|
|
||||||
<xsl:include href="../../../packages/portalserver/xsl/portalserver.xsl"/>
|
|
||||||
</xsl:stylesheet>
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<xsl:stylesheet
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
version="1.0"
|
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
|
||||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
xmlns:portalserver="http://www.redhat.com/portalserver/1.0"
|
||||||
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
|
xmlns:portlet="http://www.arsdigita.com/portlet/1.0"
|
||||||
xmlns:portalserver="http://www.redhat.com/portalserver/1.0"
|
xmlns:km="http://www.arsdigita.com/km/1.0"
|
||||||
xmlns:portlet="http://www.arsdigita.com/portlet/1.0"
|
xmlns:deditor="http://www.arsdigita.com/deditor/1.0"
|
||||||
xmlns:km="http://www.arsdigita.com/km/1.0"
|
xmlns:admin="http://www.arsdigita.com/admin-ui/1.0"
|
||||||
xmlns:deditor="http://www.arsdigita.com/deditor/1.0"
|
xmlns:cms="http://www.arsdigita.com/cms/1.0"
|
||||||
xmlns:admin="http://www.arsdigita.com/admin-ui/1.0"
|
version="1.0">
|
||||||
xmlns:cms="http://www.arsdigita.com/cms/1.0">
|
|
||||||
|
|
||||||
<!-- The order of imports below is important. Please don't change
|
<!-- The order of imports below is important. Please don't change
|
||||||
them without appropriate testing. -->
|
them without appropriate testing. -->
|
||||||
|
|
@ -17,23 +16,31 @@
|
||||||
<xsl:import href="../../categorization/xsl/categorization.xsl"/>
|
<xsl:import href="../../categorization/xsl/categorization.xsl"/>
|
||||||
<xsl:import href="../../bebop/xsl/DimensionalNavbar.xsl"/>
|
<xsl:import href="../../bebop/xsl/DimensionalNavbar.xsl"/>
|
||||||
<xsl:import href="../../toolbox/xsl/ControlBar.xsl"/>
|
<xsl:import href="../../toolbox/xsl/ControlBar.xsl"/>
|
||||||
|
<!--
|
||||||
<xsl:import href="../../portlets/xsl/freeform-html-portlet.xsl"/>
|
<xsl:import href="../../portlets/xsl/freeform-html-portlet.xsl"/>
|
||||||
<!-- <xsl:import href="../../portlets/xsl/time-of-day-portlet.xsl"/> -->
|
<xsl:import href="../../portlets/xsl/time-of-day-portlet.xsl"/>
|
||||||
<xsl:import href="../../portlets/xsl/rss-feed-portlet.xsl"/>
|
<xsl:import href="../../portlets/xsl/rss-feed-portlet.xsl"/>
|
||||||
|
-->
|
||||||
|
|
||||||
<xsl:output method="html" indent="yes"/>
|
<xsl:output method="html" indent="yes"/>
|
||||||
|
|
||||||
<xsl:param name="internal-theme"/>
|
<xsl:param name="internal-theme"/>
|
||||||
|
<!-- Currently not used here
|
||||||
<xsl:param name="contextPath"/>
|
<xsl:param name="contextPath"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
<xsl:variable name="image-dir">{$internal-theme}/images/portalserver</xsl:variable>
|
<xsl:variable name="image-dir">{$internal-theme}/images/portalserver</xsl:variable>
|
||||||
<xsl:variable name="css-dir">{$internal-theme}/css/portalserver</xsl:variable>
|
<xsl:variable name="image-dir">/themes/heirloom/images/portalserver</xsl:variable>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
<xsl:template match="bebop:page[@class='portalserver']">
|
<xsl:template match="bebop:page[@class='portalserver']">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title><xsl:value-of select="bebop:title"/></title>
|
<title><xsl:value-of select="bebop:title"/></title>
|
||||||
<link href="{$css-dir}/portalserver.css" rel="stylesheet" type="text/css"/>
|
<link href="{$internal-theme}/css/portalserver/portalserver.css"
|
||||||
|
rel="stylesheet" type="text/css"/>
|
||||||
<xsl:for-each select="bebop:stylesheet">
|
<xsl:for-each select="bebop:stylesheet">
|
||||||
<link href="{@href}" rel="stylesheet" type="{@type}"/>
|
<link href="{@href}" rel="stylesheet" type="{@type}"/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
|
|
@ -62,7 +69,8 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title><xsl:value-of select="bebop:title"/></title>
|
<title><xsl:value-of select="bebop:title"/></title>
|
||||||
<link href="{$css-dir}/portalserver.css" rel="stylesheet" type="text/css"/>
|
<link href="{$internal-theme}/css/portalserver/portalserver.css"
|
||||||
|
rel="stylesheet" type="text/css"/>
|
||||||
<xsl:for-each select="bebop:stylesheet">
|
<xsl:for-each select="bebop:stylesheet">
|
||||||
<link href="{@href}" rel="stylesheet" type="{@type}"/>
|
<link href="{@href}" rel="stylesheet" type="{@type}"/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
|
|
@ -275,7 +283,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'W']">
|
<xsl:template match="bebop:link[@class = 'W']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/W_off.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/W_off.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -285,7 +294,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'NW']">
|
<xsl:template match="bebop:link[@class = 'NW']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NW_off.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NW_off.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -295,7 +305,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'WN']">
|
<xsl:template match="bebop:link[@class = 'WN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/WN_off.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/WN_off.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -305,7 +316,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'NWN']">
|
<xsl:template match="bebop:link[@class = 'NWN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NWN_off.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NWN_off.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -315,7 +327,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'NNN']">
|
<xsl:template match="bebop:link[@class = 'NNN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NNN_off.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NNN_off.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -325,7 +338,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:label[@class = 'W']">
|
<xsl:template match="bebop:label[@class = 'W']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/W_on.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/W_on.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -335,7 +349,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:label[@class = 'NW']">
|
<xsl:template match="bebop:label[@class = 'NW']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NW_on.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NW_on.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -345,7 +360,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:label[@class = 'WN']">
|
<xsl:template match="bebop:label[@class = 'WN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/WN_on.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/WN_on.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -355,7 +371,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:label[@class = 'NWN']">
|
<xsl:template match="bebop:label[@class = 'NWN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NWN_on.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NWN_on.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -365,7 +382,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:label[@class = 'NNN']">
|
<xsl:template match="bebop:label[@class = 'NNN']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/cw/NNN_on.png" border="0" width="70" height ="30">
|
<img src ="{$internal-theme}/images/portalserver/cw/NNN_on.png" border="0"
|
||||||
|
width="70" height ="30">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -391,7 +409,8 @@
|
||||||
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
|
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td class="inactiveTabColor" width="2"><img src="{$internal-theme}/images/spacer.gif" width="2"/></td>
|
<td class="inactiveTabColor" width="2">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="2"/></td>
|
||||||
<td class="splitPanelRight">
|
<td class="splitPanelRight">
|
||||||
<table width="100%" cellspacing="4" cellpadding="0" border="0">
|
<table width="100%" cellspacing="4" cellpadding="0" border="0">
|
||||||
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>
|
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>
|
||||||
|
|
@ -411,7 +430,9 @@
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td colspan="3" class="inactiveTabColor" height="2"><img src="{$internal-theme}/images/spacer.gif" height="2"/></td></tr>
|
<tr><td colspan="3" class="inactiveTabColor" height="2">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" height="2"/></td>
|
||||||
|
</tr>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%">
|
<td width="35%">
|
||||||
|
|
@ -419,7 +440,8 @@
|
||||||
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
|
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td class="inactiveTabColor" width="2"><img src="{$internal-theme}/images/spacer.gif" width="2"/></td>
|
<td class="inactiveTabColor" width="2">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="2"/></td>
|
||||||
<td width="65%">
|
<td width="65%">
|
||||||
<table width="100%" cellspacing="4" cellpadding="0" border="0">
|
<table width="100%" cellspacing="4" cellpadding="0" border="0">
|
||||||
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>
|
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>
|
||||||
|
|
@ -452,7 +474,8 @@
|
||||||
<tr height="3"><td></td></tr>
|
<tr height="3"><td></td></tr>
|
||||||
<tr height="23">
|
<tr height="23">
|
||||||
<td class="tabBeginningOff"><xsl:text>  </xsl:text></td>
|
<td class="tabBeginningOff"><xsl:text>  </xsl:text></td>
|
||||||
<td class="inactiveTab" nowrap="nowrap"><a href="{@href}"><xsl:apply-templates select="bebop:label"/></a>
|
<td class="inactiveTab" nowrap="nowrap">
|
||||||
|
<a href="{@href}"><xsl:apply-templates select="bebop:label"/></a>
|
||||||
</td>
|
</td>
|
||||||
<td class="tabEndOff"><xsl:text>  </xsl:text></td>
|
<td class="tabEndOff"><xsl:text>  </xsl:text></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -511,7 +534,8 @@
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="wideColumn">
|
<td class="wideColumn">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
|
|
@ -553,7 +577,8 @@
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="wideColumn">
|
<td class="wideColumn">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
|
|
@ -578,7 +603,8 @@
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="narrowColumn">
|
<td class="narrowColumn">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
|
|
@ -603,13 +629,15 @@
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="wideColumn">
|
<td class="wideColumn">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="narrowColumnRight">
|
<td class="narrowColumnRight">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '3']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '3']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
|
|
@ -634,13 +662,15 @@
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="narrowColumnCenter">
|
<td class="narrowColumnCenter">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '2']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:for-each>
|
</xsl:for-each>
|
||||||
</td>
|
</td>
|
||||||
<td class="columnSeparator"><img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
<td class="columnSeparator">
|
||||||
|
<img src="{$internal-theme}/images/spacer.gif" width="5"/></td>
|
||||||
<td class="narrowColumnRight">
|
<td class="narrowColumnRight">
|
||||||
<xsl:for-each select="bebop:portlet[@cellNumber = '3']">
|
<xsl:for-each select="bebop:portlet[@cellNumber = '3']">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:apply-templates select="."/>
|
||||||
|
|
@ -653,44 +683,69 @@
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<xsl:template match="bebop:portlet">
|
<xsl:template match="bebop:portlet">
|
||||||
<table class="portlet" cellspacing="0"> <!-- IE5.5 ignores border-spacing CSS prop, so cellspacing attr is necesssary -->
|
<table class="portlet" cellspacing="0">
|
||||||
|
<!-- IE5.5 ignores border-spacing CSS prop, so cellspacing attr is necesssary -->
|
||||||
<tr>
|
<tr>
|
||||||
<td class="portletHeader"><xsl:value-of select="@title"/></td>
|
<td class="portletHeader"><xsl:value-of select="@title"/></td>
|
||||||
<td class="portletIcon">
|
<td class="portletIcon">
|
||||||
<xsl:choose>
|
<xsl:choose>
|
||||||
<xsl:when test="@configure">
|
<xsl:when test="@configure">
|
||||||
<xsl:if test="@leftURL">
|
<xsl:if test="@leftURL">
|
||||||
<a href="{@leftURL}"><img src="{$image-dir}/Left16.gif" width="16" height="16" alt="Move Portlet left" align="bottom" border="0"/></a>
|
<a href="{@leftURL}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Left16.gif"
|
||||||
|
width="16" height="16" alt="Move Portlet left" align="bottom"
|
||||||
|
border="0"/>
|
||||||
|
</a>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
<xsl:if test="@prevURL">
|
<xsl:if test="@prevURL">
|
||||||
<a href="{@prevURL}"><img src="{$image-dir}/Up16.gif" width="16" height="16" alt="Move Portlet Up" align="bottom" border="0"/></a>
|
<a href="{@prevURL}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Up16.gif"
|
||||||
|
width="16" height="16" alt="Move Portlet Up"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
<xsl:if test="@nextURL">
|
<xsl:if test="@nextURL">
|
||||||
<a href="{@nextURL}"><img src="{$image-dir}/Down16.gif" width="16" height="16" alt="Move Portlet Down" align="bottom" border="0"/></a>
|
<a href="{@nextURL}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Down16.gif"
|
||||||
|
width="16" height="16" alt="Move Portlet Down"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
<xsl:if test="@rightURL">
|
<xsl:if test="@rightURL">
|
||||||
<a href="{@rightURL}"><img src="{$image-dir}/Right16.gif" width="16" height="16" alt="Move Portlet right" align="bottom" border="0"/></a>
|
<a href="{@rightURL}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Right16.gif"
|
||||||
|
width="16" height="16" alt="Move Portlet right"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
<xsl:if test="@cfgURL">
|
<xsl:if test="@cfgURL">
|
||||||
<a href="{@cfgURL}"><img src="{$image-dir}/Edit16.gif" width="16" height="16" alt="Customize Portlet" align="bottom" border="0"/></a>
|
<a href="{@cfgURL}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Edit16.gif"
|
||||||
|
width="16" height="16" alt="Customize Portlet"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
<a href="{@delURL}" onclick="return confirm('Are you sure you want to delete this portlet?')"><img src="{$image-dir}/Delete16.gif" width="16" height="16" alt="Remove Portlet" align="bottom" border="0"/></a>
|
<a href="{@delURL}"
|
||||||
|
onclick="return confirm('Are you sure you want to delete this portlet?')">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/Delete16.gif"
|
||||||
|
width="16" height="16" alt="Remove Portlet"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:when>
|
</xsl:when>
|
||||||
|
|
||||||
<xsl:otherwise>
|
<xsl:otherwise>
|
||||||
<xsl:choose>
|
<xsl:choose>
|
||||||
<xsl:when test="@applicationlink">
|
<xsl:when test="@applicationlink">
|
||||||
<a href="{@applicationlink}"><img src="{$image-dir}/ZoomIn16.gif" width="16" height="16" alt="Zoom In" align="bottom" border="0"/></a>
|
<a href="{@applicationlink}">
|
||||||
|
<img src="{$internal-theme}/images/portalserver/ZoomIn16.gif"
|
||||||
|
width="16" height="16" alt="Zoom In"
|
||||||
|
align="bottom" border="0"/></a>
|
||||||
</xsl:when>
|
</xsl:when>
|
||||||
|
|
||||||
<xsl:otherwise>
|
<xsl:otherwise>
|
||||||
<!-- replace with grayed out button -->
|
<!-- replace with grayed out button -->
|
||||||
<img src="{$internal-theme}/images/spacer.gif" width="16" height="16" align="bottom" border="0"/>
|
<img src="{$internal-theme}/images/spacer.gif"
|
||||||
|
width="16" height="16" align="bottom" border="0"/>
|
||||||
</xsl:otherwise>
|
</xsl:otherwise>
|
||||||
</xsl:choose>
|
</xsl:choose>
|
||||||
</xsl:otherwise>
|
</xsl:otherwise>
|
||||||
|
|
@ -760,7 +815,8 @@
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
<tr>
|
<tr>
|
||||||
<xsl:variable name="portletCount" select="count(portalserver:appsDisplayAppPortlet)"/>
|
<xsl:variable name="portletCount"
|
||||||
|
select="count(portalserver:appsDisplayAppPortlet)"/>
|
||||||
<td rowspan="{$portletCount}">
|
<td rowspan="{$portletCount}">
|
||||||
<xsl:apply-templates select="bebop:link[1]"/>
|
<xsl:apply-templates select="bebop:link[1]"/>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -778,7 +834,10 @@
|
||||||
<xsl:when test="$portletCount > 0">
|
<xsl:when test="$portletCount > 0">
|
||||||
<td class="numeric">1.</td>
|
<td class="numeric">1.</td>
|
||||||
<td><xsl:value-of select="portalserver:appsDisplayAppPortlet[1]/@name"/></td>
|
<td><xsl:value-of select="portalserver:appsDisplayAppPortlet[1]/@name"/></td>
|
||||||
<td class="icon"><xsl:apply-templates select="portalserver:appsDisplayAppPortlet[1]/bebop:link"/></td>
|
<td class="icon">
|
||||||
|
<xsl:apply-templates
|
||||||
|
select="portalserver:appsDisplayAppPortlet[1]/bebop:link"/>
|
||||||
|
</td>
|
||||||
</xsl:when>
|
</xsl:when>
|
||||||
<xsl:otherwise>
|
<xsl:otherwise>
|
||||||
<td class="numeric"><xsl:text> </xsl:text></td>
|
<td class="numeric"><xsl:text> </xsl:text></td>
|
||||||
|
|
@ -840,7 +899,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'shiftleft']">
|
<xsl:template match="bebop:link[@class = 'shiftleft']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/Up16.gif" border="0" width="16" height ="16">
|
<img src ="{$internal-theme}/images/portalserver/Up16.gif" border="0"
|
||||||
|
width="16" height ="16">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
@ -850,7 +910,8 @@
|
||||||
|
|
||||||
<xsl:template match="bebop:link[@class = 'shiftright']">
|
<xsl:template match="bebop:link[@class = 'shiftright']">
|
||||||
<a href="{@href}" onclick="{@onclick}">
|
<a href="{@href}" onclick="{@onclick}">
|
||||||
<img src ="{$image-dir}/Down16.gif" border="0" width="16" height ="16">
|
<img src ="{$internal-theme}/images/portalserver/Down16.gif" border="0"
|
||||||
|
width="16" height ="16">
|
||||||
<xsl:attribute name="alt">
|
<xsl:attribute name="alt">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
|
||||||
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
|
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
|
||||||
xmlns:ui="http://www.arsdigita.com/ui/1.0">
|
xmlns:ui="http://www.arsdigita.com/ui/1.0">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
A convenient collection of UI XSL templates
|
A convenient collection of UI XSL templates
|
||||||
|
|
|
||||||
|
|
@ -97,12 +97,6 @@ public class Initializer extends CompoundInitializer {
|
||||||
"WebLogs", "http://www.undp.org/weblog");
|
"WebLogs", "http://www.undp.org/weblog");
|
||||||
s_log.debug("Just added package type WebLog ");
|
s_log.debug("Just added package type WebLog ");
|
||||||
|
|
||||||
// Old style StylesheetResolver where location of stylesheets are stored
|
|
||||||
// in db and as well as mappings to applications.
|
|
||||||
// New style is pattern based, see cpom.arsdigita.templating
|
|
||||||
// Stylesheet entitySheet = Stylesheet
|
|
||||||
// .createStylesheet("/packages/weblog/xsl/weblog.xsl");
|
|
||||||
// entityType.addStylesheet(entitySheet);
|
|
||||||
|
|
||||||
entityType.setDispatcherClass(WebLogDispatcher.class.getName());
|
entityType.setDispatcherClass(WebLogDispatcher.class.getName());
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue