gatein SVN: r469 - in portal/branches/performance/component/scripting/src: test/java/org/exoplatform/groovyscript and 1 other directory.
by do-not-reply@jboss.org
Author: julien_viet
Date: 2009-11-01 17:40:14 -0500 (Sun, 01 Nov 2009)
New Revision: 469
Modified:
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java
portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java
portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java
Log:
actually rewrite the full nested stack trace with script element when possible
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java 2009-11-01 13:58:21 UTC (rev 468)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java 2009-11-01 22:40:14 UTC (rev 469)
@@ -84,8 +84,7 @@
}
else
{
- TextItem textItem = findOut(e);
- throw new TemplateRuntimeException(textItem, e);
+ throw buildRuntimeException(e);
}
}
catch (Throwable e)
@@ -94,30 +93,54 @@
{
throw ((Error)e);
}
- TextItem textItem = findOut(e);
- throw new TemplateRuntimeException(textItem, e);
+ throw buildRuntimeException(e);
}
//
script.flush();
}
- private TextItem findOut(Throwable t)
+ private TemplateRuntimeException buildRuntimeException(Throwable t)
{
- StackTraceElement[] elements = t.getStackTrace();
+ StackTraceElement[] trace = t.getStackTrace();
- // The index of the script based on the current stack trace
- int index = elements.length - Thread.currentThread().getStackTrace().length + 1;
+ //
+ TextItem firstItem = null;
- // Try to find the groovy script line
- if (index >= 0 && index < elements.length)
+ // Try to find the groovy script lines
+ for (int i = 0;i < trace.length;i++)
{
- int groovyLineNumber = elements[index].getLineNumber();
- return lineTable.get(groovyLineNumber);
+ StackTraceElement element = trace[i];
+ if (element.getClassName().equals(scriptClass.getName()))
+ {
+ int lineNumber = element.getLineNumber();
+ TextItem item = lineTable.get(lineNumber);
+ int templateLineNumber;
+ if (item != null)
+ {
+ templateLineNumber = item.getPosition().getLine();
+ if (firstItem == null)
+ {
+ firstItem = item;
+ }
+ }
+ else
+ {
+ templateLineNumber = -1;
+ }
+ element = new StackTraceElement(
+ element.getClassName(),
+ element.getMethodName(),
+ element.getFileName(),
+ templateLineNumber);
+ trace[i] = element;
+ }
}
- else
- {
- return null;
- }
+
+ //
+ t.setStackTrace(trace);
+
+ //
+ return new TemplateRuntimeException(firstItem, t);
}
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java 2009-11-01 13:58:21 UTC (rev 468)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java 2009-11-01 22:40:14 UTC (rev 469)
@@ -89,6 +89,11 @@
return name;
}
+ public String getClassName()
+ {
+ return script.getScriptClass().getName();
+ }
+
public String getTemplateText()
{
return templateText;
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java 2009-11-01 13:58:21 UTC (rev 468)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java 2009-11-01 22:40:14 UTC (rev 469)
@@ -75,7 +75,7 @@
//
from = to + 1;
lineNumber++;
- colNumber = 0;
+ colNumber = 1;
}
else
{
Modified: portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java
===================================================================
--- portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java 2009-11-01 13:58:21 UTC (rev 468)
+++ portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java 2009-11-01 22:40:14 UTC (rev 469)
@@ -112,11 +112,11 @@
public void testPosition() throws IOException
{
List<TemplateSection> sections = parser.parse("a\nb<%= foo %>d");
- assertEquals(new Position(0, 0), sections.get(0).getItems().get(0).getPosition());
- assertEquals(new Position(1, 0), sections.get(0).getItems().get(1).getPosition());
- assertEquals(new Position(0, 1), sections.get(0).getItems().get(2).getPosition());
- assertEquals(new Position(4, 1), sections.get(1).getItems().get(0).getPosition());
- assertEquals(new Position(11, 1), sections.get(2).getItems().get(0).getPosition());
+ assertEquals(new Position(1, 1), sections.get(0).getItems().get(0).getPosition());
+ assertEquals(new Position(2, 1), sections.get(0).getItems().get(1).getPosition());
+ assertEquals(new Position(1, 2), sections.get(0).getItems().get(2).getPosition());
+ assertEquals(new Position(5, 2), sections.get(1).getItems().get(0).getPosition());
+ assertEquals(new Position(12, 2), sections.get(2).getItems().get(0).getPosition());
}
}
Modified: portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java
===================================================================
--- portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java 2009-11-01 13:58:21 UTC (rev 468)
+++ portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java 2009-11-01 22:40:14 UTC (rev 469)
@@ -246,15 +246,26 @@
private void assertLineNumber(int expectedLineNumber, String expectedText, String script) throws TemplateCompilationException, IOException
{
+ GroovyTemplate template = new GroovyTemplate(script);
try
{
- new GroovyTemplate(script).render();
+ template.render();
fail();
}
catch (TemplateRuntimeException t)
{
assertEquals(expectedText, t.getText());
assertEquals(expectedLineNumber, (Object)t.getLineNumber());
+ StackTraceElement scriptElt = null;
+ for (StackTraceElement elt : t.getCause().getStackTrace())
+ {
+ if (elt.getClassName().equals(template.getClassName()))
+ {
+ scriptElt = elt;
+ break;
+ }
+ }
+ assertEquals(expectedLineNumber, scriptElt.getLineNumber());
}
}
15 years, 1 month
gatein SVN: r468 - in portal/branches/performance: component/dashboard/src/main/resources/groovy/dashboard/webui/component and 42 other directories.
by do-not-reply@jboss.org
Author: julien_viet
Date: 2009-11-01 08:58:21 -0500 (Sun, 01 Nov 2009)
New Revision: 468
Added:
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java
portal/branches/performance/packaging/profiles.xml.template
Removed:
portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardMask.java
portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardMask.gtmpl
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/skin/
portal/branches/performance/packaging/key.txt
portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/conf/script/
portal/branches/performance/portlet/exoadmin/src/main/webapp/WEB-INF/conf/script/
portal/branches/performance/portlet/web/src/main/webapp/WEB-INF/conf/script/
portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/script/groovy/SkinConfigScript.groovy
Modified:
portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboard.java
portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardContainer.java
portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboard.gtmpl
portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardContainer.gtmpl
portal/branches/performance/component/portal/src/main/java/conf/portal/configuration.xml
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/UserACL.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNavigation.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNode.java
portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNodeContainer.java
portal/branches/performance/component/web/src/main/java/org/exoplatform/web/application/javascript/JavascriptDeployer.java
portal/branches/performance/gadgets/eXoGadgets/src/main/webapp/gadgets/Calculator/Calculator.xml
portal/branches/performance/packaging/pkg/pom.xml
portal/branches/performance/packaging/profiles.xml
portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardPortlet.java
portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UITabPaneDashboard.java
portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_en.properties
portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_fr.properties
portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_ru.properties
portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_uk.properties
portal/branches/performance/portlet/dashboard/src/main/webapp/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIApplicationOrganizer.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UICategoryForm.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UIGroupNavigationManagement.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UISiteManagement.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/GroupManagement.java
portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java
portal/branches/performance/portlet/exoadmin/src/main/webapp/WEB-INF/portlet.xml
portal/branches/performance/portlet/web/src/main/java/org/exoplatform/portal/webui/component/UILogoEditMode.java
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/Browser.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/UIMaskLayer.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/gadget/UIGadget.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UICalendar.js
portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UITabbedDashboard.js
portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIDashboard/Stylesheet.css
portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupWindow/Stylesheet.css
portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/portal/application-registry-configuration.xml
portal/branches/performance/web/portal/src/main/webapp/groovy/portal/webui/application/UIPortlet.gtmpl
portal/branches/performance/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl
portal/branches/performance/webui/core/src/main/java/org/exoplatform/webui/core/lifecycle/UIFormLifecycle.java
portal/branches/performance/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIListPermissionSelector.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/ResourceRequestFilter.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletForm.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/navigation/UINavigationNodeSelector.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageCreationWizard.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageWizard.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalForm.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UISkinSelector.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMainActionListener.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMaskWorkspace.java
portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
Log:
GTPPORTAL-153 : Merge with trunk up to revision 467
Modified: portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboard.java
===================================================================
--- portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboard.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboard.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,6 +19,8 @@
package org.exoplatform.dashboard.webui.component;
+import org.exoplatform.portal.webui.application.UIGadget;
+import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.ComponentConfigs;
@@ -32,7 +34,9 @@
@EventConfig(listeners = UIDashboardContainer.MoveGadgetActionListener.class),
@EventConfig(listeners = UIDashboardContainer.AddNewGadgetActionListener.class),
@EventConfig(listeners = UIDashboard.SetShowSelectContainerActionListener.class),
- @EventConfig(listeners = UIDashboardContainer.DeleteGadgetActionListener.class)})})
+ @EventConfig(listeners = UIDashboardContainer.DeleteGadgetActionListener.class),
+ @EventConfig(listeners = UIDashboard.MinimizeGadgetActionListener.class),
+ @EventConfig(listeners = UIDashboard.MaximizeGadgetActionListener.class)})})
public class UIDashboard extends UIContainer
{
@@ -42,6 +46,8 @@
private String aggregatorId;
+ private UIGadget maximizedGadget;
+
public UIDashboard() throws Exception
{
UIPopupWindow popup = addChild(UIPopupWindow.class, null, GADGET_POPUP_ID);
@@ -86,10 +92,19 @@
this.aggregatorId = aggregatorId;
}
- public static class SetShowSelectContainerActionListener extends
- EventListener<org.exoplatform.webui.core.UIContainer>
+ public UIGadget getMaximizedGadget()
{
- public final void execute(final Event<org.exoplatform.webui.core.UIContainer> event) throws Exception
+ return maximizedGadget;
+ }
+
+ public void setMaximizedGadget(UIGadget gadget)
+ {
+ maximizedGadget = gadget;
+ }
+
+ public static class SetShowSelectContainerActionListener extends EventListener<UIDashboard>
+ {
+ public final void execute(final Event<UIDashboard> event) throws Exception
{
UIDashboard uiDashboard = (UIDashboard)event.getSource();
if (!uiDashboard.canEdit())
@@ -106,4 +121,43 @@
}
}
}
+
+ public static class MinimizeGadgetActionListener extends EventListener<UIDashboard>
+ {
+ public final void execute(final Event<UIDashboard> event) throws Exception
+ {
+ WebuiRequestContext context = event.getRequestContext();
+ UIDashboard uiDashboard = event.getSource();
+ String objectId = context.getRequestParameter(OBJECTID);
+ String minimized = context.getRequestParameter("minimized");
+
+ UIGadget uiGadget = uiDashboard.getChild(UIDashboardContainer.class).getUIGadget(objectId);
+ uiGadget.getProperties().setProperty("minimized", minimized);
+ uiDashboard.getChild(UIDashboardContainer.class).save();
+ context.addUIComponentToUpdateByAjax(uiGadget);
+ }
+ }
+
+ public static class MaximizeGadgetActionListener extends EventListener<UIDashboard>
+ {
+ public final void execute(final Event<UIDashboard> event) throws Exception
+ {
+ WebuiRequestContext context = event.getRequestContext();
+ UIDashboard uiDashboard = event.getSource();
+ String objectId = context.getRequestParameter(OBJECTID);
+ String maximize = context.getRequestParameter("maximize");
+ UIDashboardContainer uiDashboardCont = uiDashboard.getChild(UIDashboardContainer.class);
+ UIGadget uiGadget = uiDashboardCont.getUIGadget(objectId);
+ if (maximize.equals("maximize"))
+ {
+ uiGadget.setView(UIGadget.CANVAS_VIEW);
+ uiDashboard.setMaximizedGadget(uiGadget);
+ }
+ else
+ {
+ uiGadget.setView(UIGadget.HOME_VIEW);
+ uiDashboard.setMaximizedGadget(null);
+ }
+ }
+ }
}
Modified: portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardContainer.java
===================================================================
--- portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardContainer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardContainer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -29,6 +29,7 @@
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.container.UIContainer;
import org.exoplatform.portal.webui.util.PortalDataMapper;
+import org.exoplatform.web.application.RequestContext;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.InitParams;
@@ -106,7 +107,7 @@
{
return;
}
- WebuiRequestContext context = WebuiRequestContext.getCurrentInstance();
+ WebuiRequestContext context = RequestContext.getCurrentInstance();
windowId = ((PortletRequestContext)context).getRequest().getWindowID();
Param param = initParams.getParam("ContainerConfigs");
@@ -119,6 +120,7 @@
addChild(UIContainer.class, null, null);
}
+ @Override
public void processRender(WebuiRequestContext context) throws Exception
{
DataStorage service = getApplicationComponent(DataStorage.class);
@@ -287,13 +289,8 @@
*/
public boolean hasUIGadget()
{
- boolean flag = false;
UIGadget gadget = findFirstComponentOfType(UIGadget.class);
- if (gadget != null)
- {
- flag = true;
- }
- return flag;
+ return (gadget != null);
}
/**
@@ -461,13 +458,14 @@
service.saveDashboard(dashboard);
}
- public static class AddNewGadgetActionListener extends EventListener<org.exoplatform.webui.core.UIContainer>
+ public static class AddNewGadgetActionListener extends EventListener<UIDashboard>
{
- public final void execute(final Event<org.exoplatform.webui.core.UIContainer> event) throws Exception
+ @Override
+ public final void execute(final Event<UIDashboard> event) throws Exception
{
WebuiRequestContext context = event.getRequestContext();
- org.exoplatform.webui.core.UIContainer uiDashboard = event.getSource();
- if (!((UIDashboard)uiDashboard).canEdit())
+ UIDashboard uiDashboard = event.getSource();
+ if (!uiDashboard.canEdit())
return;
int col = Integer.parseInt(context.getRequestParameter(COLINDEX));
int row = Integer.parseInt(context.getRequestParameter(ROWINDEX));
@@ -488,13 +486,14 @@
}
}
- public static class MoveGadgetActionListener extends EventListener<org.exoplatform.webui.core.UIContainer>
+ public static class MoveGadgetActionListener extends EventListener<UIDashboard>
{
- public final void execute(final Event<org.exoplatform.webui.core.UIContainer> event) throws Exception
+ @Override
+ public final void execute(final Event<UIDashboard> event) throws Exception
{
WebuiRequestContext context = event.getRequestContext();
- org.exoplatform.webui.core.UIContainer uiDashboard = event.getSource();
- if (!((UIDashboard)uiDashboard).canEdit())
+ UIDashboard uiDashboard = event.getSource();
+ if (!uiDashboard.canEdit())
return;
UIDashboardContainer uiDashboardContainer = uiDashboard.getChild(UIDashboardContainer.class);
int col = Integer.parseInt(context.getRequestParameter(COLINDEX));
@@ -507,21 +506,28 @@
}
}
- public static class DeleteGadgetActionListener extends EventListener<org.exoplatform.webui.core.UIContainer>
+ public static class DeleteGadgetActionListener extends EventListener<UIDashboard>
{
- public final void execute(final Event<org.exoplatform.webui.core.UIContainer> event) throws Exception
+ @Override
+ public final void execute(final Event<UIDashboard> event) throws Exception
{
- WebuiRequestContext context = event.getRequestContext();
- org.exoplatform.webui.core.UIContainer uiDashboard = event.getSource();
- if (!((UIDashboard)uiDashboard).canEdit())
+ UIDashboard uiDashboard = event.getSource();
+ if (!uiDashboard.canEdit())
return;
+ WebuiRequestContext context = event.getRequestContext();
String objectId = context.getRequestParameter(OBJECTID);
UIDashboardContainer uiDashboardContainer = uiDashboard.getChild(UIDashboardContainer.class);
uiDashboardContainer.removeUIGadget(objectId);
+ boolean isMaximized = false;
+ if (uiDashboard.getMaximizedGadget() != null && uiDashboard.getMaximizedGadget().getId().equals(objectId))
+ {
+ uiDashboard.setMaximizedGadget(null);
+ isMaximized = true;
+ }
uiDashboardContainer.save();
-// context.addUIComponentToUpdateByAjax(uiDashboardContainer);
- context.setResponseComplete(true);
+ if (!isMaximized)
+ context.setResponseComplete(true);
}
}
Deleted: portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardMask.java
===================================================================
--- portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardMask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardMask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,32 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.dashboard.webui.component;
-
-import org.exoplatform.webui.config.annotation.ComponentConfig;
-import org.exoplatform.webui.core.UIComponentDecorator;
-
-@ComponentConfig(template = "classpath:groovy/dashboard/webui/component/UIDashboardMask.gtmpl")
-public class UIDashboardMask extends UIComponentDecorator
-{
-
- public UIDashboardMask() throws Exception
- {
- }
-}
Modified: portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboard.gtmpl
===================================================================
--- portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboard.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboard.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,6 +1,13 @@
+<% def maxiGadget = uicomponent.getMaximizedGadget(); %>
<div id="$uicomponent.id" class="UIDashboard">
- <div class="DashboardContainer">
- <% uicomponent.renderChildren(); %>
- <div class="ClearLeft"><span></span></div>
+ <div class="DashboardContainer <%=maxiGadget == null ? "" : "Maximized"%>">
+ <%
+ if(maxiGadget == null) {
+ uicomponent.renderChildren();
+ %>
+ <div class="ClearLeft"><span></span></div>
+ <%} else {
+ uicomponent.renderUIComponent(maxiGadget);
+ }%>
</div>
</div>
Modified: portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardContainer.gtmpl
===================================================================
--- portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardContainer.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardContainer.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -26,15 +26,8 @@
</div>
</div>
</div>
- <%
- }
- if (uicomponent.findFirstComponentOfType(UIGadget.class) == null) {
- %>
- <div class="NoGadget"><%= _ctx.appRes("UIDashboard.msg.addGadget"); %></div>
- <%
- }
- uicomponent.renderChildren() ;
- %>
-
+ <%}%>
+ <div class="NoGadget" style="display: <%=uicomponent.hasUIGadget() ? "none" : "block"%>"><%= _ctx.appRes("UIDashboard.msg.addGadget"); %></div>
+ <% uicomponent.renderChildren() ;%>
</div>
</div>
Deleted: portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardMask.gtmpl
===================================================================
--- portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardMask.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/dashboard/src/main/resources/groovy/dashboard/webui/component/UIDashboardMask.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,3 +0,0 @@
-<div id="$uicomponent.id" class="UIDashboardMask">
- <%uicomponent.renderChildren();%>
-</div>
\ No newline at end of file
Modified: portal/branches/performance/component/portal/src/main/java/conf/portal/configuration.xml
===================================================================
--- portal/branches/performance/component/portal/src/main/java/conf/portal/configuration.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/conf/portal/configuration.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -95,7 +95,7 @@
</component>
<component>
- <type>org.exoplatform.portal.skin.SkinService</type>
+ <type>org.exoplatform.portal.resource.SkinService</type>
</component>
<external-component-plugins>
Modified: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/UserACL.java
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/UserACL.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/UserACL.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -373,10 +373,12 @@
}
page.setModifiable(false);
String[] accessPerms = page.getAccessPermissions();
- for (String per : accessPerms)
- {
- if (hasPermission(identity, per))
- return true;
+ if (accessPerms != null) {
+ for (String per : accessPerms)
+ {
+ if (hasPermission(identity, per))
+ return true;
+ }
}
return false;
}
Modified: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNavigation.java
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNavigation.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNavigation.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -21,6 +21,7 @@
import org.exoplatform.portal.pom.data.NavigationData;
import org.exoplatform.portal.pom.data.NavigationNodeData;
+import org.gatein.mop.core.api.workspace.NavigationContainer;
import java.util.ArrayList;
import java.util.LinkedHashMap;
Modified: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNode.java
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNode.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNode.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -69,7 +69,7 @@
//
this.uri = nav.getURI();
this.label = nav.getLabel();
- this.resolvedLabel = label;
+ this.resolvedLabel = nav.getLabel();
this.icon = nav.getIcon();
this.name = nav.getName();
this.startPublicationDate = nav.getStartPublicationDate();
Modified: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNodeContainer.java
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNodeContainer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/config/model/PageNodeContainer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,7 +19,6 @@
package org.exoplatform.portal.config.model;
-import org.exoplatform.portal.config.model.ModelObject;
import org.exoplatform.portal.pom.data.NavigationNodeContainerData;
import org.exoplatform.portal.pom.data.NavigationNodeData;
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource)
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,38 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.gatein.wci.WebAppEvent;
-import org.gatein.wci.WebAppListener;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public abstract class AbstractResourceHandler implements WebAppListener
-{
-
- abstract public void onEvent(WebAppEvent event);
-
-}
\ No newline at end of file
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/AbstractResourceHandler.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,38 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.gatein.wci.WebAppEvent;
+import org.gatein.wci.WebAppListener;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public abstract class AbstractResourceHandler implements WebAppListener
+{
+
+ abstract public void onEvent(WebAppEvent event);
+
+}
\ No newline at end of file
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,111 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.commons.utils.CharEncoder;
-import org.exoplatform.commons.utils.CharsetCharEncoder;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
-/**
- * A codec for names. It is a modified version of the percent encoding algorithm that translates
- * underscores to their percent counterpart and slash to underscores. Therefore slash chars are
- * never seen as the %2F string as it can cause some issues on tomcat when it is used in an URI.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class Codec
-{
-
- private Codec()
- {
- }
-
- private static final char[][] table = new char[256][];
-
- static
- {
- char[] a = "0123456789ABCDEF".toCharArray();
- for (int b = 0; b < 256; b++)
- {
- int b1 = (b & 0xF0) >> 4;
- int b2 = b & 0x0F;
- table[b] = new char[]{a[b1], a[b2]};
- }
- }
-
- public static String decode(String s)
- {
- try
- {
- s = s.replace("_", "%2F");
- return URLDecoder.decode(s, "UTF8");
- }
- catch (UnsupportedEncodingException e)
- {
- throw new Error(e);
- }
- }
-
- public static void encode(Appendable appendable, String s) throws IOException
- {
- for (int i = 0; i < s.length(); i++)
- {
- char c = s.charAt(i);
- if (Character.isLetter(c))
- {
- appendable.append(c);
- }
- else
- {
- switch (c)
- {
- case 'A' :
- case '.' :
- case '-' :
- case '*' :
- appendable.append(c);
- break;
- case ' ' :
- appendable.append('+');
- break;
- case '/' :
- appendable.append('_');
- break;
- default :
- CharEncoder encoder = CharsetCharEncoder.getUTF8();
- byte[] bytes = encoder.encode(c);
- appendable.append('%');
- for (byte b : bytes)
- {
- for (char cc : table[b])
- {
- appendable.append(cc);
- }
- }
- }
- }
- }
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Codec.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,111 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.commons.utils.CharEncoder;
+import org.exoplatform.commons.utils.CharsetCharEncoder;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+/**
+ * A codec for names. It is a modified version of the percent encoding algorithm that translates
+ * underscores to their percent counterpart and slash to underscores. Therefore slash chars are
+ * never seen as the %2F string as it can cause some issues on tomcat when it is used in an URI.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class Codec
+{
+
+ private Codec()
+ {
+ }
+
+ private static final char[][] table = new char[256][];
+
+ static
+ {
+ char[] a = "0123456789ABCDEF".toCharArray();
+ for (int b = 0; b < 256; b++)
+ {
+ int b1 = (b & 0xF0) >> 4;
+ int b2 = b & 0x0F;
+ table[b] = new char[]{a[b1], a[b2]};
+ }
+ }
+
+ public static String decode(String s)
+ {
+ try
+ {
+ s = s.replace("_", "%2F");
+ return URLDecoder.decode(s, "UTF8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new Error(e);
+ }
+ }
+
+ public static void encode(Appendable appendable, String s) throws IOException
+ {
+ for (int i = 0; i < s.length(); i++)
+ {
+ char c = s.charAt(i);
+ if (Character.isLetter(c))
+ {
+ appendable.append(c);
+ }
+ else
+ {
+ switch (c)
+ {
+ case 'A' :
+ case '.' :
+ case '-' :
+ case '*' :
+ appendable.append(c);
+ break;
+ case ' ' :
+ appendable.append('+');
+ break;
+ case '/' :
+ appendable.append('_');
+ break;
+ default :
+ CharEncoder encoder = CharsetCharEncoder.getUTF8();
+ byte[] bytes = encoder.encode(c);
+ appendable.append('%');
+ for (byte b : bytes)
+ {
+ for (char cc : table[b])
+ {
+ appendable.append(cc);
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,80 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.Map;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class CompositeResourceResolver implements ResourceResolver
-{
-
- /** . */
- private final Map<SkinKey, SkinConfig> skins;
-
- /**
- * The name of the portal container
- */
- private final String portalContainerName;
-
- public CompositeResourceResolver(String portalContainerName, Map<SkinKey, SkinConfig> skins)
- {
- this.portalContainerName = portalContainerName;
- this.skins = skins;
- }
-
- public Resource resolve(String path)
- {
- if (path.startsWith("/" + portalContainerName + "/resource/") && path.endsWith(".css"))
- {
- final StringBuffer sb = new StringBuffer();
- String encoded = path.substring(("/" + portalContainerName + "/resource/").length());
- String blah[] = encoded.split("/");
- int len = (blah.length >> 1) << 1;
- for (int i = 0; i < len; i += 2)
- {
- String name = Codec.decode(blah[i]);
- String module = Codec.decode(blah[i + 1]);
- SkinKey key = new SkinKey(module, name);
- SkinConfig skin = skins.get(key);
- if (skin != null)
- {
- sb.append("@import url(").append(skin.getCSSPath()).append(");").append("\n");
- }
- }
- return new Resource(path)
- {
- @Override
- public Reader read()
- {
- return new StringReader(sb.toString());
- }
- };
- }
- else
- {
- return null;
- }
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,80 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class CompositeResourceResolver implements ResourceResolver
+{
+
+ /** . */
+ private final Map<SkinKey, SkinConfig> skins;
+
+ /**
+ * The name of the portal container
+ */
+ private final String portalContainerName;
+
+ public CompositeResourceResolver(String portalContainerName, Map<SkinKey, SkinConfig> skins)
+ {
+ this.portalContainerName = portalContainerName;
+ this.skins = skins;
+ }
+
+ public Resource resolve(String path)
+ {
+ if (path.startsWith("/" + portalContainerName + "/resource/") && path.endsWith(".css"))
+ {
+ final StringBuffer sb = new StringBuffer();
+ String encoded = path.substring(("/" + portalContainerName + "/resource/").length());
+ String blah[] = encoded.split("/");
+ int len = (blah.length >> 1) << 1;
+ for (int i = 0; i < len; i += 2)
+ {
+ String name = Codec.decode(blah[i]);
+ String module = Codec.decode(blah[i + 1]);
+ SkinKey key = new SkinKey(module, name);
+ SkinConfig skin = skins.get(key);
+ if (skin != null)
+ {
+ sb.append("@import url(").append(skin.getCSSPath()).append(");").append("\n");
+ }
+ }
+ return new Resource(path)
+ {
+ @Override
+ public Reader read()
+ {
+ return new StringReader(sb.toString());
+ }
+ };
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,113 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.commons.utils.PropertyManager;
-import org.exoplatform.services.resources.Orientation;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.TreeMap;
-
-/**
- * A composite skin.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class CompositeSkin implements Skin
-{
-
- /** . */
- private final SkinService service;
-
- /** . */
- private final String id;
-
- /** . */
- private final String urlPrefix;
-
- CompositeSkin(SkinService service, Collection<SkinConfig> skins)
- {
- TreeMap<String, SkinConfig> urlSkins = new TreeMap<String, SkinConfig>();
- for (SkinConfig skin : skins)
- {
- urlSkins.put(skin.getCSSPath(), skin);
- }
-
- //
- final StringBuilder builder = new StringBuilder();
- builder.append("/").append(service.portalContainerName).append("/resource");
-
- //
- final StringBuilder id = new StringBuilder();
-
- //
- try
- {
- for (SkinConfig cfg : urlSkins.values())
- {
- StringBuilder encodedName = new StringBuilder();
- Codec.encode(encodedName, cfg.getName());
- StringBuilder encodedModule = new StringBuilder();
- Codec.encode(encodedModule, cfg.getModule());
-
- //
- id.append(encodedName).append(encodedModule);
- builder.append("/").append(encodedName).append("/").append(encodedModule);
- }
- }
- catch (IOException e)
- {
- throw new Error(e);
- }
-
- //
- this.service = service;
- this.id = id.toString();
- this.urlPrefix = builder.toString();
- }
-
- public String getId()
- {
- return id;
- }
-
- public SkinURL createURL()
- {
- return new SkinURL()
- {
-
- Orientation orientation;
-
- public void setOrientation(Orientation orientation)
- {
- this.orientation = orientation;
- }
-
- @Override
- public String toString()
- {
- return urlPrefix + "/" + (PropertyManager.isDevelopping() ? "style" : service.id)
- + service.getSuffix(orientation);
- }
- };
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/CompositeSkin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,113 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.commons.utils.PropertyManager;
+import org.exoplatform.services.resources.Orientation;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.TreeMap;
+
+/**
+ * A composite skin.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class CompositeSkin implements Skin
+{
+
+ /** . */
+ private final SkinService service;
+
+ /** . */
+ private final String id;
+
+ /** . */
+ private final String urlPrefix;
+
+ CompositeSkin(SkinService service, Collection<SkinConfig> skins)
+ {
+ TreeMap<String, SkinConfig> urlSkins = new TreeMap<String, SkinConfig>();
+ for (SkinConfig skin : skins)
+ {
+ urlSkins.put(skin.getCSSPath(), skin);
+ }
+
+ //
+ final StringBuilder builder = new StringBuilder();
+ builder.append("/").append(service.portalContainerName).append("/resource");
+
+ //
+ final StringBuilder id = new StringBuilder();
+
+ //
+ try
+ {
+ for (SkinConfig cfg : urlSkins.values())
+ {
+ StringBuilder encodedName = new StringBuilder();
+ Codec.encode(encodedName, cfg.getName());
+ StringBuilder encodedModule = new StringBuilder();
+ Codec.encode(encodedModule, cfg.getModule());
+
+ //
+ id.append(encodedName).append(encodedModule);
+ builder.append("/").append(encodedName).append("/").append(encodedModule);
+ }
+ }
+ catch (IOException e)
+ {
+ throw new Error(e);
+ }
+
+ //
+ this.service = service;
+ this.id = id.toString();
+ this.urlPrefix = builder.toString();
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public SkinURL createURL()
+ {
+ return new SkinURL()
+ {
+
+ Orientation orientation;
+
+ public void setOrientation(Orientation orientation)
+ {
+ this.orientation = orientation;
+ }
+
+ @Override
+ public String toString()
+ {
+ return urlPrefix + "/" + (PropertyManager.isDevelopping() ? "style" : service.id)
+ + service.getSuffix(orientation);
+ }
+ };
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,133 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.container.PortalContainer;
-import org.exoplatform.container.RootContainer.PortalContainerPostInitTask;
-import org.exoplatform.portal.resource.config.xml.SkinConfigParser;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-import org.gatein.wci.WebAppEvent;
-import org.gatein.wci.WebAppLifeCycleEvent;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class GateinSkinConfigDeployer extends AbstractResourceHandler
-{
-
- private final SkinService skinService;
-
- private static final String GATEIN_CONFIG_RESOURCE = "/WEB-INF/gatein-resources.xml";
-
- private static Log LOG = ExoLogger.getExoLogger(GateinSkinConfigDeployer.class);
-
- /**
- * The name of the portal container
- */
- private final String portalContainerName;
-
- public GateinSkinConfigDeployer(String portalContainerName, SkinService _skinService)
- {
- this.skinService = _skinService;
- this.portalContainerName = portalContainerName;
- }
-
- @Override
- public void onEvent(WebAppEvent event)
- {
- if (event instanceof WebAppLifeCycleEvent)
- {
- WebAppLifeCycleEvent waEvent = (WebAppLifeCycleEvent)event;
- if (waEvent.getType() == WebAppLifeCycleEvent.ADDED)
- {
- ServletContext scontext = null;
- try
- {
- scontext = event.getWebApp().getServletContext();
- InputStream is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
- if (is == null)
- return;
- try
- {
- is.close();
- }
- catch (Exception ex)
- {
- // ignore me
- }
- final PortalContainerPostInitTask task = new PortalContainerPostInitTask()
- {
-
- public void execute(ServletContext scontext, PortalContainer portalContainer)
- {
- register(scontext, portalContainer);
- }
- };
- PortalContainer.addInitTask(scontext, task, portalContainerName);
- }
- catch (Exception ex)
- {
- LOG.error("An error occurs while registering '" + GATEIN_CONFIG_RESOURCE + "' from the context '"
- + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
- }
- }
- }
- }
-
- private void register(ServletContext scontext, PortalContainer container)
- {
- InputStream is = null;
- try
- {
- is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
- SkinConfigParser.processConfigResource(is, skinService, scontext);
- }
- catch (Exception ex)
- {
- LOG.error("An error occurs while registering '" + GATEIN_CONFIG_RESOURCE + "' from the context '"
- + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
- }
- finally
- {
- if (is != null)
- {
- try
- {
- is.close();
- }
- catch (IOException e)
- {
- // ignore me
- }
- }
- }
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/GateinSkinConfigDeployer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,133 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.container.PortalContainer;
+import org.exoplatform.container.RootContainer.PortalContainerPostInitTask;
+import org.exoplatform.portal.resource.config.xml.SkinConfigParser;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.gatein.wci.WebAppEvent;
+import org.gatein.wci.WebAppLifeCycleEvent;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class GateinSkinConfigDeployer extends AbstractResourceHandler
+{
+
+ private final SkinService skinService;
+
+ private static final String GATEIN_CONFIG_RESOURCE = "/WEB-INF/gatein-resources.xml";
+
+ private static Log LOG = ExoLogger.getExoLogger(GateinSkinConfigDeployer.class);
+
+ /**
+ * The name of the portal container
+ */
+ private final String portalContainerName;
+
+ public GateinSkinConfigDeployer(String portalContainerName, SkinService _skinService)
+ {
+ this.skinService = _skinService;
+ this.portalContainerName = portalContainerName;
+ }
+
+ @Override
+ public void onEvent(WebAppEvent event)
+ {
+ if (event instanceof WebAppLifeCycleEvent)
+ {
+ WebAppLifeCycleEvent waEvent = (WebAppLifeCycleEvent)event;
+ if (waEvent.getType() == WebAppLifeCycleEvent.ADDED)
+ {
+ ServletContext scontext = null;
+ try
+ {
+ scontext = event.getWebApp().getServletContext();
+ InputStream is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
+ if (is == null)
+ return;
+ try
+ {
+ is.close();
+ }
+ catch (Exception ex)
+ {
+ // ignore me
+ }
+ final PortalContainerPostInitTask task = new PortalContainerPostInitTask()
+ {
+
+ public void execute(ServletContext scontext, PortalContainer portalContainer)
+ {
+ register(scontext, portalContainer);
+ }
+ };
+ PortalContainer.addInitTask(scontext, task, portalContainerName);
+ }
+ catch (Exception ex)
+ {
+ LOG.error("An error occurs while registering '" + GATEIN_CONFIG_RESOURCE + "' from the context '"
+ + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
+ }
+ }
+ }
+ }
+
+ private void register(ServletContext scontext, PortalContainer container)
+ {
+ InputStream is = null;
+ try
+ {
+ is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
+ SkinConfigParser.processConfigResource(is, skinService, scontext);
+ }
+ catch (Exception ex)
+ {
+ LOG.error("An error occurs while registering '" + GATEIN_CONFIG_RESOURCE + "' from the context '"
+ + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ // ignore me
+ }
+ }
+ }
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,80 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import javax.servlet.ServletContext;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class MainResourceResolver implements ResourceResolver
-{
-
- final Map<String, SimpleResourceContext> contexts;
-
- final CopyOnWriteArrayList<ResourceResolver> resolvers;
-
- final Map<SkinKey, SkinConfig> skins;
-
- public MainResourceResolver(String portalContainerName, Map<SkinKey, SkinConfig> skins)
- {
- this.skins = skins;
- this.contexts = new HashMap<String, SimpleResourceContext>();
- this.resolvers = new CopyOnWriteArrayList<ResourceResolver>();
-
- //
- resolvers.add(new CompositeResourceResolver(portalContainerName, skins));
- }
-
- SimpleResourceContext registerContext(ServletContext servletContext)
- {
- String key = "/" + servletContext.getServletContextName();
- SimpleResourceContext ctx = contexts.get(key);
- if (ctx == null)
- {
- ctx = new SimpleResourceContext(key, servletContext);
- contexts.put(ctx.getContextPath(), ctx);
- }
- return ctx;
- }
-
- public Resource resolve(String path)
- {
- for (ResourceResolver resolver : resolvers)
- {
- Resource res = resolver.resolve(path);
- if (res != null)
- {
- return res;
- }
- }
-
- //
- int i1 = path.indexOf("/", 2);
- String targetedContextPath = path.substring(0, i1);
- SimpleResourceContext context = contexts.get(targetedContextPath);
- return context.getResource(path.substring(i1));
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/MainResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,80 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.servlet.ServletContext;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class MainResourceResolver implements ResourceResolver
+{
+
+ final Map<String, SimpleResourceContext> contexts;
+
+ final CopyOnWriteArrayList<ResourceResolver> resolvers;
+
+ final Map<SkinKey, SkinConfig> skins;
+
+ public MainResourceResolver(String portalContainerName, Map<SkinKey, SkinConfig> skins)
+ {
+ this.skins = skins;
+ this.contexts = new HashMap<String, SimpleResourceContext>();
+ this.resolvers = new CopyOnWriteArrayList<ResourceResolver>();
+
+ //
+ resolvers.add(new CompositeResourceResolver(portalContainerName, skins));
+ }
+
+ SimpleResourceContext registerContext(ServletContext servletContext)
+ {
+ String key = "/" + servletContext.getServletContextName();
+ SimpleResourceContext ctx = contexts.get(key);
+ if (ctx == null)
+ {
+ ctx = new SimpleResourceContext(key, servletContext);
+ contexts.put(ctx.getContextPath(), ctx);
+ }
+ return ctx;
+ }
+
+ public Resource resolve(String path)
+ {
+ for (ResourceResolver resolver : resolvers)
+ {
+ Resource res = resolver.resolve(path);
+ if (res != null)
+ {
+ return res;
+ }
+ }
+
+ //
+ int i1 = path.indexOf("/", 2);
+ String targetedContextPath = path.substring(0, i1);
+ SimpleResourceContext context = contexts.get(targetedContextPath);
+ return context.getResource(path.substring(i1));
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,49 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * Signal an exception during rendering.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public class RenderingException extends Exception
-{
-
- public RenderingException()
- {
- }
-
- public RenderingException(String message)
- {
- super(message);
- }
-
- public RenderingException(String message, Throwable cause)
- {
- super(message, cause);
- }
-
- public RenderingException(Throwable cause)
- {
- super(cause);
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/RenderingException.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,49 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * Signal an exception during rendering.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class RenderingException extends Exception
+{
+
+ public RenderingException()
+ {
+ }
+
+ public RenderingException(String message)
+ {
+ super(message);
+ }
+
+ public RenderingException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+
+ public RenderingException(Throwable cause)
+ {
+ super(cause);
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,85 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * Represents a resource.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public abstract class Resource
-{
-
- private final String contextPath;
-
- private final String parentPath;
-
- private final String fileName;
-
- public Resource(String path)
- {
- int index = path.indexOf("/", 2);
- String relativeCSSPath = path.substring(index);
- int index2 = relativeCSSPath.lastIndexOf("/") + 1;
-
- //
- this.contextPath = path.substring(0, index);
- this.parentPath = relativeCSSPath.substring(0, index2);
- this.fileName = relativeCSSPath.substring(index2);
- }
-
- public Resource(String contextPath, String parentPath, String fileName)
- {
- this.contextPath = contextPath;
- this.parentPath = parentPath;
- this.fileName = fileName;
- }
-
- public final String getPath()
- {
- return getContextPath() + getParentPath() + getFileName();
- }
-
- public final String getContextPath()
- {
- return contextPath;
- }
-
- public final String getParentPath()
- {
- return parentPath;
- }
-
- public final String getFileName()
- {
- return fileName;
- }
-
- public final String getResourcePath()
- {
- return getParentPath() + getFileName();
- }
-
- public abstract Reader read() throws IOException;
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Resource.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,85 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * Represents a resource.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public abstract class Resource
+{
+
+ private final String contextPath;
+
+ private final String parentPath;
+
+ private final String fileName;
+
+ public Resource(String path)
+ {
+ int index = path.indexOf("/", 2);
+ String relativeCSSPath = path.substring(index);
+ int index2 = relativeCSSPath.lastIndexOf("/") + 1;
+
+ //
+ this.contextPath = path.substring(0, index);
+ this.parentPath = relativeCSSPath.substring(0, index2);
+ this.fileName = relativeCSSPath.substring(index2);
+ }
+
+ public Resource(String contextPath, String parentPath, String fileName)
+ {
+ this.contextPath = contextPath;
+ this.parentPath = parentPath;
+ this.fileName = fileName;
+ }
+
+ public final String getPath()
+ {
+ return getContextPath() + getParentPath() + getFileName();
+ }
+
+ public final String getContextPath()
+ {
+ return contextPath;
+ }
+
+ public final String getParentPath()
+ {
+ return parentPath;
+ }
+
+ public final String getFileName()
+ {
+ return fileName;
+ }
+
+ public final String getResourcePath()
+ {
+ return getParentPath() + getFileName();
+ }
+
+ public abstract Reader read() throws IOException;
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,47 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * An interface defining the renderer contract for a resource.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public interface ResourceRenderer
-{
-
- /**
- * Returns an appendable for the performing the rendering of the resource.
- *
- * @return the appendable
- */
- Appendable getAppendable();
-
- /**
- * Instruct the renderer about the expiration time in seconds. A non positive value
- * means that no caching should be performed. The expiration value is relative to the
- * date of the request.
- *
- * @param seconds the value in seconds
- */
- void setExpiration(long seconds);
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceRenderer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,47 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * An interface defining the renderer contract for a resource.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface ResourceRenderer
+{
+
+ /**
+ * Returns an appendable for the performing the rendering of the resource.
+ *
+ * @return the appendable
+ */
+ Appendable getAppendable();
+
+ /**
+ * Instruct the renderer about the expiration time in seconds. A non positive value
+ * means that no caching should be performed. The expiration value is relative to the
+ * date of the request.
+ *
+ * @param seconds the value in seconds
+ */
+ void setExpiration(long seconds);
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,39 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * A resource resolver for char based resources.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public interface ResourceResolver
-{
-
- /**
- * Returns a reader for the provided path or null if the resource cannot be resolved.
- *
- * @param path the path
- * @return a reader
- */
- Resource resolve(String path);
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/ResourceResolver.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,39 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * A resource resolver for char based resources.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface ResourceResolver
+{
+
+ /**
+ * Returns a reader for the provided path or null if the resource cannot be resolved.
+ *
+ * @param path the path
+ * @return a reader
+ */
+ Resource resolve(String path);
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,78 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import javax.servlet.ServletContext;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class SimpleResourceContext
-{
-
- private final String contextPath;
-
- private final ServletContext context;
-
- public SimpleResourceContext(String contextPath, ServletContext context)
- {
- this.contextPath = contextPath;
- this.context = context;
- }
-
- public Resource getResource(String path)
- {
- int i2 = path.lastIndexOf("/") + 1;
- String targetedParentPath = path.substring(0, i2);
- String targetedFileName = path.substring(i2);
- try
- {
- final URL url = context.getResource(path);
- if (url != null)
- {
- return new Resource(contextPath, targetedParentPath, targetedFileName)
- {
- @Override
- public Reader read() throws IOException
- {
- return new InputStreamReader(url.openStream());
- }
- };
- }
- }
- catch (MalformedURLException e)
- {
- e.printStackTrace();
- }
- return null;
- }
-
- public String getContextPath()
- {
- return contextPath;
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleResourceContext.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,78 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.servlet.ServletContext;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class SimpleResourceContext
+{
+
+ private final String contextPath;
+
+ private final ServletContext context;
+
+ public SimpleResourceContext(String contextPath, ServletContext context)
+ {
+ this.contextPath = contextPath;
+ this.context = context;
+ }
+
+ public Resource getResource(String path)
+ {
+ int i2 = path.lastIndexOf("/") + 1;
+ String targetedParentPath = path.substring(0, i2);
+ String targetedFileName = path.substring(i2);
+ try
+ {
+ final URL url = context.getResource(path);
+ if (url != null)
+ {
+ return new Resource(contextPath, targetedParentPath, targetedFileName)
+ {
+ @Override
+ public Reader read() throws IOException
+ {
+ return new InputStreamReader(url.openStream());
+ }
+ };
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public String getContextPath()
+ {
+ return contextPath;
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,91 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.services.resources.Orientation;
-
-/**
- * An implementation of the skin config.
- *
- * Created by The eXo Platform SAS
- * Jan 19, 2007
- */
-class SimpleSkin implements SkinConfig
-{
-
- private final SkinService service_;
-
- private final String module_;
-
- private final String name_;
-
- private final String cssPath_;
-
- private final String id_;
-
- public SimpleSkin(SkinService service, String module, String name, String cssPath)
- {
- service_ = service;
- module_ = module;
- name_ = name;
- cssPath_ = cssPath;
- id_ = module.replace('/', '_');
- }
-
- public String getId()
- {
- return id_;
- }
-
- public String getModule()
- {
- return module_;
- }
-
- public String getCSSPath()
- {
- return cssPath_;
- }
-
- public String getName()
- {
- return name_;
- }
-
- public SkinURL createURL()
- {
- return new SkinURL()
- {
-
- Orientation orientation = null;
-
- public void setOrientation(Orientation orientation)
- {
- this.orientation = orientation;
- }
-
- @Override
- public String toString()
- {
- return cssPath_.replaceAll("\\.css$", service_.getSuffix(orientation));
- }
- };
- }
-}
\ No newline at end of file
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SimpleSkin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,91 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.services.resources.Orientation;
+
+/**
+ * An implementation of the skin config.
+ *
+ * Created by The eXo Platform SAS
+ * Jan 19, 2007
+ */
+class SimpleSkin implements SkinConfig
+{
+
+ private final SkinService service_;
+
+ private final String module_;
+
+ private final String name_;
+
+ private final String cssPath_;
+
+ private final String id_;
+
+ public SimpleSkin(SkinService service, String module, String name, String cssPath)
+ {
+ service_ = service;
+ module_ = module;
+ name_ = name;
+ cssPath_ = cssPath;
+ id_ = module.replace('/', '_');
+ }
+
+ public String getId()
+ {
+ return id_;
+ }
+
+ public String getModule()
+ {
+ return module_;
+ }
+
+ public String getCSSPath()
+ {
+ return cssPath_;
+ }
+
+ public String getName()
+ {
+ return name_;
+ }
+
+ public SkinURL createURL()
+ {
+ return new SkinURL()
+ {
+
+ Orientation orientation = null;
+
+ public void setOrientation(Orientation orientation)
+ {
+ this.orientation = orientation;
+ }
+
+ @Override
+ public String toString()
+ {
+ return cssPath_.replaceAll("\\.css$", service_.getSuffix(orientation));
+ }
+ };
+ }
+}
\ No newline at end of file
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,45 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * A skin.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public interface Skin
-{
-
- /**
- * Returns the skin id.
- *
- * @return the skin id
- */
- String getId();
-
- /**
- * Creates and return a skin URL.
- *
- * @return the skin URL
- */
- SkinURL createURL();
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/Skin.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,45 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * A skin.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface Skin
+{
+
+ /**
+ * Returns the skin id.
+ *
+ * @return the skin id
+ */
+ String getId();
+
+ /**
+ * Creates and return a skin URL.
+ *
+ * @return the skin URL
+ */
+ SkinURL createURL();
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,52 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * Extends a skin with additional information.
- *
- * Created by The eXo Platform SAS
- * Jan 19, 2007
- */
-public interface SkinConfig extends Skin
-{
-
- /**
- * Returns the skin name
- *
- * @return the skin name
- */
- String getName();
-
- /**
- * Returns the skin module.
- *
- * @return the module
- */
- String getModule();
-
- /**
- * Returns the css path.
- *
- * @return the css path
- */
- String getCSSPath();
-
-}
\ No newline at end of file
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfig.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * Extends a skin with additional information.
+ *
+ * Created by The eXo Platform SAS
+ * Jan 19, 2007
+ */
+public interface SkinConfig extends Skin
+{
+
+ /**
+ * Returns the skin name
+ *
+ * @return the skin name
+ */
+ String getName();
+
+ /**
+ * Returns the skin module.
+ *
+ * @return the module
+ */
+ String getModule();
+
+ /**
+ * Returns the css path.
+ *
+ * @return the css path
+ */
+ String getCSSPath();
+
+}
\ No newline at end of file
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,139 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyShell;
-
-import org.exoplatform.container.PortalContainer;
-import org.exoplatform.container.RootContainer.PortalContainerPostInitTask;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-import org.gatein.wci.WebAppEvent;
-import org.gatein.wci.WebAppLifeCycleEvent;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletContext;
-
-/**
- * Created by The eXo Platform SAS
- * Jan 19, 2007
- */
-
-public class SkinConfigDeployer extends AbstractResourceHandler
-{
-
- /**
- * Logger
- */
- private static final Log LOG = ExoLogger.getLogger(SkinConfigDeployer.class);
-
- /** . */
- private final SkinService skinService;
-
- /**
- * The name of the portal container
- */
- private final String portalContainerName;
-
- public SkinConfigDeployer(String portalContainerName, SkinService skinService)
- {
- this.skinService = skinService;
- this.portalContainerName = portalContainerName;
- }
-
- public void onEvent(WebAppEvent event)
- {
- if (event instanceof WebAppLifeCycleEvent)
- {
- WebAppLifeCycleEvent waEvent = (WebAppLifeCycleEvent)event;
- if (waEvent.getType() == WebAppLifeCycleEvent.ADDED)
- {
- ServletContext scontext = null;
- try
- {
- scontext = event.getWebApp().getServletContext();
- InputStream is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/SkinConfigScript.groovy");
- if (is == null)
- return;
- try
- {
- is.close();
- }
- catch (Exception ex)
- {
- // ignore me
- }
- final PortalContainerPostInitTask task = new PortalContainerPostInitTask()
- {
-
- public void execute(ServletContext scontext, PortalContainer portalContainer)
- {
- register(scontext, portalContainer);
- }
- };
- PortalContainer.addInitTask(scontext, task, portalContainerName);
- }
- catch (Exception ex)
- {
- LOG.error("An error occurs while registering 'SkinConfigScript.groovy' from the context '"
- + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
- }
- }
- }
- }
-
- private void register(ServletContext scontext, PortalContainer container)
- {
- InputStream is = null;
- try
- {
- is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/SkinConfigScript.groovy");
- Binding binding = new Binding();
- binding.setVariable("SkinService", skinService);
- binding.setVariable("ServletContext", scontext);
- binding.setVariable("ServletContextName", scontext.getServletContextName());
- binding.setVariable("PortalContainerName", container.getName());
- GroovyShell shell = new GroovyShell(binding);
- shell.evaluate(is);
- }
- catch (Exception ex)
- {
- LOG.error("An error occurs while processing 'SkinConfigScript.groovy' from the context '"
- + scontext.getServletContextName() + "'", ex);
- }
- finally
- {
- if (is != null)
- {
- try
- {
- is.close();
- }
- catch (IOException e)
- {
- // ignore me
- }
- }
- }
- }
-}
\ No newline at end of file
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinConfigDeployer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,139 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import groovy.lang.Binding;
+import groovy.lang.GroovyShell;
+
+import org.exoplatform.container.PortalContainer;
+import org.exoplatform.container.RootContainer.PortalContainerPostInitTask;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.gatein.wci.WebAppEvent;
+import org.gatein.wci.WebAppLifeCycleEvent;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletContext;
+
+/**
+ * Created by The eXo Platform SAS
+ * Jan 19, 2007
+ */
+
+public class SkinConfigDeployer extends AbstractResourceHandler
+{
+
+ /**
+ * Logger
+ */
+ private static final Log LOG = ExoLogger.getLogger(SkinConfigDeployer.class);
+
+ /** . */
+ private final SkinService skinService;
+
+ /**
+ * The name of the portal container
+ */
+ private final String portalContainerName;
+
+ public SkinConfigDeployer(String portalContainerName, SkinService skinService)
+ {
+ this.skinService = skinService;
+ this.portalContainerName = portalContainerName;
+ }
+
+ public void onEvent(WebAppEvent event)
+ {
+ if (event instanceof WebAppLifeCycleEvent)
+ {
+ WebAppLifeCycleEvent waEvent = (WebAppLifeCycleEvent)event;
+ if (waEvent.getType() == WebAppLifeCycleEvent.ADDED)
+ {
+ ServletContext scontext = null;
+ try
+ {
+ scontext = event.getWebApp().getServletContext();
+ InputStream is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/SkinConfigScript.groovy");
+ if (is == null)
+ return;
+ try
+ {
+ is.close();
+ }
+ catch (Exception ex)
+ {
+ // ignore me
+ }
+ final PortalContainerPostInitTask task = new PortalContainerPostInitTask()
+ {
+
+ public void execute(ServletContext scontext, PortalContainer portalContainer)
+ {
+ register(scontext, portalContainer);
+ }
+ };
+ PortalContainer.addInitTask(scontext, task, portalContainerName);
+ }
+ catch (Exception ex)
+ {
+ LOG.error("An error occurs while registering 'SkinConfigScript.groovy' from the context '"
+ + (scontext == null ? "unknown" : scontext.getServletContextName()) + "'", ex);
+ }
+ }
+ }
+ }
+
+ private void register(ServletContext scontext, PortalContainer container)
+ {
+ InputStream is = null;
+ try
+ {
+ is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/SkinConfigScript.groovy");
+ Binding binding = new Binding();
+ binding.setVariable("SkinService", skinService);
+ binding.setVariable("ServletContext", scontext);
+ binding.setVariable("ServletContextName", scontext.getServletContextName());
+ binding.setVariable("PortalContainerName", container.getName());
+ GroovyShell shell = new GroovyShell(binding);
+ shell.evaluate(is);
+ }
+ catch (Exception ex)
+ {
+ LOG.error("An error occurs while processing 'SkinConfigScript.groovy' from the context '"
+ + scontext.getServletContextName() + "'", ex);
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ // ignore me
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,98 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-/**
- * A key for skin config lookup.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-class SkinKey
-{
-
- private final String module;
-
- private final String name;
-
- private final int hashCode;
-
- /**
- * Creates a new skin key.
- *
- * @param module the skin base
- * @param name the skin name
- * @throws IllegalArgumentException if any argument is null
- */
- public SkinKey(String module, String name) throws IllegalArgumentException
- {
- if (module == null)
- {
- throw new IllegalArgumentException("No null base accepted");
- }
- if (name == null)
- {
- throw new IllegalArgumentException("No null skin name accepted");
- }
-
- //
- this.module = module;
- this.name = name;
- this.hashCode = module.hashCode() * 41 + name.hashCode();
- }
-
- public String getModule()
- {
- return module;
- }
-
- public String getName()
- {
- return name;
- }
-
- public int hashCode()
- {
- return hashCode;
- }
-
- public boolean equals(Object obj)
- {
- if (obj == null)
- {
- return false;
- }
- if (obj == this)
- {
- return true;
- }
- if (obj instanceof SkinKey)
- {
- SkinKey that = (SkinKey)obj;
- return that.module.equals(module) && that.name.equals(name);
- }
- return false;
- }
-
- public String toString()
- {
- return "SkinKey[base=" + module + ",name=" + name + "]";
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinKey.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,98 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+/**
+ * A key for skin config lookup.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+class SkinKey
+{
+
+ private final String module;
+
+ private final String name;
+
+ private final int hashCode;
+
+ /**
+ * Creates a new skin key.
+ *
+ * @param module the skin base
+ * @param name the skin name
+ * @throws IllegalArgumentException if any argument is null
+ */
+ public SkinKey(String module, String name) throws IllegalArgumentException
+ {
+ if (module == null)
+ {
+ throw new IllegalArgumentException("No null base accepted");
+ }
+ if (name == null)
+ {
+ throw new IllegalArgumentException("No null skin name accepted");
+ }
+
+ //
+ this.module = module;
+ this.name = name;
+ this.hashCode = module.hashCode() * 41 + name.hashCode();
+ }
+
+ public String getModule()
+ {
+ return module;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj == null)
+ {
+ return false;
+ }
+ if (obj == this)
+ {
+ return true;
+ }
+ if (obj instanceof SkinKey)
+ {
+ SkinKey that = (SkinKey)obj;
+ return that.module.equals(module) && that.name.equals(name);
+ }
+ return false;
+ }
+
+ public String toString()
+ {
+ return "SkinKey[base=" + module + ",name=" + name + "]";
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,557 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.commons.utils.PropertyManager;
-import org.exoplatform.commons.utils.Safe;
-import org.exoplatform.container.ExoContainerContext;
-import org.exoplatform.management.annotations.Managed;
-import org.exoplatform.management.annotations.ManagedDescription;
-import org.exoplatform.management.annotations.ManagedName;
-import org.exoplatform.management.jmx.annotations.NameTemplate;
-import org.exoplatform.management.jmx.annotations.Property;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-import org.exoplatform.services.resources.Orientation;
-import org.gatein.wci.impl.DefaultServletContainerFactory;
-import org.picocontainer.Startable;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContext;
-
-@Managed
-@NameTemplate({@Property(key = "view", value = "portal"), @Property(key = "service", value = "management"),
- @Property(key = "type", value = "skin")})
-@ManagedDescription("Skin service")
-public class SkinService implements Startable
-{
-
- protected static Log log = ExoLogger.getLogger("portal.SkinService");
-
- private static final Map<Orientation, String> suffixMap = new EnumMap<Orientation, String>(Orientation.class);
-
- static
- {
- suffixMap.put(Orientation.LT, "-lt.css");
- suffixMap.put(Orientation.RT, "-rt.css");
- suffixMap.put(Orientation.TL, "-lt.css");
- suffixMap.put(Orientation.TR, "-lt.css");
- }
-
- private static final String LEFT_P = "\\(";
-
- private static final String RIGHT_P = "\\)";
-
- /** Immutable and therefore thread safe. */
- private static final Pattern IMPORT_PATTERN =
- Pattern.compile("(@import\\s+" + "url" + LEFT_P + "['\"]?" + ")([^'\"]+.css)(" + "['\"]?" + RIGHT_P + "\\s*;)");
-
- /** Immutable and therefore thread safe. */
- private static final Pattern BACKGROUND_PATTERN =
- Pattern.compile("(background.*:.*url" + LEFT_P + "['\"]?" + ")([^'\"]+)(" + "['\"]?" + RIGHT_P + ".*;)");
-
- /** Immutable and therefore thread safe. */
- private static final Pattern LT = Pattern.compile("/\\*\\s*orientation=lt\\s*\\*/");
-
- /** Immutable and therefore thread safe. */
- private static final Pattern RT = Pattern.compile("/\\*\\s*orientation=rt\\s*\\*/");
-
- /** One month caching. */
- private static final int ONE_MONTH = 2592000;
-
- /** One hour caching. */
- private static final int ONE_HOUR = 3600;
-
- /** The deployer. */
- private final AbstractResourceHandler deployer;
-
- private final Map<SkinKey, SkinConfig> portalSkins_;
-
- private final Map<SkinKey, SkinConfig> skinConfigs_;
-
- private final HashSet<String> availableSkins_;
-
- private final Map<String, String> ltCache;
-
- private final Map<String, String> rtCache;
-
- private final Map<String, Set<String>> portletThemes_;
-
- private final MainResourceResolver mainResolver;
-
- /**
- * The name of the portal container
- */
- final String portalContainerName;
-
- /**
- * An id used for caching request. The id life cycle is the same than the class instance because
- * we consider css will change until server is restarted. Of course this only applies for the
- * developing mode set to false.
- */
- final String id = Long.toString(System.currentTimeMillis());
-
- /** Temporary hack. */
- //private static final List<String> skinBlackList = Arrays.asList("Vista", "Mac");
- private static final List<String> skinBlackList = new ArrayList<String>();
-
- public SkinService(ExoContainerContext context)
- {
- portalSkins_ = new LinkedHashMap<SkinKey, SkinConfig>();
- skinConfigs_ = new LinkedHashMap<SkinKey, SkinConfig>(20);
- availableSkins_ = new HashSet<String>(5);
- ltCache = new ConcurrentHashMap<String, String>();
- rtCache = new ConcurrentHashMap<String, String>();
- portletThemes_ = new HashMap<String, Set<String>>();
- portalContainerName = context.getPortalContainerName();
- mainResolver = new MainResourceResolver(portalContainerName, skinConfigs_);
- //deployer = new SkinConfigDeployer(portalContainerName, this);
- deployer = new GateinSkinConfigDeployer(portalContainerName, this);
- }
-
- public void addCategoryTheme(String categoryName)
- {
- if (!portletThemes_.containsKey(categoryName))
- portletThemes_.put(categoryName, new HashSet<String>());
- }
-
- public void addPortalSkin(String module, String skinName, String cssPath, ServletContext scontext)
- {
- addPortalSkin(module, skinName, cssPath, scontext, false);
- }
-
- /**
- * Register the stylesheet for a portal Skin.
- *
- * @param module skin module identifier
- * @param skinName skin name
- * @param cssPath path uri to the css file. This is relative to the root context, use leading '/'
- * @param scontext the webapp's {@link javax.servlet.ServletContext}
- * @param overwrite if any previous skin should be replaced by that one
- */
- public void addPortalSkin(String module, String skinName, String cssPath, ServletContext scontext, boolean overwrite)
- {
-
- // Triggers a put if absent
- mainResolver.registerContext(scontext);
-
- availableSkins_.add(skinName);
- SkinKey key = new SkinKey(module, skinName);
- SkinConfig skinConfig = portalSkins_.get(key);
- if (skinConfig == null || overwrite)
- {
- skinConfig = new SimpleSkin(this, module, skinName, cssPath);
- portalSkins_.put(key, skinConfig);
- }
- }
-
- public void addPortalSkin(String module, String skinName, String cssPath, String cssData)
- {
- SkinKey key = new SkinKey(module, skinName);
- SkinConfig skinConfig = portalSkins_.get(key);
- if (skinConfig == null)
- {
- portalSkins_.put(key, new SimpleSkin(this, module, skinName, cssPath));
- }
- ltCache.put(cssPath, cssData);
- rtCache.put(cssPath, cssData);
- }
-
- public void addSkin(String module, String skinName, String cssPath, ServletContext scontext)
- {
- addSkin(module, skinName, cssPath, scontext, false);
- }
-
- /**
- * Merge several skins into one single skin.
- *
- * @param skins the skins to merge
- * @return the merged skin
- */
- public Skin merge(Collection<SkinConfig> skins)
- {
- return new CompositeSkin(this, skins);
- }
-
- /**
- * Add a resource resolver to plug external resolvers.
- *
- * @param resolver a resolver to add
- */
- public void addResourceResolver(ResourceResolver resolver)
- {
- mainResolver.resolvers.addIfAbsent(resolver);
- }
-
- public void addSkin(String module, String skinName, String cssPath, ServletContext scontext, boolean overwrite)
- {
- // Triggers a put if absent
- mainResolver.registerContext(scontext);
-
- availableSkins_.add(skinName);
- SkinKey key = new SkinKey(module, skinName);
- SkinConfig skinConfig = skinConfigs_.get(key);
- if (skinConfig == null || overwrite)
- {
- skinConfig = new SimpleSkin(this, module, skinName, cssPath);
- skinConfigs_.put(key, skinConfig);
- }
- }
-
- public void addSkin(String module, String skinName, String cssPath, String cssData)
- {
- //
- availableSkins_.add(skinName);
- SkinKey key = new SkinKey(module, skinName);
- SkinConfig skinConfig = skinConfigs_.get(key);
- if (skinConfig == null)
- {
- skinConfigs_.put(key, new SimpleSkin(this, module, skinName, cssPath));
- }
- ltCache.put(cssPath, cssData);
- rtCache.put(cssPath, cssData);
- }
-
- public void addTheme(String categoryName, List<String> themesName)
- {
- if (!portletThemes_.containsKey(categoryName))
- portletThemes_.put(categoryName, new HashSet<String>());
- Set<String> catThemes = portletThemes_.get(categoryName);
- for (String theme : themesName)
- catThemes.add(theme);
- }
-
- /**
- * Get names of all the currently registered skins.
- *
- * @return an unmodifiable Set of the currently registered skins
- */
- public Set<String> getAvailableSkinNames()
- {
- return availableSkins_;
- }
-
- /**
- * Return the CSS content of the file specified by the given URI.
- *
- * @param cssPath path of the css to find
- * @return the css
- */
- public String getCSS(String cssPath)
- {
- try
- {
- final StringBuilder sb = new StringBuilder();
- renderCSS(new ResourceRenderer()
- {
- public Appendable getAppendable()
- {
- return sb;
- }
-
- public void setExpiration(long seconds)
- {
-
- }
- }, cssPath);
- return sb.toString();
- }
- catch (IOException e)
- {
- log.error("Error while rendering css " + cssPath, e);
- return null;
- }
- catch (RenderingException e)
- {
- log.error("Error while rendering css " + cssPath, e);
- return null;
- }
- }
-
- public void renderCSS(ResourceRenderer renderer, String path) throws RenderingException, IOException
- {
- Orientation orientation = Orientation.LT;
- if (path.endsWith("-lt.css"))
- {
- path = path.substring(0, path.length() - "-lt.css".length()) + ".css";
- }
- else if (path.endsWith("-rt.css"))
- {
- path = path.substring(0, path.length() - "-rt.css".length()) + ".css";
- orientation = Orientation.RT;
- }
-
- // Try cache first
- if (!PropertyManager.isDevelopping())
- {
-
- if (path.startsWith("/" + portalContainerName + "/resource"))
- {
- renderer.setExpiration(ONE_MONTH);
- }
- else
- {
- renderer.setExpiration(ONE_HOUR);
- }
-
- //
- Map<String, String> cache = orientation == Orientation.LT ? ltCache : rtCache;
- String css = cache.get(path);
- if (css == null)
- {
- StringBuilder sb = new StringBuilder();
- processCSS(sb, path, orientation, true);
- css = sb.toString();
- cache.put(path, css);
- }
- renderer.getAppendable().append(css);
- }
- else
- {
- processCSS(renderer.getAppendable(), path, orientation, false);
- }
- }
-
- public String getMergedCSS(String cssPath)
- {
- return ltCache.get(cssPath);
- }
-
- public Collection<SkinConfig> getPortalSkins(String skinName)
- {
- Set<SkinKey> keys = portalSkins_.keySet();
- Collection<SkinConfig> portalSkins = new ArrayList<SkinConfig>();
- for (SkinKey key : keys)
- {
- if (key.getName().equals(skinName))
- portalSkins.add(portalSkins_.get(key));
- }
- return portalSkins;
- }
-
- public Map<String, Set<String>> getPortletThemes()
- {
- return portletThemes_;
- }
-
- public SkinConfig getSkin(String module, String skinName)
- {
- SkinConfig config = skinConfigs_.get(new SkinKey(module, skinName));
- if (config == null)
- skinConfigs_.get(new SkinKey(module, "Default"));
- return config;
- }
-
- public void invalidatePortalSkinCache(String portalName, String skinName)
- {
- SkinKey key = new SkinKey(portalName, skinName);
- skinConfigs_.remove(key);
- }
-
- public void remove(String module, String skinName) throws Exception
- {
- SkinKey key;
- if (skinName.length() == 0)
- key = new SkinKey(module, "Default");
- else
- key = new SkinKey(module, skinName);
- skinConfigs_.remove(key);
- }
-
- public int size()
- {
- return skinConfigs_.size();
- }
-
- private void processCSS(Appendable appendable, String cssPath, Orientation orientation, boolean merge)
- throws RenderingException, IOException
- {
- Resource skin = mainResolver.resolve(cssPath);
- processCSSRecursively(appendable, merge, skin, orientation);
- }
-
- private void processCSSRecursively(Appendable appendable, boolean merge, Resource skin, Orientation orientation)
- throws RenderingException, IOException
- {
-
- // The root URL for the entry
- String basePath = skin.getContextPath() + skin.getParentPath();
-
- //
- String line = "";
- Reader tmp = skin.read();
- if (tmp == null)
- {
- throw new RenderingException("No skin resolved for path " + skin.getResourcePath());
- }
- BufferedReader reader = new BufferedReader(tmp);
- try
- {
- while ((line = reader.readLine()) != null)
- {
- Matcher matcher = IMPORT_PATTERN.matcher(line);
- if (matcher.find())
- {
- String includedPath = matcher.group(2);
- if (includedPath.startsWith("/"))
- {
- if (merge)
- {
- Resource ssskin = mainResolver.resolve(includedPath);
- processCSSRecursively(appendable, merge, ssskin, orientation);
- }
- else
- {
- appendable.append(matcher.group(1)).append(
- includedPath.substring(0, includedPath.length() - ".css".length())).append(
- getSuffix(orientation)).append(matcher.group(3)).append("\n");
- }
- }
- else
- {
- if (merge)
- {
- String path = skin.getContextPath() + skin.getParentPath() + includedPath;
- Resource ssskin = mainResolver.resolve(path);
- processCSSRecursively(appendable, merge, ssskin, orientation);
- }
- else
- {
- appendable.append(matcher.group(1));
- appendable.append(basePath);
- appendable.append(includedPath.substring(0, includedPath.length() - ".css".length()));
- appendable.append(getSuffix(orientation));
- appendable.append(matcher.group(3));
- }
- }
- }
- else
- {
- if (orientation == null || wantInclude(line, orientation))
- {
- append(line, basePath, appendable);
- }
- }
- }
- }
- finally
- {
- Safe.close(reader);
- }
- }
-
- /**
- * Filter what if it's annotated with the alternative orientation.
- *
- * @param line the line to include
- * @param orientation the orientation
- * @return true if the line is included
- */
- private boolean wantInclude(String line, Orientation orientation)
- {
- Pattern orientationPattern = orientation == Orientation.LT ? RT : LT;
- Matcher matcher2 = orientationPattern.matcher(line);
- return !matcher2.find();
- }
-
- private void append(String line, String basePath, Appendable appendable) throws IOException
- {
- // Rewrite background url pattern
- Matcher matcher = BACKGROUND_PATTERN.matcher(line);
- if (matcher.find() && !matcher.group(2).startsWith("\"/") && !matcher.group(2).startsWith("'/")
- && !matcher.group(2).startsWith("/"))
- {
- appendable.append(matcher.group(1)).append(basePath).append(matcher.group(2)).append(matcher.group(3)).append(
- '\n');
- }
- else
- {
- appendable.append(line).append('\n');
- }
- }
-
- String getSuffix(Orientation orientation)
- {
- if (orientation == null)
- {
- orientation = Orientation.LT;
- }
- return suffixMap.get(orientation);
- }
-
- @Managed
- @ManagedDescription("The list of registered skins identifiers")
- public String[] getSkinList()
- {
- // get all available skin
- List<String> availableSkin = new ArrayList<String>();
- for (String skin : availableSkins_)
- {
- availableSkin.add(skin);
- }
- // sort skin name asc
- Collections.sort(availableSkin);
-
- return availableSkin.toArray(new String[availableSkin.size()]);
- }
-
- @Managed
- @ManagedDescription("Reload all skins")
- public void reloadSkins()
- {
- // remove all ltCache, rtCache
- ltCache.clear();
- rtCache.clear();
- }
-
- @Managed
- @ManagedDescription("Reload a specified skin")
- public void reloadSkin(@ManagedDescription("The skin id") @ManagedName("skinId") String skinId)
- {
- ltCache.remove(skinId);
- rtCache.remove(skinId);
- }
-
- public void start()
- {
- DefaultServletContainerFactory.getInstance().getServletContainer().addWebAppListener(deployer);
- }
-
- public void stop()
- {
- DefaultServletContainerFactory.getInstance().getServletContainer().removeWebAppListener(deployer);
- }
-}
\ No newline at end of file
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinService.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,557 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.commons.utils.PropertyManager;
+import org.exoplatform.commons.utils.Safe;
+import org.exoplatform.container.ExoContainerContext;
+import org.exoplatform.management.annotations.Managed;
+import org.exoplatform.management.annotations.ManagedDescription;
+import org.exoplatform.management.annotations.ManagedName;
+import org.exoplatform.management.jmx.annotations.NameTemplate;
+import org.exoplatform.management.jmx.annotations.Property;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.resources.Orientation;
+import org.gatein.wci.impl.DefaultServletContainerFactory;
+import org.picocontainer.Startable;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.ServletContext;
+
+@Managed
+@NameTemplate({@Property(key = "view", value = "portal"), @Property(key = "service", value = "management"),
+ @Property(key = "type", value = "skin")})
+@ManagedDescription("Skin service")
+public class SkinService implements Startable
+{
+
+ protected static Log log = ExoLogger.getLogger("portal.SkinService");
+
+ private static final Map<Orientation, String> suffixMap = new EnumMap<Orientation, String>(Orientation.class);
+
+ static
+ {
+ suffixMap.put(Orientation.LT, "-lt.css");
+ suffixMap.put(Orientation.RT, "-rt.css");
+ suffixMap.put(Orientation.TL, "-lt.css");
+ suffixMap.put(Orientation.TR, "-lt.css");
+ }
+
+ private static final String LEFT_P = "\\(";
+
+ private static final String RIGHT_P = "\\)";
+
+ /** Immutable and therefore thread safe. */
+ private static final Pattern IMPORT_PATTERN =
+ Pattern.compile("(@import\\s+" + "url" + LEFT_P + "['\"]?" + ")([^'\"]+.css)(" + "['\"]?" + RIGHT_P + "\\s*;)");
+
+ /** Immutable and therefore thread safe. */
+ private static final Pattern BACKGROUND_PATTERN =
+ Pattern.compile("(background.*:.*url" + LEFT_P + "['\"]?" + ")([^'\"]+)(" + "['\"]?" + RIGHT_P + ".*;)");
+
+ /** Immutable and therefore thread safe. */
+ private static final Pattern LT = Pattern.compile("/\\*\\s*orientation=lt\\s*\\*/");
+
+ /** Immutable and therefore thread safe. */
+ private static final Pattern RT = Pattern.compile("/\\*\\s*orientation=rt\\s*\\*/");
+
+ /** One month caching. */
+ private static final int ONE_MONTH = 2592000;
+
+ /** One hour caching. */
+ private static final int ONE_HOUR = 3600;
+
+ /** The deployer. */
+ private final AbstractResourceHandler deployer;
+
+ private final Map<SkinKey, SkinConfig> portalSkins_;
+
+ private final Map<SkinKey, SkinConfig> skinConfigs_;
+
+ private final HashSet<String> availableSkins_;
+
+ private final Map<String, String> ltCache;
+
+ private final Map<String, String> rtCache;
+
+ private final Map<String, Set<String>> portletThemes_;
+
+ private final MainResourceResolver mainResolver;
+
+ /**
+ * The name of the portal container
+ */
+ final String portalContainerName;
+
+ /**
+ * An id used for caching request. The id life cycle is the same than the class instance because
+ * we consider css will change until server is restarted. Of course this only applies for the
+ * developing mode set to false.
+ */
+ final String id = Long.toString(System.currentTimeMillis());
+
+ /** Temporary hack. */
+ //private static final List<String> skinBlackList = Arrays.asList("Vista", "Mac");
+ private static final List<String> skinBlackList = new ArrayList<String>();
+
+ public SkinService(ExoContainerContext context)
+ {
+ portalSkins_ = new LinkedHashMap<SkinKey, SkinConfig>();
+ skinConfigs_ = new LinkedHashMap<SkinKey, SkinConfig>(20);
+ availableSkins_ = new HashSet<String>(5);
+ ltCache = new ConcurrentHashMap<String, String>();
+ rtCache = new ConcurrentHashMap<String, String>();
+ portletThemes_ = new HashMap<String, Set<String>>();
+ portalContainerName = context.getPortalContainerName();
+ mainResolver = new MainResourceResolver(portalContainerName, skinConfigs_);
+ //deployer = new SkinConfigDeployer(portalContainerName, this);
+ deployer = new GateinSkinConfigDeployer(portalContainerName, this);
+ }
+
+ public void addCategoryTheme(String categoryName)
+ {
+ if (!portletThemes_.containsKey(categoryName))
+ portletThemes_.put(categoryName, new HashSet<String>());
+ }
+
+ public void addPortalSkin(String module, String skinName, String cssPath, ServletContext scontext)
+ {
+ addPortalSkin(module, skinName, cssPath, scontext, false);
+ }
+
+ /**
+ * Register the stylesheet for a portal Skin.
+ *
+ * @param module skin module identifier
+ * @param skinName skin name
+ * @param cssPath path uri to the css file. This is relative to the root context, use leading '/'
+ * @param scontext the webapp's {@link javax.servlet.ServletContext}
+ * @param overwrite if any previous skin should be replaced by that one
+ */
+ public void addPortalSkin(String module, String skinName, String cssPath, ServletContext scontext, boolean overwrite)
+ {
+
+ // Triggers a put if absent
+ mainResolver.registerContext(scontext);
+
+ availableSkins_.add(skinName);
+ SkinKey key = new SkinKey(module, skinName);
+ SkinConfig skinConfig = portalSkins_.get(key);
+ if (skinConfig == null || overwrite)
+ {
+ skinConfig = new SimpleSkin(this, module, skinName, cssPath);
+ portalSkins_.put(key, skinConfig);
+ }
+ }
+
+ public void addPortalSkin(String module, String skinName, String cssPath, String cssData)
+ {
+ SkinKey key = new SkinKey(module, skinName);
+ SkinConfig skinConfig = portalSkins_.get(key);
+ if (skinConfig == null)
+ {
+ portalSkins_.put(key, new SimpleSkin(this, module, skinName, cssPath));
+ }
+ ltCache.put(cssPath, cssData);
+ rtCache.put(cssPath, cssData);
+ }
+
+ public void addSkin(String module, String skinName, String cssPath, ServletContext scontext)
+ {
+ addSkin(module, skinName, cssPath, scontext, false);
+ }
+
+ /**
+ * Merge several skins into one single skin.
+ *
+ * @param skins the skins to merge
+ * @return the merged skin
+ */
+ public Skin merge(Collection<SkinConfig> skins)
+ {
+ return new CompositeSkin(this, skins);
+ }
+
+ /**
+ * Add a resource resolver to plug external resolvers.
+ *
+ * @param resolver a resolver to add
+ */
+ public void addResourceResolver(ResourceResolver resolver)
+ {
+ mainResolver.resolvers.addIfAbsent(resolver);
+ }
+
+ public void addSkin(String module, String skinName, String cssPath, ServletContext scontext, boolean overwrite)
+ {
+ // Triggers a put if absent
+ mainResolver.registerContext(scontext);
+
+ availableSkins_.add(skinName);
+ SkinKey key = new SkinKey(module, skinName);
+ SkinConfig skinConfig = skinConfigs_.get(key);
+ if (skinConfig == null || overwrite)
+ {
+ skinConfig = new SimpleSkin(this, module, skinName, cssPath);
+ skinConfigs_.put(key, skinConfig);
+ }
+ }
+
+ public void addSkin(String module, String skinName, String cssPath, String cssData)
+ {
+ //
+ availableSkins_.add(skinName);
+ SkinKey key = new SkinKey(module, skinName);
+ SkinConfig skinConfig = skinConfigs_.get(key);
+ if (skinConfig == null)
+ {
+ skinConfigs_.put(key, new SimpleSkin(this, module, skinName, cssPath));
+ }
+ ltCache.put(cssPath, cssData);
+ rtCache.put(cssPath, cssData);
+ }
+
+ public void addTheme(String categoryName, List<String> themesName)
+ {
+ if (!portletThemes_.containsKey(categoryName))
+ portletThemes_.put(categoryName, new HashSet<String>());
+ Set<String> catThemes = portletThemes_.get(categoryName);
+ for (String theme : themesName)
+ catThemes.add(theme);
+ }
+
+ /**
+ * Get names of all the currently registered skins.
+ *
+ * @return an unmodifiable Set of the currently registered skins
+ */
+ public Set<String> getAvailableSkinNames()
+ {
+ return availableSkins_;
+ }
+
+ /**
+ * Return the CSS content of the file specified by the given URI.
+ *
+ * @param cssPath path of the css to find
+ * @return the css
+ */
+ public String getCSS(String cssPath)
+ {
+ try
+ {
+ final StringBuilder sb = new StringBuilder();
+ renderCSS(new ResourceRenderer()
+ {
+ public Appendable getAppendable()
+ {
+ return sb;
+ }
+
+ public void setExpiration(long seconds)
+ {
+
+ }
+ }, cssPath);
+ return sb.toString();
+ }
+ catch (IOException e)
+ {
+ log.error("Error while rendering css " + cssPath, e);
+ return null;
+ }
+ catch (RenderingException e)
+ {
+ log.error("Error while rendering css " + cssPath, e);
+ return null;
+ }
+ }
+
+ public void renderCSS(ResourceRenderer renderer, String path) throws RenderingException, IOException
+ {
+ Orientation orientation = Orientation.LT;
+ if (path.endsWith("-lt.css"))
+ {
+ path = path.substring(0, path.length() - "-lt.css".length()) + ".css";
+ }
+ else if (path.endsWith("-rt.css"))
+ {
+ path = path.substring(0, path.length() - "-rt.css".length()) + ".css";
+ orientation = Orientation.RT;
+ }
+
+ // Try cache first
+ if (!PropertyManager.isDevelopping())
+ {
+
+ if (path.startsWith("/" + portalContainerName + "/resource"))
+ {
+ renderer.setExpiration(ONE_MONTH);
+ }
+ else
+ {
+ renderer.setExpiration(ONE_HOUR);
+ }
+
+ //
+ Map<String, String> cache = orientation == Orientation.LT ? ltCache : rtCache;
+ String css = cache.get(path);
+ if (css == null)
+ {
+ StringBuilder sb = new StringBuilder();
+ processCSS(sb, path, orientation, true);
+ css = sb.toString();
+ cache.put(path, css);
+ }
+ renderer.getAppendable().append(css);
+ }
+ else
+ {
+ processCSS(renderer.getAppendable(), path, orientation, false);
+ }
+ }
+
+ public String getMergedCSS(String cssPath)
+ {
+ return ltCache.get(cssPath);
+ }
+
+ public Collection<SkinConfig> getPortalSkins(String skinName)
+ {
+ Set<SkinKey> keys = portalSkins_.keySet();
+ Collection<SkinConfig> portalSkins = new ArrayList<SkinConfig>();
+ for (SkinKey key : keys)
+ {
+ if (key.getName().equals(skinName))
+ portalSkins.add(portalSkins_.get(key));
+ }
+ return portalSkins;
+ }
+
+ public Map<String, Set<String>> getPortletThemes()
+ {
+ return portletThemes_;
+ }
+
+ public SkinConfig getSkin(String module, String skinName)
+ {
+ SkinConfig config = skinConfigs_.get(new SkinKey(module, skinName));
+ if (config == null)
+ skinConfigs_.get(new SkinKey(module, "Default"));
+ return config;
+ }
+
+ public void invalidatePortalSkinCache(String portalName, String skinName)
+ {
+ SkinKey key = new SkinKey(portalName, skinName);
+ skinConfigs_.remove(key);
+ }
+
+ public void remove(String module, String skinName) throws Exception
+ {
+ SkinKey key;
+ if (skinName.length() == 0)
+ key = new SkinKey(module, "Default");
+ else
+ key = new SkinKey(module, skinName);
+ skinConfigs_.remove(key);
+ }
+
+ public int size()
+ {
+ return skinConfigs_.size();
+ }
+
+ private void processCSS(Appendable appendable, String cssPath, Orientation orientation, boolean merge)
+ throws RenderingException, IOException
+ {
+ Resource skin = mainResolver.resolve(cssPath);
+ processCSSRecursively(appendable, merge, skin, orientation);
+ }
+
+ private void processCSSRecursively(Appendable appendable, boolean merge, Resource skin, Orientation orientation)
+ throws RenderingException, IOException
+ {
+
+ // The root URL for the entry
+ String basePath = skin.getContextPath() + skin.getParentPath();
+
+ //
+ String line = "";
+ Reader tmp = skin.read();
+ if (tmp == null)
+ {
+ throw new RenderingException("No skin resolved for path " + skin.getResourcePath());
+ }
+ BufferedReader reader = new BufferedReader(tmp);
+ try
+ {
+ while ((line = reader.readLine()) != null)
+ {
+ Matcher matcher = IMPORT_PATTERN.matcher(line);
+ if (matcher.find())
+ {
+ String includedPath = matcher.group(2);
+ if (includedPath.startsWith("/"))
+ {
+ if (merge)
+ {
+ Resource ssskin = mainResolver.resolve(includedPath);
+ processCSSRecursively(appendable, merge, ssskin, orientation);
+ }
+ else
+ {
+ appendable.append(matcher.group(1)).append(
+ includedPath.substring(0, includedPath.length() - ".css".length())).append(
+ getSuffix(orientation)).append(matcher.group(3)).append("\n");
+ }
+ }
+ else
+ {
+ if (merge)
+ {
+ String path = skin.getContextPath() + skin.getParentPath() + includedPath;
+ Resource ssskin = mainResolver.resolve(path);
+ processCSSRecursively(appendable, merge, ssskin, orientation);
+ }
+ else
+ {
+ appendable.append(matcher.group(1));
+ appendable.append(basePath);
+ appendable.append(includedPath.substring(0, includedPath.length() - ".css".length()));
+ appendable.append(getSuffix(orientation));
+ appendable.append(matcher.group(3));
+ }
+ }
+ }
+ else
+ {
+ if (orientation == null || wantInclude(line, orientation))
+ {
+ append(line, basePath, appendable);
+ }
+ }
+ }
+ }
+ finally
+ {
+ Safe.close(reader);
+ }
+ }
+
+ /**
+ * Filter what if it's annotated with the alternative orientation.
+ *
+ * @param line the line to include
+ * @param orientation the orientation
+ * @return true if the line is included
+ */
+ private boolean wantInclude(String line, Orientation orientation)
+ {
+ Pattern orientationPattern = orientation == Orientation.LT ? RT : LT;
+ Matcher matcher2 = orientationPattern.matcher(line);
+ return !matcher2.find();
+ }
+
+ private void append(String line, String basePath, Appendable appendable) throws IOException
+ {
+ // Rewrite background url pattern
+ Matcher matcher = BACKGROUND_PATTERN.matcher(line);
+ if (matcher.find() && !matcher.group(2).startsWith("\"/") && !matcher.group(2).startsWith("'/")
+ && !matcher.group(2).startsWith("/"))
+ {
+ appendable.append(matcher.group(1)).append(basePath).append(matcher.group(2)).append(matcher.group(3)).append(
+ '\n');
+ }
+ else
+ {
+ appendable.append(line).append('\n');
+ }
+ }
+
+ String getSuffix(Orientation orientation)
+ {
+ if (orientation == null)
+ {
+ orientation = Orientation.LT;
+ }
+ return suffixMap.get(orientation);
+ }
+
+ @Managed
+ @ManagedDescription("The list of registered skins identifiers")
+ public String[] getSkinList()
+ {
+ // get all available skin
+ List<String> availableSkin = new ArrayList<String>();
+ for (String skin : availableSkins_)
+ {
+ availableSkin.add(skin);
+ }
+ // sort skin name asc
+ Collections.sort(availableSkin);
+
+ return availableSkin.toArray(new String[availableSkin.size()]);
+ }
+
+ @Managed
+ @ManagedDescription("Reload all skins")
+ public void reloadSkins()
+ {
+ // remove all ltCache, rtCache
+ ltCache.clear();
+ rtCache.clear();
+ }
+
+ @Managed
+ @ManagedDescription("Reload a specified skin")
+ public void reloadSkin(@ManagedDescription("The skin id") @ManagedName("skinId") String skinId)
+ {
+ ltCache.remove(skinId);
+ rtCache.remove(skinId);
+ }
+
+ public void start()
+ {
+ DefaultServletContainerFactory.getInstance().getServletContainer().addWebAppListener(deployer);
+ }
+
+ public void stop()
+ {
+ DefaultServletContainerFactory.getInstance().getServletContainer().removeWebAppListener(deployer);
+ }
+}
\ No newline at end of file
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,46 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource;
-
-import org.exoplatform.services.resources.Orientation;
-
-/**
- * The URL of a skin.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public interface SkinURL
-{
-
- /**
- * Sets the orientation on the skin URL.
- *
- * @param orientation the orientation
- */
- void setOrientation(Orientation orientation);
-
- /**
- * This method is used to compute the path of a CSS.
- *
- * @return the CSS path, containing the orientation suffix.
- */
- String toString();
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/SkinURL.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,46 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource;
+
+import org.exoplatform.services.resources.Orientation;
+
+/**
+ * The URL of a skin.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface SkinURL
+{
+
+ /**
+ * Sets the orientation on the skin URL.
+ *
+ * @param orientation the orientation
+ */
+ void setOrientation(Orientation orientation);
+
+ /**
+ * This method is used to compute the path of a CSS.
+ *
+ * @return the CSS path, containing the orientation suffix.
+ */
+ String toString();
+}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config)
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks)
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,37 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.tasks;
-
-import org.exoplatform.portal.resource.SkinService;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-abstract public class AbstractSkinTask
-{
- abstract public void execute(SkinService skinService, ServletContext scontext);
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/AbstractSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,37 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.tasks;
+
+import org.exoplatform.portal.resource.SkinService;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+abstract public class AbstractSkinTask
+{
+ abstract public void execute(SkinService skinService, ServletContext scontext);
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,49 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.tasks;
-
-import org.exoplatform.portal.resource.SkinService;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class I18nTask extends AbstractSkinTask
-{
-
- public I18nTask()
- {
-
- }
-
- @Override
- public void execute(SkinService skinService, ServletContext scontext)
- {
- // TODO Auto-generated method stub
-
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/I18nTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,49 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.tasks;
+
+import org.exoplatform.portal.resource.SkinService;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class I18nTask extends AbstractSkinTask
+{
+
+ public I18nTask()
+ {
+
+ }
+
+ @Override
+ public void execute(SkinService skinService, ServletContext scontext)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.exoplatform.portal.resource.config.tasks;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-import org.exoplatform.web.application.javascript.JavascriptConfigService;
-
-/**
- * @author <a href="mailto:hoang281283@gmail.com">Minh Hoang TO</a>
- * @version $Id$
- *
- */
-public class JavascriptTask
-{
-
- private List<Parameter> parameters;
-
- public JavascriptTask(){
- parameters = new ArrayList<Parameter>();
- }
-
- public void execute(JavascriptConfigService service, ServletContext scontext){
- for(Parameter param : parameters){
- service.addJavascript(param.moduleName, param.scriptPath, scontext);
- }
- }
-
- public void addParam(String moduleName, String scriptPath){
- parameters.add(new Parameter(moduleName, scriptPath));
- }
-
- private class Parameter {
-
- private String moduleName;
- private String scriptPath;
-
- Parameter(String _moduleName, String _scriptPath){
- moduleName = _moduleName;
- scriptPath = _scriptPath;
- }
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/JavascriptTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.resource.config.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+
+import org.exoplatform.web.application.javascript.JavascriptConfigService;
+
+/**
+ * @author <a href="mailto:hoang281283@gmail.com">Minh Hoang TO</a>
+ * @version $Id$
+ *
+ */
+public class JavascriptTask
+{
+
+ private List<Parameter> parameters;
+
+ public JavascriptTask(){
+ parameters = new ArrayList<Parameter>();
+ }
+
+ public void execute(JavascriptConfigService service, ServletContext scontext){
+ for(Parameter param : parameters){
+ service.addJavascript(param.moduleName, param.scriptPath, scontext);
+ }
+ }
+
+ public void addParam(String moduleName, String scriptPath){
+ parameters.add(new Parameter(moduleName, scriptPath));
+ }
+
+ private class Parameter {
+
+ private String moduleName;
+ private String scriptPath;
+
+ Parameter(String _moduleName, String _scriptPath){
+ moduleName = _moduleName;
+ scriptPath = _scriptPath;
+ }
+ }
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,87 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.tasks;
-
-import org.exoplatform.portal.resource.SkinService;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class PortalSkinTask extends AbstractSkinTask
-{
-
- private static final String DEFAULT_MODULE_NAME = "CoreSkin";
-
- private static final String DEFAULT_SKIN_NAME = "Default";
-
- private String moduleName;
-
- private String skinName;
-
- private String cssPath;
-
- private boolean overwrite;
-
- public PortalSkinTask()
- {
- this.overwrite = true;
- this.moduleName = DEFAULT_MODULE_NAME;
- this.skinName = DEFAULT_SKIN_NAME;
- }
-
- public void setModuleName(String _moduleName)
- {
- this.moduleName = _moduleName;
- }
-
- public void setSkinName(String _skinName)
- {
- this.skinName = _skinName;
- }
-
- public void setCSSPath(String _cssPath)
- {
- this.cssPath = _cssPath;
- }
-
- public void setOverwrite(boolean _overwrite)
- {
- this.overwrite = _overwrite;
- }
-
- @Override
- public void execute(SkinService skinService, ServletContext scontext)
- {
- if (moduleName == null || skinName == null || cssPath == null)
- {
- return;
- }
- String fullCSSPath = scontext.getContextPath() + cssPath;
- skinService.addPortalSkin(moduleName, skinName, fullCSSPath, scontext, overwrite);
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortalSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,87 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.tasks;
+
+import org.exoplatform.portal.resource.SkinService;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class PortalSkinTask extends AbstractSkinTask
+{
+
+ private static final String DEFAULT_MODULE_NAME = "CoreSkin";
+
+ private static final String DEFAULT_SKIN_NAME = "Default";
+
+ private String moduleName;
+
+ private String skinName;
+
+ private String cssPath;
+
+ private boolean overwrite;
+
+ public PortalSkinTask()
+ {
+ this.overwrite = true;
+ this.moduleName = DEFAULT_MODULE_NAME;
+ this.skinName = DEFAULT_SKIN_NAME;
+ }
+
+ public void setModuleName(String _moduleName)
+ {
+ this.moduleName = _moduleName;
+ }
+
+ public void setSkinName(String _skinName)
+ {
+ this.skinName = _skinName;
+ }
+
+ public void setCSSPath(String _cssPath)
+ {
+ this.cssPath = _cssPath;
+ }
+
+ public void setOverwrite(boolean _overwrite)
+ {
+ this.overwrite = _overwrite;
+ }
+
+ @Override
+ public void execute(SkinService skinService, ServletContext scontext)
+ {
+ if (moduleName == null || skinName == null || cssPath == null)
+ {
+ return;
+ }
+ String fullCSSPath = scontext.getContextPath() + cssPath;
+ skinService.addPortalSkin(moduleName, skinName, fullCSSPath, scontext, overwrite);
+ }
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,94 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.tasks;
-
-import org.exoplatform.portal.resource.SkinService;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class PortletSkinTask extends AbstractSkinTask
-{
-
- private String applicationName;
-
- private String portletName;
-
- private String skinName;
-
- private String cssPath;
-
- private boolean overwrite;
-
- public PortletSkinTask()
- {
- this.skinName = "Default";
- this.overwrite = true;
- }
-
- public void setApplicationName(String _applicationName)
- {
- this.applicationName = _applicationName;
- }
-
- public void setPortletName(String _portletName)
- {
- this.portletName = _portletName;
- }
-
- public void setSkinName(String _skinName)
- {
- this.skinName = _skinName;
- }
-
- public void setCSSPath(String _cssPath)
- {
- this.cssPath = _cssPath;
- }
-
- public void setOverwrite(boolean _overwrite)
- {
- this.overwrite = _overwrite;
- }
-
- @Override
- public void execute(SkinService skinService, ServletContext scontext)
- {
- if (portletName == null || skinName == null || cssPath == null)
- {
- return;
- }
- if (applicationName == null)
- {
- applicationName = scontext.getContextPath();
- }
- String moduleName = applicationName + "/" + portletName;
- String fullCSSPath = scontext.getContextPath() + cssPath;
- skinService.addSkin(moduleName, skinName, fullCSSPath, scontext, overwrite);
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/PortletSkinTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,94 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.tasks;
+
+import org.exoplatform.portal.resource.SkinService;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class PortletSkinTask extends AbstractSkinTask
+{
+
+ private String applicationName;
+
+ private String portletName;
+
+ private String skinName;
+
+ private String cssPath;
+
+ private boolean overwrite;
+
+ public PortletSkinTask()
+ {
+ this.skinName = "Default";
+ this.overwrite = true;
+ }
+
+ public void setApplicationName(String _applicationName)
+ {
+ this.applicationName = _applicationName;
+ }
+
+ public void setPortletName(String _portletName)
+ {
+ this.portletName = _portletName;
+ }
+
+ public void setSkinName(String _skinName)
+ {
+ this.skinName = _skinName;
+ }
+
+ public void setCSSPath(String _cssPath)
+ {
+ this.cssPath = _cssPath;
+ }
+
+ public void setOverwrite(boolean _overwrite)
+ {
+ this.overwrite = _overwrite;
+ }
+
+ @Override
+ public void execute(SkinService skinService, ServletContext scontext)
+ {
+ if (portletName == null || skinName == null || cssPath == null)
+ {
+ return;
+ }
+ if (applicationName == null)
+ {
+ applicationName = scontext.getContextPath();
+ }
+ String moduleName = applicationName + "/" + portletName;
+ String fullCSSPath = scontext.getContextPath() + cssPath;
+ skinService.addSkin(moduleName, skinName, fullCSSPath, scontext, overwrite);
+ }
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,70 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.tasks;
-
-import org.exoplatform.portal.resource.SkinService;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class ThemeTask extends AbstractSkinTask
-{
-
- private String styleName;
-
- private List<String> themeNames;
-
- public ThemeTask()
- {
- this.themeNames = new ArrayList<String>();
- }
-
- public void addThemeName(String _themeName)
- {
- //TODO: Check duplicated theme name
- this.themeNames.add(_themeName);
- }
-
- public void setStyleName(String _styleName)
- {
- this.styleName = _styleName;
- }
-
- @Override
- public void execute(SkinService skinService, ServletContext scontext)
- {
- if (styleName == null || themeNames.size() < 1)
- {
- return;
- }
- skinService.addTheme(styleName, themeNames);
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/tasks/ThemeTask.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,70 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.tasks;
+
+import org.exoplatform.portal.resource.SkinService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class ThemeTask extends AbstractSkinTask
+{
+
+ private String styleName;
+
+ private List<String> themeNames;
+
+ public ThemeTask()
+ {
+ this.themeNames = new ArrayList<String>();
+ }
+
+ public void addThemeName(String _themeName)
+ {
+ //TODO: Check duplicated theme name
+ this.themeNames.add(_themeName);
+ }
+
+ public void setStyleName(String _styleName)
+ {
+ this.styleName = _styleName;
+ }
+
+ @Override
+ public void execute(SkinService skinService, ServletContext scontext)
+ {
+ if (styleName == null || themeNames.size() < 1)
+ {
+ return;
+ }
+ skinService.addTheme(styleName, themeNames);
+ }
+
+}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml)
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,197 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.xml;
-
-import org.exoplatform.portal.resource.config.tasks.AbstractSkinTask;
-import org.exoplatform.portal.resource.config.tasks.PortalSkinTask;
-import org.exoplatform.portal.resource.config.tasks.PortletSkinTask;
-import org.exoplatform.portal.resource.config.tasks.ThemeTask;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 17, 2009
- */
-public abstract class AbstractTaskXMLBinding
-{
-
- /** Bind an XML element to a skin task */
- abstract public AbstractSkinTask xmlToTask(Element element);
-
- public static class PortalSkinTaskXMLBinding extends AbstractTaskXMLBinding
- {
-
- @Override
- public AbstractSkinTask xmlToTask(Element element)
- {
- if (!element.getTagName().equals(GateinResource.PORTAl_SKIN_TAG))
- {
- return null;
- }
- PortalSkinTask pTask = new PortalSkinTask();
- bindingCSSPath(pTask, element);
- bindingSkinName(pTask, element);
-
- return pTask;
- }
-
- private void bindingCSSPath(PortalSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.CSS_PATH_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String cssPath = nodes.item(0).getFirstChild().getNodeValue();
- task.setCSSPath(cssPath);
- }
-
- private void bindingSkinName(PortalSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.SKIN_NAME_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String skinName = nodes.item(0).getFirstChild().getNodeValue();
- task.setSkinName(skinName);
- }
-
- }
-
- public static class ThemeTaskXMLBinding extends AbstractTaskXMLBinding
- {
- @Override
- public AbstractSkinTask xmlToTask(Element element)
- {
- if (!element.getTagName().equals(GateinResource.WINDOW_STYLE_TAG))
- {
- return null;
- }
- ThemeTask tTask = new ThemeTask();
-
- bindingStyleName(tTask, element);
- bindingThemeNames(tTask, element);
-
- return tTask;
- }
-
- private void bindingStyleName(ThemeTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.STYLE_NAME_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String styleName = nodes.item(0).getFirstChild().getNodeValue();
- task.setStyleName(styleName);
- }
-
- private void bindingThemeNames(ThemeTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.THEME_NAME_TAG);
- if (nodes == null)
- {
- return;
- }
- for (int i = nodes.getLength() - 1; i >= 0; i--)
- {
- task.addThemeName(nodes.item(i).getFirstChild().getNodeValue());
- }
- }
- }
-
- public static class PortletSkinTaskXMLBinding extends AbstractTaskXMLBinding
- {
- @Override
- public AbstractSkinTask xmlToTask(Element element)
- {
- if (!element.getTagName().equals(GateinResource.PORTLET_SKIN_TAG))
- {
- return null;
- }
- PortletSkinTask pTask = new PortletSkinTask();
- bindingApplicationName(pTask, element);
- bindingPortletName(pTask, element);
- bindingCSSPath(pTask, element);
- bindingSkinName(pTask, element);
- return pTask;
- }
-
- private void bindingApplicationName(PortletSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.APPLICATION_NAME_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String applicationName = nodes.item(0).getFirstChild().getNodeValue();
- task.setApplicationName(applicationName);
- }
-
- private void bindingPortletName(PortletSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.PORTLET_NAME_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String portletName = nodes.item(0).getFirstChild().getNodeValue();
- task.setPortletName(portletName);
- }
-
- private void bindingCSSPath(PortletSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.CSS_PATH_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String cssPath = nodes.item(0).getFirstChild().getNodeValue();
- task.setCSSPath(cssPath);
- }
-
- private void bindingSkinName(PortletSkinTask task, Element element)
- {
- NodeList nodes = element.getElementsByTagName(GateinResource.SKIN_NAME_TAG);
- if (nodes == null || nodes.getLength() < 1)
- {
- return;
- }
- String skinName = nodes.item(0).getFirstChild().getNodeValue();
- task.setSkinName(skinName);
- }
- }
-
- public static class I18nTaskXMLBinding extends AbstractTaskXMLBinding
- {
- @Override
- public AbstractSkinTask xmlToTask(Element element)
- {
- return null;
- }
- }
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/AbstractTaskXMLBinding.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,197 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.xml;
+
+import org.exoplatform.portal.resource.config.tasks.AbstractSkinTask;
+import org.exoplatform.portal.resource.config.tasks.PortalSkinTask;
+import org.exoplatform.portal.resource.config.tasks.PortletSkinTask;
+import org.exoplatform.portal.resource.config.tasks.ThemeTask;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 17, 2009
+ */
+public abstract class AbstractTaskXMLBinding
+{
+
+ /** Bind an XML element to a skin task */
+ abstract public AbstractSkinTask xmlToTask(Element element);
+
+ public static class PortalSkinTaskXMLBinding extends AbstractTaskXMLBinding
+ {
+
+ @Override
+ public AbstractSkinTask xmlToTask(Element element)
+ {
+ if (!element.getTagName().equals(GateinResource.PORTAl_SKIN_TAG))
+ {
+ return null;
+ }
+ PortalSkinTask pTask = new PortalSkinTask();
+ bindingCSSPath(pTask, element);
+ bindingSkinName(pTask, element);
+
+ return pTask;
+ }
+
+ private void bindingCSSPath(PortalSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.CSS_PATH_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String cssPath = nodes.item(0).getFirstChild().getNodeValue();
+ task.setCSSPath(cssPath);
+ }
+
+ private void bindingSkinName(PortalSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.SKIN_NAME_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String skinName = nodes.item(0).getFirstChild().getNodeValue();
+ task.setSkinName(skinName);
+ }
+
+ }
+
+ public static class ThemeTaskXMLBinding extends AbstractTaskXMLBinding
+ {
+ @Override
+ public AbstractSkinTask xmlToTask(Element element)
+ {
+ if (!element.getTagName().equals(GateinResource.WINDOW_STYLE_TAG))
+ {
+ return null;
+ }
+ ThemeTask tTask = new ThemeTask();
+
+ bindingStyleName(tTask, element);
+ bindingThemeNames(tTask, element);
+
+ return tTask;
+ }
+
+ private void bindingStyleName(ThemeTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.STYLE_NAME_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String styleName = nodes.item(0).getFirstChild().getNodeValue();
+ task.setStyleName(styleName);
+ }
+
+ private void bindingThemeNames(ThemeTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.THEME_NAME_TAG);
+ if (nodes == null)
+ {
+ return;
+ }
+ for (int i = nodes.getLength() - 1; i >= 0; i--)
+ {
+ task.addThemeName(nodes.item(i).getFirstChild().getNodeValue());
+ }
+ }
+ }
+
+ public static class PortletSkinTaskXMLBinding extends AbstractTaskXMLBinding
+ {
+ @Override
+ public AbstractSkinTask xmlToTask(Element element)
+ {
+ if (!element.getTagName().equals(GateinResource.PORTLET_SKIN_TAG))
+ {
+ return null;
+ }
+ PortletSkinTask pTask = new PortletSkinTask();
+ bindingApplicationName(pTask, element);
+ bindingPortletName(pTask, element);
+ bindingCSSPath(pTask, element);
+ bindingSkinName(pTask, element);
+ return pTask;
+ }
+
+ private void bindingApplicationName(PortletSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.APPLICATION_NAME_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String applicationName = nodes.item(0).getFirstChild().getNodeValue();
+ task.setApplicationName(applicationName);
+ }
+
+ private void bindingPortletName(PortletSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.PORTLET_NAME_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String portletName = nodes.item(0).getFirstChild().getNodeValue();
+ task.setPortletName(portletName);
+ }
+
+ private void bindingCSSPath(PortletSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.CSS_PATH_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String cssPath = nodes.item(0).getFirstChild().getNodeValue();
+ task.setCSSPath(cssPath);
+ }
+
+ private void bindingSkinName(PortletSkinTask task, Element element)
+ {
+ NodeList nodes = element.getElementsByTagName(GateinResource.SKIN_NAME_TAG);
+ if (nodes == null || nodes.getLength() < 1)
+ {
+ return;
+ }
+ String skinName = nodes.item(0).getFirstChild().getNodeValue();
+ task.setSkinName(skinName);
+ }
+ }
+
+ public static class I18nTaskXMLBinding extends AbstractTaskXMLBinding
+ {
+ @Override
+ public AbstractSkinTask xmlToTask(Element element)
+ {
+ return null;
+ }
+ }
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,62 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.xml;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 17, 2009
- */
-public interface GateinResource
-{
-
- final public static String SKIN_DEF_TAG = "skin-def";
-
- final public static String SKIN_NAME_TAG = "skin-name";
-
- final public static String PORTAl_SKIN_TAG = "portal-skin";
-
- final public static String PORTLET_SKIN_TAG = "portlet-skin";
-
- final public static String PORTLET_NAME_TAG = "portlet-name";
-
- final public static String APPLICATION_NAME_TAG = "application-name";
-
- final public static String CSS_PATH_TAG = "css-path";
-
- final public static String WINDOW_STYLE_TAG = "window-style";
-
- final public static String STYLE_NAME_TAG = "style-name";
-
- final public static String STYLE_THEME_TAG = "style-theme";
-
- final public static String THEME_NAME_TAG = "theme-name";
-
- final public static String JAVA_SCRIPT_TAG = "javascript";
-
- final public static String JAVA_SCRIPT_PARAM = "param";
-
- final public static String JAVA_SCRIPT_MODULE = "js-module";
-
- final public static String JAVA_SCRIPT_PATH = "js-path";
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/GateinResource.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,62 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.xml;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 17, 2009
+ */
+public interface GateinResource
+{
+
+ final public static String SKIN_DEF_TAG = "skin-def";
+
+ final public static String SKIN_NAME_TAG = "skin-name";
+
+ final public static String PORTAl_SKIN_TAG = "portal-skin";
+
+ final public static String PORTLET_SKIN_TAG = "portlet-skin";
+
+ final public static String PORTLET_NAME_TAG = "portlet-name";
+
+ final public static String APPLICATION_NAME_TAG = "application-name";
+
+ final public static String CSS_PATH_TAG = "css-path";
+
+ final public static String WINDOW_STYLE_TAG = "window-style";
+
+ final public static String STYLE_NAME_TAG = "style-name";
+
+ final public static String STYLE_THEME_TAG = "style-theme";
+
+ final public static String THEME_NAME_TAG = "theme-name";
+
+ final public static String JAVA_SCRIPT_TAG = "javascript";
+
+ final public static String JAVA_SCRIPT_PARAM = "param";
+
+ final public static String JAVA_SCRIPT_MODULE = "js-module";
+
+ final public static String JAVA_SCRIPT_PATH = "js-path";
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.exoplatform.portal.resource.config.xml;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.exoplatform.portal.resource.config.tasks.JavascriptTask;
-import org.exoplatform.web.application.javascript.JavascriptConfigService;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * @author <a href="mailto:hoang281283@gmail.com">Minh Hoang TO</a>
- * @version $Id$
- *
- */
-public class JavascriptConfigParser
-{
-
- public static void processConfigResource(InputStream is, JavascriptConfigService service, ServletContext scontext){
- List<JavascriptTask> tasks = fetchTasks(is);
- if(tasks != null){
- for(JavascriptTask task : tasks){
- task.execute(service, scontext);
- }
- }
- }
-
- private static List<JavascriptTask> fetchTasks(InputStream is)
- {
- try
- {
- DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document document = docBuilder.parse(is);
- return fetchTasksFromXMLConfig(document);
- }
- catch (Exception ex)
- {
- return null;
- }
- }
-
- private static List<JavascriptTask> fetchTasksFromXMLConfig(Document document){
- List<JavascriptTask> tasks = new ArrayList<JavascriptTask>();
- Element element = document.getDocumentElement();
- NodeList nodes = element.getElementsByTagName(GateinResource.JAVA_SCRIPT_TAG);
-
- for(int i = nodes.getLength() - 1 ; i >= 0; i--){
- JavascriptTask task = xmlToTask((Element)nodes.item(i));
- if(task != null){
- tasks.add(task);
- }
- }
- return tasks;
- }
-
- private static JavascriptTask xmlToTask(Element element){
- try{
- JavascriptTask task = new JavascriptTask();
- NodeList nodes = element.getElementsByTagName(GateinResource.JAVA_SCRIPT_PARAM);
- for(int i = nodes.getLength() - 1 ; i >= 0; i--){
- Element param_ele = (Element)nodes.item(i);
- task.addParam(param_ele.getFirstChild().getNodeValue(), param_ele.getLastChild().getNodeValue());
- }
- return task;
- }catch(Exception ex){
- return null;
- }
- }
-
-
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/JavascriptConfigParser.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.resource.config.xml;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.exoplatform.portal.resource.config.tasks.JavascriptTask;
+import org.exoplatform.web.application.javascript.JavascriptConfigService;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author <a href="mailto:hoang281283@gmail.com">Minh Hoang TO</a>
+ * @version $Id$
+ *
+ */
+public class JavascriptConfigParser
+{
+
+ public static void processConfigResource(InputStream is, JavascriptConfigService service, ServletContext scontext){
+ List<JavascriptTask> tasks = fetchTasks(is);
+ if(tasks != null){
+ for(JavascriptTask task : tasks){
+ task.execute(service, scontext);
+ }
+ }
+ }
+
+ private static List<JavascriptTask> fetchTasks(InputStream is)
+ {
+ try
+ {
+ DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document document = docBuilder.parse(is);
+ return fetchTasksFromXMLConfig(document);
+ }
+ catch (Exception ex)
+ {
+ return null;
+ }
+ }
+
+ private static List<JavascriptTask> fetchTasksFromXMLConfig(Document document){
+ List<JavascriptTask> tasks = new ArrayList<JavascriptTask>();
+ Element element = document.getDocumentElement();
+ NodeList nodes = element.getElementsByTagName(GateinResource.JAVA_SCRIPT_TAG);
+
+ for(int i = nodes.getLength() - 1 ; i >= 0; i--){
+ JavascriptTask task = xmlToTask((Element)nodes.item(i));
+ if(task != null){
+ tasks.add(task);
+ }
+ }
+ return tasks;
+ }
+
+ private static JavascriptTask xmlToTask(Element element){
+ try{
+ JavascriptTask task = new JavascriptTask();
+ NodeList nodes = element.getElementsByTagName(GateinResource.JAVA_SCRIPT_PARAM);
+ for(int i = nodes.getLength() - 1 ; i >= 0; i--){
+ Element param_ele = (Element)nodes.item(i);
+ task.addParam(param_ele.getFirstChild().getNodeValue(), param_ele.getLastChild().getNodeValue());
+ }
+ return task;
+ }catch(Exception ex){
+ return null;
+ }
+ }
+
+
+}
Deleted: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java
===================================================================
--- portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,123 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.portal.resource.config.xml;
-
-import org.exoplatform.portal.resource.SkinService;
-import org.exoplatform.portal.resource.config.tasks.AbstractSkinTask;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-/**
- *
- * Created by eXoPlatform SAS
- *
- * Author: Minh Hoang TO - hoang281283(a)gmail.com
- *
- * Sep 16, 2009
- */
-public class SkinConfigParser
-{
-
- private final static Map<String, AbstractTaskXMLBinding> allBindings = new HashMap<String, AbstractTaskXMLBinding>();
-
- static
- {
- allBindings.put(GateinResource.PORTAl_SKIN_TAG, new AbstractTaskXMLBinding.PortalSkinTaskXMLBinding());
- allBindings.put(GateinResource.PORTLET_SKIN_TAG, new AbstractTaskXMLBinding.PortletSkinTaskXMLBinding());
- allBindings.put(GateinResource.WINDOW_STYLE_TAG, new AbstractTaskXMLBinding.ThemeTaskXMLBinding());
- }
-
- public static void processConfigResource(InputStream is, SkinService skinService, ServletContext scontext)
- {
- List<AbstractSkinTask> allTasks = fetchTasks(is);
- if (allTasks != null)
- {
- for (AbstractSkinTask task : allTasks)
- {
- task.execute(skinService, scontext);
- }
- }
- }
-
- private static List<AbstractSkinTask> fetchTasks(InputStream is)
- {
- try
- {
- DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document document = docBuilder.parse(is);
- return fetchTasksFromXMLConfig(document);
- }
- catch (Exception ex)
- {
- return null;
- }
- }
-
- private static List<AbstractSkinTask> fetchTasksFromXMLConfig(Document document)
- {
- List<AbstractSkinTask> tasks = new ArrayList<AbstractSkinTask>();
- Element docElement = document.getDocumentElement();
-
- fetchTasksByTagName(GateinResource.PORTAl_SKIN_TAG, docElement, tasks);
- fetchTasksByTagName(GateinResource.PORTLET_SKIN_TAG, docElement, tasks);
- fetchTasksByTagName(GateinResource.WINDOW_STYLE_TAG, docElement, tasks);
-
- return tasks;
- }
-
- /**
- *
- * @param tagName
- * @param rootElement
- * @param tasks
- */
- private static void fetchTasksByTagName(String tagName, Element rootElement, List<AbstractSkinTask> tasks)
- {
- AbstractTaskXMLBinding binding = allBindings.get(tagName);
- //If there is no binding for current tagName, then return
- if (binding == null)
- {
- return;
- }
-
- NodeList nodes = rootElement.getElementsByTagName(tagName);
- AbstractSkinTask task;
-
- for (int i = nodes.getLength() - 1; i >= 0; i--)
- {
- task = binding.xmlToTask((Element)nodes.item(i));
- if (task != null)
- {
- tasks.add(task);
- }
- }
- }
-}
Copied: portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java (from rev 467, portal/trunk/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java)
===================================================================
--- portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java (rev 0)
+++ portal/branches/performance/component/portal/src/main/java/org/exoplatform/portal/resource/config/xml/SkinConfigParser.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,123 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.portal.resource.config.xml;
+
+import org.exoplatform.portal.resource.SkinService;
+import org.exoplatform.portal.resource.config.tasks.AbstractSkinTask;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/**
+ *
+ * Created by eXoPlatform SAS
+ *
+ * Author: Minh Hoang TO - hoang281283(a)gmail.com
+ *
+ * Sep 16, 2009
+ */
+public class SkinConfigParser
+{
+
+ private final static Map<String, AbstractTaskXMLBinding> allBindings = new HashMap<String, AbstractTaskXMLBinding>();
+
+ static
+ {
+ allBindings.put(GateinResource.PORTAl_SKIN_TAG, new AbstractTaskXMLBinding.PortalSkinTaskXMLBinding());
+ allBindings.put(GateinResource.PORTLET_SKIN_TAG, new AbstractTaskXMLBinding.PortletSkinTaskXMLBinding());
+ allBindings.put(GateinResource.WINDOW_STYLE_TAG, new AbstractTaskXMLBinding.ThemeTaskXMLBinding());
+ }
+
+ public static void processConfigResource(InputStream is, SkinService skinService, ServletContext scontext)
+ {
+ List<AbstractSkinTask> allTasks = fetchTasks(is);
+ if (allTasks != null)
+ {
+ for (AbstractSkinTask task : allTasks)
+ {
+ task.execute(skinService, scontext);
+ }
+ }
+ }
+
+ private static List<AbstractSkinTask> fetchTasks(InputStream is)
+ {
+ try
+ {
+ DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document document = docBuilder.parse(is);
+ return fetchTasksFromXMLConfig(document);
+ }
+ catch (Exception ex)
+ {
+ return null;
+ }
+ }
+
+ private static List<AbstractSkinTask> fetchTasksFromXMLConfig(Document document)
+ {
+ List<AbstractSkinTask> tasks = new ArrayList<AbstractSkinTask>();
+ Element docElement = document.getDocumentElement();
+
+ fetchTasksByTagName(GateinResource.PORTAl_SKIN_TAG, docElement, tasks);
+ fetchTasksByTagName(GateinResource.PORTLET_SKIN_TAG, docElement, tasks);
+ fetchTasksByTagName(GateinResource.WINDOW_STYLE_TAG, docElement, tasks);
+
+ return tasks;
+ }
+
+ /**
+ *
+ * @param tagName
+ * @param rootElement
+ * @param tasks
+ */
+ private static void fetchTasksByTagName(String tagName, Element rootElement, List<AbstractSkinTask> tasks)
+ {
+ AbstractTaskXMLBinding binding = allBindings.get(tagName);
+ //If there is no binding for current tagName, then return
+ if (binding == null)
+ {
+ return;
+ }
+
+ NodeList nodes = rootElement.getElementsByTagName(tagName);
+ AbstractSkinTask task;
+
+ for (int i = nodes.getLength() - 1; i >= 0; i--)
+ {
+ task = binding.xmlToTask((Element)nodes.item(i));
+ if (task != null)
+ {
+ tasks.add(task);
+ }
+ }
+ }
+}
Modified: portal/branches/performance/component/web/src/main/java/org/exoplatform/web/application/javascript/JavascriptDeployer.java
===================================================================
--- portal/branches/performance/component/web/src/main/java/org/exoplatform/web/application/javascript/JavascriptDeployer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/component/web/src/main/java/org/exoplatform/web/application/javascript/JavascriptDeployer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -45,6 +45,8 @@
public class JavascriptDeployer implements WebAppListener, Startable
{
+ private static final String GATEIN_CONFIG_RESOURCE = "/WEB-INF/gatein-resources.xml";
+
/**
* Logger
*/
@@ -87,6 +89,7 @@
scontext = event.getWebApp().getServletContext();
InputStream is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/JavascriptScript.groovy");
+ //InputStream is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
if (is == null)
return;
try
@@ -122,6 +125,7 @@
try
{
is = scontext.getResourceAsStream("/WEB-INF/conf/script/groovy/JavascriptScript.groovy");
+ //is = scontext.getResourceAsStream(GATEIN_CONFIG_RESOURCE);
Binding binding = new Binding();
binding.setVariable("JavascriptService", javascriptService);
binding.setVariable("ServletContext", scontext);
Modified: portal/branches/performance/gadgets/eXoGadgets/src/main/webapp/gadgets/Calculator/Calculator.xml
===================================================================
--- portal/branches/performance/gadgets/eXoGadgets/src/main/webapp/gadgets/Calculator/Calculator.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/gadgets/eXoGadgets/src/main/webapp/gadgets/Calculator/Calculator.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -86,21 +86,21 @@
text-align: center;
}
- .Display p {
+ .Display input {
background: url(/eXoGadgets/skin/image/Display.png) no-repeat top left;
width: 164px;
height: 23px;
- text-align: __BIDI_END_EDGE__;
margin: 0 auto;
font-size: 15px;
line-height: auto;
color: #333333;
font-weight: bold;
- padding: 11px 3px 0 0;
+ padding: 3px 3px 0 0;
+ direction: __BIDI_REVERSE_DIR__;
}
.Number {
- padding-top: 8px;
+ padding-top: 8px;
padding-__BIDI_START_EDGE__: 9px;
}
@@ -115,13 +115,13 @@
display: block;
float: __BIDI_START_EDGE__;
margin-top: 4px;
- margin-__BIDI_START_EDGE__: 3px;
+ margin-__BIDI_START_EDGE__: 3px;
cursor: pointer;
padding-top: 3px;
}
.ClearLeft {
- clear: __BIDI_START_EDGE__
+ clear: __BIDI_START_EDGE__;
}
.Row a sup {
@@ -159,7 +159,7 @@
var NewNumber = "blank";
var opvalue = "";
function Display(displaynumber) {
- document.getElementById("calculator").innerHTML = displaynumber;
+ document.getElementById("calculator").value = displaynumber;
}
function ClearCalc() {
Number1 = "";
@@ -169,7 +169,7 @@
}
function CheckNumber(answer) {
if(answer == ".") {
- Number = document.getElementById("calculator").innerHTML;;
+ Number = document.getElementById("calculator").value;
if(Number.indexOf(".") != -1) {
answer = "";
}
@@ -257,7 +257,7 @@
<div class="RightCalculator">
<div class="CenterCalculator">
<div class="Display">
- <p id="calculator">0</p>
+ <input id="calculator" value="0" disabled />
</div>
<div class="Number">
<div class="Row">
Deleted: portal/branches/performance/packaging/key.txt
===================================================================
--- portal/branches/performance/packaging/key.txt 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/packaging/key.txt 2009-11-01 13:58:21 UTC (rev 468)
@@ -1 +0,0 @@
-rR992qPYCDQYG9SZml36Tb1n+trO+DXEB9CwXAzgfOE=
Modified: portal/branches/performance/packaging/pkg/pom.xml
===================================================================
--- portal/branches/performance/packaging/pkg/pom.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/packaging/pkg/pom.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -138,6 +138,10 @@
</plugins>
</build>
+ <properties>
+ <gatein.working.dir>${basedir}/target</gatein.working.dir><!-- Default value for server installation dir -->
+ </properties>
+
<profiles>
<profile>
<id>pkg-tomcat</id>
@@ -192,7 +196,7 @@
<argument>-Dexo.current.dir=${basedir}</argument>
<argument>-Dexo.base.dir=${exo.projects.directory.base}</argument>
<argument>-Dexo.conf.dir=${basedir}/target/exopackage-conf</argument>
- <argument>-Dexo.working.dir=${basedir}/target</argument>
+ <argument>-Dexo.working.dir=${gatein.working.dir}/</argument>
<!--argument>-Dexo.src.dir=NONE</argument-->
<argument>-Dexo.dep.dir=${exo.projects.directory.dependencies}</argument><!-- to get the server ref install -->
<argument>-Dexo.m2.repos=file:${settings.localRepository}</argument>
@@ -216,6 +220,7 @@
</execution>
</executions>
</plugin>
+<!--
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
@@ -234,6 +239,7 @@
</execution>
</executions>
</plugin>
+-->
</plugins>
</build>
</profile>
@@ -291,7 +297,7 @@
<argument>-Dexo.current.dir=${basedir}</argument>
<argument>-Dexo.base.dir=${exo.projects.directory.base}</argument>
<argument>-Dexo.conf.dir=${basedir}/target/exopackage-conf</argument>
- <argument>-Dexo.working.dir=${basedir}/target</argument>
+ <argument>-Dexo.working.dir=${gatein.working.dir}</argument>
<!--argument>-Dexo.src.dir=NONE</argument-->
<argument>-Dexo.dep.dir=${exo.projects.directory.dependencies}</argument><!-- to get the server ref install -->
<argument>-Dexo.m2.repos=file:${settings.localRepository},http://maven2.exoplatform.org/rest/maven2,http://repository.jboss.org/maven2</argument>
@@ -315,6 +321,7 @@
</execution>
</executions>
</plugin>
+<!--
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
@@ -333,6 +340,7 @@
</execution>
</executions>
</plugin>
+-->
</plugins>
</build>
</profile>
Modified: portal/branches/performance/packaging/profiles.xml
===================================================================
--- portal/branches/performance/packaging/profiles.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/packaging/profiles.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -22,7 +22,7 @@
<profilesXml>
<profiles>
<profile>
- <id>exo-projects</id>
+ <id>gatein-projects</id>
<properties>
<!--
Replace with the directory where uncompressed Tomcat 6 and/or JBoss 5.1 can be found
@@ -30,10 +30,18 @@
ex: On Linux '/home/user/AS'
-->
<exo.projects.directory.dependencies>REPLACE_WITH_YOUR_OWN_DIRECTORY</exo.projects.directory.dependencies>
+
+ <!--
+ If you want that the server is deployed always at the same place (not in packaging/pkg/target/<server> dir)
+ Uncomment and Replace with the directory you prefer
+ -->
+ <!--
+ <gatein.working.dir>REPLACE_WITH_SERVER_DIR</gatein.working.dir>
+ -->
<!--
Replace with the name of the directory containing Tomcat 6
-->
- <exo.projects.app.tomcat.version>apache-tomcat-6.0.20</exo.projects.app.tomcat.version>
+ <exo.projects.app.tomcat.version>tomcat-6.0.20</exo.projects.app.tomcat.version>
<!--
Replace with the name of the directory containing JBoss AS 5.1
-->
@@ -43,6 +51,6 @@
</profiles>
<activeProfiles>
- <activeProfile>exo-projects</activeProfile>
+ <activeProfile>gatein-projects</activeProfile>
</activeProfiles>
</profilesXml>
Copied: portal/branches/performance/packaging/profiles.xml.template (from rev 467, portal/trunk/packaging/profiles.xml.template)
===================================================================
--- portal/branches/performance/packaging/profiles.xml.template (rev 0)
+++ portal/branches/performance/packaging/profiles.xml.template 2009-11-01 13:58:21 UTC (rev 468)
@@ -0,0 +1,57 @@
+<!--
+
+ Copyright (C) 2009 eXo Platform SAS.
+
+ This is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ This software is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this software; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+
+-->
+
+<profilesXml>
+ <profiles>
+ <profile>
+ <id>gatein-projects</id>
+ <properties>
+ <!--
+ Replace with the directory where uncompressed Tomcat 6 and/or JBoss 5.1 can be found
+ ex: On Windows 'c:/AS'
+ ex: On Linux '/home/user/AS'
+ -->
+ <exo.projects.directory.dependencies>REPLACE_WITH_YOUR_OWN_DIRECTORY</exo.projects.directory.dependencies>
+
+ <!--
+ If you want that the server is deployed always at the same place (not in packaging/pkg/target/<server> dir)
+ Uncomment and Replace with the directory you prefer
+ -->
+ <!--
+ <gatein.working.dir>REPLACE_WITH_SERVER_DIR</gatein.working.dir>
+ -->
+
+ <!--
+ Replace with the name of the directory containing Tomcat 6
+ -->
+ <exo.projects.app.tomcat.version>apache-tomcat-6.0.20</exo.projects.app.tomcat.version>
+ <!--
+ Replace with the name of the directory containing JBoss AS 5.1
+ -->
+ <exo.projects.app.jboss.version>jboss-5.1.0.GA</exo.projects.app.jboss.version>
+ </properties>
+ </profile>
+ </profiles>
+
+ <activeProfiles>
+ <activeProfile>gatein-projects</activeProfile>
+ </activeProfiles>
+</profilesXml>
Modified: portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardPortlet.java
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardPortlet.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UIDashboardPortlet.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,16 +19,12 @@
package org.exoplatform.dashboard.webui.component;
-import org.exoplatform.portal.webui.application.UIGadget;
import org.exoplatform.portal.webui.container.UIContainer;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
-import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIPortletApplication;
import org.exoplatform.webui.core.lifecycle.UIApplicationLifecycle;
-import org.exoplatform.webui.event.Event;
-import org.exoplatform.webui.event.EventListener;
import javax.portlet.PortletPreferences;
@@ -38,9 +34,7 @@
/**
* @author exo
*/
-@ComponentConfig(lifecycle = UIApplicationLifecycle.class, template = "app:/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl", events = {
- @EventConfig(listeners = UIDashboardPortlet.MinimizeGadgetActionListener.class),
- @EventConfig(listeners = UIDashboardPortlet.MaximizeGadgetActionListener.class)})
+@ComponentConfig(lifecycle = UIApplicationLifecycle.class, template = "app:/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl", events = {})
/**
* Dashboard portlet that display google gadgets
*/
@@ -55,7 +49,6 @@
PortletRequestContext context = (PortletRequestContext)WebuiRequestContext.getCurrentInstance();
UIDashboard dashboard = addChild(UIDashboard.class, null, null);
- addChild(UIDashboardMask.class, null, null).setRendered(false);
addChild(UIDashboardEditForm.class, null, null);
PortletPreferences pref = context.getRequest().getPreferences();
@@ -103,50 +96,4 @@
return owner;
}
- public static class MinimizeGadgetActionListener extends EventListener<UIDashboardPortlet>
- {
- public final void execute(final Event<UIDashboardPortlet> event) throws Exception
- {
- WebuiRequestContext context = event.getRequestContext();
- UIDashboardPortlet uiPortlet = event.getSource();
- String objectId = context.getRequestParameter(OBJECTID);
- String minimized = context.getRequestParameter("minimized");
-
- UIDashboard uiDashboard = uiPortlet.getChild(UIDashboard.class);
- UIGadget uiGadget = uiDashboard.getChild(UIDashboardContainer.class).getUIGadget(objectId);
- uiGadget.getProperties().setProperty("minimized", minimized);
- uiDashboard.getChild(UIDashboardContainer.class).save();
- context.addUIComponentToUpdateByAjax(uiGadget);
- }
- }
-
- public static class MaximizeGadgetActionListener extends EventListener<UIDashboardPortlet>
- {
- public final void execute(final Event<UIDashboardPortlet> event) throws Exception
- {
- WebuiRequestContext context = event.getRequestContext();
- UIDashboardPortlet uiPortlet = event.getSource();
- String objectId = context.getRequestParameter(OBJECTID);
- String maximize = context.getRequestParameter("maximize");
- UIDashboard uiDashboard = uiPortlet.getChild(UIDashboard.class);
- UIDashboardContainer uiDashboardContainer = uiDashboard.getChild(UIDashboardContainer.class);
- UIDashboardMask uiDashboardMask = uiPortlet.getChild(UIDashboardMask.class);
- UIGadget uiGadget = uiDashboardContainer.getUIGadget(objectId);
- if (maximize.equals("maximize"))
- {
- uiGadget.setView(UIGadget.CANVAS_VIEW);
- uiDashboardMask.setUIComponent(uiGadget);
- uiDashboardMask.setRendered(true);
- uiDashboard.setRendered(false);
- }
- else
- {
- uiGadget.setView(UIGadget.HOME_VIEW);
- uiDashboardMask.setUIComponent(null);
- uiDashboardMask.setRendered(false);
- uiDashboard.setRendered(true);
- }
- //context.addUIComponentToUpdateByAjax(uiPortlet) ;
- }
- }
}
Modified: portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UITabPaneDashboard.java
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UITabPaneDashboard.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/java/org/exoplatform/dashboard/webui/component/UITabPaneDashboard.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -38,6 +38,7 @@
import org.exoplatform.webui.core.UIContainer;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import org.exoplatform.webui.exception.MessageException;
import java.util.ArrayList;
import java.util.List;
@@ -209,6 +210,25 @@
}
}
+ private boolean validateName(String label)
+ {
+ label = label.trim();
+ if (Character.isDigit(label.charAt(0)) || label.charAt(0) == '-')
+ {
+ return false;
+ }
+ for (int i = 0; i < label.length(); i++)
+ {
+ char c = label.charAt(i);
+ if (Character.isLetter(c) || Character.isDigit(c) || c == '_' || c == '-' || Character.isSpaceChar(c))
+ {
+ continue;
+ }
+ return false;
+ }
+ return true;
+ }
+
private boolean nameExisted(String nodeName)
{
for (PageNode node : pageNavigation.getNodes())
@@ -313,6 +333,11 @@
UITabPaneDashboard tabPane = event.getSource();
WebuiRequestContext context = event.getRequestContext();
String newTabLabel = context.getRequestParameter(UIComponent.OBJECTID);
+ if (!tabPane.validateName(newTabLabel))
+ {
+ context.getUIApplication().addMessage(new ApplicationMessage("UITabPaneDashboard.msg.wrongTabName", null));
+ return;
+ }
String newNodeName = tabPane.createNewPageNode(newTabLabel);
//If new node is created with success, then redirect to it
@@ -342,6 +367,11 @@
WebuiRequestContext context = event.getRequestContext();
int nodeIndex = Integer.parseInt(context.getRequestParameter(UIComponent.OBJECTID));
String newTabLabel = context.getRequestParameter(RENAMED_TAB_LABEL_PARAMETER);
+ if (!tabPane.validateName(newTabLabel))
+ {
+ context.getUIApplication().addMessage(new ApplicationMessage("UITabPaneDashboard.msg.wrongTabName", null));
+ return;
+ }
String newNodeName = tabPane.renamePageNode(nodeIndex, newTabLabel);
//If page node is renamed with success, then redirect to new URL
Modified: portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_en.properties
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_en.properties 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_en.properties 2009-11-01 13:58:21 UTC (rev 468)
@@ -20,4 +20,5 @@
UITabPaneDashboard.action.addNewDashboard=Add Dashboard
UITabPaneDashboard.action.switchShowRange=Switch Range
UITabPaneDashboard.msg.deleteTab=Really want to remove this dashboard?
-UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
\ No newline at end of file
+UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
+UITabPaneDashboard.msg.wrongTabName=Only alpha, digit, underscore, dash and space characters allowed.
\ No newline at end of file
Modified: portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_fr.properties
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_fr.properties 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_fr.properties 2009-11-01 13:58:21 UTC (rev 468)
@@ -20,4 +20,5 @@
UITabPaneDashboard.action.addNewDashboard =Ajoute Dashboard
UITabPaneDashboard.action.switchShowRange =Decale
UITabPaneDashboard.msg.deleteTab=Really want to remove this dashboard?
-UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
\ No newline at end of file
+UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
+UITabPaneDashboard.msg.wrongTabName=Only alpha, digit, underscore, dash and space characters allowed.
\ No newline at end of file
Modified: portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_ru.properties
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_ru.properties 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_ru.properties 2009-11-01 13:58:21 UTC (rev 468)
@@ -20,4 +20,5 @@
UITabPaneDashboard.action.addNewDashboard=Добавить доску
UITabPaneDashboard.action.switchShowRange=Изменить область
UITabPaneDashboard.msg.deleteTab=Вы действительно хотите удалить эту доску?
-UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
\ No newline at end of file
+UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
+UITabPaneDashboard.msg.wrongTabName=Only alpha, digit, underscore, dash and space characters allowed.
\ No newline at end of file
Modified: portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_uk.properties
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_uk.properties 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/webapp/WEB-INF/classes/locale/portlet/dashboard/TabbedDashboardPortlet_uk.properties 2009-11-01 13:58:21 UTC (rev 468)
@@ -20,4 +20,5 @@
UITabPaneDashboard.action.addNewDashboard =Додати панель інструментів
UITabPaneDashboard.action.switchShowRange =Перемикач діапазону
UITabPaneDashboard.msg.deleteTab=Really want to remove this dashboard?
-UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
\ No newline at end of file
+UITabPaneDashboard.msg.cannotDeleteLastTab=Can not delete the last tab.
+UITabPaneDashboard.msg.wrongTabName=Only alpha, digit, underscore, dash and space characters allowed.
\ No newline at end of file
Modified: portal/branches/performance/portlet/dashboard/src/main/webapp/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl
===================================================================
--- portal/branches/performance/portlet/dashboard/src/main/webapp/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/dashboard/src/main/webapp/groovy/dashboard/webui/component/UIDashboardPortlet.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -2,7 +2,6 @@
import javax.portlet.PortletMode ;
import org.exoplatform.dashboard.webui.component.DashboardParent ;
import org.exoplatform.dashboard.webui.component.UIDashboard;
- import org.exoplatform.dashboard.webui.component.UIDashboardMask;
import org.exoplatform.dashboard.webui.component.UIDashboardEditForm;
def rcontext = _ctx.getRequestContext() ;
@@ -11,7 +10,6 @@
<div id="$uicomponent.id" class="UIDashboardPortlet">
<% if(rcontext.getApplicationMode() == PortletMode.VIEW) {
uicomponent.renderChild(UIDashboard.class);
- uicomponent.renderChild(UIDashboardMask.class);
} else {
UIDashboardEditForm uiEditForm = uicomponent.getChild(UIDashboardEditForm.class);
uiEditForm.getUIStringInput(UIDashboardEditForm.TOTAL_COLUMNS).setValue(uicomponent.getNumberOfCols() + "");
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -275,6 +275,7 @@
}
appRegService.save(selectedCate, app);
+ uiOrganizer.reload();
uiOrganizer.setSelectedCategory(selectedCate);
uiOrganizer.selectApplication(app.getApplicationName());
ctx.addUIComponentToUpdateByAjax(uiOrganizer);
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIApplicationOrganizer.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIApplicationOrganizer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIApplicationOrganizer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -362,7 +362,7 @@
service.remove(app);
}
String cateName = uiOrganizer.getSelectedCategory().getName();
- uiOrganizer.initApplicationCategories();
+ uiOrganizer.reload();
uiOrganizer.setSelectedCategory(cateName);
event.getRequestContext().addUIComponentToUpdateByAjax(uiOrganizer);
}
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UICategoryForm.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UICategoryForm.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UICategoryForm.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -178,7 +178,7 @@
}
service.save(category);
uiForm.setValue(null);
- uiOrganizer.initApplicationCategories();
+ uiOrganizer.reload();
uiOrganizer.setSelectedCategory(category.getName());
ctx.addUIComponentToUpdateByAjax(uiOrganizer);
}
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UIGroupNavigationManagement.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UIGroupNavigationManagement.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UIGroupNavigationManagement.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -53,6 +53,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
/*
* Created by The eXo Platform SAS
@@ -87,6 +88,7 @@
UIRepeater repeater = createUIComponent(UIRepeater.class, "UIGroupNavigationGrid", null);
virtualList.setUIComponent(repeater);
UIPopupWindow editNavigation = addChild(UIPopupWindow.class, null, null);
+ editNavigation.setId(editNavigation.getId() + "-" + UUID.randomUUID().toString().replaceAll("-", ""));
}
public void loadNavigations() throws Exception
@@ -205,6 +207,7 @@
selector.removeChild(UIRightClickPopupMenu.class);
popUp.setUIComponent(pageManager);
popUp.setWindowSize(400, 400);
+ popUp.setShowMask(true);
popUp.setShow(true);
// prContext.addUIComponentToUpdateByAjax(workingWS);
}
@@ -235,6 +238,7 @@
pageNavigation.setPageNav(navigation);
popUp.setUIComponent(pageNavigation);
popUp.setWindowSize(600, 400);
+ popUp.setShowMask(true);
popUp.setShow(true);
}
}
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UISiteManagement.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UISiteManagement.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/navigation/webui/component/UISiteManagement.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -60,6 +60,7 @@
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
@@ -88,6 +89,7 @@
{
UIPopupWindow editNavigation = addChild(UIPopupWindow.class, null, null);
editNavigation.setWindowSize(400, 400);
+ editNavigation.setId(editNavigation.getId()+ "-" + UUID.randomUUID().toString().replaceAll("-", ""));
//loadPortalConfigs();
}
@@ -319,6 +321,7 @@
selector.initNavigations(list);
selector.removeChild(UIRightClickPopupMenu.class);
popUp.setUIComponent(naviManager);
+ popUp.setShowMask(true);
popUp.setShow(true);
}
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/GroupManagement.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/GroupManagement.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/GroupManagement.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -146,6 +146,8 @@
{
if (username == null)
username = org.exoplatform.portal.webui.util.Util.getPortalRequestContext().getRemoteUser();
+ if (username.equals(getUserACL().getSuperUser()))
+ return true;
return isMemberOfGroup(username, getUserACL().getAdminGroups());
}
Modified: portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -121,7 +121,8 @@
sibblingsGroup_ = service.getGroupHandler().findGroups(parentGroup);
// if not administrator
- if (!GroupManagement.isAdministrator(null))
+ String username = org.exoplatform.portal.webui.util.Util.getPortalRequestContext().getRemoteUser();
+ if (!GroupManagement.isSuperUserOfGroup(username, groupId))
{
childrenGroup_ = GroupManagement.getRelatedGroups(null, childrenGroup_);
sibblingsGroup_ = GroupManagement.getRelatedGroups(null, sibblingsGroup_);
Modified: portal/branches/performance/portlet/exoadmin/src/main/webapp/WEB-INF/portlet.xml
===================================================================
--- portal/branches/performance/portlet/exoadmin/src/main/webapp/WEB-INF/portlet.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/exoadmin/src/main/webapp/WEB-INF/portlet.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -79,7 +79,35 @@
<keywords>Administration</keywords>
</portlet-info>
</portlet>
+
+ <!--
+ <portlet>
+ <description xml:lang="EN">Register Portlet</description>
+ <portlet-name>RegisterPortlet</portlet-name>
+ <display-name xml:lang="EN">Register Portlet</display-name>
+ <portlet-class>org.exoplatform.webui.application.portlet.PortletApplicationController</portlet-class>
+
+ <init-param>
+ <name>webui.configuration</name>
+ <value>/WEB-INF/conf/portlet/exoadmin/RegisterPortlet/webui/configuration.xml</value>
+ </init-param>
+ <expiration-cache>0</expiration-cache>
+ <supports>
+ <mime-type>text/html</mime-type>
+ <portlet-mode>help</portlet-mode>
+ </supports>
+ <supported-locale>en</supported-locale>
+
+ <resource-bundle>locale.portlet.exoadmin.RegisterPortlet</resource-bundle>
+ <portlet-info>
+ <title>Register Portlet</title>
+ <short-title>Register Portlet</short-title>
+ <keywords>Administration</keywords>
+ </portlet-info>
+ </portlet>
+ -->
+
<portlet>
<description xml:lang="EN">Group Navigation Portlet</description>
<portlet-name>GroupNavigationPortlet</portlet-name>
Modified: portal/branches/performance/portlet/web/src/main/java/org/exoplatform/portal/webui/component/UILogoEditMode.java
===================================================================
--- portal/branches/performance/portlet/web/src/main/java/org/exoplatform/portal/webui/component/UILogoEditMode.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/portlet/web/src/main/java/org/exoplatform/portal/webui/component/UILogoEditMode.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,8 +19,12 @@
package org.exoplatform.portal.webui.component;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletPreferences;
+
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
@@ -28,13 +32,12 @@
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import org.exoplatform.webui.exception.MessageException;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.validator.MandatoryValidator;
+import org.exoplatform.webui.form.validator.URLValidator;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletPreferences;
-
/**
* Created by The eXo Platform SAS Author : eXoPlatform October 2, 2009
*/
@@ -58,6 +61,12 @@
{
UILogoEditMode uiForm = event.getSource();
String url = uiForm.getUIStringInput(FIELD_URL).getValue();
+ if (url != null && !url.trim().matches(URLValidator.URL_REGEX)) {
+ UILogoPortlet uiPortlet = uiForm.getParent();
+ uiForm.getUIStringInput(FIELD_URL).setValue(uiPortlet.getURL());
+ Object[] args = {FIELD_URL, "URL"};
+ throw new MessageException(new ApplicationMessage("ExpressionValidator.msg.value-invalid", args));
+ }
PortletRequestContext pcontext = (PortletRequestContext)WebuiRequestContext.getCurrentInstance();
PortletPreferences pref = pcontext.getRequest().getPreferences();
pref.setValue("url", uiForm.getUIStringInput(FIELD_URL).getValue());
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/Browser.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/Browser.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/Browser.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -459,7 +459,6 @@
Browser.prototype.findMouseRelativeX = function(object, e) {
var posx = -1 ;
var posXObject = eXo.core.Browser.findPosX(object) ;
- document.title = "test" + posXObject;
/*
* posXObject is added more 3px on IE6
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -57,6 +57,7 @@
} ;
DragDrop.prototype.init = function(dropableTargets, clickObject, dragObject, evt) {
+ if(evt && evt.preventDefault) evt.preventDefault();
eXo.core.Mouse.init(evt) ;
this.dropableTargets = dropableTargets ;
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/UIMaskLayer.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/UIMaskLayer.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/core/UIMaskLayer.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -183,7 +183,7 @@
maskLayer.id = object.id + "MaskLayer" ;
maskLayer.maxZIndex = 3 ;
maskLayer.style.width = blockContainer.offsetWidth + "px" ;
- maskLayer.style.height = blockContainer.offsetHeight + "px" ;
+ maskLayer.style.height = blockContainer.offsetHeight + eXo.core.Browser.findPosY(blockContainer) + "px" ;
maskLayer.style.top = "0px" ;
maskLayer.style.left = "0px" ;
maskLayer.style.zIndex = maskLayer.maxZIndex ;
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/gadget/UIGadget.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/gadget/UIGadget.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/gadget/UIGadget.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -204,9 +204,9 @@
}
var compId = portletFrag.parentNode.id;
- var uicomp = DOMUtil.getChildrenByTagName(portletFrag, "div")[0].className ;
+ var uicomp = DOMUtil.findAncestorByClass(uiGadget, "UIDashboard") ;
var href = eXo.env.server.portalBaseURL + "?portal:componentId=" + compId ;
- href += "&portal:type=action&uicomponent=" + uicomp;
+ href += "&portal:type=action&uicomponent=" + uicomp.id;
href += "&op=MinimizeGadget";
href += "&minimized=" + minimized;
href += "&objectId=" + uiGadget.id + "&ajaxRequest=true";
@@ -219,11 +219,10 @@
var uiGadget = DOMUtil.findAncestorByClass(selectedElement, "UIGadget") ;
var portletFrag = DOMUtil.findAncestorByClass(uiGadget, "PORTLET-FRAGMENT") ;
if (!portletFrag) return;
- var maximize = "maximize";
var compId = portletFrag.parentNode.id;
- var uicomp = DOMUtil.getChildrenByTagName(portletFrag, "div")[0];
- var compDisplay = DOMUtil.findFirstChildByClass(uicomp,"div","UIDashboardMask");
- if(compDisplay != null) maximize = "unmaximize"
+ var uicomp = DOMUtil.findAncestorByClass(uiGadget, "UIDashboard");
+ var compDisplay = DOMUtil.findAncestorByClass(uiGadget, "UIDashboardContainer");
+ var maximize = compDisplay ? "maximize" : "unmaximize";
var href = eXo.env.server.portalBaseURL + "?portal:componentId=" + compId ;
href += "&portal:type=action&uicomponent=" + uicomp.id;
href += "&op=MaximizeGadget";
@@ -242,19 +241,28 @@
if (portletFragment != null) {
var compId = portletFragment.parentNode.id;
- var uicomp = "";
- if (DOMUtil.findChildrenByClass(portletFragment, "div", "UIDashboard")) {
- uicomp = "UIDashboard";
- }
- else
- uicomp = DOMUtil.getChildrenByTagName(portletFragment, "div")[0].className;
+ var uicomp = DOMUtil.findAncestorByClass(uiGadget, "UIDashboard").id;
+// if (DOMUtil.findChildrenByClass(portletFragment, "div", "UIDashboard"))
+// uicomp = "UIDashboard";
+// else
+// uicomp = DOMUtil.getChildrenByTagName(portletFragment, "div")[0].className;
if (confirm(this.confirmDeleteGadget)) {
var href = eXo.env.server.portalBaseURL + "?portal:componentId=" + compId;
href += "&portal:type=action&uicomponent=" + uicomp;
href += "&op=DeleteGadget";
href += "&objectId=" + uiGadget.id + "&ajaxRequest=true";
- DOMUtil.removeElement(uiGadget);
- ajaxAsyncGetRequest(href);
+
+ var uiDashboardCont = DOMUtil.findAncestorByClass(uiGadget, "UIDashboardContainer");
+ if(uiDashboardCont) {
+ ajaxAsyncGetRequest(href);
+ DOMUtil.removeElement(uiGadget);
+ if(!DOMUtil.findFirstDescendantByClass(uiDashboardCont, "div", "UIGadget")) {
+ DOMUtil.findFirstDescendantByClass(uiDashboardCont, "div", "NoGadget").style.display = "block";
+ }
+ }else {
+// Case: delete gadget in dashboard when maximized gadget
+ ajaxGet(href);
+ }
}
} else {
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -332,8 +332,10 @@
};
PortalDragDrop.prototype.scrollOnDrag = function(dragObject, dndEvent) {
+ var workspaceHeight = document.getElementById("UIWorkingWorkspace").offsetHeight;
+ var browserHeight = eXo.core.Browser.getBrowserHeight() ;
+ if(workspaceHeight <= browserHeight) return;
var dragObjectTop = eXo.core.Browser.findPosY(dragObject) ;
- var browserHeight = eXo.core.Browser.getBrowserHeight() ;
var mouseY = eXo.core.Browser.findMouseYInClient(dndEvent.backupMouseEvent) ;
var deltaTopMouse = eXo.core.Browser.findMouseYInPage(dndEvent.backupMouseEvent) - mouseY ;
var deltaTop = mouseY - (Math.round(browserHeight * 5/6)) ;
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UICalendar.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UICalendar.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UICalendar.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -69,7 +69,6 @@
UICalendar.prototype.show = function() {
document.onmousedown = new Function('eXo.webui.UICalendar.hide()') ;
-
var re = /^(\d{1,2}\/\d{1,2}\/\d{1,4})\s*(\s+\d{1,2}:\d{1,2}:\d{1,2})?$/i ;
this.selectedDate = new Date() ;
@@ -109,6 +108,10 @@
var secondIndex = this.datePattern.indexOf("ss");
var secondValue = parseInt(dateFieldValue.substring(secondIndex,secondIndex+2),10);
+ if(isNaN(secondValue)) { secondValue = "00"; }
+ if(isNaN(minutesValue)) { minutesValue = "00"; }
+ if(isNaN(hoursValue)) { hoursValue = "00"; }
+
var testDate = "MM/dd/yyyy HH:mm:ss";
testDate = testDate.replace("dd",dateValue);
testDate = testDate.replace("MM",monthValue+1);
@@ -116,6 +119,7 @@
testDate = testDate.replace("HH",hoursValue);
testDate = testDate.replace("mm",minutesValue);
testDate = testDate.replace("ss",secondValue);
+
if (re.test(testDate)) {
this.selectedDate.setDate(dateValue) ;
this.selectedDate.setMonth(monthValue) ;
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UITabbedDashboard.js
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UITabbedDashboard.js 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/javascript/eXo/webui/UITabbedDashboard.js 2009-11-01 13:58:21 UTC (rev 468)
@@ -23,7 +23,7 @@
renameTabLabel : function(e){
if(!e){
- e = windwow.event;
+ e = window.event;
}
var keyNum = e.keyCode;
@@ -51,7 +51,7 @@
href += "&uicomponent=UITabPaneDashboard";
href += "&op=RenameTabLabel";
href += "&objectId=" + nodeIndex;
- href += "&newTabLabel=" + newTabLabel;
+ href += "&newTabLabel=" + encodeURIComponent(newTabLabel);
window.location = href;
return;
}
@@ -83,6 +83,7 @@
inputElement.style.border = "1px solid #b7b7b7";
inputElement.style.width = "95px";
inputElement.onkeypress = eXo.webui.UITabbedDashboard.renameTabLabel;
+ inputElement.setAttribute('maxLength', 50);
inputElement.onblur = function() {
prNode.replaceChild(eXo.webui.UITabbedDashboard.backupElement, inputElement);
};
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIDashboard/Stylesheet.css
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIDashboard/Stylesheet.css 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIDashboard/Stylesheet.css 2009-11-01 13:58:21 UTC (rev 468)
@@ -35,7 +35,6 @@
.UIDashboard {
height: 100%;
- background: url('background/BgRepeat.gif') repeat-y left bottom;
}
.UIDashboard .DashboardContainer {
@@ -514,30 +513,30 @@
#UIAddGadgetPopup .PopupTitle {
margin-left: 22px;
}
-/*----------------------UIDashboardMask-------------------*/
+/*----------------------Maximized-------------------*/
-.UIDashboardMask .UIGadget {
+.Maximized .UIGadget {
padding: 5px;
margin: 0px;
}
-.UIDashboardMask .UIGadget .GadgetControl {
+.Maximized .UIGadget .GadgetControl {
float: none;
padding: 0px;
height: auto; width: auto;
}
-.UIDashboardMask .UIGadget .GadgetControl .LeftControlBar {
+.Maximized .UIGadget .GadgetControl .LeftControlBar {
background: none;
padding: 0px;
}
-.UIDashboardMask .UIGadget .GadgetControl .RightControlBar {
+.Maximized .UIGadget .GadgetControl .RightControlBar {
background: none;
padding: 0px;
}
-.UIDashboardMask .UIGadget .GadgetControl .CenterControlBar {
+.Maximized .UIGadget .GadgetControl .CenterControlBar {
background: url('background/BgTitleGadget.gif') repeat-x left top;
height: 23px;
line-height: 23px;
@@ -546,31 +545,31 @@
border-top: none;
}
-.UIDashboardMask .UIGadget .GadgetControl .GadgetDragHandleArea {
+.Maximized .UIGadget .GadgetControl .GadgetDragHandleArea {
display: none;
}
-.UIDashboardMask .UIGadget .TLGadget {
+.Maximized .UIGadget .TLGadget {
display: none;
}
-.UIDashboardMask .UIGadget .MLGadget {
+.Maximized .UIGadget .MLGadget {
background: #f2f2f3;
border: 1px solid #c3c3c3;
border-top: none;
padding: 3px;
}
-.UIDashboardMask .UIGadget .MRGadget {
+.Maximized .UIGadget .MRGadget {
background: white;
padding: 0 0 1px;
}
-.UIDashboardMask .UIGadget .BLGadget {
+.Maximized .UIGadget .BLGadget {
display: none;
}
-.UIDashboardMask .GadgetTitle {
+.Maximized .GadgetTitle {
float: left; /* orientation=lt */
float: right; /* orientation=rt */
padding: 0px 5px;
@@ -581,6 +580,6 @@
white-space: nowrap;
}
-.UIDashboardMask iframe {
+.Maximized iframe {
width: 100%;
}
\ No newline at end of file
Modified: portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupWindow/Stylesheet.css
===================================================================
--- portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupWindow/Stylesheet.css 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupWindow/Stylesheet.css 2009-11-01 13:58:21 UTC (rev 468)
@@ -105,6 +105,7 @@
float: left; /* orientation=rt */
cursor: nw-resize; /* orientation=lt */
cursor: ne-resize; /* orientation=rt */
+ margin-top:-29px;
}
.UIPopupWindow .BottomLeftCornerDecorator {
@@ -179,8 +180,8 @@
}
.UIPortalComposer .SaveButton {
- background: transparent url(background/SaveIcon.gif) no-repeat scroll right bottom; /* orientation=lt */
- background: transparent url(background/SaveIcon-rt.gif) no-repeat scroll left bottom; /* orientation=rt */
+ background: transparent url(background/UnSaveIcon.gif) no-repeat scroll right bottom; /* orientation=lt */
+ background: transparent url(background/UnSaveIcon-rt.gif) no-repeat scroll left bottom; /* orientation=rt */
cursor: pointer;
float: right; /* orientation=lt */
float: left; /* orientation=rt */
@@ -190,8 +191,8 @@
}
.UIPortalComposer .EdittedSaveButton {
- background: transparent url(background/UnSaveIcon.gif) no-repeat scroll right bottom; /* orientation=lt */
- background: transparent url(background/UnSaveIcon-rt.gif) no-repeat scroll left bottom; /* orientation=rt */
+ background: transparent url(background/SaveIcon.gif) no-repeat scroll right bottom; /* orientation=lt */
+ background: transparent url(background/SaveIcon-rt.gif) no-repeat scroll left bottom; /* orientation=rt */
cursor: pointer;
float: right; /* orientation=lt */
float: left; /* orientation=rt */
@@ -246,6 +247,10 @@
height: 50px;
}
+.UIPortalComposer .BCPortalComposer .UIAction {
+ height: 50px;
+}
+
.UIPortalComposer .Bottom {
border-bottom: 1px solid #a2a3a9;
}
Modified: portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/portal/application-registry-configuration.xml
===================================================================
--- portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/portal/application-registry-configuration.xml 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/portal/application-registry-configuration.xml 2009-11-01 13:58:21 UTC (rev 468)
@@ -182,7 +182,7 @@
</field>
</object>
</value>
- <value>
+ <value>
<object type="org.exoplatform.application.registry.Application">
<field name="categoryName"><string>web</string></field>
<field name="applicationName"><string>SiteMapPortlet</string></field>
@@ -197,21 +197,6 @@
</field>
</object>
</value>
- <value>
- <object type="org.exoplatform.application.registry.Application">
- <field name="categoryName"><string>web</string></field>
- <field name="applicationName"><string>BrowserPortlet</string></field>
- <field name="displayName"><string>Web Explorer</string></field>
- <field name="description"><string>Web Explorer</string></field>
- <field name="applicationType"><string>portlet</string></field>
- <field name="applicationGroup"><string>web</string></field>
- <field name="accessPermissions">
- <collection type="java.util.ArrayList" item-type="java.lang.String">
- <value><string>*:/platform/users</string></value>
- </collection>
- </field>
- </object>
- </value>
</collection>
</field>
</object>
Deleted: portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/script/groovy/SkinConfigScript.groovy
===================================================================
--- portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/script/groovy/SkinConfigScript.groovy 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/portal/src/main/webapp/WEB-INF/conf/script/groovy/SkinConfigScript.groovy 2009-11-01 13:58:21 UTC (rev 468)
@@ -1,42 +0,0 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-/***************************HomePagePortlet**************************************************/
-SkinService.addSkin(
- "web/HomePagePortlet",
- "Default",
- "/" + ServletContextName + "/templates/skin/webui/component/UIHomePagePortlet/DefaultStylesheet.css",
- ServletContext
-) ;
-
-SkinService.addSkin(
- "web/HomePagePortlet",
- "Vista",
- "/" + ServletContextName + "/templates/skin/webui/component/UIHomePagePortlet/DefaultStylesheet.css",
- ServletContext
-) ;
-
-SkinService.addSkin(
- "web/HomePagePortlet",
- "Mac",
- "/" + ServletContextName + "/templates/skin/webui/component/UIHomePagePortlet/DefaultStylesheet.css",
- ServletContext
-) ;
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
Modified: portal/branches/performance/web/portal/src/main/webapp/groovy/portal/webui/application/UIPortlet.gtmpl
===================================================================
--- portal/branches/performance/web/portal/src/main/webapp/groovy/portal/webui/application/UIPortlet.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/portal/src/main/webapp/groovy/portal/webui/application/UIPortlet.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -37,7 +37,6 @@
<div class="id"><%=uicomponent.getId();%></div>
<div class="title"><%=_ctx.appRes("UIPortlet.label.title");%></div>
<div class="description">
-
<%if(uicomponent.getDescription() != null) {%>
<%=uicomponent.getDescription();%>
<%} else {%>
@@ -67,22 +66,12 @@
<div class="CenterBackground">
<div class="GardientBackground">
<%
- String displayName = uicomponent.getDisplayName();
- if(displayName != null) {
- String htmlDisplayName = ""; int count = 1;
- for(c in displayName){
- if(c=="\n"){
- c="<br/>";
- count++;
- }
- htmlDisplayName+=c;
- if(count>5) break;
- }
- %>
- <%=htmlDisplayName;%>
- <%} else {%>
- <%= _ctx.appRes("UIPortlet.label.portletContent"); %>
- <%}%>
+ try {
+ String portletName = uicomponent.getProducedOfferedPortlet().getInfo().getName();
+ print _ctx.getRequestContext().getApplicationResourceBundle().getString("UIPortlet.description." + portletName);
+ } catch(Exception e){
+ print uicomponent.getDisplayName();
+ }%>
</div>
</div>
</div>
Modified: portal/branches/performance/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl
===================================================================
--- portal/branches/performance/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl 2009-11-01 13:58:21 UTC (rev 468)
@@ -7,15 +7,19 @@
* version: $Id$
*/
%>
-<%
+<%
component = uicomponent.getUIComponent();
boolean showCloseButton = uicomponent.isShowCloseButton()
String popupId = uicomponent.getId();
+ String rsId = popupId;
+ if(popupId.indexOf('-')>0){
+ rsId = popupId.substring(0,popupId.lastIndexOf('-'));
+ }
def rcontext = _ctx.getRequestContext();
rcontext.getJavascriptManager().importJavascript('eXo.webui.UIPopupWindow');
rcontext.getJavascriptManager().addJavascript("eXo.webui.UIPopupWindow.init('$popupId', $uicomponent.show, $uicomponent.resizable, true, $uicomponent.showMask);");
- String title = popupId;
+ String title = rsId;
if(component != null) title = component.getId();
int width = uicomponent.getWindowWidth();
@@ -41,7 +45,7 @@
<% } else { %>
<div class="PopupTitleIconRight"><span></span></div>
<% } %>
- <div class="PopupTitle"><%=_ctx.appRes(popupId + ".title."+ title)%></div>
+ <div class="PopupTitle"><%=_ctx.appRes(rsId + ".title."+ title)%></div>
</div>
</div>
</div>
Modified: portal/branches/performance/webui/core/src/main/java/org/exoplatform/webui/core/lifecycle/UIFormLifecycle.java
===================================================================
--- portal/branches/performance/webui/core/src/main/java/org/exoplatform/webui/core/lifecycle/UIFormLifecycle.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/core/src/main/java/org/exoplatform/webui/core/lifecycle/UIFormLifecycle.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,6 +19,9 @@
package org.exoplatform.webui.core.lifecycle;
+import java.util.ArrayList;
+import java.util.List;
+
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIApplication;
@@ -33,9 +36,6 @@
import org.exoplatform.webui.form.UIFormMultiValueInputSet;
import org.exoplatform.webui.form.validator.Validator;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Author : Nhu Dinh Thuan
* nhudinhthuan(a)yahoo.com
@@ -69,6 +69,8 @@
}
UIComponent uiSubComponent = uicomponent.findComponentById(subComponentId);
Event<UIComponent> event = uiSubComponent.createEvent(action, Event.Phase.DECODE, context);
+ if (event == null)
+ event = uicomponent.createEvent(action, Event.Phase.DECODE, context);
if (event != null)
event.broadcast();
}
Modified: portal/branches/performance/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIListPermissionSelector.java
===================================================================
--- portal/branches/performance/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIListPermissionSelector.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIListPermissionSelector.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,6 +19,11 @@
package org.exoplatform.webui.organization;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
import org.exoplatform.commons.utils.LazyPageList;
import org.exoplatform.portal.config.UserACL;
import org.exoplatform.portal.config.UserACL.Permission;
@@ -43,19 +48,13 @@
import org.exoplatform.webui.form.UIFormPopupWindow;
import org.exoplatform.webui.form.validator.Validator;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
/**
* Created by The eXo Platform SARL
* Author : Pham Dung Ha
* ha.pham(a)exoplatform.com
- * May 7, 2007
+ * May 7, 2007o
*/
-@ComponentConfig(template = "system:/groovy/organization/webui/component/UIListPermissionSelector.gtmpl", events = {
- @EventConfig(phase = Phase.DECODE, listeners = UIListPermissionSelector.CloseActionListener.class),
+@ComponentConfig(template = "system:/groovy/organization/webui/component/UIListPermissionSelector.gtmpl", events = {
@EventConfig(phase = Phase.DECODE, listeners = UIListPermissionSelector.DeleteActionListener.class, confirm = "UIAccessGroup.deleteAccessGroup"),
@EventConfig(phase = Phase.DECODE, listeners = UIPermissionSelector.SelectMembershipActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UIListPermissionSelector.ChangePublicModeActionListener.class)})
@@ -279,19 +278,6 @@
}
}
-
- static public class CloseActionListener extends EventListener<UIListPermissionSelector>
- {
- public void execute(Event<UIListPermissionSelector> event) throws Exception
- {
- UIListPermissionSelector uicom = event.getSource();
- UIForm uiForm = uicom.getAncestorOfType(UIForm.class);
- if (uiForm != null)
- {
- uiForm.broadcast(event, event.getExecutionPhase());
- }
- }
- }
static public class EmptyIteratorValidator implements Validator
{
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -47,8 +47,9 @@
protected static Log log = ExoLogger.getLogger("portal:PortalStateManager");
- private ConcurrentMap<String, PortalApplicationState> uiApplications =
- new ConcurrentHashMap<String, PortalApplicationState>();
+ /** ConcurrentMap<SessionId, HashMap<PortalName, PortalApplicationState>> **/
+ private ConcurrentMap<String, HashMap<String, PortalApplicationState>> uiApplications =
+ new ConcurrentHashMap<String, HashMap<String, PortalApplicationState>>();
/**
* This method is used to restore the UI component tree either the current request targets a portlet
@@ -66,14 +67,14 @@
/*
* If the request context is of type PortletRequestContext, we extract the parent context which will
* allow to get access to the PortalApplicationState object thanks to the session id used as the key for the
- * syncronised Map uiApplications
+ * synchronize Map uiApplications
*/
if (context instanceof PortletRequestContext)
{
- WebuiRequestContext preqContext = (WebuiRequestContext)context.getParentAppRequestContext();
- PortalApplicationState state = uiApplications.get(preqContext.getSessionId());
+ WebuiRequestContext preqContext = (WebuiRequestContext)context.getParentAppRequestContext();
PortletRequestContext pcontext = (PortletRequestContext)context;
String key = pcontext.getApplication().getApplicationId() + "/" + pcontext.getWindowId();
+ PortalApplicationState state = getApplicationState(preqContext);
UIApplication uiApplication = state.get(key);
if (uiApplication != null)
return uiApplication;
@@ -86,11 +87,10 @@
}
PortalRequestContext pcontext = (PortalRequestContext)context;
- PortalApplicationState state = uiApplications.get(pcontext.getSessionId());
+ PortalApplicationState state = getApplicationState(pcontext);
if (state != null)
{
- if ((!(Safe.equals(pcontext.getRemoteUser(), state.getUserName())))
- || (!pcontext.getPortalOwner().equals(state.getUIPortalApplication().getOwner())))
+ if (!Safe.equals(pcontext.getRemoteUser(), state.getUserName()))
{
clearSession(pcontext.getRequest().getSession());
state = null;
@@ -119,7 +119,7 @@
pcontext.setAttribute(UserPortalConfig.class, config);
UIPortalApplication uiApplication = (UIPortalApplication)app.createUIComponent(type, null, null, context);
state = new PortalApplicationState(uiApplication, pcontext.getRemoteUser());
- uiApplications.put(context.getSessionId(), state);
+ cacheApplicationState(pcontext.getSessionId(), pcontext.getPortalOwner(),state);
SessionManagerContainer pcontainer = (SessionManagerContainer)app.getApplicationServiceContainer();
pcontainer.createSessionContainer(context.getSessionId(), uiApplication.getOwner());
}
@@ -133,14 +133,32 @@
public void expire(String sessionId, WebuiApplication app)
{
- PortalApplicationState state = uiApplications.remove(sessionId);
- if (state != null)
- {
- log.warn("Session expires, remove application: " + state.getUIPortalApplication());
- }
+ uiApplications.remove(sessionId);
SessionManagerContainer pcontainer = (SessionManagerContainer)app.getApplicationServiceContainer();
pcontainer.removeSessionContainer(sessionId);
}
+
+ private PortalApplicationState getApplicationState(WebuiRequestContext context) {
+ PortalRequestContext portalContext = null;
+ if (context instanceof PortalRequestContext)
+ portalContext = (PortalRequestContext)context;
+ else
+ portalContext = (PortalRequestContext)context.getParentAppRequestContext();
+ String portalName = portalContext.getPortalOwner();
+ String sessionId = portalContext.getSessionId();
+
+ HashMap<String, PortalApplicationState> appStates = uiApplications.get(sessionId);
+ return (appStates == null) ? null : appStates.get(portalName);
+ }
+
+ private void cacheApplicationState(String sessionId, String portalName, PortalApplicationState state) {
+ HashMap<String, PortalApplicationState> appStates = uiApplications.get(sessionId);
+ if (appStates == null) {
+ appStates = new HashMap<String, PortalApplicationState>();
+ uiApplications.put(sessionId, appStates);
+ }
+ appStates.put(portalName, state);
+ }
private UserPortalConfig getUserPortalConfig(PortalRequestContext context) throws Exception
{
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/ResourceRequestFilter.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/ResourceRequestFilter.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/application/ResourceRequestFilter.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -26,8 +26,8 @@
import org.exoplatform.commons.utils.TextEncoder;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.web.AbstractFilter;
-import org.exoplatform.portal.skin.ResourceRenderer;
-import org.exoplatform.portal.skin.SkinService;
+import org.exoplatform.portal.resource.ResourceRenderer;
+import org.exoplatform.portal.resource.SkinService;
import org.exoplatform.services.cache.ExoCache;
import org.exoplatform.services.cache.concurrent.ConcurrentFIFOExoCache;
import org.exoplatform.services.log.ExoLogger;
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -601,6 +601,7 @@
HttpServletRequest servletRequest = prc.getRequest();
HashMap<String, String[]> allParams = new HashMap<String, String[]>();
allParams.putAll(servletRequest.getParameterMap());
+ allParams.putAll(this.getPublicParameters());
if (type.equals(ActionInvocation.class))
{
ActionInvocation actionInvocation = new ActionInvocation(pic);
@@ -667,8 +668,7 @@
invocation.setWindowState(org.gatein.pc.api.WindowState.create(getCurrentWindowState().toString()));
// Public navigational state
- invocation.setPublicNavigationalState(allParams);
-
+ invocation.setPublicNavigationalState(this.getPublicParameters());
//
StatefulPortletContext<C> preferencesPortletContext = getPortletContext();
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -140,7 +140,7 @@
// set the public params
HttpServletRequest request = prcontext.getRequest();
- setupPublicRenderParams(uiPortlet, request.getParameterMap());
+ setupPublicRenderParams(uiPortlet, navStateResponse.getPublicNavigationalStateUpdates());
/*
* Cache the render parameters in the UI portlet component to handle the
@@ -150,9 +150,7 @@
*/
//
- Map<String, String[]> map =
- StateString.decodeOpaqueValue((navStateResponse.getNavigationalState()).getStringValue());
- uiPortlet.setRenderParametersMap(map);
+ uiPortlet.setRenderParametersMap(navStateResponse.getPublicNavigationalStateUpdates());
//
/*
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletForm.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletForm.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletForm.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -25,7 +25,7 @@
import org.exoplatform.portal.pom.spi.portlet.Preference;
import org.exoplatform.portal.pom.spi.portlet.Preferences;
import org.exoplatform.portal.portlet.PortletExceptionHandleService;
-import org.exoplatform.portal.skin.SkinService;
+import org.exoplatform.portal.resource.SkinService;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIMaskWorkspace;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/navigation/UINavigationNodeSelector.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/navigation/UINavigationNodeSelector.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/navigation/UINavigationNodeSelector.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -362,9 +362,8 @@
uiNodeForm.setSelectedParent(parent);
// set navigation owner, navigation type
- UINavigationManagement nodeManager = uiNodeSelector.getParent();
- uiNodeForm.setOwner(nodeManager.getOwner());
- uiNodeForm.setOwnerType(nodeManager.getOwnerType());
+ uiNodeForm.setOwner(uiNodeSelector.getSelectedNavigation().getOwnerId());
+ uiNodeForm.setOwnerType(uiNodeSelector.getSelectedNavigation().getOwnerType());
uiManagementPopup.setWindowSize(800, 500);
event.getRequestContext().addUIComponentToUpdateByAjax(uiManagementPopup.getParent());
@@ -469,6 +468,11 @@
UIPopupWindow uiManagementPopup = uiNodeSelector.getAncestorOfType(UIPopupWindow.class);
UIPageNodeForm2 uiNodeForm = uiApp.createUIComponent(UIPageNodeForm2.class, null, null);
uiManagementPopup.setUIComponent(uiNodeForm);
+
+ // set navigation owner, navigation type
+ uiNodeForm.setOwner(uiNodeSelector.getSelectedNavigation().getOwnerId());
+ uiNodeForm.setOwnerType(uiNodeSelector.getSelectedNavigation().getOwnerType());
+
uiNodeForm.setValues(selectedNode);
uiNodeForm.setSelectedParent(obj);
uiManagementPopup.setWindowSize(800, 500);
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -70,7 +70,7 @@
{
UserPortalConfigService configService = uiPortalApp.getApplicationComponent(UserPortalConfigService.class);
String remoteUser = Util.getPortalRequestContext().getRemoteUser();
- UserPortalConfig portalConfig = configService.getUserPortalConfig(uiPortal.getOwner(), remoteUser);
+ UserPortalConfig portalConfig = configService.getUserPortalConfig(Util.getPortalRequestContext().getPortalOwner(), remoteUser);
uiPortal.getChildren().clear();
PortalDataMapper.toUIPortal(uiPortal, portalConfig);
uiPortalApp.setModeState(UIPortalApplication.NORMAL_MODE);
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageCreationWizard.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageCreationWizard.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageCreationWizard.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -33,6 +33,7 @@
import org.exoplatform.portal.webui.util.PortalDataMapper;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+import org.exoplatform.portal.webui.workspace.UIPortalToolPanel;
import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.web.application.JavascriptManager;
@@ -373,6 +374,8 @@
}
uiPortalApp.setModeState(UIPortalApplication.NORMAL_MODE);
uiWizard.saveData();
+ UIPortalToolPanel toolPanel = uiWorkingWS.findFirstComponentOfType(UIPortalToolPanel.class);
+ toolPanel.setUIComponent(null);
uiWizard.updateUIPortal(uiPortalApp, event);
JavascriptManager jsManager = event.getRequestContext().getJavascriptManager();
jsManager.addJavascript("eXo.portal.portalMode=" + UIPortalApplication.NORMAL_MODE + ";");
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageWizard.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageWizard.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageWizard.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -24,6 +24,7 @@
import org.exoplatform.portal.webui.portal.UIPortalComposer;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+import org.exoplatform.portal.webui.workspace.UIPortalToolPanel;
import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
import org.exoplatform.web.application.JavascriptManager;
import org.exoplatform.webui.application.WebuiRequestContext;
@@ -160,6 +161,8 @@
UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
uiWorkingWS.findFirstComponentOfType(UIPortalComposer.class).setRendered(false);
uiWorkingWS.setRenderedChild(UIPortalApplication.UI_VIEWING_WS_ID);
+ UIPortalToolPanel toolPanel = uiWorkingWS.findFirstComponentOfType(UIPortalToolPanel.class);
+ toolPanel.setUIComponent(null);
pcontext.addUIComponentToUpdateByAjax(uiWorkingWS);
JavascriptManager jsManager = event.getRequestContext().getJavascriptManager();
jsManager.addJavascript("eXo.portal.portalMode=" + UIPortalApplication.NORMAL_MODE + ";");
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -26,7 +26,7 @@
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.config.model.PortalProperties;
-import org.exoplatform.portal.skin.SkinService;
+import org.exoplatform.portal.resource.SkinService;
import org.exoplatform.portal.webui.application.UIApplicationList;
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.container.UIContainerList;
@@ -147,7 +147,7 @@
PortalConfig portalConfig = (PortalConfig)PortalDataMapper.buildModelObject(editPortal);
UserPortalConfigService configService = getApplicationComponent(UserPortalConfigService.class);
- configService.update(portalConfig);
+ //configService.update(portalConfig);
uiPortalApp.getUserPortalConfig().setPortal(portalConfig);
String remoteUser = prContext.getRemoteUser();
String ownerUser = prContext.getPortalOwner();
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalForm.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalForm.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalForm.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -26,7 +26,8 @@
import org.exoplatform.portal.config.model.PageNavigation;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.config.model.PortalProperties;
-import org.exoplatform.portal.skin.SkinService;
+import org.exoplatform.portal.resource.SkinService;
+import org.exoplatform.portal.webui.util.PortalDataMapper;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIMaskWorkspace;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
@@ -236,6 +237,9 @@
UIPortal uiPortal = Util.getUIPortal();
uiForm.invokeSetBindingBean(uiPortal);
// uiPortal.refreshNavigation(localeConfigService.getLocaleConfig(uiPortal.getLocale()).getLocale()) ;
+ PortalConfig portalConfig = (PortalConfig)PortalDataMapper.buildModelObject(uiPortal);
+ UserPortalConfigService configService = uiForm.getApplicationComponent(UserPortalConfigService.class);
+ configService.update(portalConfig);
UIMaskWorkspace uiMaskWorkspace = uiForm.getParent();
uiMaskWorkspace.setUIComponent(null);
event.getRequestContext().addUIComponentToUpdateByAjax(uiMaskWorkspace);
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UISkinSelector.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UISkinSelector.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UISkinSelector.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -19,7 +19,7 @@
package org.exoplatform.portal.webui.portal;
-import org.exoplatform.portal.skin.SkinService;
+import org.exoplatform.portal.resource.SkinService;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIMaskWorkspace;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -182,7 +182,7 @@
return model;
}
- static private Page toPageModel(UIPage uiPage)
+ static public Page toPageModel(UIPage uiPage)
{
Page model = new Page(uiPage.getStorageId());
toContainer(model, uiPage);
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMainActionListener.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMainActionListener.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMainActionListener.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -21,7 +21,9 @@
import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.config.UserACL;
+import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.config.model.PortalConfig;
+import org.exoplatform.portal.webui.page.UIPage;
import org.exoplatform.portal.webui.page.UIPageBody;
import org.exoplatform.portal.webui.page.UIPageCreationWizard;
import org.exoplatform.portal.webui.page.UISiteBody;
@@ -29,8 +31,10 @@
import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.portal.webui.portal.UIPortalComposer;
import org.exoplatform.portal.webui.portal.UIPortalForm;
+import org.exoplatform.portal.webui.util.PortalDataMapper;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.web.application.ApplicationMessage;
+import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
@@ -64,6 +68,18 @@
UIPortalToolPanel uiToolPanel = uiWorkingWS.findFirstComponentOfType(UIPortalToolPanel.class);
uiToolPanel.setShowMaskLayer(false);
UIPageBody pageBody = uiWorkingWS.findFirstComponentOfType(UIPageBody.class);
+
+ // check edit permission for page
+ UIPage uiPage = (UIPage) pageBody.getUIComponent();
+ Page page = PortalDataMapper.toPageModel(uiPage);
+
+ UserACL userACL = uiApp.getApplicationComponent(UserACL.class);
+ if (!userACL.hasEditPermission(page))
+ {
+ uiApp.addMessage(new ApplicationMessage("UIPortalManagement.msg.Invalid-editPermission", null));
+ return;
+ }
+
uiToolPanel.setWorkingComponent(pageBody.getUIComponent());
event.getRequestContext().addUIComponentToUpdateByAjax(uiWorkingWS);
Util.getPortalRequestContext().setFullRender(true);
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMaskWorkspace.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMaskWorkspace.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIMaskWorkspace.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -25,12 +25,14 @@
import org.exoplatform.webui.core.UIComponentDecorator;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import org.exoplatform.webui.event.Event.Phase;
/**
* Created by The eXo Platform SAS
* Mar 13, 2007
*/
-@ComponentConfig(id = "UIMaskWorkspace", template = "system:/groovy/portal/webui/workspace/UIMaskWorkspace.gtmpl", events = @EventConfig(listeners = UIMaskWorkspace.CloseActionListener.class))
+@ComponentConfig(id = "UIMaskWorkspace", template = "system:/groovy/portal/webui/workspace/UIMaskWorkspace.gtmpl",
+ events = @EventConfig(phase = Phase.DECODE, listeners = UIMaskWorkspace.CloseActionListener.class))
public class UIMaskWorkspace extends UIComponentDecorator
{
Modified: portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
===================================================================
--- portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2009-11-01 11:24:58 UTC (rev 467)
+++ portal/branches/performance/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2009-11-01 13:58:21 UTC (rev 468)
@@ -23,10 +23,10 @@
import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.config.UserPortalConfig;
import org.exoplatform.portal.config.model.Container;
-import org.exoplatform.portal.skin.Skin;
-import org.exoplatform.portal.skin.SkinConfig;
-import org.exoplatform.portal.skin.SkinService;
-import org.exoplatform.portal.skin.SkinURL;
+import org.exoplatform.portal.resource.Skin;
+import org.exoplatform.portal.resource.SkinConfig;
+import org.exoplatform.portal.resource.SkinService;
+import org.exoplatform.portal.resource.SkinURL;
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.page.UISiteBody;
import org.exoplatform.portal.webui.portal.PageNodeEvent;
15 years, 1 month
gatein SVN: r467 - in portal/branches/performance/component/scripting/src: main/java/org/exoplatform/groovyscript/text and 1 other directories.
by do-not-reply@jboss.org
Author: julien_viet
Date: 2009-11-01 06:24:58 -0500 (Sun, 01 Nov 2009)
New Revision: 467
Added:
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyCompilationException.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/Position.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompilationException.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateRuntimeException.java
Removed:
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompiler.java
Modified:
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/BaseScript.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScriptBuilder.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplateEngine.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/LineBreakItem.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/SectionItem.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateParser.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TextItem.java
portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/text/TemplateService.java
portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateCompiler.java
portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java
portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java
Log:
GTNPORTAL-146 : Contextual error reporting of Groovy templates runtime exception
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/BaseScript.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/BaseScript.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/BaseScript.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -22,6 +22,8 @@
import java.io.IOException;
/**
+ * The internal base script of a Groovy script as seen by the Groovy world.
+ *
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
Added: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyCompilationException.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyCompilationException.java (rev 0)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyCompilationException.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.groovyscript;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class GroovyCompilationException extends TemplateCompilationException
+{
+
+ /** . */
+ private final String groovyText;
+
+ public GroovyCompilationException(Throwable cause, String templateText, String groovyText)
+ {
+ super(cause, templateText);
+
+ //
+ this.groovyText = groovyText;
+ }
+
+ public String getGroovyText()
+ {
+ return groovyText;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ return "Groovy compilation exception\n" +
+ "template: " +
+ getTemplateText() + "\n" +
+ "compiled to Groovy: " +
+ getGroovyText() + "\n";
+ }
+}
Added: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java (rev 0)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScript.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.groovyscript;
+
+import groovy.lang.Binding;
+import org.codehaus.groovy.runtime.InvokerHelper;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * A wrapper for a Groovy script and its meta data.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class GroovyScript
+{
+
+ /** . */
+ private final String groovyText;
+
+ /** . */
+ private final Class<?> scriptClass;
+
+ /** . */
+ private final Map<Integer, TextItem> lineTable;
+
+ public GroovyScript(String groovyText, Class<?> scriptClass, Map<Integer, TextItem> lineTable)
+ {
+ this.groovyText = groovyText;
+ this.scriptClass = scriptClass;
+ this.lineTable = lineTable;
+ }
+
+ public String getGroovyText()
+ {
+ return groovyText;
+ }
+
+ public Class<?> getScriptClass()
+ {
+ return scriptClass;
+ }
+
+ public Map<Integer, TextItem> getLineTable()
+ {
+ return lineTable;
+ }
+
+ public void render(Map context, GroovyPrinter writer) throws IOException, TemplateRuntimeException
+ {
+ Binding binding = context != null ? new Binding(context) : new Binding();
+
+ //
+ BaseScript script = (BaseScript)InvokerHelper.createScript(scriptClass, binding);
+ script.printer = writer;
+ script.setProperty("out", script.printer);
+
+ //
+ try
+ {
+ script.run();
+ }
+ catch (Exception e)
+ {
+ if (e instanceof IOException)
+ {
+ throw (IOException)e;
+ }
+ else
+ {
+ TextItem textItem = findOut(e);
+ throw new TemplateRuntimeException(textItem, e);
+ }
+ }
+ catch (Throwable e)
+ {
+ if (e instanceof Error)
+ {
+ throw ((Error)e);
+ }
+ TextItem textItem = findOut(e);
+ throw new TemplateRuntimeException(textItem, e);
+ }
+
+ //
+ script.flush();
+ }
+
+ private TextItem findOut(Throwable t)
+ {
+ StackTraceElement[] elements = t.getStackTrace();
+
+ // The index of the script based on the current stack trace
+ int index = elements.length - Thread.currentThread().getStackTrace().length + 1;
+
+ // Try to find the groovy script line
+ if (index >= 0 && index < elements.length)
+ {
+ int groovyLineNumber = elements[index].getLineNumber();
+ return lineTable.get(groovyLineNumber);
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScriptBuilder.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScriptBuilder.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyScriptBuilder.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -16,8 +16,19 @@
*/
package org.exoplatform.groovyscript;
+import groovy.lang.GroovyClassLoader;
+import groovy.lang.GroovyCodeSource;
+import org.codehaus.groovy.control.CompilationFailedException;
+import org.codehaus.groovy.control.CompilerConfiguration;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
@@ -27,6 +38,12 @@
{
/** . */
+ private final String name;
+
+ /** . */
+ private final String templateText;
+
+ /** . */
private SectionType currentType = null;
/** . */
@@ -35,12 +52,22 @@
/** . */
private Script script = new Script();
- public void begin(SectionType sectionType)
+ public GroovyScriptBuilder(String name, String templateText)
{
+ this.name = name;
+ this.templateText = templateText;
+ }
+
+ private void begin(SectionType sectionType, Position pos)
+ {
if (sectionType == null)
{
throw new NullPointerException();
}
+ if (pos == null)
+ {
+ throw new NullPointerException();
+ }
if (currentType != null)
{
throw new IllegalStateException();
@@ -60,39 +87,48 @@
}
}
- public void append(String text)
+ private void append(SectionItem item)
{
- switch (currentType)
+ if (item instanceof TextItem)
{
- case STRING:
- accumulatedText.append(text);
- break;
- case SCRIPTLET:
- script.appendGroovy(text);
- break;
- case EXPR:
- script.appendGroovy(text);
- break;
+ TextItem textItem = (TextItem)item;
+ String text = textItem.getData();
+ switch (currentType)
+ {
+ case STRING:
+ accumulatedText.append(text);
+ break;
+ case SCRIPTLET:
+ script.appendGroovy(text);
+ script.positionTable.put(script.lineNumber, textItem);
+ break;
+ case EXPR:
+ script.appendGroovy(text);
+ script.positionTable.put(script.lineNumber, textItem);
+ break;
+ }
}
- }
-
- public void lineBreak()
- {
- switch (currentType)
+ else if (item instanceof LineBreakItem)
{
- case STRING:
- accumulatedText.append("\n");
- break;
- case SCRIPTLET:
- script.appendGroovy("\n");
- break;
- case EXPR:
- script.appendGroovy("\n");
- break;
+ switch (currentType)
+ {
+ case STRING:
+ accumulatedText.append("\n");
+ break;
+ case SCRIPTLET:
+ case EXPR:
+ script.appendGroovy("\n");
+ script.lineNumber++;
+ break;
+ }
}
+ else
+ {
+ throw new AssertionError();
+ }
}
- public void end()
+ private void end()
{
if (currentType == null)
{
@@ -110,10 +146,13 @@
}
break;
case SCRIPTLET:
+ // We append a line break because we want that any line comment does not affect the template
script.appendGroovy("\n");
+ script.lineNumber++;
break;
case EXPR:
- script.appendGroovy("}\");");
+ script.appendGroovy("}\");\n");
+ script.lineNumber++;
break;
}
@@ -121,13 +160,65 @@
this.currentType = null;
}
- public String getScript()
+ public GroovyScript build() throws TemplateCompilationException
{
- return script.toString();
- }
+ List<TemplateSection> sections = new TemplateParser().parse(templateText);
+ //
+ for (TemplateSection section : sections)
+ {
+ begin(section.getType(), section.getItems().get(0).getPosition());
+ for (SectionItem item : section.getItems())
+ {
+ append(item);
+ }
+ end();
+ }
+ //
+ String groovyText = script.toString();
+ //
+ CompilerConfiguration config = new CompilerConfiguration();
+
+ //
+ byte[] bytes;
+ try
+ {
+ config.setScriptBaseClass(BaseScript.class.getName());
+ bytes = groovyText.getBytes(config.getSourceEncoding());
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new TemplateCompilationException(e, groovyText);
+ }
+
+ //
+ InputStream in = new ByteArrayInputStream(bytes);
+ GroovyCodeSource gcs = new GroovyCodeSource(in, name, "/groovy/shell");
+ GroovyClassLoader loader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), config);
+ Class<?> scriptClass;
+ try
+ {
+ scriptClass = loader.parseClass(gcs, false);
+ }
+ catch (CompilationFailedException e)
+ {
+ throw new GroovyCompilationException(e, templateText, groovyText);
+ }
+ catch (ClassFormatError e)
+ {
+ throw new GroovyCompilationException(e, templateText, groovyText);
+ }
+
+ return new GroovyScript(
+ script.toString(), scriptClass, Collections.unmodifiableMap(new HashMap<Integer, TextItem>(script.positionTable))
+ );
+ }
+
+ /**
+ * Internal representation of a script
+ */
private static class Script
{
@@ -140,6 +231,12 @@
/** . */
private int methodCount = 0;
+ /** The line number table. */
+ private Map<Integer, TextItem> positionTable = new HashMap<Integer, TextItem>();
+
+ /** The current line number. */
+ private int lineNumber = 1;
+
@Override
public String toString()
{
@@ -159,8 +256,9 @@
public void appendText(String text)
{
TextContant m = new TextContant("s" + methodCount++, text);
- out.append(";out.print(Constants.").append(m.name).append(");\n");
+ out.append("out.print(Constants.").append(m.name).append(");\n");
textMethods.add(m);
+ lineNumber++;
}
public void appendGroovy(String s)
@@ -203,26 +301,6 @@
}
else
{
-/*
- String code = Integer.toHexString(c);
- switch (code.length())
- {
- default:
- throw new AssertionError();
- case 1:
- code = "000" + code;
- break;
- case 2:
- code = "00" + code;
- break;
- case 3:
- code = "0" + code;
- break;
- case 4:
- break;
- }
- builder.append("\\u").append(code);
-*/
builder.append(c);
}
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplate.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -16,29 +16,21 @@
*/
package org.exoplatform.groovyscript;
-import groovy.lang.Binding;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyCodeSource;
-import groovy.lang.Writable;
-import groovy.text.Template;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.codehaus.groovy.runtime.InvokerHelper;
import org.exoplatform.commons.utils.OutputStreamPrinter;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
/**
+ * A Groovy template.
+ *
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
-public class GroovyTemplate implements Template
+public class GroovyTemplate
{
private static String read(Reader reader) throws IOException
@@ -52,34 +44,31 @@
return builder.toString();
}
- /** . */
+ /** The name of the template. */
private final String name;
- /** . */
- private final String scriptText;
+ /** The text of the template. */
+ private final String templateText;
- /** . */
- private final String groovyText;
+ /** The groovy script. */
+ private final GroovyScript script;
- /** . */
- private final Class<?> scriptClass;
-
- public GroovyTemplate(String name, Reader scriptReader) throws IOException
+ public GroovyTemplate(String name, Reader scriptReader) throws IOException, TemplateCompilationException
{
this(name, read(scriptReader));
}
- public GroovyTemplate(Reader scriptReader) throws IOException
+ public GroovyTemplate(Reader scriptReader) throws IOException, TemplateCompilationException
{
this(read(scriptReader));
}
- public GroovyTemplate(String scriptText) throws IOException
+ public GroovyTemplate(String templateText) throws TemplateCompilationException
{
- this(null, scriptText);
+ this(null, templateText);
}
- public GroovyTemplate(String name, String scriptText) throws IOException
+ public GroovyTemplate(String name, String templateText) throws TemplateCompilationException
{
if (name == null)
{
@@ -87,38 +76,12 @@
}
//
- TemplateCompiler compiler = new TemplateCompiler();
- String groovyText = compiler.compile(scriptText);
+ GroovyScriptBuilder compiler = new GroovyScriptBuilder(name, templateText);
//
- CompilerConfiguration config = new CompilerConfiguration();
- config.setScriptBaseClass(BaseScript.class.getName());
- byte[] bytes = groovyText.getBytes(config.getSourceEncoding());
- InputStream in = new ByteArrayInputStream(bytes);
- GroovyCodeSource gcs = new GroovyCodeSource(in, name, "/groovy/shell");
- GroovyClassLoader loader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), config);
-
- Class<?> scriptClass;
- try
- {
- scriptClass = loader.parseClass(gcs, false);
- }
- catch (CompilationFailedException e)
- {
- System.out.println("Could not compile script <<<" + groovyText + ">>>");
- throw e;
- }
- catch (ClassFormatError e)
- {
- System.out.println("Could not compile script <<<" + groovyText + ">>>");
- throw e;
- }
-
- //
this.name = name;
- this.scriptText = scriptText;
- this.groovyText = groovyText;
- this.scriptClass = scriptClass;
+ this.script = compiler.build();
+ this.templateText = templateText;
}
public String getName()
@@ -126,33 +89,41 @@
return name;
}
- public String getScriptText()
+ public String getTemplateText()
{
- return scriptText;
+ return templateText;
}
public String getGroovyText()
{
- return groovyText;
+ return script.getGroovyText();
}
- public void render(GroovyPrinter writer) throws IOException
+ public void render(Writer writer) throws IOException, TemplateRuntimeException
{
render(writer, null);
}
- public void render(GroovyPrinter writer, Map binding) throws IOException
+ public void render(Writer writer, Map binding) throws IOException, TemplateRuntimeException
{
- Writable writable = make(binding);
- writable.writeTo(writer);
+ GroovyPrinter printer;
+ if (writer instanceof OutputStreamPrinter)
+ {
+ printer = new OutputStreamWriterGroovyPrinter((OutputStreamPrinter)writer);
+ }
+ else
+ {
+ printer = new WriterGroovyPrinter(writer);
+ }
+ script.render(binding, printer);
}
- public String render() throws IOException
+ public String render() throws IOException, TemplateRuntimeException
{
return render((Map)null);
}
- public String render(Map binding) throws IOException
+ public String render(Map binding) throws IOException, TemplateRuntimeException
{
StringWriter buffer = new StringWriter();
WriterGroovyPrinter printer = new WriterGroovyPrinter(buffer);
@@ -160,47 +131,4 @@
printer.close();
return buffer.toString();
}
-
- public Writable make()
- {
- return make(null);
- }
-
- public Writable make(final Map binding)
- {
- Writable writable = new Writable()
- {
- /**
- * Write the template document with the set binding applied to the writer.
- *
- * @see groovy.lang.Writable#writeTo(java.io.Writer)
- */
- public Writer writeTo(Writer writer)
- {
- Binding context;
- if (binding == null)
- context = new Binding();
- else
- context = new Binding(binding);
-
- //
- BaseScript script = (BaseScript)InvokerHelper.createScript(scriptClass, context);
- if (writer instanceof OutputStreamPrinter)
- {
- script.printer = new OutputStreamWriterGroovyPrinter((OutputStreamPrinter)writer);
- }
- else
- {
- script.printer = new WriterGroovyPrinter(writer);
- }
- script.setProperty("out", script.printer);
- script.run();
- script.flush();
- return writer;
- }
- };
-
- //
- return writable;
- }
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplateEngine.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplateEngine.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/GroovyTemplateEngine.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -16,23 +16,14 @@
*/
package org.exoplatform.groovyscript;
-import groovy.text.Template;
-import groovy.text.TemplateEngine;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-import java.io.IOException;
-import java.io.Reader;
-
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
-public class GroovyTemplateEngine extends TemplateEngine
+public class GroovyTemplateEngine
{
-
- @Override
- public Template createTemplate(Reader reader) throws CompilationFailedException, ClassNotFoundException, IOException
+ public GroovyTemplate createTemplate(String text) throws TemplateCompilationException
{
- return new GroovyTemplate(reader);
+ return new GroovyTemplate(text);
}
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/LineBreakItem.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/LineBreakItem.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/LineBreakItem.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -23,14 +23,15 @@
public class LineBreakItem extends SectionItem
{
- public LineBreakItem()
+ public LineBreakItem(Position pos)
{
+ super(pos);
}
@Override
public String toString()
{
- return "LineBreak[]";
+ return "LineBreak[position=" + getPosition() + "]";
}
@Override
Added: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/Position.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/Position.java (rev 0)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/Position.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.groovyscript;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class Position
+{
+
+ /** . */
+ private final int col;
+
+ /** . */
+ private final int line;
+
+ public Position(int col, int line)
+ {
+ if (col < 0)
+ {
+ throw new IllegalArgumentException();
+ }
+ if (line < 0)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ this.col = col;
+ this.line = line;
+ }
+
+ public int getCol()
+ {
+ return col;
+ }
+
+ public int getLine()
+ {
+ return line;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+ if (obj instanceof Position)
+ {
+ Position that = (Position)obj;
+ return col == that.col && line == that.line;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Position[col=" + col + ",line=" + line + "]";
+ }
+}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/SectionItem.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/SectionItem.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/SectionItem.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -22,4 +22,21 @@
*/
public abstract class SectionItem
{
+
+ /** . */
+ private final Position pos;
+
+ protected SectionItem(Position pos)
+ {
+ if (pos == null)
+ {
+ throw new NullPointerException("No null position accepted");
+ }
+ this.pos = pos;
+ }
+
+ public Position getPosition()
+ {
+ return pos;
+ }
}
Added: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompilationException.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompilationException.java (rev 0)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompilationException.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.groovyscript;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class TemplateCompilationException extends Exception
+{
+
+ /** . */
+ private final String templateText;
+
+ public TemplateCompilationException(Throwable cause, String templateText)
+ {
+ super(cause);
+
+ //
+ this.templateText = templateText;
+ }
+
+ public String getTemplateText()
+ {
+ return templateText;
+ }
+}
Deleted: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompiler.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompiler.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateCompiler.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2003-2007 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.groovyscript;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public class TemplateCompiler
-{
-
- public String compile(String script) throws IOException
- {
- List<TemplateSection> sections = new TemplateParser().parse(script);
- return compile(sections);
- }
-
- public String compile(List<TemplateSection> sections)
- {
- GroovyScriptBuilder scriptBuilder = new GroovyScriptBuilder();
- for (TemplateSection section : sections)
- {
- scriptBuilder.begin(section.getType());
- for (SectionItem item : section.getItems())
- {
- if (item instanceof TextItem)
- {
- scriptBuilder.append(((TextItem)item).getData());
- }
- else
- {
- scriptBuilder.lineBreak();
- }
- }
- scriptBuilder.end();
- }
- return scriptBuilder.getScript();
- }
-}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateParser.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateParser.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateParser.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -16,8 +16,10 @@
*/
package org.exoplatform.groovyscript;
-import java.io.BufferedReader;
+import org.exoplatform.commons.utils.UndeclaredIOException;
+
import java.io.IOException;
+import java.io.PushbackReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
@@ -54,27 +56,68 @@
GSTRING_EXPR
}
- public List<TemplateSection> parse(String s) throws IOException
+ public List<TemplateSection> parse(String s)
{
- return parse(new StringReader(s));
+ try
+ {
+ return parse(new StringReader(s));
+ }
+ catch (IOException e)
+ {
+ throw new UndeclaredIOException(e);
+ }
}
- public List<TemplateSection> parse(Reader reader) throws IOException
+ public List<TemplateSection> parse(Reader tmp) throws IOException
{
- if (!reader.markSupported())
- {
- reader = new BufferedReader(reader);
- }
+ PushbackReader reader = new PushbackReader(tmp);
+
//
ArrayList<TemplateSection> sections = new ArrayList<TemplateSection>();
StringBuilder accumulator = new StringBuilder();
//
+ int lineNumber = 1;
+ int colNumber = 1;
+ Position pos = new Position(1, 1);
Status status = Status.TEXT;
- int c;
- while ((c = reader.read()) != -1)
+ int i;
+ while ((i = reader.read()) != -1)
{
+ char c = (char)i;
+
+ //
+ if (c == '\r')
+ {
+ // On Windows, "\r\n" is a new line
+ int j = reader.read();
+ if (j != -1)
+ {
+ char c2 = (char)j;
+ if (c2 == '\n')
+ {
+ c = '\n';
+ }
+ else
+ {
+ reader.unread(j);
+ }
+ }
+ }
+
+ // Update current position
+ if (c == '\n')
+ {
+ colNumber = 1;
+ lineNumber++;
+ }
+ else
+ {
+ colNumber++;
+ }
+
+ //
switch (status)
{
case TEXT:
@@ -88,7 +131,7 @@
}
else
{
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
case EXPR:
@@ -98,7 +141,7 @@
}
else
{
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
case SCRIPTLET:
@@ -108,7 +151,7 @@
}
else
{
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
case START_ANGLE:
@@ -119,14 +162,15 @@
else
{
status = Status.TEXT;
- accumulator.append('<').append((char)c);
+ accumulator.append('<').append(c);
}
break;
case SCRIPLET_OR_EXPR:
if (accumulator.length() > 0)
{
- sections.add(new TemplateSection(SectionType.STRING, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.STRING, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
}
if (c == '=')
{
@@ -139,15 +183,18 @@
else
{
status = Status.SCRIPTLET;
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
case MAYBE_SCRIPLET_END:
if (c == '>')
{
+ sections.add(new TemplateSection(SectionType.SCRIPTLET, accumulator.toString(), pos));
+ accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
+
+ //
status = Status.TEXT;
- sections.add(new TemplateSection(SectionType.SCRIPTLET, accumulator.toString()));
- accumulator.setLength(0);
}
else if (c == '%')
{
@@ -156,15 +203,18 @@
else
{
status = Status.SCRIPTLET;
- accumulator.append('%').append((char)c);
+ accumulator.append('%').append(c);
}
break;
case MAYBE_EXPR_END:
if (c == '>')
{
+ sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString(), pos));
+ accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
+
+ //
status = Status.TEXT;
- sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString()));
- accumulator.setLength(0);
}
else if (c == '%')
{
@@ -173,7 +223,7 @@
else
{
status = Status.EXPR;
- accumulator.append('%').append((char)c);
+ accumulator.append('%').append(c);
}
break;
case MAYBE_GSTRING_EXPR:
@@ -181,49 +231,57 @@
{
if (accumulator.length() > 0)
{
- sections.add(new TemplateSection(SectionType.STRING, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.STRING, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
}
status = Status.GSTRING_CURLY_EXPR;
}
- else if (Character.isJavaIdentifierStart((char)c))
+ else if (Character.isJavaIdentifierStart(c))
{
if (accumulator.length() > 0)
{
- sections.add(new TemplateSection(SectionType.STRING, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.STRING, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
}
status = Status.GSTRING_EXPR;
- accumulator.append((char)c);
+ accumulator.append(c);
}
else
{
- accumulator.append('$').append((char)c);
+ accumulator.append('$').append(c);
}
break;
case GSTRING_CURLY_EXPR:
if (c == '}')
{
- sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
+
+ //
status = Status.TEXT;
}
else
{
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
case GSTRING_EXPR:
- if (c == '.' || Character.isJavaIdentifierPart((char)c))
+ if (c == '.' || Character.isJavaIdentifierPart(c))
{
- accumulator.append((char)c);
+ accumulator.append(c);
}
else
{
- sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
+
+ //
status = Status.TEXT;
- accumulator.append((char)c);
+ accumulator.append(c);
}
break;
default:
@@ -237,12 +295,14 @@
switch (status)
{
case TEXT:
- sections.add(new TemplateSection(SectionType.STRING, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.STRING, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
break;
case GSTRING_EXPR:
- sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString()));
+ sections.add(new TemplateSection(SectionType.EXPR, accumulator.toString(), pos));
accumulator.setLength(0);
+ pos = new Position(colNumber, lineNumber);
break;
default:
throw new AssertionError();
Added: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateRuntimeException.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateRuntimeException.java (rev 0)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateRuntimeException.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.groovyscript;
+
+/**
+ * A *checked* exception that denotes a Groovy runtime exception.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class TemplateRuntimeException extends Exception
+{
+
+ /** . */
+ private final TextItem textItem;
+
+ public TemplateRuntimeException(TextItem textItem, String message, Throwable cause)
+ {
+ super(message, cause);
+
+ //
+ this.textItem = textItem;
+ }
+
+ public TemplateRuntimeException(TextItem textItem, Throwable cause)
+ {
+ super(cause);
+
+ //
+ this.textItem = textItem;
+ }
+
+ public TextItem getTextItem()
+ {
+ return textItem;
+ }
+
+ public Integer getLineNumber()
+ {
+ return textItem != null ? textItem.getPosition().getLine() : null;
+ }
+
+ public String getText()
+ {
+ return textItem != null ? textItem.getData() : null;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ return textItem != null ? ("Groovy template exception at " + textItem) : "Groovy template exception";
+ }
+}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TemplateSection.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -35,6 +35,16 @@
public TemplateSection(SectionType type, String text)
{
+ this(type, text, 0, 0);
+ }
+
+ public TemplateSection(SectionType type, String text, Position pos)
+ {
+ this(type, text, pos.getCol(), pos.getLine());
+ }
+
+ public TemplateSection(SectionType type, String text, int colNumber, int lineNumber)
+ {
if (type == null)
{
throw new NullPointerException();
@@ -44,13 +54,9 @@
throw new NullPointerException();
}
- //
// Now we process the line breaks
ArrayList<SectionItem> sections = new ArrayList<SectionItem>();
- // on Windows, "\r\n" is a new line
- text = text.replaceAll("\r\n", "\n");
-
//
int from = 0;
while (true)
@@ -61,14 +67,20 @@
if (to != -1)
{
String chunk = text.substring(from, to);
- sections.add(new TextItem(chunk));
- sections.add(new LineBreakItem());
+ sections.add(new TextItem(new Position(colNumber, lineNumber), chunk));
+
+ //
+ sections.add(new LineBreakItem(new Position(colNumber + (to - from), lineNumber)));
+
+ //
from = to + 1;
+ lineNumber++;
+ colNumber = 0;
}
else
{
String chunk = text.substring(from);
- sections.add(new TextItem(chunk));
+ sections.add(new TextItem(new Position(colNumber, lineNumber), chunk));
break;
}
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TextItem.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TextItem.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/TextItem.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -26,8 +26,11 @@
/** . */
private final String data;
- public TextItem(String data)
+ public TextItem(Position pos, String data)
{
+ super(pos);
+
+ //
if (data == null)
{
throw new NullPointerException();
@@ -60,6 +63,6 @@
@Override
public String toString()
{
- return "DataText[data=" + data + "]";
+ return "DataText[pos=" + getPosition() + ",data=" + data + "]";
}
}
Modified: portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/text/TemplateService.java
===================================================================
--- portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/text/TemplateService.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/main/java/org/exoplatform/groovyscript/text/TemplateService.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -22,9 +22,9 @@
import groovy.lang.Writable;
import groovy.text.Template;
-import groovy.text.TemplateEngine;
import org.exoplatform.commons.utils.IOUtil;
import org.exoplatform.container.xml.InitParams;
+import org.exoplatform.groovyscript.GroovyTemplate;
import org.exoplatform.groovyscript.GroovyTemplateEngine;
import org.exoplatform.management.annotations.Managed;
import org.exoplatform.management.annotations.ManagedDescription;
@@ -47,9 +47,9 @@
public class TemplateService
{
- private TemplateEngine engine_;
+ private GroovyTemplateEngine engine_;
- private ExoCache<String, Template> templatesCache_;
+ private ExoCache<String, GroovyTemplate> templatesCache_;
private TemplateStatisticService statisticService;
@@ -68,11 +68,10 @@
{
long startTime = System.currentTimeMillis();
- Template template = getTemplate(name, context.getResourceResolver());
+ GroovyTemplate template = getTemplate(name, context.getResourceResolver());
context.put("_ctx", context);
context.setGroovyTemplateService(this);
- Writable writable = template.make(context);
- writable.writeTo(context.getWriter());
+ template.render(context.getWriter(), context);
long endTime = System.currentTimeMillis();
@@ -95,24 +94,22 @@
if (context == null)
throw new Exception("Binding cannot be null");
context.put("_ctx", context);
- Template template = getTemplate(name, context.getResourceResolver());
- Writable writable = template.make(context);
- writable.writeTo(context.getWriter());
-
+ GroovyTemplate template = getTemplate(name, context.getResourceResolver());
+ template.render(context.getWriter(), context);
}
- final public Template getTemplate(String name, ResourceResolver resolver) throws Exception
+ final public GroovyTemplate getTemplate(String name, ResourceResolver resolver) throws Exception
{
return getTemplate(name, resolver, cacheTemplate_);
}
- final public Template getTemplate(String url, ResourceResolver resolver, boolean cacheable) throws Exception
+ final public GroovyTemplate getTemplate(String url, ResourceResolver resolver, boolean cacheable) throws Exception
{
- Template template = null;
+ GroovyTemplate template = null;
if (cacheable)
{
String resourceId = resolver.createResourceId(url);
- template = (Template)getTemplatesCache().get(resourceId);
+ template = getTemplatesCache().get(resourceId);
}
if (template != null)
return template;
@@ -140,13 +137,8 @@
getTemplatesCache().remove(resourceId);
}
- public void setTemplatesCache(ExoCache<String, Template> templatesCache_)
+ public ExoCache<String, GroovyTemplate> getTemplatesCache()
{
- this.templatesCache_ = templatesCache_;
- }
-
- public ExoCache<String, Template> getTemplatesCache()
- {
return templatesCache_;
}
Modified: portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateCompiler.java
===================================================================
--- portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateCompiler.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateCompiler.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -17,7 +17,6 @@
package org.exoplatform.groovyscript;
import junit.framework.TestCase;
-import org.exoplatform.groovyscript.TemplateCompiler;
import java.io.IOException;
@@ -29,7 +28,7 @@
{
/** . */
- private final TemplateCompiler compiler = new TemplateCompiler();
+// private final TemplateCompiler compiler = new TemplateCompiler();
public void testFoo() throws IOException
{
Modified: portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java
===================================================================
--- portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateParser.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
@@ -102,4 +103,20 @@
new TemplateSection(SectionType.STRING, "c")
), parser.parse("a<%=b%>c"));
}
+
+ public void testWindowsLineBreak() throws IOException
+ {
+
+ }
+
+ public void testPosition() throws IOException
+ {
+ List<TemplateSection> sections = parser.parse("a\nb<%= foo %>d");
+ assertEquals(new Position(0, 0), sections.get(0).getItems().get(0).getPosition());
+ assertEquals(new Position(1, 0), sections.get(0).getItems().get(1).getPosition());
+ assertEquals(new Position(0, 1), sections.get(0).getItems().get(2).getPosition());
+ assertEquals(new Position(4, 1), sections.get(1).getItems().get(0).getPosition());
+ assertEquals(new Position(11, 1), sections.get(2).getItems().get(0).getPosition());
+
+ }
}
Modified: portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java
===================================================================
--- portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java 2009-10-30 21:04:13 UTC (rev 466)
+++ portal/branches/performance/component/scripting/src/test/java/org/exoplatform/groovyscript/TestTemplateRendering.java 2009-11-01 11:24:58 UTC (rev 467)
@@ -19,11 +19,12 @@
import junit.framework.TestCase;
import org.exoplatform.commons.utils.CharsetTextEncoder;
import org.exoplatform.commons.utils.OutputStreamPrinter;
-import org.exoplatform.groovyscript.GroovyTemplate;
-import org.exoplatform.groovyscript.OutputStreamWriterGroovyPrinter;
+import java.awt.*;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.util.EmptyStackException;
import java.util.HashMap;
import java.util.Map;
@@ -156,4 +157,105 @@
String gtmpl = baos.toString("UTF-8");
GroovyTemplate template = new GroovyTemplate(gtmpl);
}
+
+ public void testException() throws Exception
+ {
+ GroovyTemplate template = new GroovyTemplate("<% throw new java.awt.AWTException(); %>");
+ try
+ {
+ template.render();
+ fail();
+ }
+ catch (TemplateRuntimeException e)
+ {
+ assertTrue(e.getCause() instanceof AWTException);
+ }
+ }
+
+ public void testRuntimeException() throws Exception
+ {
+ GroovyTemplate template = new GroovyTemplate("<% throw new java.util.EmptyStackException(); %>");
+ try
+ {
+ template.render();
+ fail();
+ }
+ catch (TemplateRuntimeException e)
+ {
+ assertTrue(e.getCause() instanceof EmptyStackException);
+ }
+ }
+
+ public void testIOException() throws Exception
+ {
+ GroovyTemplate template = new GroovyTemplate("<% throw new java.io.IOException(); %>");
+ try
+ {
+ template.render();
+ fail();
+ }
+ catch (IOException e)
+ {
+ }
+ }
+
+ public void testError() throws Exception
+ {
+ GroovyTemplate template = new GroovyTemplate("<% throw new java.awt.AWTError(); %>");
+ try
+ {
+ template.render();
+ fail();
+ }
+ catch (AWTError e)
+ {
+ }
+ }
+
+ public void testThrowable() throws Exception
+ {
+ GroovyTemplate template = new GroovyTemplate("<% throw new Throwable(); %>");
+ try
+ {
+ template.render();
+ fail();
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+
+ public void testScriptLineNumber() throws Exception
+ {
+ testLineNumber("<%");
+ assertLineNumber(2, "throw new Exception('e')", "<%\nthrow new Exception('e')%>");
+ }
+
+ public void testExpressionLineNumber() throws Exception
+ {
+ testLineNumber("<%=");
+ }
+
+ private void testLineNumber(String prolog) throws Exception
+ {
+ assertLineNumber(1, "throw new Exception('a')", prolog + "throw new Exception('a')%>");
+ assertLineNumber(1, "throw new Exception('b')", "foo" + prolog + "throw new Exception('b')%>");
+ assertLineNumber(2, "throw new Exception('c')", "foo\n" + prolog + "throw new Exception('c')%>");
+ assertLineNumber(1, "throw new Exception('d')", "<%;%>foo" + prolog + "throw new Exception('d')%>");
+ }
+
+ private void assertLineNumber(int expectedLineNumber, String expectedText, String script) throws TemplateCompilationException, IOException
+ {
+ try
+ {
+ new GroovyTemplate(script).render();
+ fail();
+ }
+ catch (TemplateRuntimeException t)
+ {
+ assertEquals(expectedText, t.getText());
+ assertEquals(expectedLineNumber, (Object)t.getLineNumber());
+ }
+ }
+
}
15 years, 1 month