Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

This commit was manufactured by cvs2svn to create tag

'rel-2-5-1-RC3'.

git-svn-id: https://source.jasig.org/uPortal/tags/rel-2-5-1-RC3@10723 f5dbab47-78f9-eb45-b975-e544023573eb
  • Loading branch information...
commit 006100000a9f999e28a74b951ae73c5268e12c27 1 parent 057b647
infrastructure@lists.ja-sig.org authored
Showing with 7,470 additions and 5,065 deletions.
  1. +3 −3 README
  2. +11 −1 build.properties
  3. +1 −1  build.xml
  4. +55 −0 etc/uportal-quickstart-dist.sh
  5. +64 −0 etc/uportal-source-dist.sh
  6. BIN  lib/backport-util-concurrent.jar
  7. BIN  lib/portlets/RenderCountPortlet.war
  8. +2 −2 properties/PersonDirs.xml
  9. +22 −0 properties/al/fragments.xml
  10. +11 −1 properties/applicationContext.xml
  11. +1 −0  properties/beanRefFactory.xml
  12. +48 −0 properties/chanpub/render-count-portlet.xml
  13. +33 −0 properties/chanpub/timetitle.xml
  14. +4 −4 properties/db/data.xml
  15. +13 −0 properties/db/dbloader.xml
  16. +23 −5 properties/personDirectory.xml
  17. +83 −0 properties/statsContext.xml
  18. +23 −0 properties/whirlycache.xml
  19. +38 −290 releaseNotes.txt
  20. +0 −119 scripts/createTables-hypersonic.script
  21. +0 −15 scripts/dropTables.script
  22. +0 −269 scripts/populateTables.script
  23. +7 −0 source/org/jasig/portal/ChannelIncorporationFilter.java
  24. +93 −20 source/org/jasig/portal/ChannelManager.java
  25. +144 −27 source/org/jasig/portal/ChannelRenderer.java
  26. +6 −6 source/org/jasig/portal/ChannelRendererFactory.java
  27. +23 −1 source/org/jasig/portal/ChannelRuntimeData.java
  28. +51 −5 source/org/jasig/portal/ChannelRuntimeProperties.java
  29. +250 −61 source/org/jasig/portal/CharacterCachingChannelIncorporationFilter.java
  30. +1 −1  source/org/jasig/portal/DownloadDispatchWorker.java
  31. +1 −5 source/org/jasig/portal/GuestUserPreferencesManager.java
  32. +4 −1 source/org/jasig/portal/HttpProxyServlet.java
  33. +4 −1 source/org/jasig/portal/IChannel.java
  34. +25 −2 source/org/jasig/portal/MediaManager.java
  35. +0 −7 source/org/jasig/portal/PortalSessionManager.java
  36. +11 −5 source/org/jasig/portal/RDBMPortletPreferencesStore.java
  37. +73 −55 source/org/jasig/portal/RDBMServices.java
  38. +1 −3 source/org/jasig/portal/StandaloneChannelRenderer.java
  39. +28 −3 source/org/jasig/portal/StructureStylesheetUserPreferences.java
  40. +14 −1 source/org/jasig/portal/StylesheetUserPreferences.java
  41. +11 −0 source/org/jasig/portal/ThemeStylesheetUserPreferences.java
  42. +38 −32 source/org/jasig/portal/UserInstance.java
  43. +64 −2 source/org/jasig/portal/UserInstanceManager.java
  44. +7 −4 source/org/jasig/portal/UserPreferences.java
  45. +43 −101 source/org/jasig/portal/UserPreferencesManager.java
  46. +12 −1 source/org/jasig/portal/UserProfile.java
  47. +1 −1  source/org/jasig/portal/Version.java
  48. +1 −1  source/org/jasig/portal/car/ChannelDefinitionTagHandler.java
  49. +104 −18 source/org/jasig/portal/channels/CGenericXSLT.java
  50. +6 −6 source/org/jasig/portal/channels/CNumberGuess.java
  51. +101 −0 source/org/jasig/portal/channels/CTimeTitle.java
  52. +5 −1 source/org/jasig/portal/channels/DLMUserPreferences/TabColumnPrefsState.java
  53. +1 −1  source/org/jasig/portal/channels/cusermanager/CUserManager.java
  54. +7 −7 source/org/jasig/portal/channels/cusermanager/Constants.java
  55. +10 −10 source/org/jasig/portal/channels/cusermanager/provider/DefaultDataHandlerImpl.java
  56. +7 −7 source/org/jasig/portal/channels/error/CError.java
  57. +151 −121 source/org/jasig/portal/channels/portlet/CPortletAdapter.java
  58. +0 −3  source/org/jasig/portal/channels/portlet/ChannelData.java
  59. +41 −0 source/org/jasig/portal/channels/support/IChannelTitle.java
  60. +38 −0 source/org/jasig/portal/channels/support/IDynamicChannelTitleRenderer.java
  61. +44 −0 source/org/jasig/portal/channels/support/TitledChannelRuntimeProperties.java
  62. +239 −64 source/org/jasig/portal/channels/webproxy/CWebProxy.java
  63. +18 −1 source/org/jasig/portal/concurrency/caching/ReferenceEntityCache.java
  64. +25 −13 source/org/jasig/portal/concurrency/caching/ReferenceInvalidatingEntityCache.java
  65. +7 −3 source/org/jasig/portal/container/deploy/Deployer.java
  66. +4 −0 source/org/jasig/portal/container/om/entity/PortletEntityImpl.java
  67. +396 −364 source/org/jasig/portal/container/services/information/PortletStateManager.java
  68. +194 −0 source/org/jasig/portal/container/services/information/PortletWindowStateInfo.java
  69. +15 −2 source/org/jasig/portal/container/services/information/StaticInformationProviderImpl.java
  70. +13 −1 source/org/jasig/portal/container/services/property/PropertyManagerServiceImpl.java
  71. +87 −0 source/org/jasig/portal/container/servlet/PortletAttributeRequestWrapper.java
  72. +1 −1  source/org/jasig/portal/groups/PersonDirNameFinder.java
  73. +4 −3 source/org/jasig/portal/i18n/LocaleManager.java
  74. +5 −1 source/org/jasig/portal/jndi/JNDIManager.java
  75. +1 −1  source/org/jasig/portal/lang/Resources.java
  76. +8 −8 source/org/jasig/portal/lang/StackTrace.java
  77. +1 −1  source/org/jasig/portal/lang/ThrowableHelper.java
  78. +10 −5 source/org/jasig/portal/layout/alm/ALNode.java
  79. +67 −18 source/org/jasig/portal/layout/alm/AggregatedLayout.java
  80. +17 −1 source/org/jasig/portal/layout/alm/AggregatedLayoutManager.java
  81. +634 −321 source/org/jasig/portal/layout/alm/AggregatedUserLayoutStore.java
  82. +0 −2  source/org/jasig/portal/layout/dlm/ConfigurationLoader.java
  83. +0 −52 source/org/jasig/portal/layout/dlm/DistributedLayoutManager.java
  84. +40 −0 source/org/jasig/portal/layout/dlm/DistributedUserPreferences.java
  85. +0 −1  source/org/jasig/portal/layout/dlm/HandlerUtils.java
  86. +0 −3  source/org/jasig/portal/layout/dlm/ILFBuilder.java
  87. +0 −1  source/org/jasig/portal/layout/dlm/PLFIntegrator.java
  88. +18 −25 source/org/jasig/portal/layout/dlm/RDBMDistributedLayoutStore.java
  89. +0 −1  source/org/jasig/portal/layout/dlm/channels/guide/DlmIntroChannel.java
  90. +3 −0  source/org/jasig/portal/layout/node/UserLayoutChannelDescription.java
  91. +4 −0 source/org/jasig/portal/layout/node/UserLayoutNodeDescription.java
  92. +11 −8 source/org/jasig/portal/layout/restrictions/UserLayoutRestriction.java
  93. +5 −1 source/org/jasig/portal/layout/restrictions/alm/DepthRestriction.java
  94. +7 −5 source/org/jasig/portal/layout/simple/RDBMUserLayoutStore.java
  95. +1 −1  source/org/jasig/portal/rdbm/DatabaseMetaDataImpl.java
  96. +41 −5 source/org/jasig/portal/security/provider/RemoteUserPersonManager.java
  97. +9 −0 source/org/jasig/portal/security/provider/RemoteUserSecurityContext.java
  98. +4 −4 source/org/jasig/portal/serialize/BaseMarkupSerializer.java
  99. +21 −0 source/org/jasig/portal/serialize/CachingHTMLSerializer.java
  100. +22 −0 source/org/jasig/portal/serialize/CachingXHTMLSerializer.java
  101. +61 −79 source/org/jasig/portal/serialize/HTMLdtd.java
  102. +4 −34 source/org/jasig/portal/serialize/ProxyWriter.java
  103. +15 −7 source/org/jasig/portal/services/Authentication.java
  104. +156 −183 source/org/jasig/portal/services/StatsRecorder.java
  105. +265 −0 source/org/jasig/portal/services/persondir/support/CachingPersonAttributeDaoImpl.java
  106. +1 −1  source/org/jasig/portal/services/persondir/support/legacy/PersonDirInfoAdaptor.java
  107. +5 −0 source/org/jasig/portal/services/stats/BaseStatsRecorder.java
  108. +281 −0 source/org/jasig/portal/services/stats/ConditionalStatsRecorder.java
  109. +1 −0  source/org/jasig/portal/services/stats/DoNothingStatsRecorder.java
  110. +8 −1 source/org/jasig/portal/services/stats/IStatsRecorderFactory.java
  111. +122 −0 source/org/jasig/portal/services/stats/IStatsRecorderFlags.java
  112. +120 −0 source/org/jasig/portal/services/stats/LegacyStatsRecorderFactory.java
  113. +475 −0 source/org/jasig/portal/services/stats/ListStatsRecorder.java
  114. +96 −0 source/org/jasig/portal/services/stats/SettingsBackedStatsRecorderFlagsImpl.java
  115. +341 −0 source/org/jasig/portal/services/stats/StatsRecorderFlagsImpl.java
  116. +29 −22 source/org/jasig/portal/services/stats/StatsRecorderSettings.java
  117. +200 −0 source/org/jasig/portal/services/stats/ThreadFiringStatsRecorder.java
  118. +9 −18 source/org/jasig/portal/tools/ChannelServlet.java
  119. +94 −43 source/org/jasig/portal/tools/checks/ChecksServlet.java
  120. +9 −1 source/org/jasig/portal/tools/dbloader/DbUnload.java
  121. +1 −1  source/org/jasig/portal/utils/SAX2BufferImpl.java
  122. +9 −0 source/org/jasig/portal/utils/SAX2DuplicatingFilterImpl.java
  123. +4 −0 source/org/jasig/portal/utils/SAX2FilterImpl.java
  124. +13 −3 source/org/jasig/portal/utils/SoftHashMap.java
  125. +24 −33 source/org/jasig/portal/utils/SqlTransaction.java
  126. +27 −10 source/org/jasig/portal/utils/SubstitutionIntegerFilter.java
  127. +10 −6 source/org/jasig/portal/utils/SubstitutionServletOutputStream.java
  128. +7 −4 source/org/jasig/portal/utils/SubstitutionWriter.java
  129. +3 −0  source/org/jasig/portal/utils/cache/CacheFactory.java
  130. +28 −5 source/org/jasig/portal/utils/cache/WhirlyCacheCacheFactory.java
  131. +1 −0  source/org/jasig/portal/utils/threading/PriorityThreadFactory.java
  132. +51 −0 source/org/jasig/portal/utils/uri/BlockedUriException.java
  133. +30 −0 source/org/jasig/portal/utils/uri/IUriScrutinizer.java
  134. +208 −0 source/org/jasig/portal/utils/uri/PrefixUriScrutinizer.java
  135. +54 −0 tests/org/jasig/portal/container/services/information/StaticInformationProviderImplTest.java
  136. +7 −7 tests/org/jasig/portal/lang/ChainedThrowable_Test.java
  137. +1 −1  tests/org/jasig/portal/lang/Resources_Test.java
  138. +168 −0 tests/org/jasig/portal/services/persondir/support/CachingPersonAttributeDaoTest.java
  139. +325 −0 tests/org/jasig/portal/utils/uri/PrefixUriScrutinizerTest.java
  140. +4 −4 webpages/dtd/channelPublishingDocument.dtd
  141. +3 −31 webpages/error.jsp
  142. +3 −31 webpages/index.jsp
  143. BIN  webpages/media/org/jasig/portal/channels/CError/error_hide_trace.gif
  144. BIN  webpages/media/org/jasig/portal/channels/CError/error_reboot.gif
  145. BIN  webpages/media/org/jasig/portal/channels/CError/error_refresh.gif
  146. BIN  webpages/media/org/jasig/portal/channels/CError/error_show_trace.gif
  147. BIN  webpages/media/org/jasig/portal/channels/CError/transparent.gif
  148. BIN  webpages/media/org/jasig/portal/channels/CError/wrenchworks.gif
  149. +79 −2 webpages/media/org/jasig/portal/channels/CGenericXSLT/CGenericJustXSLT.cpd
  150. +83 −1 webpages/media/org/jasig/portal/channels/CGenericXSLT/CGenericXSLT.cpd
  151. +81 −1 webpages/media/org/jasig/portal/channels/CGenericXSLT/RSS/RSS.cpd
  152. +76 −7 webpages/media/org/jasig/portal/channels/webproxy/CWebProxy.cpd
  153. +0 −6 webpages/media/org/jasig/portal/layout/AL_TabColumn/integratedModes/cartoon/CVS/Entries
  154. +0 −1  webpages/media/org/jasig/portal/layout/AL_TabColumn/integratedModes/cartoon/CVS/Repository
  155. +0 −1  webpages/media/org/jasig/portal/layout/AL_TabColumn/integratedModes/cartoon/CVS/Root
  156. +0 −1  webpages/stylesheets/org/jasig/portal/channels/CChannelManager/html_en_US.xsl
  157. +12 −2 webpages/stylesheets/org/jasig/portal/channels/CContentSubscriber/html.xsl
  158. +0 −14 webpages/stylesheets/org/jasig/portal/channels/CError/CError.ssl
  159. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl
  160. +0 −13 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl.de_DE.dict
  161. +0 −13 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl.en_US.dict
  162. +0 −13 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl.it_IT.dict
  163. +0 −13 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl.ja_JP.dict
  164. +0 −13 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly.xsl.sv_SE.dict
  165. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_de_DE.xsl
  166. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_en_US.xsl
  167. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_it_IT.xsl
  168. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_ja_JP.xsl
  169. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_lv_LV.xsl
  170. +0 −56 webpages/stylesheets/org/jasig/portal/channels/CError/html_friendly_sv_SE.xsl
  171. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl
  172. +0 −33 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl.de_DE.dict
  173. +0 −33 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl.en_US.dict
  174. +0 −33 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl.it_IT.dict
  175. +0 −33 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl.ja_JP.dict
  176. +0 −33 webpages/stylesheets/org/jasig/portal/channels/CError/html_full.xsl.sv_SE.dict
  177. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_de_DE.xsl
  178. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_en_US.xsl
  179. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_it_IT.xsl
  180. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_ja_JP.xsl
  181. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_lv_LV.xsl
  182. +0 −222 webpages/stylesheets/org/jasig/portal/channels/CError/html_full_sv_SE.xsl
  183. +0 −148 webpages/stylesheets/org/jasig/portal/channels/CError/wml.xsl
  184. +17 −17 webpages/stylesheets/org/jasig/portal/channels/CSnoop/CSnoop.xsl
  185. +21 −0 webpages/stylesheets/org/jasig/portal/channels/CTimeTitle/CTimeTitle.xsl
  186. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_de_DE.xsl
  187. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_en_US.xsl
  188. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_it_IT.xsl
  189. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_ja_JP.xsl
  190. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_lv_LV.xsl
  191. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_friendly_sv_SE.xsl
  192. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_de_DE.xsl
  193. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_en_US.xsl
  194. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_it_IT.xsl
  195. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_ja_JP.xsl
  196. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_lv_LV.xsl
  197. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/html_full_sv_SE.xsl
  198. +1 −1  webpages/stylesheets/org/jasig/portal/channels/error/CError/wml.xsl
  199. +18 −1 webpages/stylesheets/org/jasig/portal/layout/AL_TabColumn/integratedModes/integratedModes.xsl
  200. +2 −2 webpages/stylesheets/org/jasig/portal/layout/DLM-tab-column/nested-tables/nested-tables.xsl
View
6 README
@@ -14,13 +14,13 @@ clean build directories and publish the uPortal build into a configured Tomcat i
accidentally run the build such that it overwrites a uPortal instance you care about. Locations affected by
the build are declared in build.properties.
-
+Backup your work before running builds.
Manifest
----------------------------------------
build.properties o Contains configuration for the build file that needs to
be customized for your environment.
-build.xml o Contains the ant build targets for working with uPortal.
+build.xml o Contains the Ant build targets for working with uPortal.
Ant Depdency
----------------------------------------
@@ -62,7 +62,7 @@ version of the portal is configured.
Logging
---------------------------------------
-The ant build moves /properties/Logger.properties to the root of the classes directory so that the resulting
+The ant build copies /properties/Logger.properties to the root of the classes directory so that the resulting
log4j.properties file will be available on the classpath for Commons Logging / log4j to find. You'll need to either
change that configuration in Logger.properties before the build or to change it in /WEB-INF/classes/ afterwards.
You can configure the logging level, where the file should be, or even choose a different logging approach (log
View
12 build.properties
@@ -15,7 +15,7 @@
#==================== File and Directory Names ========================
app.name=uPortal
-app.version=2.5.0-RC3
+app.version=2.5.1_RC3
lib.path=lib
server.home=/JavaClasses/jakarta-tomcat-5.0.28
@@ -35,6 +35,16 @@ deploy.home=${server.home}/webapps/${webapp.docBase}
webapp.contextFile=uPortal.xml
# prototype context file for use with Tomcat 5.5
+#
+# Note that if you use this context file to declare one or more DataSources you would like
+# the Tomcat 5.5 servlet container to instantiate and make available to uPortal via JNDI,
+# you also need to make the .jar files implementing those datasources available to
+# Tomcat 5.5 by installing them into the /common/lib directory of your Tomcat 5.5 instance.
+# Without the required .jar(s), Tomcat will be unable to instantiate the DataSource.
+#
+# The build.xml build process does not currently install the database driver jar
+# (Declared as jdbcDriver.jar below) into Tomcat 5.5 /common/lib. You will need to do this manually.
+#
#webapp.contextFile=uPortal55.xml
#==================== Compilation Control Options =====================
View
2  build.xml
@@ -1346,7 +1346,7 @@
<target name="pubchan" description="Publishes channels" depends="compile">
<echo message="Invoking Channel Publisher Tool"/>
- <property name="channel" value=" "/>
+ <property name="channel" value="all"/>
<java fork="true" failonerror="true" dir="${basedir}" classname="org.jasig.portal.tools.chanpub.ChannelPublisher">
<classpath>
<pathelement path="${build.home}/WEB-INF/classes"/>
View
55 etc/uportal-quickstart-dist.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# $Id$
+# This script will package up a uPortal quickstart distribution
+#
+
+if [ -z "$3" ]; then
+ echo usage: $0 release-tag uportal-src-dir old-quickstart-dir
+ exit
+fi
+
+RELEASE=uPortal_$1-quick-start
+SRC=$2
+QSDIR=$3
+
+#
+# Create root dir for quick-start distribution
+#
+echo $RELEASE
+mkdir $RELEASE
+cd $RELEASE
+
+#
+# Move in uPortal source distribution and quickstart scripts
+#
+#
+cp -r $SRC .
+cp $SRC/etc/quickstart/* .
+
+#
+# Move in quickstart resources from previously release
+# (is there a better way to do a quickstart?)
+#
+cp -r $QSDIR/Ant_1-6-2 .
+cp -r $QSDIR/HSQLDB_1-7-2-4 .
+cp -r $QSDIR/Tomcat_5-0-28 .
+
+
+echo "done!"
+echo "Now..."
+echo "update server.home in uPortal build.properties"
+echo "start hsqldb - ant hsql"
+echo "set getDatasourceFromJNDI in portal.properties to true
+echo "run ant deploy in uPortal home"
+echo "start tomcat, ant tomcatstart, and check for no errors in portal.log"
+echo "stop HSQL and Tomcat"
+echo "rm uPortal/build, and Tomcat work and logs, and portal.log"
+echo "run fix-unix-modes.sh"
+echo "zip -r uPortal_X-X-X-quick-start uPortal_X-X-X-quick-start"
+echo ""
+echo "scp the release to www.jasig.org:/var/www/html/ja-sig/uportaldist"
+echo "update download.html page."
+echo "update cvs.html page."
+echo "update index.html with news about releases."
+exit
View
64 etc/uportal-source-dist.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+#
+# $Id$
+# This script will package up a uPortal source distribution
+#
+
+
+if [ -z "$1" ]; then
+ echo usage: $0 release-tag
+ exit
+fi
+
+#
+# Export release tag
+#
+cvs -d:pserver:anonymous@mis105.mis.udel.edu:/home/cvs/jasig login
+cvs -d:pserver:anonymous@mis105.mis.udel.edu:/home/cvs/jasig export -r $1 portal
+
+#
+# Remove website directory, build.xml and README in ./docs
+# These are used to maintain the website and are not
+# needed in the distribution. Is there a better place for these?
+#
+rm -rf ./portal/docs/website
+rm ./portal/docs/build.xml
+rm ./portal/docs/README
+
+#
+# Remove .cvsignore files.
+#
+find . -name ".cvsignore" | xargs rm
+
+#
+# Remove .dict files. (should these be moved to the attic?)
+#
+find . -name "*.dict" | xargs rm
+
+#
+# Create JavaDoc
+#
+cd portal
+ant javadoc
+mv ./dist/docs/api ./docs/
+ant clean
+cd ../
+
+#
+# Rename model to uPortal_{release-tag}
+#
+mv portal uPortal_$1
+
+#
+# Zip up distribution
+#
+zip -r uPortal_$1 uPortal_$1
+
+echo "done!"
+echo "Now..."
+echo "scp the release to www.jasig.org:/var/www/html/ja-sig/uportaldist"
+echo "update download.html page."
+echo "update cvs.html page."
+echo "update index.html with news about releases."
+exit
View
BIN  lib/backport-util-concurrent.jar
Binary file not shown
View
BIN  lib/portlets/RenderCountPortlet.war
Binary file not shown
View
4 properties/PersonDirs.xml
@@ -88,7 +88,7 @@
<res-ref-name>DEFAULT_DATABASE</res-ref-name>
- <uidquery>SELECT FIRST_NAME||' '||LAST_NAME AS FIRST_LAST, FIRST_NAME, LAST_NAME, EMAIL FROM UP_PERSON_DIR WHERE USER_NAME=?</uidquery>
+ <uidquery>SELECT FIRST_NAME, LAST_NAME, EMAIL FROM UP_PERSON_DIR WHERE USER_NAME=?</uidquery>
<attributes>
@@ -101,7 +101,7 @@
<attribute><alias>c</alias> <name></name></attribute>
<attribute><alias>cn</alias> <name></name></attribute>
<attribute><alias>description</alias> <name></name></attribute>
- <attribute><alias>displayName</alias> <name>FIRST_LAST</name></attribute>
+ <attribute><alias>displayName</alias> <name>FIRST_NAME</name></attribute>
<attribute><alias>facsimileTelephoneNumber</alias> <name></name></attribute>
<attribute><alias>givenName</alias> <name>FIRST_NAME</name></attribute>
<attribute><alias>homePhone</alias> <name></name></attribute>
View
22 properties/al/fragments.xml
@@ -110,16 +110,38 @@
<channel fname="missing-properties" immutable="Y" unremovable="Y" hidden="N"/>
<channel fname="person-attributes" immutable="Y" unremovable="Y" hidden="N"/>
<channel fname="css-viewer" immutable="Y" unremovable="Y" hidden="N"/>
+
</folder>
<folder name="column2" immutable="Y" unremovable="Y" hidden="N">
<channel fname="snooper" immutable="Y" unremovable="Y" hidden="N"/>
<channel fname="uportal-development-books" immutable="Y" unremovable="Y" hidden="N"/>
<channel fname="uportal-data-dictionary" immutable="Y" unremovable="Y" hidden="N"/>
<channel fname="uportal-developers-reference" immutable="Y" unremovable="Y" hidden="N"/>
+
</folder>
</folder>
</fragment>
+ <fragment name="dynamicTitles" type="pushed">
+ <description>Demonstrates dynamic title feature.</description>
+ <groups>
+ <group>Everyone</group>
+ <group>Guests</group>
+ </groups>
+ <restrictions>
+ <restriction path="local" name="priority" value="1000-2000"/>
+ <restriction path="local" name="depth" value="1"/>
+ </restrictions>
+ <folder name="Dynamic Titles" immutable="Y" unremovable="Y" hidden="N">
+ <folder name="column1" immutable="Y" unremovable="Y" hidden="N">
+ <channel fname="timetitle" immutable="Y" unremovable="Y" hidden="N"/>
+ </folder>
+ <folder name="column2" immutable="Y" unremovable="Y" hidden="N">
+ <channel fname="render-count-portlet" immutable="Y" unremovable="Y" hidden="N"/>
+ </folder>
+ </folder>
+ </fragment>
+
<fragment name="Portlet-examples" type="pushed">
<description>Channels that demonstrate the portlet adapter</description>
<groups>
View
12 properties/applicationContext.xml
@@ -11,8 +11,18 @@
| Here we define additional startup checks. These are in addition to hard-coded checks that
| are intended to detect problems that would prevent us from reading in and using these
| configurable checks.
+ |
+ | This bean is lazy-init so that it will not be instantiated by Spring
+ | unless actually needed. This reduces the chance that a broken checks
+ | configuration, or one that depends on resources that are unavailable
+ | (such as JNDI resources outside the context of a JNDI container)
+ | will not break the use of a uPortal administrative tool / break a
+ | uPortal deployment.
+ |
+-->
- <bean id='checkRunner' class="org.jasig.portal.tools.checks.BasicCheckRunner">
+ <bean id='checkRunner'
+ class="org.jasig.portal.tools.checks.BasicCheckRunner"
+ lazy-init="true">
<property name="checks">
<list>
View
1  properties/beanRefFactory.xml
@@ -22,6 +22,7 @@
<value>properties/applicationContext.xml</value>
<value>properties/cacheContext.xml</value>
<!--
+ <value>properties/statsContext.xml</value>
<value>properties/jmxContext.xml</value>
-->
</list>
View
48 properties/chanpub/render-count-portlet.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE channel-definition SYSTEM "channelDefinition.dtd">
+
+<!--
+ | This channel publishing fragment defines a channel for the
+ | Render Count portlet, an example JSR-168 that exercises the
+ | dynamic portlet title feature.
+ +-->
+
+<channel-definition>
+
+ <title>Render Count Portlet</title>
+ <name>Render Count Portlet</name>
+ <fname>render-count-portlet</fname>
+ <desc>Demonstrates dynamic portlet titles.</desc>
+ <type>Portlet</type>
+ <class>org.jasig.portal.channels.portlet.CPortletAdapter</class>
+ <timeout>60000</timeout>
+
+ <hasedit>N</hasedit>
+ <hashelp>N</hashelp>
+ <hasabout>N</hasabout>
+
+ <secure>N</secure>
+ <locale>en_US</locale>
+
+ <categories>
+ <category>Development</category>
+ </categories>
+
+ <groups>
+ <group>Everyone</group>
+ </groups>
+
+ <parameters>
+
+ <!-- The syntax of the ID is [portlet-context-name].[portlet-name] -->
+ <parameter>
+ <name>portletDefinitionId</name>
+ <value>RenderCountPortlet.RenderCount</value>
+ <description>Identifies the portlet deployed within the portlet container</description>
+ <ovrd>N</ovrd>
+ </parameter>
+
+ </parameters>
+
+</channel-definition>
View
33 properties/chanpub/timetitle.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE channel-definition SYSTEM "channelDefinition.dtd">
+
+<channel-definition>
+
+ <title>Dynamic Time Channel Title</title>
+ <name>Dynamic Time Channel Title</name>
+ <fname>timetitle</fname>
+ <desc>Channel for testing support for dynamic channel titles.</desc>
+ <type>Custom</type>
+ <class>org.jasig.portal.channels.CTimeTitle</class>
+ <timeout>5000</timeout>
+
+ <hasedit>N</hasedit>
+ <hashelp>N</hashelp>
+ <hasabout>N</hasabout>
+
+ <secure>N</secure>
+ <locale>en_US</locale>
+
+ <categories>
+ <category>Development</category>
+ </categories>
+
+ <groups>
+ <group>Everyone</group>
+ <group>Guests</group>
+ </groups>
+
+ <parameters/>
+
+</channel-definition>
View
8 properties/db/data.xml
@@ -10,7 +10,7 @@
<column><name>FNAME</name><value>UP_FRAMEWORK</value></column>
<column><name>MAJOR</name><value>2</value></column>
<column><name>MINOR</name><value>5</value></column>
- <column><name>MICRO</name><value>0</value></column>
+ <column><name>MICRO</name><value>1</value></column>
<column><name>DESCRIPTION</name><value>The uPortal Framework.</value></column>
</row>
</rows>
@@ -1104,7 +1104,7 @@
<column><name>CHAN_TITLE</name><value>Session Locale Selector</value></column>
<column><name>CHAN_NAME</name><value>Session Locale Selector</value></column>
<column><name>CHAN_DESC</name><value>A tool for selecting a locale</value></column>
- <column><name>CHAN_CLASS</name><value>org.jasig.portal.channels.layout.locales.CSessionLocalesSelector</value></column>
+ <column><name>CHAN_CLASS</name><value>org.jasig.portal.layout.channels.locales.CSessionLocalesSelector</value></column>
<column><name>CHAN_TYPE_ID</name><value>-1</value></column>
<column><name>CHAN_PUBL_ID</name><value>0</value></column>
<column><name>CHAN_PUBL_DT</name><value>SYSDATE</value></column>
@@ -3853,8 +3853,8 @@
<column><name>PROFILE_NAME</name><value>HTML browser profile</value></column>
<column><name>DESCRIPTION</name><value>A sample profile for common web browsers</value></column>
<column><name>LAYOUT_ID</name><value>1</value></column>
- <column><name>STRUCTURE_SS_ID</name>4</column>
- <column><name>THEME_SS_ID</name>3</column>
+ <column><name>STRUCTURE_SS_ID</name><value>4</value></column>
+ <column><name>THEME_SS_ID</name><value>3</value></column>
</row>
</rows>
</table>
View
13 properties/db/dbloader.xml
@@ -54,6 +54,19 @@
<db-type-mapping>
<db-name>Microsoft SQL Server</db-name>
+ <db-version>08.00.0760</db-version>
+ <driver-name>jTDS Type 4 JDBC Driver for MS SQL Server and Sybase</driver-name>
+ <driver-version>1.0.3</driver-version>
+ <type><generic>INTEGER</generic><local>INTEGER</local></type>
+ <type><generic>VARCHAR</generic><local>VARCHAR</local></type>
+ <type><generic>TEXT</generic><local>TEXT</local></type>
+ <type><generic>TIMESTAMP</generic><local>DATETIME</local></type>
+ <type><generic>LONGVARCHAR</generic><local>NTEXT</local></type>
+ <!-- map more types here -->
+ </db-type-mapping>
+
+ <db-type-mapping>
+ <db-name>Microsoft SQL Server</db-name>
<db-version>07.00.0699</db-version>
<driver-name>JDBC-ODBC Bridge (SQLSRV32.DLL)</driver-name>
<driver-version>2.0001 (03.70.0820)</driver-version>
View
28 properties/personDirectory.xml
@@ -60,9 +60,21 @@
PersonDirectory acquires when it asks for the bean of that name.
-->
- <!-- Legacy Person Directory configruation. This will read the config from PersonDirs.xml
- and otherwise emulate pre-2.5 PersonDirectory behavior. -->
- <bean id="personAttributeDao" class="org.jasig.portal.services.persondir.support.legacy.LegacyPersonAttributeDao"/>
+ <!--
+ | Legacy Person Directory configruation. This will read the config from PersonDirs.xml
+ | and otherwise emulate pre-2.5 PersonDirectory behavior.
+ |
+ | This bean is marked lazy-init="true" so that Spring will not eagerly
+ | initialize this bean when the PortalApplicationContextFacade is touched.
+ | This avoids unnecessarily building the instantiating the PersonAttributeDao i
+ | mplementation where it is not being used and where it may not have the
+ | resources it needs to be used, e.g. when running outside the context of
+ | a JNDI container.
+ |
+ +-->
+ <bean id="personAttributeDao"
+ class="org.jasig.portal.services.persondir.support.legacy.LegacyPersonAttributeDao"
+ lazy-init="true" />
<!--
| Example Person Directory configuration using the Spring implementation,
@@ -74,8 +86,14 @@
| The 'username' attribute is what is configured by default in the code
| for simple string queries via the IPersonAttributeDao interfaces
+-->
- <!--
- <bean id="personAttributeDao" class="org.jasig.portal.services.persondir.support.MergingPersonAttributeDaoImpl">
+ <!--
+ <bean id="personAttributeDao" class="org.jasig.portal.services.persondir.support.CachingPersonAttributeDaoImpl">
+ <property name="cachedPersonAttributesDao">
+ <ref bean="mergedPersonAttributeDao"/>
+ </property>
+ </bean>
+
+ <bean id="mergedPersonAttributeDao" class="org.jasig.portal.services.persondir.support.MergingPersonAttributeDaoImpl">
<property name="personAttributeDaos">
<list>
<ref bean="uPortalJdbcAttributeSource"/>
View
83 properties/statsContext.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+<beans>
+<!--
+ | The parent bean is the Conditional wrapper because first we want to filter down to
+ | the events we're actually going to log.
+ +-->
+ <bean name="statsRecorder"
+ class="org.jasig.portal.services.stats.ConditionalStatsRecorder">
+ <property name="flags">
+ <!--
+ | This JavaBean lets us configure which events we'd like the Conditional
+ | wrapper to propogate. The flags default to false so we need only declared those
+ | methods we would like to propogate.
+ +-->
+ <bean class="org.jasig.portal.services.stats.StatsRecorderFlagsImpl">
+ <property name="recordLogin" value="true"/>
+ <property name="recordLogout" value="true"/>
+ <property name="recordSessionCreated" value="true"/>
+ <property name="recordSessionDestroyed" value="true"/>
+ <property name="recordChannelDefinitionPublished" value="true"/>
+ <property name="recordChannelDefinitionModified" value="true"/>
+ <property name="recordChannelDefinitionRemoved" value="true"/>
+ <property name="recordChannelAddedToLayout" value="true"/>
+ <property name="recordChannelUpdatedInLayout" value="true"/>
+ <property name="recordChannelMovedInLayout" value="true"/>
+ <property name="recordChannelRemovedFromLayout" value="true"/>
+ <property name="recordFolderAddedToLayout" value="true"/>
+ <property name="recordFolderUpdatedInLayout" value="true"/>
+ <property name="recordFolderMovedInLayout" value="true"/>
+ <property name="recordFolderRemovedFromLayout" value="true"/>
+
+ <property name="recordChannelInstantiated" value="false"/>
+ <property name="recordChannelRendered" value="false"/>
+ <property name="recordChannelTargeted" value="false"/>
+ </bean>
+ </property>
+
+ <!--
+ | The Conditional stats recorder will call this target when its condition is fulfilled, that is
+ | when the method call is recordChannelRendered(). IStatsRecorder calls other than
+ | recordChannelRendered will have no effect, that is, are filtered away
+ | by the Conditional stats recorder.
+ +-->
+ <property name="targetStatsRecorder">
+ <!--
+ | The target of the Conditional is the thread firing wrapper so that we'll use separate
+ | threads to perform the actual logging.
+ +-->
+ <bean class="org.jasig.portal.services.stats.ThreadFiringStatsRecorder">
+ <!-- initial thread pool size -->
+ <constructor-arg value="5"/>
+ <!-- maximum thread pool size -->
+ <constructor-arg value="15"/>
+ <!-- thread priority -->
+ <constructor-arg value="5"/>
+
+ <!--
+ | The target of the threads we fire is this LoggingStatsRecorder instance.
+ +-->
+ <property name="targetStatsRecorder">
+ <bean class="org.jasig.portal.services.stats.LoggingStatsRecorder"/>
+ </property>
+ <!--
+ | Below is an example of using listStatsRecorder to log to more than one IStatsRecorder.
+ +-->
+ <!--
+ <property name="targetStatsRecorder">
+ <bean class="org.jasig.portal.services.stats.ListStatsRecorder">
+ <property name="children">
+ <list>
+ <bean class="org.jasig.portal.services.stats.LoggingStatsRecorder"/>
+ <bean class="edu.cornell.uportal.channels.runtimeinfo.providers.Statistics"/>
+ </list>
+ </property>
+ </bean>
+ </property>
+ -->
+ </bean>
+ </property>
+ </bean>
+</beans>
+
View
23 properties/whirlycache.xml
@@ -1,3 +1,9 @@
+<!--
+ | The 'expire-time' element is specific to the WhirlyCacheCacheFactory class. Maps
+ | backed by whirly cache generated by the factory look for this property. If specified
+ | it is the expiration time set on each item added to the cache. The value is an int
+ | specified in seconds.
+ +-->
<whirlycache>
<default-cache>default</default-cache>
@@ -23,4 +29,21 @@
<maxsize>150</maxsize>
</cache>
+
+
+ <!-- CACHE USED BY THE PERSON_ATTRIBUTE_DAO -->
+ <cache name="userInfoCache">
+ <backend>com.whirlycott.cache.impl.ConcurrentHashMapImpl</backend>
+
+ <!-- define time interval that cleanup thread will run in number of seconds -->
+ <tuner-sleeptime>60</tuner-sleeptime>
+
+ <!-- evicts least recently used items when pruning -->
+ <policy>com.whirlycott.cache.policy.LRUMaintenancePolicy</policy>
+
+ <maxsize>150</maxsize>
+
+ <!-- evicts items older than the specified time (in seconds) when pruning -->
+ <expire-time>600</expire-time>
+ </cache>
</whirlycache>
View
328 releaseNotes.txt
@@ -2,327 +2,75 @@ This is a file for notes specific to the uPortal release that the code you're lo
either is (in the case of a tagged release) or will become (in the case of the tip of a patches or main branch).
-Release notes for uPortal 2.5.0 RC 3:
-
-
-
-This is the third and likely final uPortal 2.5.0 Release Candidate.
-
+Release notes for uPortal 2.5.1 RC2 (release candidate):
Known issues
-
-There are many known bugs in this release. You can query our JIRA system for known issues affecting this release, including
-issues discovered after this release went to press.
+There are many known bugs in uPortal. We expect there are many fewer of them in this release than in 2.5.0.
+You can query our JIRA system for known issues affecting this release, including
+issues discovered after this release was cut.
http://jasigch.princeton.edu:9000/jira/
Search for issues with a "Matches Versions" of this release.
-This release includes several improvements and fixes beyond 2.5.0 RC 2, which in turn included many
-changes beyond 2.5.0 RC 1, and 2.5.0 M1.
-
-Here are links to dynamic issue information. At the end of this file is a snapshot of the change log.
-
-You can ask our JIRA issue tracking sytem to generate notes for this release:
+Upgrading:
-http://jasigch.princeton.edu:9000/jira/secure/IssueNavigator.jspa?reset=true&pid=10020&fixfor=10141
+CWebProxy and CGenericXSLT changed for this release to address security vulnerabilities.
+These channels honor fewer ChannelRuntimeParameters now.
+This will not affect most deployments. A few deployments will need to re-examine CWebProxy and re-implement the
+insecure features that were removed in more secure ways. CWebProxy also changed to require that the xmlUri be
+an http:// or https:// URI. You can make this rule more or less restrictive by publish-time configuration of
+CWebProxy instances. (UP-1253)
-You can ask our JIRA issue tracking system to generate notes for the 2.5.0 RC 2 release upon which this release builds:
+While your current IChannels and theme transforms will work unchanged in uPortal 2.5.1 if they worked in 2.5.0,
+transforms require minor changes and channels potentially major changes to take advantage of dynamic
+channel titles. CTimeTitle and the changes to the ALM / Integration Modes theme transform provide an example.
-http://jasigch.princeton.edu:9000/jira/secure/ReleaseNote.jspa?projectId=10020&styleName=Html&version=10142
+RDBMServices changed to stop declaring some SQLExceptions it would never throw. Code catching those exceptions
+will no longer compile (compile will fail with an unreachable catch block error). Fixing this is trivial:
+remove the unreachable catch blocks.
-and for the 2.5.0 RC1 release upon which this release builds, here:
-http://jasigch.princeton.edu:9000/jira/secure/ReleaseNote.jspa?projectId=10020&styleName=Html&version=10140
-and for the 2.5.0 M1 release upon which the 2.5.0 RC1 release builds, here:
+Major new features and improvements in this release:
-http://jasigch.princeton.edu:9000/jira/secure/ReleaseNote.jspa?projectId=10020&styleName=Html&version=10096
+Dynamic channel titles: now channels can specify at runtime their desired title, instead of just using
+a title configured at the time of channel publication. CPortletAdapter needs enhancement to take advantage of this
+feature to present dynamic portlet titles as dynamic channel titles.
+Support for multiple stats recorders.
+Inherent threadsafety of SoftHashMap.
+And many more minor enhancements.
-Please make known any issues you discover with this release.
-The release egineer's system:
+Bug fixes in this release:
-Lynn Hollerman asked that we document what systems a release was tested on. For what it's worth:
-the release engineer (Andrew Petro, Yale) informally tested this release
-before tagging on
-a Windows / Tomcat 5.0.25 / Java 1.4.2_04 with JAXP 1.3 extensions against the default HSQLDB database via
-the clean, runtests, initportal Ant build sequence.
+Reduction of excessive object creation.
+Threadsafety of system cache.
+And many more minor bug fixes.
-The actual release distribution was produced on a Red Hat linux machine using Jdk 1.5.0_02 . (Note: since you'll need to
-build from source for your environment, as the distribution does not contain uPortal .class, .jar, or .war files produced
-by the build, using JDK 1.5 to produce the release should not affect JDK 1.4 compatibility.)
-CHANGE LOG:
-uPortal - Version 2.5.0 RC3
-Bug
- * [UP-1004] - RDBMChannelRegistryStore needs prepared statements
- * [UP-1048] - Locale selector channel not showing for logged in users when using DLM.
- * [UP-1068] - New Fragment Owners don't get the layout of the dlm template user.
- * [UP-1076] - UserLayoutStoreFactory double checked locking
- * [UP-1080] - Portlet redirects leave ChannelManager in inconsistent state
- * [UP-1081] - Double checked locking in PooledDataSourceFactoryFactory
- * [UP-1082] - PooledDataSourceFactoryFactory default broken
- * [UP-1087] - PortletPreferencesStoreFactory double checked locking
- * [UP-1089] - reset of layout does not use new template
- * [UP-1096] - FragmentActivator.bindToOwner() Exception caught needs to be logged at error or warn level
- * [UP-1104] - Two points in XSLT don't include available document location info in exceptions
- * [UP-1113] - ServletRequestImpl is not used during render phase of portlets
- * [UP-1116] - Check for DOM3 remediation advice for JDK 1.5
+Database schema changes
-Task
+There are no database schema changes between uPortal 2.5.0 and uPortal 2.5.1.
- * [UP-1036] - Include Jira-produced and more literate release notes
- * [UP-1078] - update version
+There were minor database schema changes between uPortal 2.4.x and uPortal 2.5.0. These affect Aggregated Layouts.
-Improvement
- * [UP-987] - Make guest layout a fragment in DLM and editable by non-guest, admin user.
- * [UP-1059] - Need DLM Admin page in documentation
- * [UP-1065] - Log info message when layout components loaded
- * [UP-1083] - DBCPDataSourceFactory maintenance
- * [UP-1084] - Specify Map argument to IPersonAttributeDao to be immutable
- * [UP-1093] - Add documentation channel to error handling fragment
- * [UP-1095] - Add JAXP13 sanity check to checks run by CheckingContextListener
- * [UP-1099] - declare @since JavaDoc tag in org.jasig.portal.tools.checks classes
- * [UP-1101] - Note db schema changes in release notes
- * [UP-1103] - Add DOM3 sanity check to checks run by CheckingContextListener
- * [UP-1105] - DLM daemon threads don't have descriptive names.
- * [UP-1117] - Fixed logging of exceptions to include stack trace.
+Discussing this release and reporting issues:
+Please discuss this release on the uPortal project discussion lists. Please post issues discovered into JIRA.
-uPortal - Version 2.5.0 RC2
-Bug
+Release engineer's environment:
- * [UP-198] - HTMLSerializer shorthands all empty HTML elements
- * [UP-769] - Losing Portlet stack traces
- * [UP-882] - "Can Not Start uPortal" message misleading
- * [UP-979] - Case of database column names a problem with MySQL on Unix
- * [UP-985] - DLM code contains references to campus pipeline namespace
- * [UP-1043] - IALChannelDescription JavaDoc comment incorrect
- * [UP-1055] - ALM: unable to subscribe to channels
- * [UP-1058] - Worker.java (in utils.threading) the releaseThread method is *only* called in the try block. This call should be in finally block.
- * [UP-1060] - Fragment restriction changes aren't being persisted for columns.
- * [UP-1061] - Fragment element restrictions are being pushed into regular user's layout.
- * [UP-1062] - If error occurs adding a channel when using DLM no error log entry is created.
- * [UP-1069] - Profile for new users contains null values in up_user_profile which breaks many areas.
- * [UP-1071] - provide helpful error message if JAXP is not installed on JDK 1.4
- * [UP-1072] - remove variables named enum to fix compile on JDK 1.5
- * [UP-1073] - Eliminate use of deprecated constructor of ChannelParameter
-
-Task
-
- * [UP-1035] - Include Jira-produced and more literate release notes
- * [UP-1070] - Remove un necessary classes from org.jasig.portal.utils.threading package.
-
-Improvement
-
- * [UP-625] - direct URL to channel
- * [UP-1075] - upgrade to Spring 1.2 (from 1.1.1)
-
-
-
-uPortal - Version 2.5.0 RC1
-Bug
-
- * [UP-675] - remove call to commit() in DbLoader.process()
- * [UP-762] - anchors should not be set for links that already contain an anchor
- * [UP-862] - BoundedThreadPool infinite loop or deadlock
- * [UP-950] - convert cusermanager to use commons logger and do some minor cleanup
- * [UP-983] - Exception caught and ignored in IPersonEvaluatorFactory.java
- * [UP-984] - should IPersonEvaluatorFactory start with an "I"? It isn't an interface.
- * [UP-990] - build.xml needs to have failonerror true when forking to java
- * [UP-991] - RDBMServices fails to fail over to rdbm.properties when PortalDb not available via JNDI
- * [UP-993] - ChannelPublisher.main() should failfast and communicate failure to ant build
- * [UP-994] - ReferenceEntityCache thread should be set daemon
- * [UP-997] - convert DLM code to use commons logger
- * [UP-999] - No way to communicate desired media base to ChannelRuntimeData
- * [UP-1007] - ant compile target does not copy .cpd file for channel types to WEB-INF/classes area
- * [UP-1008] - ChannelPublisher doesn't use correct class when publishing channel of non custom-java type.
- * [UP-1009] - channel versions are not being removed from UP_VERSIONS when channel definitions are deleted.
- * [UP-1010] - CAR Auto-publishing causes error message on console
- * [UP-1011] - CAR Auto-publishing is throwing a Parse Exception for document type "null"
- * [UP-1012] - CAR Auto-publishing incorrectly handles characters in nested elements
- * [UP-1013] - DLM fragment cleaner thread should be set daemon
- * [UP-1021] - remove MultipartDataSource setFileTypeMap()
- * [UP-1023] - Framed Tab fields showing in create new tab page.
- * [UP-1029] - RDBMDistributedLayoutStore copyright header
- * [UP-1038] - Remove unused class in DLM package.
- * [UP-1041] - NoClassDefFoundError for javax.transaction.Transaction
- * [UP-1050] - eliminate deprecated use of org.jasig.portal.channels.CError in RDBMDistributedLayoutStore
- * [UP-1051] - context.xml created by Ant not discovered by Tomcat
-
-New Feature
-
- * [UP-998] - make CPortletAdapter extensible
- * [UP-1024] - add CAbstractXslt
- * [UP-1042] - HttpProxyServlet should accept a lsit of referers not just one
-
-Task
-
- * [UP-995] - move org.jasig.portal.layout.al out of HEAD and into Sandbox
- * [UP-1034] - Include Jira-produced and more literate release notes
- * [UP-1052] - update the UP version string for 2.5.0 RC1
-
-Improvement
-
- * [UP-879] - Place context file in META-INF
- * [UP-884] - test portlets
- * [UP-885] - @version tags $Revision$ $Date$
- * [UP-912] - Encode portlet params as standard params rather than in uP file
- * [UP-988] - Add a new Component to the uPortal project for Distributed Layout Management.
- * [UP-1001] - Document ChannelRuntimeProperties setWillRender() no effect
- * [UP-1019] - remove MultipartDataSource getFile()
- * [UP-1020] - add ChannelRuntimeData toString()
- * [UP-1022] - repackage BasicLocalConnectionContext to be among providers
- * [UP-1025] - add CMissingProperties
- * [UP-1026] - RDBMUserLayoutStore protected instance logger
- * [UP-1027] - Layout packaging
- * [UP-1028] - extract LayoutStructure and StructureParameter from RDBMUserLayoutStore
- * [UP-1030] - Apply JA-SIG copyright header to DLM code
- * [UP-1031] - DLM type JavaDoc metadata
- * [UP-1032] - MultipartDataSource log on failure to delete temp file
- * [UP-1033] - ChannelFactory use JavaDoc style comments for staticChannels and classLoader
- * [UP-1037] - Document in README how to configure DataSource
- * [UP-1044] - eliminate AllTests
-
-
-
-uPortal - Version 2.5.0 M1
-
-Bug
- * [UP-169] - RDBMPermissibleRegistry not using CarClassLoader
- * [UP-338] - RENDERING_DONE Event never sent
- * [UP-466] - replace alt="interface image" with alt=""
- * [UP-632] - Compilation with JDK1.5.0 fails
- * [UP-656] - add logging message to ChannelManger.replaceWithErrorChannel()
- * [UP-658] - CError should never fail to render
- * [UP-662] - The CContentSubscriber channel caches the channel list
- * [UP-684] - pubfragments fails but overall build succeeds
- * [UP-710] - Pluto-in-uPortal unique name is hardcoded into the CPortletAdapter.java file
- * [UP-750] - ILdapServer.getConnection() hid connection exception
- * [UP-765] - remove unused table UPC_KEYWORD
- * [UP-766] - ActionResponse redirect & setWindowState methods do nothing
- * [UP-773] - ActionResponse.setWindowState(EXCUSIVE) doesn't work
- * [UP-781] - PortletURLs generated in EXCLUSIVE window state are incorrect
- * [UP-782] - Changing PortletMode while in EXCLUSIVE does not work
- * [UP-789] - RenderResponse.getWriter() doesn't work in EXCLUSIVE WindowState
- * [UP-802] - Upgrade/Remove Apache Axis jar to fix reserved word compile error on Jdk 1.5
- * [UP-806] - Eliminate log4j dependency in LoggingStatsRecorder
- * [UP-808] - GuidGenerator default constructor generates last component of guid wrong
- * [UP-817] - CPortletAdapter opaque credentials parser has extra code
- * [UP-831] - Render/Action parameters don't get passed correctly in EXCLUSIVE WindowState
- * [UP-843] - Remove jdbc2_0-stdext.jar now that we require jdk 1.4 and up
- * [UP-844] - Remove jaas.jar now that we require jdk 1.4 and up
- * [UP-866] - set initCause on IOExceptions in PortletEntityImpl
- * [UP-867] - eliminate need for caching Exception in constructor of RDBMChannelDefSearcher and RDBMPersonSearcher
- * [UP-869] - Unecessary Copy of principalCache on newPrincipal creation
- * [UP-871] - RDBMServices throws RuntimeErrors in its static block when it can't connect to the database
- * [UP-874] - AuthorizationImpl never lets go of cached values
- * [UP-880] - NPE during login when attribute value is null
- * [UP-891] - SimpleUserLayoutManagerTest testUpdateFolder semantic equality
- * [UP-892] - SimpleUserLayoutManagerTest testMoveUnderRootNode fails (fixed in 2.5)
- * [UP-893] - DatabaseServerImpl tests fail for non UP data sources
- * [UP-896] - ChannelDefinition.getBase wants IPortalDocument
- * [UP-918] - Null pointer exception in UserLayoutChannelDescription
- * [UP-920] - Passing of remote address with runtime data incomplete
- * [UP-922] - PortalSessionManager static final "startedAt" should be STARTED_AT
- * [UP-923] - PersonDirNameFinder.primGetName() can fail with an NPE
- * [UP-925] - PersonDirNameFinder getName() may return null
- * [UP-926] - AggregatedUserLayoutStore sets supportsOuterJoins false
- * [UP-928] - PersonDirNameFinder not threadsafe
- * [UP-929] - RDBMChannelRegistryStore: Remove catch Exception references or replace with more specific exception type
- * [UP-930] - Fixup Exception handling in org.jasig.portal.groups.filesystem
- * [UP-941] - Channel Subscriber gets StackOverflowError when trying to list channels
- * [UP-942] - log Throwable stack trace in ChannelManager.replaceWithErrorChannel()
- * [UP-944] - StackOverflowError Login during rendering
- * [UP-946] - Restore safety to channel rendering
- * [UP-949] - cusermanager: md5passwd.java should be Md5passwd.java
- * [UP-951] - RDBMServices compares strings by reference in getConnection(String)
- * [UP-952] - DatabaseTagHandler: Print out stack trace in log.error()
- * [UP-953] - no retry and refresh buttons are displayed in error channel after timeout
- * [UP-955] - JavaDoc declarations of constants in CUserManager Constants don't match values
- * [UP-956] - IFragmentRegistry empty @return tag
- * [UP-957] - DBCPDataSourceFactory JavaDoc comment references non-existing method
- * [UP-960] - IFragment @return tag has no arguments
- * [UP-961] - ALNode methods with no-arg @return tags
- * [UP-963] - no-arg @return JavaDoc for ErrorCode isRefreshAllowed()
- * [UP-972] - Fix AccountStoreFactory JavaDoc
- * [UP-973] - AuthzServiceFactoryImpl type JavaDoc before import
- * [UP-975] - BoundedQueue type JavaDoc trapped
- * [UP-976] - CViewer type comment not marked as JavaDoc
- * [UP-977] - CacheSecurityContextFactory type JavaDoc trapped before import
- * [UP-978] - ant runtests target requires hsqldb
-
-New Feature
-
- * [UP-784] - include CUserManager by default
- * [UP-785] - ability to purge XSLT cache
- * [UP-840] - DLM as alternative LM
- * [UP-853] - Add API and facility for deploy and runtime sanity checking
- * [UP-854] - Include JAXP 1.3 jars with uPortal
- * [UP-895] - JAXP-Install Ant target
- * [UP-903] - RDBMServices.getDataSource()
- * [UP-904] - RDBMServices.getDataSource(String dbName)
- * [UP-905] - Core database meta data
- * [UP-945] - errorHandling tab
- * [UP-948] - add CTimeout channel
- * [UP-964] - CError refactoring
- * [UP-971] - BaseChannel and BaseMultithreadedChannel should bear Log instances
-
-Task
-
- * [UP-839] - remove deprecated WSRP Producer
- * [UP-981] - eliminate BoundedThreadPool, UnboundedThreadPool
- * [UP-982] - update version data for 2.5.0M1
-
-Improvement
-
- * [UP-117] - Need to be able to publish xml/xsl
- * [UP-385] - Utility to modify url depending on user attributes
- * [UP-686] - Add the ability to pool connections defined in rdbm.properties
- * [UP-687] - JNDI to JDBC fail over
- * [UP-688] - Configurable JNDI names
- * [UP-689] - Removed use of and deprecated RDBMServices.PreparedStatement
- * [UP-690] - RDBMServices refactoring
- * [UP-691] - RDBMServices get default server
- * [UP-692] - LDAPServices get default server
- * [UP-697] - PLT18 - Expiration Caching of the portlet spec is not implemented
- * [UP-742] - Get a list of servers from LdapServices
- * [UP-757] - check versions of important libraries on startup
- * [UP-763] - Make PortalSecurityException chainable
- * [UP-768] - Change default ant target to output help message
- * [UP-774] - Add BasicLocalConnectionContext.java to uPortal CVS
- * [UP-777] - Springify the PersonDirectory service
- * [UP-804] - deprecate extraneous ChannelParameter constructor
- * [UP-805] - JavaDoc ChannelParameter
- * [UP-821] - patch to make CContentSubscriber search case insensitive
- * [UP-835] - upgrade to JAXP 1.3 XML APIs
- * [UP-848] - CGenericXSLT pass static params to xsl transforms
- * [UP-852] - RDBMServices getConnection fail with a RuntimeException rather than with null
- * [UP-855] - UserInstanceManager chain PortalSecurityException when unable to obtain person
- * [UP-856] - Upgrade pluto to 1.0.1-rc2
- * [UP-861] - move to mainstream thread pool impl
- * [UP-883] - portlet IChannel marker interface
- * [UP-894] - Update LdapServices link in SimpleLdapSecurityContext JavaDoc
- * [UP-899] - Activate GroupService JavaDoc comments
- * [UP-901] - Direct JNDI lookup for DS referenced from PersonDirs.xml
- * [UP-902] - Don't log stack trace for expected sql errors
- * [UP-916] - package scope PersonDirInfo code
- * [UP-917] - PersonDirInfoAdaptor static method
- * [UP-919] - Move IPersonAttributeDao out of support package
- * [UP-936] - EntityLockTester becomes EntityLockTest
- * [UP-937] - Rename PAGSTester to PAGSTest
- * [UP-938] - Remove external dependencies and rename filesystem unit test class
- * [UP-954] - document JNDI name for uPortal DataSource
- * [UP-959] - JavaDoc improvements to FrameworkMBeanImpl
- * [UP-965] - MovingAverage comment improvements
- * [UP-974] - add @since tag for properties package
+This release was engineered on an
+IBM Thinkpad R31 / Windows XP SP2 / Eclipse 3.0.1 / HSQLDB,
+building under JDK 1.5.0_01 and testing in a Tomcat 5.5.9 under the same JDK.
+and was actually built on a RedHat Linux machine using a version of the shell script in /etc/.
View
119 scripts/createTables-hypersonic.script
@@ -1,119 +0,0 @@
-CREATE TABLE UP_USERS
-(
- ID INTEGER,
- USER_NAME VARCHAR(15) NOT NULL,
- FIRST_NAME VARCHAR(15),
- LAST_NAME VARCHAR(15),
- USER_LAYOUT_XML LONGVARCHAR,
- PRIMARY KEY (ID)
-);
-
-CREATE TABLE UP_SHADOW
-(
- USER_NAME VARCHAR (64),
- PASSWORD VARCHAR (64)
-);
-
-CREATE INDEX PORTAL_SHADOW_PK ON
- UP_SHADOW(USER_NAME);
-
-CREATE TABLE UP_CHANNELS
-(
- CHAN_ID INTEGER NOT NULL,
- TITLE VARCHAR(256) NULL,
- PUB_EMAIL VARCHAR(100) NULL,
- APPROVED INTEGER NULL,
- CHANNEL_XML LONGVARCHAR NOT NULL,
- PRIMARY KEY (CHAN_ID)
-);
-
-CREATE TABLE UP_CHAN_TYPES (
- NAME VARCHAR(70) NOT NULL,
- TYPE VARCHAR(50) NOT NULL,
- DESCR LONGVARCHAR NOT NULL,
- DEF_URI LONGVARCHAR NOT NULL,
- PRIMARY KEY (NAME)
-);
-
-CREATE TABLE UP_CLASS
-(
- CLASS_ID INTEGER NOT NULL,
- NAME VARCHAR(100) NOT NULL,
- PRIMARY KEY (CLASS_ID)
-);
-
-CREATE TABLE UP_CHAN_CLASS
-(
- CLASS_ID INTEGER NOT NULL,
- CHAN_ID INTEGER NOT NULL
-);
-
-CREATE TABLE UP_USER_PREFS
-(
- USER_NAME VARCHAR(15) NOT NULL,
- MEDIA VARCHAR(15) NOT NULL,
- STRUCTURE_STYLESHEET_NAME VARCHAR(30) NOT NULL,
- THEME_STYLESHEET_NAME VARCHAR(30) NOT NULL,
- CSS_STYLESHEET_NAME VARCHAR(30) NOT NULL
-);
-
-CREATE TABLE UP_USER_SS_PREFS
-(
- USER_NAME VARCHAR(15) NOT NULL,
- STYLESHEET_NAME VARCHAR(30) NOT NULL,
- USER_PREFERENCES_XML LONGVARCHAR
-);
-
-CREATE TABLE UP_STRUCT_SS
-(
- STYLESHEET_NAME VARCHAR(30) NOT NULL,
- STYLESHEET_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_TEXT LONGVARCHAR,
- PRIMARY KEY (STYLESHEET_NAME)
-);
-
-CREATE TABLE UP_THEME_SS
-(
- STYLESHEET_NAME VARCHAR(30) NOT NULL,
- STYLESHEET_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_TEXT LONGVARCHAR,
- PRIMARY KEY (STYLESHEET_NAME)
-);
-
-CREATE TABLE UP_CSS_SS
-(
- STYLESHEET_NAME VARCHAR(30) NOT NULL,
- STYLESHEET_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_URI LONGVARCHAR NOT NULL,
- STYLESHEET_DESCRIPTION_TEXT LONGVARCHAR,
- PRIMARY KEY (STYLESHEET_NAME)
-);
-
-CREATE TABLE UP_STRUCT_SS_MAP
-(
- MEDIA VARCHAR(15) NOT NULL,
- STRUCTURE_STYLESHEET_NAME VARCHAR(30) NOT NULL
-);
-
-CREATE TABLE UP_THEME_SS_MAP
-(
- THEME_STYLESHEET_NAME VARCHAR(30) NOT NULL,
- STRUCTURE_STYLESHEET_NAME VARCHAR(30) NOT NULL
-);
-
-CREATE TABLE UP_CSS_SS_MAP
-(
- CSS_STYLESHEET_NAME VARCHAR(30) NOT NULL,
- THEME_STYLESHEET_NAME VARCHAR(30) NOT NULL
-);
-
-CREATE TABLE UPC_BOOKMARKS
-(
- ID INTEGER,
- PORTAL_USER_ID INTEGER,
- BOOKMARK_XML LONGVARCHAR,
- PRIMARY KEY (ID)
-);
-
View
15 scripts/dropTables.script
@@ -1,15 +0,0 @@
-DROP TABLE UP_USERS;
-DROP TABLE UP_SHADOW;
-DROP TABLE UP_CHANNELS;
-DROP TABLE UP_CHAN_TYPES;
-DROP TABLE UP_CLASS;
-DROP TABLE UP_CHAN_CLASS;
-DROP TABLE UP_USER_PREFS;
-DROP TABLE UP_USER_SS_PREFS;
-DROP TABLE UP_STRUCT_SS;
-DROP TABLE UP_THEME_SS;
-DROP TABLE UP_CSS_SS;
-DROP TABLE UP_STRUCT_SS_MAP;
-DROP TABLE UP_THEME_SS_MAP;
-DROP TABLE UP_CSS_SS_map;
-DROP TABLE UPC_BOOKMARKS;
View
269 scripts/populateTables.script
@@ -1,269 +0,0 @@
-INSERT INTO UP_USERS (ID, USER_NAME, FIRST_NAME, LAST_NAME) values (0, 'guest', 'Guest', 'Guest');
-
-INSERT INTO UP_USERS (ID, USER_NAME, FIRST_NAME, LAST_NAME) VALUES (1, 'demo', 'Demo', 'User');
-INSERT INTO UP_SHADOW (USER_NAME, PASSWORD) VALUES ('demo', '{MD5}IAnYXaWGdqTkifNNwo0bfIIphj2NPvSG');
-
-UPDATE UP_USERS SET USER_LAYOUT_XML=
-'<?xml version="1.0"?>
-<!DOCTYPE layout SYSTEM "file:/userLayout.dtd">
-<layout>
- <folder ID="t01" priority="1" name="Main">
- <folder ID="col01" priority="0" width="40%" name="Column 1">
- <channel ID="chan00" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="true" removable="true" detachable="false" class="org.jasig.portal.channels.CLogin" name="Login">
- </channel>
- <channel ID="chan01" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="MozillaZine">
- <parameter value="webpages/rss/netscape.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- <channel ID="chan02" priority="1" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="StockCharts.com">
- <parameter value="webpages/rss/stockcharts.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- </folder>
- <folder ID="col02" priority="0" width="60%" name="Column 2">
- <channel ID="chan03" priority="0" timeout="5000" minimized="false" editable="true" hasHelp="true" removable="true" detachable="true" class="org.jasig.portal.channels.CBookmarks" name="Bookmarks">
- </channel>
- <channel ID="chan04" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="XML.com">
- <parameter value="webpages/rss/news.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- </folder>
- </folder>
- <folder ID="t02" priority="0" name="uPortal Tools">
- <channel ID="chan90" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="false" detachable="false" class="org.jasig.portal.channels.CSubscriber" name="Subscribe">
- </channel>
- <channel ID="chan92" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="false" detachable="false" class="org.jasig.portal.channels.CPublisher" name="Publish">
- </channel>
- <channel ID="chan91" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="false" detachable="false" class="org.jasig.portal.channels.CUserPreferences" name="User Preferences">
- </channel>
- </folder>
- <folder ID="t03" priority="0" name="More">
- <folder ID="col03" priority="0" width="50%" name="Column 1">
- <channel ID="chan06" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="uPortal-Powered Sites">
- <parameter value="http://interactivebusiness.com/publish/jasigPortalDemos.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- <channel ID="chan07" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="IBS News">
- <parameter value="http://interactivebusiness.com/publish/ibs.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- </folder>
- <folder ID="col04" priority="0" width="50%" name="Column 2">
- <channel ID="chan08" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="uPortal Developers Reference">
- <parameter value="http://asigdev.princeton.edu:82/portal/rss/jasigdev.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- <channel ID="chan09" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="Salon.com">
- <parameter value="http://www.salon.com/feed/RDF/salon_use.rdf" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- </folder>
- </folder>
-</layout>' WHERE USER_NAME='guest';
-
-UPDATE UP_USERS SET USER_LAYOUT_XML=
-'<?xml version="1.0"?>
-<!DOCTYPE layout SYSTEM "file:/userLayout.dtd">
-<layout>
- <folder ID="t01" priority="1" name="Main">
- <folder ID="col01" priority="0" width="40%" name="Column 1">
- <channel ID="chan00" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CNumberGuess" name="Number Guessing Game">
- <parameter value="1" name="minNum"/>
- <parameter value="100" name="maxNum"/>
- </channel>
- <channel ID="chan01" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="MozillaZine">
- <parameter value="webpages/rss/netscape.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- <channel ID="chan02" priority="1" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="StockCharts.com">
- <parameter value="webpages/rss/stockcharts.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>
- </folder>
- </folder>
- <folder ID="t02" priority="0" name="uPortal Tools">
- <channel ID="chan90" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="false" detachable="false" class="org.jasig.portal.channels.CSubscriber" name="Subscribe">
- </channel>
- <channel ID="chan91" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="false" detachable="false" class="org.jasig.portal.channels.CUserPreferences" name="User Preferences">
- </channel>
- </folder>
-</layout>' WHERE USER_NAME='demo';
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (1, 'Mozillazine', NULL, 0,
-'<channel ID="chan01" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="MozillaZine">
- <parameter value="webpages/rss/netscape.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (2, 'Stockcharts', NULL, 0,
-'<channel ID="chan02" priority="1" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="StockCharts.com">
- <parameter value="webpages/rss/stockcharts.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (3, 'Bookmarks', NULL, 0,
-'<channel ID="chan03" priority="0" timeout="5000" minimized="false" editable="true" hasHelp="true" removable="true" detachable="true" class="org.jasig.portal.channels.CBookmarks" name="Bookmarks">
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (4, 'XML.com', NULL, 0,
-'<channel ID="chan04" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="XML.com">
- <parameter value="webpages/rss/news.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (5, 'uPortal Demos', NULL, 0,
-'<channel ID="chan05" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="uPortal-Powered Sites">
- <parameter value="http://interactivebusiness.com/publish/jasigPortalDemos.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (6, 'IBS News', NULL, 0,
-'<channel ID="chan06" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="IBS News">
- <parameter value="http://interactivebusiness.com/publish/ibs.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHANNELS (CHAN_ID, TITLE, PUB_EMAIL, APPROVED, CHANNEL_XML) VALUES (7, 'uPortal Developers Reference', NULL, 0,
-'<channel ID="chan07" priority="0" timeout="5000" minimized="false" editable="false" hasHelp="false" removable="true" detachable="true" class="org.jasig.portal.channels.CGenericXSLT" name="uPortal Developers Reference">
- <parameter value="http://asigdev.princeton.edu:82/portal/rss/jasigdev.rss" name="xml"/>
- <parameter value="webpages/stylesheets/org/jasig/portal/channels/CGenericXSLT/RSS.ssl" name="ssl"/>
- </channel>')
-
-INSERT INTO UP_CHAN_TYPES (NAME, TYPE, DESCR, DEF_URI)
-VALUES ('RSS Channel', 'org.jasig.portal.channels.CGenericXSLT',
-'RSS or Rich Site Summary, the most common channel format, is a channel which has its content defined through an XML document. Anyone may publish an RSS channel as long as the specification is adhered to and the file is stored on a publicly accessible web server. You will need to provide a URL for the RSS file.',
-'properties/channel_defs/RSS.xml');
-
-INSERT INTO UP_CHAN_TYPES (NAME, TYPE, DESCR, DEF_URI)
-VALUES ('XSL Channel', 'org.jasig.portal.channels.CGenericXSLT',
-'XSL renders XML to a particular style, is a channel which has its content defined through an XML document. Anyone may publish an XSL channel as long as the specification is adhered to and the file is stored on a publicly accessible web server. You will need to provide a URL or Path for the XML and XSL file.',
-'properties/channel_defs/XSL.xml');
-
-INSERT INTO UP_CLASS ( CLASS_ID, NAME ) VALUES (0, 'News');
-INSERT INTO UP_CLASS ( CLASS_ID, NAME ) VALUES (1, 'Development');
-INSERT INTO UP_CLASS ( CLASS_ID, NAME ) VALUES (2, 'Applications');
-
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(0, 1);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(0, 2);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(0, 6);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(1, 4);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(1, 5);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(1, 7);
-INSERT INTO UP_CHAN_CLASS ( CLASS_ID, CHAN_ID ) VALUES(2, 3);
-
-INSERT INTO UP_USER_PREFS (USER_NAME, MEDIA, STRUCTURE_STYLESHEET_NAME, THEME_STYLESHEET_NAME, CSS_STYLESHEET_NAME)
-VALUES ('guest', 'netscape', 'Tab and Column layout', 'Nested tables', 'general CSS');
-
-INSERT INTO UP_USER_PREFS (USER_NAME, MEDIA, STRUCTURE_STYLESHEET_NAME, THEME_STYLESHEET_NAME, CSS_STYLESHEET_NAME)
-VALUES ('guest', 'explorer', 'Tab and Column layout', 'Nested tables', 'general CSS');
-
-INSERT INTO UP_USER_PREFS (USER_NAME, MEDIA, STRUCTURE_STYLESHEET_NAME, THEME_STYLESHEET_NAME, CSS_STYLESHEET_NAME)
-VALUES ('demo', 'netscape', 'Tab and Column layout', 'Nested tables', 'general CSS');
-
-INSERT INTO UP_USER_PREFS (USER_NAME, MEDIA, STRUCTURE_STYLESHEET_NAME, THEME_STYLESHEET_NAME, CSS_STYLESHEET_NAME)
-VALUES ('demo', 'explorer', 'Tab and Column layout', 'Nested tables', 'general CSS');
-
-INSERT INTO UP_USER_SS_PREFS (USER_NAME, STYLESHEET_NAME, USER_PREFERENCES_XML) VALUES ('guest', 'Tab and Column layout', '
-<structurestylesheetuserpreferences>
- <parameters>
- </parameters>
- <folderattributes>
- <attribute name="width">
- <folder folderid="col01" value="70%"/>
- <folder folderid="col02" value="30%"/>
- <folder folderid="col03" value="30%"/>
- <folder folderid="col04" value="70%"/>
- </attribute>
- </folderattributes>
- <channelattributes>
- </channelattributes>
-</structurestylesheetuserpreferences>
-');
-
-INSERT INTO UP_USER_SS_PREFS (USER_NAME, STYLESHEET_NAME, USER_PREFERENCES_XML) VALUES ('guest', 'Nested tables', '
-<themestylesheetuserpreferences>
- <parameters>
- <parameter name="activeTab">2</parameter>
- <parameter name="borderWidth">2</parameter>
- </parameters>
- <folderattributes>
- </folderattributes>
- <channelattributes>
- <attribute name="minimizable">
- <channel channelid="chan01" value="false"/>
- <channel channelid="chan02" value="false"/>
- </attribute>
- </channelattributes>
-</themestylesheetuserpreferences>
-');
-
-INSERT INTO UP_USER_SS_PREFS (USER_NAME, STYLESHEET_NAME, USER_PREFERENCES_XML) VALUES ('demo', 'Tab and Column layout', '
-<structurestylesheetuserpreferences>
- <parameters>
- </parameters>
- <folderattributes>
- <attribute name="width">
- <folder folderid="col01" value="70%"/>
- <folder folderid="col02" value="30%"/>
- <folder folderid="col03" value="30%"/>
- <folder folderid="col04" value="70%"/>
- </attribute>
- </folderattributes>
- <channelattributes>
- </channelattributes>
-</structurestylesheetuserpreferences>
-');
-
-INSERT INTO UP_USER_SS_PREFS (USER_NAME, STYLESHEET_NAME, USER_PREFERENCES_XML) VALUES ('demo', 'Nested tables', '
-<themestylesheetuserpreferences>
- <parameters>
- <parameter name="activeTab">1</parameter>
- <parameter name="borderWidth">1</parameter>
- </parameters>
- <folderattributes>
- </folderattributes>
- <channelattributes>
- <attribute name="minimizable">
- <channel channelid="chan01" value="false"/>
- <channel channelid="chan02" value="false"/>
- </attribute>
- </channelattributes>
-</themestylesheetuserpreferences>
-');
-
-INSERT INTO UP_STRUCT_SS (STYLESHEET_NAME, STYLESHEET_URI, STYLESHEET_DESCRIPTION_URI, STYLESHEET_DESCRIPTION_TEXT)
-VALUES ('Tab and Column layout', 'webpages/stylesheets/org/jasig/portal/LayoutBean/uLayout2sLayout.xsl', 'webpages/stylesheets/org/jasig/portal/LayoutBean/uLayout2sLayout.sdf', 'Presents the layout in terms of tabs and columns.');
-
-INSERT INTO UP_THEME_SS (STYLESHEET_NAME, STYLESHEET_URI, STYLESHEET_DESCRIPTION_URI, STYLESHEET_DESCRIPTION_TEXT)
-VALUES ('Nested tables', 'webpages/stylesheets/org/jasig/portal/LayoutBean/sLayout2html_full.xsl', 'webpages/stylesheets/org/jasig/portal/LayoutBean/sLayout2html_full.sdf', 'Renders tabs and columns as nested tables');
-
-INSERT INTO UP_CSS_SS (STYLESHEET_NAME, STYLESHEET_URI, STYLESHEET_DESCRIPTION_URI, STYLESHEET_DESCRIPTION_TEXT)
-VALUES ('general CSS', 'webpages/media/org/jasig/portal/layout/tabColumn/general.css', 'webpages/media/org/jasig/portal/layout/tabColumn/general.sdf', 'Body, channel tabs and link coloring and fonts');
-
-INSERT INTO UP_CSS_SS_MAP (CSS_STYLESHEET_NAME, THEME_STYLESHEET_NAME) VALUES ('general CSS', 'Nested tables');
-
-INSERT INTO UP_THEME_SS_MAP (THEME_STYLESHEET_NAME, STRUCTURE_STYLESHEET_NAME) VALUES ('Nested tables', 'Tab and Column layout');
-
-INSERT INTO UP_STRUCT_SS_MAP (MEDIA, STRUCTURE_STYLESHEET_NAME) VALUES ('netscape', 'Tab and Column layout');
-
-INSERT INTO UP_STRUCT_SS_MAP (MEDIA, STRUCTURE_STYLESHEET_NAME) VALUES ('explorer', 'Tab and Column layout');
-
-INSERT INTO UPC_BOOKMARKS (ID, PORTAL_USER_ID, BOOKMARK_XML) VALUES (0, 0,
-'<?xml version="1.0"?>
-<bookmarks>
- <bookmark url="http://www.jasig.org" name="JA-SIG" comments="Java in Administration Special Interest Group"/>
- <bookmark url="http://www.interactivebusiness.com" name="IBS" comments="provides uPortal Services"/>
- <bookmark url="http://www.paypal.com" name="PayPal" comments="Send and receive money online!"/>
- <bookmark url="http://google.com" name="Google" comments="great search engine"/>
-</bookmarks>
-');
-
-INSERT INTO UPC_BOOKMARKS (ID, PORTAL_USER_ID, BOOKMARK_XML) VALUES (1, 1,
-'<?xml version="1.0"?>
-<bookmarks>
- <bookmark url="http://www.jasig.org" name="JA-SIG" comments="Java in Administration Special Interest Group"/>
- <bookmark url="http://www.interactivebusiness.com" name="IBS" comments="provides uPortal Services"/>
- <bookmark url="http://www.paypal.com" name="PayPal" comments="Send and receive money online!"/>
- <bookmark url="http://google.com" name="Google" comments="great search engine"/>
-</bookmarks>
-');
View
7 source/org/jasig/portal/ChannelIncorporationFilter.java
@@ -14,6 +14,13 @@
/**
* A filter that incorporates content rendered by the channels in to
* the main transformation stream.
+ *
+ * TODO: there are enhancements in CharacterCachingChannelIncorporationFilter as
+ * of uPortal 2.5.1 to support dynamic channel titles. Do those enhancements need
+ * to be copied here? Or is the functionality of this class duplicated by a
+ * degenerate (non-caching) configuration of CharacterCachingChannelIncorporationFilter,
+ * such that it would be a worthwhile reduction of code duplication to drop this
+ * class?
*
* @author <a href="mailto:pkharchenko@interactivebusiness.com">Peter Kharchenko</a>
* @version $Revision$
View
113 source/org/jasig/portal/ChannelManager.java
@@ -25,6 +25,7 @@
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -32,6 +33,7 @@
import org.jasig.portal.channels.CSecureInfo;
import org.jasig.portal.channels.error.CError;
import org.jasig.portal.channels.error.ErrorCode;
+import org.jasig.portal.channels.support.IDynamicChannelTitleRenderer;
import org.jasig.portal.i18n.LocaleManager;
import org.jasig.portal.layout.IUserLayout;
import org.jasig.portal.layout.IUserLayoutManager;
@@ -102,7 +104,8 @@
// global channel rendering cache
public static final int SYSTEM_CHANNEL_CACHE_MIN_SIZE=50; // this should be in a file somewhere
- public static final SoftHashMap systemCache=new SoftHashMap(SYSTEM_CHANNEL_CACHE_MIN_SIZE);
+
+ public static final Map systemCache = new SoftHashMap(SYSTEM_CHANNEL_CACHE_MIN_SIZE);
public static final String channelAddressingPathElement="channel";
private static boolean useAnchors = PropertiesManager.getPropertyAsBoolean("org.jasig.portal.ChannelManager.use_anchors", false);
@@ -341,6 +344,7 @@ public void outputChannel(String channelSubscribeId,ContentHandler contentHandle
if(cs.stopCaching()) {
try {
characterContent=cs.getCache();
+ log.debug("outputChannel 2: "+characterContent);
if(characterContent!=null) {
// save compiled character cache
cr.setCharacterCache(characterContent);
@@ -693,21 +697,38 @@ private IChannel instantiateChannel(IUserLayoutChannelDescription cd) throws Por
if(ap.canRender(Integer.parseInt(channelPublishId))) {
// Instantiate the channel and notify the StatsRecorder
- ch = ChannelFactory.instantiateLayoutChannel(cd,this.pcs.getHttpServletRequest().getSession(false).getId());
- StatsRecorder.recordChannelInstantiated(upm.getPerson(), upm.getCurrentProfile(), cd);
-
- // Create and stuff the channel static data
- ChannelStaticData sd = new ChannelStaticData();
- sd.setChannelSubscribeId(channelSubscribeId);
- sd.setTimeout(cd.getTimeout());
- sd.setParameters(cd.getParameterMap());
- sd.setPerson(upm.getPerson());
- sd.setJNDIContext(channelContext);
- sd.setICCRegistry(new ICCRegistry(this,channelSubscribeId));
- sd.setChannelPublishId(cd.getChannelPublishId());
-
- ch.setStaticData(sd);
+ HttpServletRequest sr = this.pcs.getHttpServletRequest();
+ if (sr == null){
+ ch=new CError(ErrorCode.GENERAL_ERROR,"Unable to get SessionId. getHttpServletRequest returned null.",channelSubscribeId,null);
+ }else{
+ HttpSession hs = sr.getSession(false);
+ if (hs == null){
+ ch=new CError(ErrorCode.GENERAL_ERROR,"Unable to get SessionId. getSession returned null.",channelSubscribeId,null);
+ }else{
+ String id = hs.getId();
+ if (id == null){
+ ch=new CError(ErrorCode.GENERAL_ERROR,"Unable to get SessionId. getId returned null.",channelSubscribeId,null);
+ }else{
+
+ ch = ChannelFactory.instantiateLayoutChannel(cd,id);
+ StatsRecorder.recordChannelInstantiated(upm.getPerson(), upm.getCurrentProfile(), cd);
+
+ // Create and stuff the channel static data
+ ChannelStaticData sd = new ChannelStaticData();
+ sd.setChannelSubscribeId(channelSubscribeId);
+ sd.setTimeout(cd.getTimeout());
+ sd.setParameters(cd.getParameterMap());
+ sd.setPerson(upm.getPerson());
+ sd.setJNDIContext(channelContext);
+ sd.setICCRegistry(new ICCRegistry(this,channelSubscribeId));
+ sd.setChannelPublishId(cd.getChannelPublishId());
+
+ ch.setStaticData(sd);
+ }
+ }
+ }
+
} else {
// user is not authorized to instantiate this channel
// create an instance of an error channel instead
@@ -818,8 +839,17 @@ private void processRequestChannelParameters(HttpServletRequest req) {
try {
chObj=instantiateChannel(channelTarget);
} catch (Throwable e) {
- log.error("unable to pass find/create an instance of a channel. " +
- "Bogus Id ? ! (id=\""+channelTarget+"\").", e);
+ if (upm.getPerson().isGuest() == true)
+ {
+ // We get this alot when people's sessions have timed out and they get directed
+ // to the guest page. Changed to WARN because there might be a need to note this
+ // to diagnose problems with the guest layout.
+
+ log.warn("ChannelManager::processRequestChannelParameters() : unable to pass find/create an instance of a channel. Bogus Id ? ! (id=\""+channelTarget+"\").");
+ }else{
+ log.error("ChannelManager::processRequestChannelParameters() : unable to pass find/create an instance of a channel. Bogus Id ? ! (id=\""
+ +channelTarget+"\" uid=\""+upm.getPerson().getID()+"\").",e);
+ }
chObj=replaceWithErrorChannel(channelTarget,ErrorCode.SET_STATIC_DATA_EXCEPTION,e,null,false);
}
}
@@ -949,7 +979,7 @@ public void startRenderingCycle(HttpServletRequest request, HttpServletResponse
try {
portalContext=getPortalContext();
} catch (NamingException ne) {
- log.error("ChannelManager::setReqNRes(): exception raised when trying to obtain initial JNDI context : ", ne);
+ log.error(ne, ne);
}
}
// construct a channel context
@@ -957,7 +987,7 @@ public void startRenderingCycle(HttpServletRequest request, HttpServletResponse
try {
channelContext=getChannelJndiContext(portalContext,request.getSession(false).getId(),Integer.toString(this.pcs.getUserPreferencesManager().getPerson().getID()),Integer.toString(this.pcs.getUserPreferencesManager().getCurrentProfile().getLayoutId()));
} catch (NamingException ne) {
- log.error("ChannelManager::setReqNRes(): exception raised when trying to obtain channel JNDI context : ", ne);
+ log.error(ne, ne);
}
}
processRequestChannelParameters(request);
@@ -1114,7 +1144,10 @@ private IChannelRenderer startChannelRendering(String channelSubscribeId,boolean
}
// Check if channel is rendering as the root element of the layout
- String userLayoutRoot = upm.getUserPreferences().getStructureStylesheetUserPreferences().getParameterValue("userLayoutRoot");
+
+ UserPreferences tempUserPref = upm.getUserPreferences();
+ StructureStylesheetUserPreferences tempSSUP = tempUserPref.getStructureStylesheetUserPreferences();
+ String userLayoutRoot = tempSSUP.getParameterValue("userLayoutRoot");
if (rd != null && userLayoutRoot != null && !userLayoutRoot.equals(IUserLayout.ROOT_NODE_NAME)) {
rd.setRenderingAsRoot(true);
}
@@ -1227,4 +1260,44 @@ public void layoutLoaded() {}
public void layoutSaved() {}
public void setLocaleManager(LocaleManager lm) { this.lm = lm; }
+
+ /**
+ * Get the dynamic channel title for a given channelSubscribeID.
+ * Returns null if no dynamic channel (the rendering infrastructure
+ * calling this method should fall back on a default title when this
+ * method returns null).
+ * @param channelSubscribeId
+ * @throws IllegalArgumentException if channelSubcribeId is null
+ * @thorws IllegalStateException if
+ */
+ public String getChannelTitle(String channelSubscribeId) {
+
+ if (log.isTraceEnabled()) {
+ log.trace("ChannelManager getting dynamic title for channel with subscribe id=" + channelSubscribeId);
+ }
+
+ // obtain IChannelRenderer
+ Object channelRenderer = rendererTable.get(channelSubscribeId);
+
+ // default to null (no dynamic channel title.
+ String channelTitle = null;
+
+ // dynamic channel title support is not in IChannelRenderer itself because
+ // that would have required a change to the IChannelRenderer interface
+ if (channelRenderer instanceof IDynamicChannelTitleRenderer ) {
+
+ IDynamicChannelTitleRenderer channelTitleRenderer =
+ (IDynamicChannelTitleRenderer) channelRenderer;
+ channelTitle = channelTitleRenderer.getChannelTitle();
+
+ if (log.isTraceEnabled()) {
+ log.trace("ChannelManager reports that dynamic title for channel with subscribe id="
+ + channelSubscribeId + " is [" + channelTitle + "].");
+ }
+ }
+
+
+ return channelTitle;
+
+ }
}
View
171 source/org/jasig/portal/ChannelRenderer.java
@@ -9,6 +9,8 @@
import java.io.StringWriter;
import java.util.Map;
+import org.jasig.portal.channels.support.IChannelTitle;
+import org.jasig.portal.channels.support.IDynamicChannelTitleRenderer;
import org.jasig.portal.properties.PropertiesManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -32,10 +34,9 @@
* @version $Revision$
*/
public class ChannelRenderer
- implements IChannelRenderer
+ implements IChannelRenderer, IDynamicChannelTitleRenderer
{
-
- private static final Log log = LogFactory.getLog(ChannelRenderer.class);
+ protected final Log log = LogFactory.getLog(getClass());
/**
* Default value for CACHE_CHANNELS.
@@ -70,7 +71,6 @@
protected SetCheckInSemaphore groupSemaphore;
protected Object groupRenderingKey;
- private Object cacheWriteLock;
/**
* Default contstructor
@@ -84,7 +84,6 @@ public ChannelRenderer (IChannel chan,ChannelRuntimeData runtimeData, ExecutorSe
this.rd=runtimeData;
this.rendering = false;
this.ccacheable=false;
- this.cacheWriteLock=new Object();
tp = threadPool;
if(systemCache==null) {
@@ -118,15 +117,15 @@ public ChannelRenderer (IChannel chan,ChannelRuntimeData runtimeData, ExecutorSe
* @param channel an <code>IChannel</code>
*/
public void setChannel(IChannel channel) {
- if (log.isDebugEnabled())
- log.debug("ChannelRenderer::setChannel() : channel is being reset!");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::setChannel() : channel is being reset!");
+ }
this.channel=channel;
if(this.worker!=null) {
this.worker.setChannel(channel);
}
// clear channel chace
this.channelCache=null;
- this.cacheWriteLock=new Object();
}
/**
@@ -221,7 +220,7 @@ public int outputRendering (ContentHandler out) throws Throwable {
return RENDERING_SUCCESSFUL;
} catch (SAXException e) {
// worst case scenario: partial content output :(
- log.error( "ChannelRenderer::outputRendering() : following SAX exception occured : "+e);
+ log.error( "ChannelRenderer::outputRendering() : following SAX exception occured : "+e, e);
throw e;
}
} else {
@@ -263,9 +262,10 @@ public int completeRendering() throws Throwable {
if(!this.worker.isSetRuntimeDataComplete() && !this.workTracker.isDone()) {
this.workTracker.cancel(true);
abandoned=true;
- if (log.isDebugEnabled())
+ if (log.isDebugEnabled()) {
log.debug("ChannelRenderer::outputRendering() : killed. " +
"(key="+this.groupRenderingKey.toString()+")");
+ }
} else {
this.groupSemaphore.waitOn();
}
@@ -277,7 +277,10 @@ public int completeRendering() throws Throwable {
try {
this.workTracker.get(this.timeOut, TimeUnit.MILLISECONDS);
} catch (TimeoutException te) {
- log.debug("ChannelRenderer::outputRendering() : timed out", te);
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::outputRendering() : timed out", te);
+ }
+
}
if(!this.workTracker.isDone()) {
@@ -376,17 +379,47 @@ public String toString() {
return sb.toString();
}
-
+
+
+ public String getChannelTitle() {
+
+
+ if (log.isTraceEnabled()) {
+ log.trace("Getting channel title for ChannelRenderer " + this);
+ }
+
+ // default to null, which indicates the ChannelRenderer doesn't have
+ // a dynamic channel title available.
+ String channelTitle = null;
+ try {
+ // block on channel rendering to allow channel opportunity to
+ // provide dynamic title.
+ int renderingStatus = completeRendering();
+ if (renderingStatus == RENDERING_SUCCESSFUL) {
+ channelTitle = this.worker.getChannelTitle();
+ }
+ } catch (Throwable t) {
+ log.error("Channel rendering failed while getting title for channel renderer " + this, t);
+ }
+
+ // will be null indicating no dynamic title unless successfully obtained title.
+ return channelTitle;
+
+ }
protected class Worker extends BaseTask {
private boolean successful;
private boolean done;
private boolean setRuntimeDataComplete;
- private boolean decremented;
private IChannel channel;
private ChannelRuntimeData rd;
private SAX2BufferImpl buffer;
private String cbuffer;
+
+ /**
+ * The dynamic title of the channel, if any. Null otherwise.
+ */
+ private String channelTitle = null;
public Worker (IChannel ch, ChannelRuntimeData runtimeData) {
this.channel=ch; this.rd=runtimeData;
@@ -427,15 +460,21 @@ public void execute () throws Exception {
// use it
if(ccacheable && (entry.buffer instanceof String)) {
cbuffer=(String)entry.buffer;
- log.debug("ChannelRenderer.Worker::run() : retrieved system-wide cached character content based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : retrieved system-wide cached character content based on a key \""+key.getKey()+"\"");
+ }
} else if(entry.buffer instanceof SAX2BufferImpl) {
buffer=(SAX2BufferImpl) entry.buffer;
- log.debug("ChannelRenderer.Worker::run() : retrieved system-wide cached content based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : retrieved system-wide cached content based on a key \""+key.getKey()+"\"");
+ }
}
} else {
// remove it
systemCache.remove(key.getKey());
- log.debug("ChannelRenderer.Worker::run() : removed system-wide unvalidated cache based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : removed system-wide unvalidated cache based on a key \""+key.getKey()+"\"");
+ }
}
}
} else {
@@ -448,16 +487,22 @@ public void execute () throws Exception {
// use it
if(ccacheable && (entry.buffer instanceof String)) {
cbuffer=(String)entry.buffer;
- log.debug("ChannelRenderer.Worker::run() : retrieved instance-cached character content based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : retrieved instance-cached character content based on a key \""+key.getKey()+"\"");
+ }
} else if(entry.buffer instanceof SAX2BufferImpl) {
buffer=(SAX2BufferImpl) entry.buffer;
- log.debug("ChannelRenderer.Worker::run() : retrieved instance-cached content based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : retrieved instance-cached content based on a key \""+key.getKey()+"\"");
+ }
}
} else {
// remove it
getChannelCache().remove(key.getKey());
- log.debug("ChannelRenderer.Worker::run() : removed unvalidated instance-cache based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : removed unvalidated instance-cache based on a key \""+key.getKey()+"\"");
+ }
}
}
}
@@ -481,10 +526,14 @@ public void execute () throws Exception {
if (key != null) {
if (key.getKeyScope() == ChannelCacheKey.SYSTEM_KEY_SCOPE) {
systemCache.put(key.getKey(), new ChannelCacheEntry(cbuffer, key.getKeyValidity()));
- log.debug("ChannelRenderer.Worker::run() : recorded system character cache based on a key \"" + key.getKey() + "\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : recorded system character cache based on a key \"" + key.getKey() + "\"");
+ }
} else {
getChannelCache().put(key.getKey(), new ChannelCacheEntry(cbuffer, key.getKeyValidity()));
- log.debug("ChannelRenderer.Worker::run() : recorded instance character cache based on a key \"" + key.getKey() + "\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : recorded instance character cache based on a key \"" + key.getKey() + "\"");
+ }
}
}
} else {
@@ -498,10 +547,14 @@ public void execute () throws Exception {
if(key.getKeyScope()==ChannelCacheKey.SYSTEM_KEY_SCOPE) {
systemCache.put(key.getKey(),new ChannelCacheEntry(buffer,key.getKeyValidity()));
- log.debug("ChannelRenderer.Worker::run() : recorded system cache based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : recorded system cache based on a key \""+key.getKey()+"\"");
+ }
} else {
getChannelCache().put(key.getKey(),new ChannelCacheEntry(buffer,key.getKeyValidity()));
- log.debug("ChannelRenderer.Worker::run() : recorded instance cache based on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer.Worker::run() : recorded instance cache based on a key \""+key.getKey()+"\"");
+ }
}
}
}
@@ -532,9 +585,44 @@ public void execute () throws Exception {
}
this.setException(e);
}
+
+ /*
+ * Get the channel's ChannelRuntimeProperties, and handle them.
+ */
+ processChannelRuntimeProperties();
+
done = true;
}
+ /**
+ * Query the channel for ChannelRuntimePRoperties and process those
+ * properties.
+ *
+ * Currently, only handles the optional @link{IChannelTitle} interface.
+ */
+ private void processChannelRuntimeProperties() {
+ ChannelRuntimeProperties channelProps = this.channel.getRuntimeProperties();
+
+ if (channelProps != null) {
+ if (channelProps instanceof IChannelTitle) {
+
+ this.channelTitle = ((IChannelTitle) channelProps).getChannelTitle();
+ if (log.isTraceEnabled()) {
+ log.trace("Read title " + this.channelTitle + ".");
+ }
+ } else {
+ if (log.isTraceEnabled()) {
+ log.trace("ChannelRuntimeProperties were non-null but did not implement ITitleable.");
+ }
+ }
+ } else {
+ if (log.isTraceEnabled()) {
+ log.trace("ChannelRuntimeProperties were null from channel " + channel);
+ }
+ }
+ }
+
+
public boolean successful () {
return this.successful;
}
@@ -566,12 +654,16 @@ public void setCharacterCache(String chars) {
if(channel instanceof ICacheable ) {
ChannelCacheKey key=((ICacheable)channel).generateKey();
if(key!=null) {
- log.debug("ChannelRenderer::setCharacterCache() : called on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::setCharacterCache() : called on a key \""+key.getKey()+"\"");
+ }
ChannelCacheEntry entry=null;
if(key.getKeyScope()==ChannelCacheKey.SYSTEM_KEY_SCOPE) {
entry=(ChannelCacheEntry)systemCache.get(key.getKey());
if(entry==null) {
- log.debug("ChannelRenderer::setCharacterCache() : setting character cache buffer based on a system key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::setCharacterCache() : setting character cache buffer based on a system key \""+key.getKey()+"\"");
+ }
entry=new ChannelCacheEntry(chars,key.getKeyValidity());
} else {
entry.buffer=chars;
@@ -581,7 +673,9 @@ public void setCharacterCache(String chars) {
// by default we assume INSTANCE_KEY_SCOPE
entry=(ChannelCacheEntry)getChannelCache().get(key.getKey());
if(entry==null) {
- log.debug("ChannelRenderer::setCharacterCache() : no existing cache on a key \""+key.getKey()+"\"");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::setCharacterCache() : no existing cache on a key \""+key.getKey()+"\"");
+ }
entry=new ChannelCacheEntry(chars,key.getKeyValidity());
} else {
entry.buffer=chars;
@@ -589,7 +683,9 @@ public void setCharacterCache(String chars) {
getChannelCache().put(key.getKey(),entry);
}
} else {
- log.debug("ChannelRenderer::setCharacterCache() : channel cache key is null.");
+ if (log.isDebugEnabled()) {
+ log.debug("ChannelRenderer::setCharacterCache() : channel cache key is null.");
+ }
}
}
}