gatein SVN: r2447 - portal/branches/EPP_5_0_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/page.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 07:33:36 -0400 (Thu, 01 Apr 2010)
New Revision: 2447
Modified:
portal/branches/EPP_5_0_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java
Log:
JBEPP-225: Error on deleting last tab in some scenario
Modified: portal/branches/EPP_5_0_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java
===================================================================
--- portal/branches/EPP_5_0_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java 2010-04-01 11:13:03 UTC (rev 2446)
+++ portal/branches/EPP_5_0_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageActionListener.java 2010-04-01 11:33:36 UTC (rev 2447)
@@ -63,8 +63,7 @@
//This code snippet is to make sure that Javascript/Skin is fully loaded at the first request
UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
PortalRequestContext pcontext = Util.getPortalRequestContext();
- pcontext.addUIComponentToUpdateByAjax(uiWorkingWS);
-
+
PageNavigation currentNav = showedUIPortal.getSelectedNavigation();
String currentUri = showedUIPortal.getSelectedNode().getUri();
if(currentUri.startsWith("/"))
14 years, 9 months
gatein SVN: r2446 - portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component.
by do-not-reply@jboss.org
Author: ndkhoiits
Date: 2010-04-01 07:13:03 -0400 (Thu, 01 Apr 2010)
New Revision: 2446
Modified:
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIAccountEditInputSet.java
Log:
GTNPORTAL-930 reset USER_PROFILE attribute in CacheUserProfileFilter if info's user is changed
Modified: portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIAccountEditInputSet.java
===================================================================
--- portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIAccountEditInputSet.java 2010-04-01 10:40:38 UTC (rev 2445)
+++ portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIAccountEditInputSet.java 2010-04-01 11:13:03 UTC (rev 2446)
@@ -23,6 +23,8 @@
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.services.organization.Query;
import org.exoplatform.services.organization.User;
+import org.exoplatform.services.security.ConversationState;
+import org.exoplatform.web.CacheUserProfileFilter;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.commons.serialization.api.annotations.Serialized;
@@ -158,6 +160,12 @@
}
service.getUserHandler().saveUser(user, true);
enableChangePassword(false);
+
+ ConversationState state = ConversationState.getCurrent();
+ if (username.equals(((User)state.getAttribute(CacheUserProfileFilter.USER_PROFILE)).getUserName()))
+ {
+ state.setAttribute(CacheUserProfileFilter.USER_PROFILE, user);
+ }
return true;
}
14 years, 9 months
gatein SVN: r2445 - portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form.
by do-not-reply@jboss.org
Author: ndkhoiits
Date: 2010-04-01 06:40:38 -0400 (Thu, 01 Apr 2010)
New Revision: 2445
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/UIFormMultiValueInputSet.java
Log:
GTNPORTAL-756 This patch don't relate to this issue but it'll improve in the future
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/UIFormMultiValueInputSet.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/UIFormMultiValueInputSet.java 2010-04-01 10:19:30 UTC (rev 2444)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/UIFormMultiValueInputSet.java 2010-04-01 10:40:38 UTC (rev 2445)
@@ -53,7 +53,7 @@
/**
* The type of items in the selector
*/
- private Class<? extends UIFormInput> clazz_;
+ private Class<? extends UIFormInputBase> clazz_;
private Constructor constructor_ = null;
@@ -83,7 +83,7 @@
return List.class;
}
- public void setType(Class<? extends UIFormInput> clazz)
+ public void setType(Class<? extends UIFormInputBase> clazz)
{
this.clazz_ = clazz;
Constructor[] constructors = clazz_.getConstructors();
@@ -91,7 +91,7 @@
constructor_ = constructors[0];
}
- public Class<? extends UIFormInput> getUIFormInputBase()
+ public Class<? extends UIFormInputBase> getUIFormInputBase()
{
return clazz_;
}
@@ -199,6 +199,8 @@
public UIFormInputBase createUIFormInput(int idx) throws Exception
{
+
+ if(constructor_ == null) return null;
Class[] classes = constructor_.getParameterTypes();
Object[] params = new Object[classes.length];
for (int i = 0; i < classes.length; i++)
14 years, 9 months
gatein SVN: r2444 - in portal/branches/EPP_5_0_Branch: component/application-registry/src/main/java/org/exoplatform/application/registry/impl and 2 other directories.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 06:19:30 -0400 (Thu, 01 Apr 2010)
New Revision: 2444
Modified:
portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/ApplicationRegistryService.java
portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/impl/ApplicationRegistryServiceImpl.java
portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/Util.java
portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java
Log:
JBEPP-231: Remote portlets are not available to be added to a category
Modified: portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/ApplicationRegistryService.java
===================================================================
--- portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/ApplicationRegistryService.java 2010-04-01 10:13:32 UTC (rev 2443)
+++ portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/ApplicationRegistryService.java 2010-04-01 10:19:30 UTC (rev 2444)
@@ -1,16 +1,16 @@
/**
* 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
@@ -25,13 +25,10 @@
import java.util.Comparator;
import java.util.List;
-/**
- * Created y the eXo platform team
- * User: Tuan Nguyen
- * Date: 20 april 2007
- */
+/** Created y the eXo platform team User: Tuan Nguyen Date: 20 april 2007 */
public interface ApplicationRegistryService
{
+ String REMOTE_DISPLAY_NAME_SUFFIX = " (remote)";
public List<ApplicationCategory> getApplicationCategories(String accessUser, ApplicationType<?>... appTypes) throws Exception;
@@ -51,7 +48,7 @@
public List<Application> getApplications(ApplicationCategory category, ApplicationType<?>... appTypes) throws Exception;
public List<Application> getApplications(ApplicationCategory category, Comparator<Application> sortComparator,
- ApplicationType<?>... appTypes) throws Exception;
+ ApplicationType<?>... appTypes) throws Exception;
public List<Application> getAllApplications() throws Exception;
@@ -68,5 +65,6 @@
public void importAllPortlets() throws Exception;
//TODO: dang.tung
+
public void importExoGadgets() throws Exception;
}
\ No newline at end of file
Modified: portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/impl/ApplicationRegistryServiceImpl.java
===================================================================
--- portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/impl/ApplicationRegistryServiceImpl.java 2010-04-01 10:13:32 UTC (rev 2443)
+++ portal/branches/EPP_5_0_Branch/component/application-registry/src/main/java/org/exoplatform/application/registry/impl/ApplicationRegistryServiceImpl.java 2010-04-01 10:19:30 UTC (rev 2444)
@@ -84,7 +84,6 @@
/** . */
final POMSessionManager mopManager;
- private static final String REMOTE_DISPLAY_NAME_SUFFIX = " (remote)";
/** Should match WSRPPortletInfo.PRODUCER_NAME_META_INFO_KEY */
private static final String PRODUCER_NAME_META_INFO_KEY = "producer-name";
Modified: portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/Util.java
===================================================================
--- portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/Util.java 2010-04-01 10:13:32 UTC (rev 2443)
+++ portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/Util.java 2010-04-01 10:19:30 UTC (rev 2444)
@@ -1,16 +1,16 @@
/**
* 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
@@ -26,16 +26,11 @@
import java.util.Comparator;
-/**
- * Created by The eXo Platform SAS
- * Author : Pham Thanh Tung
- * thanhtungty(a)gmail.com
- * Sep 11, 2008
- */
+/** Created by The eXo Platform SAS Author : Pham Thanh Tung thanhtungty(a)gmail.com Sep 11, 2008 */
public class Util
{
- static final public String getLocalizedStringValue(LocalizedString localizedString, String defaultValue)
+ static public String getLocalizedStringValue(LocalizedString localizedString, String defaultValue)
{
if (localizedString == null || localizedString.getDefaultString() == null)
{
Modified: portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java
===================================================================
--- portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java 2010-04-01 10:13:32 UTC (rev 2443)
+++ portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIAddApplicationForm.java 2010-04-01 10:19:30 UTC (rev 2444)
@@ -25,21 +25,21 @@
import org.exoplatform.application.registry.ApplicationCategory;
import org.exoplatform.application.registry.ApplicationRegistryService;
import org.exoplatform.applicationregistry.webui.Util;
+import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.commons.utils.SerializablePageList;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.portal.config.model.ApplicationType;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
-import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
+import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
-import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormInputInfo;
import org.exoplatform.webui.form.UIFormInputSet;
@@ -84,9 +84,10 @@
public UIAddApplicationForm() throws Exception
{
addUIFormInput(new UIFormStringInput(FIELD_NAME, null, null).addValidator(StringLengthValidator.class, 3, 30));
- List<SelectItemOption<String>> types = new ArrayList<SelectItemOption<String>>(2);
+ List<SelectItemOption<String>> types = new ArrayList<SelectItemOption<String>>(3);
types.add(new SelectItemOption<String>(ApplicationType.PORTLET.getName()));
types.add(new SelectItemOption<String>(ApplicationType.GADGET.getName()));
+ types.add(new SelectItemOption<String>(ApplicationType.WSRP_PORTLET.getName()));
UIFormSelectBox uiSelectBox = new UIFormSelectBox(FIELD_TYPE, null, types);
uiSelectBox.setOnChange("ChangeType");
addUIFormInput(uiSelectBox);
@@ -200,10 +201,12 @@
// app.setApplicationGroup(info.getApplicationName());
ApplicationType appType;
String contentId;
+ String displayName = Util.getLocalizedStringValue(displayNameLS, portletName);
if (remote)
{
appType = ApplicationType.WSRP_PORTLET;
contentId = portlet.getContext().getId();
+ displayName += ApplicationRegistryService.REMOTE_DISPLAY_NAME_SUFFIX; // add remote to display name to make it more obvious that the portlet is remote
}
else
{
@@ -211,7 +214,7 @@
contentId = info.getApplicationName() + "/" + info.getName();
}
app.setType(appType);
- app.setDisplayName(Util.getLocalizedStringValue(displayNameLS, portletName));
+ app.setDisplayName(displayName);
app.setDescription(Util.getLocalizedStringValue(descriptionLS, portletName));
app.setAccessPermissions(new ArrayList<String>());
app.setContentId(contentId);
14 years, 9 months
gatein SVN: r2443 - in portal/branches/EPP_5_0_Branch/component/portal/src: test/java/org/exoplatform/portal/config and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 06:13:32 -0400 (Thu, 01 Apr 2010)
New Revision: 2443
Modified:
portal/branches/EPP_5_0_Branch/component/portal/src/main/java/org/exoplatform/portal/pom/data/Mapper.java
portal/branches/EPP_5_0_Branch/component/portal/src/test/java/org/exoplatform/portal/config/TestDataStorage.java
Log:
JBEPP-241: Window decorations not properly set
Modified: portal/branches/EPP_5_0_Branch/component/portal/src/main/java/org/exoplatform/portal/pom/data/Mapper.java
===================================================================
--- portal/branches/EPP_5_0_Branch/component/portal/src/main/java/org/exoplatform/portal/pom/data/Mapper.java 2010-04-01 10:10:52 UTC (rev 2442)
+++ portal/branches/EPP_5_0_Branch/component/portal/src/main/java/org/exoplatform/portal/pom/data/Mapper.java 2010-04-01 10:13:32 UTC (rev 2443)
@@ -79,6 +79,7 @@
/** . */
private static final Set<String> windowPropertiesBlackList =
Tools.set(
+ MappedAttributes.THEME.getName(),
MappedAttributes.TYPE.getName(),
MappedAttributes.ICON.getName(),
MappedAttributes.WIDTH.getName(),
Modified: portal/branches/EPP_5_0_Branch/component/portal/src/test/java/org/exoplatform/portal/config/TestDataStorage.java
===================================================================
--- portal/branches/EPP_5_0_Branch/component/portal/src/test/java/org/exoplatform/portal/config/TestDataStorage.java 2010-04-01 10:10:52 UTC (rev 2442)
+++ portal/branches/EPP_5_0_Branch/component/portal/src/test/java/org/exoplatform/portal/config/TestDataStorage.java 2010-04-01 10:13:32 UTC (rev 2443)
@@ -227,6 +227,27 @@
assertEquals(0, page2.getChildren().size());
assertEquals(true, page2.isShowMaxWindow());
}
+
+ public void testChangingPortletThemeInPage() throws Exception {
+ Page page;
+ Application<?> app;
+
+ page = storage_.getPage("portal::classic::homepage");
+ app = (Application<?>)page.getChildren().get(0);
+ assertEquals(1, page.getChildren().size());
+ app.setTheme("Theme1");
+ storage_.save(page);
+
+ page = storage_.getPage("portal::classic::homepage");
+ app = (Application<?>)page.getChildren().get(0);
+ assertEquals("Theme1", app.getTheme());
+ app.setTheme("Theme2");
+ storage_.save(page);
+
+ page = storage_.getPage("portal::classic::homepage");
+ app = (Application<?>)page.getChildren().get(0);
+ assertEquals("Theme2", app.getTheme());
+ }
public void testPageRemove() throws Exception
{
14 years, 9 months
gatein SVN: r2442 - portal/branches/EPP_5_0_Branch/examples/skins/simpleskin/src/main/webapp/skin/webPortlet/webui/component/UIBannerPortlet.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 06:10:52 -0400 (Thu, 01 Apr 2010)
New Revision: 2442
Modified:
portal/branches/EPP_5_0_Branch/examples/skins/simpleskin/src/main/webapp/skin/webPortlet/webui/component/UIBannerPortlet/Stylesheet.css
Log:
JBEPP-242: the simple theme of banner portlet is broken in unauthenticated mode
Modified: portal/branches/EPP_5_0_Branch/examples/skins/simpleskin/src/main/webapp/skin/webPortlet/webui/component/UIBannerPortlet/Stylesheet.css
===================================================================
--- portal/branches/EPP_5_0_Branch/examples/skins/simpleskin/src/main/webapp/skin/webPortlet/webui/component/UIBannerPortlet/Stylesheet.css 2010-04-01 09:50:21 UTC (rev 2441)
+++ portal/branches/EPP_5_0_Branch/examples/skins/simpleskin/src/main/webapp/skin/webPortlet/webui/component/UIBannerPortlet/Stylesheet.css 2010-04-01 10:10:52 UTC (rev 2442)
@@ -39,3 +39,21 @@
.UIBannerPortlet .MiddleBanner {
height: 50px;
}
+
+.UIBannerPortlet .MiddleBanner .Signin {
+ text-align: right;
+ padding: 25px 20px 0px 0px;
+}
+
+.UIBannerPortlet .MiddleBanner .Signin a {
+ background: none;
+ margin-left: 8px;
+ color: #5a5a5a;
+}
+
+.UIBannerPortlet .MiddleBanner .Signin a:hover {
+ color: #000;
+}
+
+
+
14 years, 9 months
gatein SVN: r2441 - portal/branches/EPP_5_0_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 05:50:21 -0400 (Thu, 01 Apr 2010)
New Revision: 2441
Modified:
portal/branches/EPP_5_0_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css
Log:
JBEPP-220: Navigation menus and WSRP admin tabs don't interact properly
Modified: portal/branches/EPP_5_0_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css
===================================================================
--- portal/branches/EPP_5_0_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css 2010-04-01 09:30:08 UTC (rev 2440)
+++ portal/branches/EPP_5_0_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css 2010-04-01 09:50:21 UTC (rev 2441)
@@ -116,6 +116,7 @@
position: absolute;
border: 1px solid #9e9fa3;
display: none;
+ z-index: 1;
}
.UIToolbarContainer .TitleBar {
@@ -272,4 +273,4 @@
.UIToolbarContainer .UIAdminToolbarPortlet .UIHorizontalTabs .UITab {
float: none; /* orientation=rt */
-}
\ No newline at end of file
+}
14 years, 9 months
gatein SVN: r2440 - in portal/trunk: webui/core/src/main/java/org/exoplatform/webui/form/validator and 1 other directory.
by do-not-reply@jboss.org
Author: ndkhoiits
Date: 2010-04-01 05:30:08 -0400 (Thu, 01 Apr 2010)
New Revision: 2440
Modified:
portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupMessages.gtmpl
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/DateTimeValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/EmailAddressValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ExpressionValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/IdentifierValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/MandatoryValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NameValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NullFieldValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NumberFormatValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PasswordStringLengthValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PositiveNumberFormatValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ResourceValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/SpecialCharacterValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/StringLengthValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/URLValidator.java
Log:
GTNPORTAL-173 Change to get resource bundle in template file instead of hardcoding in java code
Modified: portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupMessages.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupMessages.gtmpl 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupMessages.gtmpl 2010-04-01 09:30:08 UTC (rev 2440)
@@ -60,7 +60,7 @@
Object[] msgArguments = mess.getMessageAruments();
if(msgArguments != null && msgArguments.length > 0) {
for(i in 0..msgArguments.length-1){
- msgValue = msgValue.replaceAll("\\{" + i + "\\}", msgArguments [i]);
+ msgValue = msgValue.replaceAll("\\{" + i + "\\}", _ctx.appRes(msgArguments [i]));
}
}
println msgValue;
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/DateTimeValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/DateTimeValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/DateTimeValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -61,7 +61,7 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/EmailAddressValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/EmailAddressValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/EmailAddressValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -48,15 +48,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
if (uiInput.getValue() == null || ((String)uiInput.getValue()).trim().length() == 0)
return;
String s = (String)uiInput.getValue();
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ExpressionValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ExpressionValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ExpressionValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -79,17 +79,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- {
- label = label.substring(0, label.length() - 1);
- }
Object[] args = {label,};
throw new MessageException(new ApplicationMessage(key_, args, ApplicationMessage.WARNING));
}
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/IdentifierValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/IdentifierValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/IdentifierValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -48,15 +48,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
if (Character.isDigit(s.charAt(0)) || s.charAt(0) == '-')
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/MandatoryValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/MandatoryValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/MandatoryValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -54,15 +54,13 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
Object[] args = {label, uiInput.getBindingField()};
throw new MessageException(new ApplicationMessage("EmptyFieldValidator.msg.empty-input", args,
ApplicationMessage.WARNING));
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NameValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NameValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NameValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -48,15 +48,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
for (int i = 0; i < s.length(); i++)
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NullFieldValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NullFieldValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NullFieldValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -46,15 +46,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
Object[] args = {label, uiInput.getBindingField()};
throw new MessageException(new ApplicationMessage("EmptyFieldValidator.msg.empty-input", args));
}
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NumberFormatValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NumberFormatValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/NumberFormatValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -46,15 +46,13 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
for (int i = 0; i < s.length(); i++)
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PasswordStringLengthValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PasswordStringLengthValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PasswordStringLengthValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -80,15 +80,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label;
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
Object[] args = {label, min_.toString(), max_.toString()};
throw new MessageException(new ApplicationMessage("StringLengthValidator.msg.length-invalid", args,
ApplicationMessage.WARNING));
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PositiveNumberFormatValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PositiveNumberFormatValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/PositiveNumberFormatValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -47,15 +47,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
boolean error = false;
for (int i = 0; i < s.length(); i++)
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ResourceValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ResourceValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/ResourceValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -48,15 +48,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
if (Character.isDigit(s.charAt(0)) || s.charAt(0) == '-' || s.charAt(0) == '.' || s.charAt(0) == '_')
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/SpecialCharacterValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/SpecialCharacterValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/SpecialCharacterValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -46,15 +46,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
String s = (String)uiInput.getValue();
for (int i = 0; i < s.length(); i++)
{
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/StringLengthValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/StringLengthValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/StringLengthValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -75,15 +75,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- label = label.trim();
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
Object[] args = {label, min_.toString(), max_.toString()};
throw new MessageException(new ApplicationMessage("StringLengthValidator.msg.length-invalid", args,
ApplicationMessage.WARNING));
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/URLValidator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/URLValidator.java 2010-04-01 09:16:42 UTC (rev 2439)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validator/URLValidator.java 2010-04-01 09:30:08 UTC (rev 2440)
@@ -75,14 +75,12 @@
String label;
try
{
- label = uiForm.getLabel(uiInput.getName());
+ label = uiForm.getId() + ".label." + uiInput.getName();
}
catch (Exception e)
{
label = uiInput.getName();
}
- if (label.charAt(label.length() - 1) == ':')
- label = label.substring(0, label.length() - 1);
Object[] args = {label};
throw new MessageException(new ApplicationMessage(key_, args, ApplicationMessage.WARNING));
}
14 years, 9 months
gatein SVN: r2439 - in portal/branches/EPP_5_0_Branch: webui/eXo/src/main/java/org/exoplatform/webui/organization and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 05:16:42 -0400 (Thu, 01 Apr 2010)
New Revision: 2439
Added:
portal/branches/EPP_5_0_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIGroup.java
Modified:
portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java
Log:
JBEPP-281: XSS in group settings
Modified: portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java
===================================================================
--- portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java 2010-04-01 09:15:16 UTC (rev 2438)
+++ portal/branches/EPP_5_0_Branch/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIGroupExplorer.java 2010-04-01 09:16:42 UTC (rev 2439)
@@ -31,6 +31,7 @@
import org.exoplatform.webui.core.UIBreadcumbs.LocalPath;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import org.exoplatform.webui.organization.UIGroup;
import java.util.ArrayList;
import java.util.Collection;
@@ -67,12 +68,12 @@
if (!GroupManagement.isAdministrator(null))
sibblingsGroup_ = GroupManagement.getRelatedGroups(null, sibblingsGroup_);
- tree.setSibbling((List)sibblingsGroup_);
+ tree.setSibbling((List)convertGroups(sibblingsGroup_));
tree.setIcon("GroupAdminIcon");
tree.setSelectedIcon("PortalIcon");
tree.setBeanIdField("id");
//tree.setBeanLabelField("groupName");
- tree.setBeanLabelField("label");
+ tree.setBeanLabelField("encodedLabel");
tree.setMaxTitleCharacter(25);
}
@@ -95,7 +96,7 @@
// if not administrator
if (!GroupManagement.isAdministrator(null))
sibblingsGroup_ = GroupManagement.getRelatedGroups(null, sibblingsGroup_);
- uiTree.setSibbling((List)sibblingsGroup_);
+ uiTree.setSibbling((List)convertGroups(sibblingsGroup_));
uiTree.setSelected(null);
uiTree.setChildren(null);
uiTree.setParentSelected(null);
@@ -139,9 +140,9 @@
}
uiGroupInfo.setGroup(selectedGroup_);
- uiTree.setSibbling((List)sibblingsGroup_);
- uiTree.setChildren((List)childrenGroup_);
- uiTree.setSelected(selectedGroup_);
+ uiTree.setSibbling((List)convertGroups(sibblingsGroup_));
+ uiTree.setChildren((List)convertGroups(childrenGroup_));
+ uiTree.setSelected(new UIGroup(selectedGroup_));
uiTree.setParentSelected(parentGroup);
}
@@ -208,5 +209,15 @@
uiGroupDetail.setRenderedChild(UIGroupInfo.class);
}
}
+
+ private Collection<UIGroup> convertGroups(Collection<Group> groups)
+ {
+ Collection<UIGroup> result = new ArrayList();
+ for (Group group: groups)
+ {
+ result.add(new UIGroup(group));
+ }
+ return result;
+ }
}
Added: portal/branches/EPP_5_0_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIGroup.java
===================================================================
--- portal/branches/EPP_5_0_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIGroup.java (rev 0)
+++ portal/branches/EPP_5_0_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/UIGroup.java 2010-04-01 09:16:42 UTC (rev 2439)
@@ -0,0 +1,30 @@
+package org.exoplatform.webui.organization;
+
+import org.exoplatform.services.organization.Group;
+import org.gatein.common.text.EntityEncoder;
+
+public class UIGroup {
+
+ private Group group;
+
+ public UIGroup(Group group)
+ {
+ this.group = group;
+ }
+
+ public String getEncodedLabel()
+ {
+ EntityEncoder encoder = EntityEncoder.FULL;
+ return encoder.encode(getLabel());
+ }
+
+ public String getLabel()
+ {
+ return group.getLabel();
+ }
+
+ public String getId()
+ {
+ return group.getId();
+ }
+}
14 years, 9 months
gatein SVN: r2438 - portal/branches/EPP_5_0_Branch/web/portal/src/main/webapp/groovy/portal/webui/container.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-04-01 05:15:16 -0400 (Thu, 01 Apr 2010)
New Revision: 2438
Added:
portal/branches/EPP_5_0_Branch/web/portal/src/main/webapp/groovy/portal/webui/container/UITableAutofitColumnContainer.gtmpl
Log:
JBEPP-203: Blank zone when user put permission on Container in a page / Content should be filled up automatically
Added: portal/branches/EPP_5_0_Branch/web/portal/src/main/webapp/groovy/portal/webui/container/UITableAutofitColumnContainer.gtmpl
===================================================================
--- portal/branches/EPP_5_0_Branch/web/portal/src/main/webapp/groovy/portal/webui/container/UITableAutofitColumnContainer.gtmpl (rev 0)
+++ portal/branches/EPP_5_0_Branch/web/portal/src/main/webapp/groovy/portal/webui/container/UITableAutofitColumnContainer.gtmpl 2010-04-01 09:15:16 UTC (rev 2438)
@@ -0,0 +1,98 @@
+<%
+ import org.exoplatform.commons.utils.ExpressionUtil;
+ import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+
+ def rcontext = _ctx.getRequestContext();
+ ResourceBundle res = rcontext.getApplicationResourceBundle();
+
+ UIPortalApplication uiPortalApp = rcontext.getUIApplication();
+ boolean hasPermission = uicomponent.hasPermission();
+ if(!uiPortalApp.isEditing() && !hasPermission) return;
+
+ /** Trim the prefix UIContainer- if any, this hardcoded part is needed to update nested container via Ajax */
+ String componentId = uicomponent.getId();
+ if(componentId.startsWith("UIContainer-")){
+ uicomponent.setId(componentId.substring("UIContainer-".length()));
+ }
+
+%>
+<div class="UIContainer <%=uiPortalApp.isEditing()?"EdittingContainer":""%> <%=hasPermission?"":"ProtectedContainer"%>"
+ id="UIContainer-${uicomponent.id}"
+ onmouseover="eXo.portal.UIPortal.blockOnMouseOver(event, this, true);"
+ onmouseout="eXo.portal.UIPortal.blockOnMouseOver(event, this, false);">
+ <div class="NormalContainerBlock">
+ <div class="LeftContainerBlock">
+ <div class="RightContainerBlock UIComponentBlock">
+
+ <%
+ int portalMode = uiPortalApp.getModeState();
+ String style = "";
+ String width = uicomponent.getWidth();
+ String height = uicomponent.getHeight();
+ if(width != null) style += "width:"+width+";";
+ if(height != null) style += "height:"+height+";";
+ if(portalMode == uiPortalApp.CONTAINER_BLOCK_EDIT_MODE || portalMode == uiPortalApp.APP_BLOCK_EDIT_MODE){
+ %>
+ <div class="LAYOUT-CONTAINER LAYOUT-BLOCK">
+ <%} else {%>
+ <div class="VIEW-CONTAINER VIEW-BLOCK">
+ <%} %>
+ <div id="$uicomponent.id">
+ <%if(hasPermission) {%>
+ <table class="UITableColumnContainer" style="margin: 0px auto; $style">
+ <tr class="TRContainer">
+ <% for(uiChild in uicomponent.getChildren()) {%>
+ <td class="${uiChild.id}TDContainer TDContainer"><% uicomponent.renderUIComponent(uiChild) %></td>
+ <% } %>
+ </tr>
+ </table>
+ <%} else {print "<div class='ProtectedContent'>"+_ctx.appRes("UIPortlet.label.protectedContent")+"</div>";}%>
+ </div>
+ </div>
+ <%/*Debug On IE -----For DND */%>
+
+ <%if(portalMode != UIPortalApplication.NORMAL_MODE){%>
+ <div class="EDITION-BLOCK EDITION-CONTAINER" style="display: none;">
+ <div style="position: relative;">
+ <div style="position: absolute; top: -86px;">
+
+ <div class="NewLayer" style="display: none; visibility: hidden;"><span></span></div>
+ <div class="CONTROL-CONTAINER CONTROL-BLOCK" style="position: absolute; top: -6px;">
+ <%/*Begin InfoBar*/%>
+ <div class="UIInfoBar">
+ <div class="BlueRoundedStyle">
+ <div class="LeftBar">
+ <div class="RightBar">
+ <div class="MiddleBar">
+ <div class="FixHeight">
+ <div class="DragControlArea" title="<%=_ctx.appRes("UIContainer.tooltip.drag")%>" onmousedown="eXo.portal.PortalDragDrop.init.call(this,event);"><span></span></div>
+ <%
+ String strTitle = uicomponent.getTitle() != null ?
+ ExpressionUtil.getExpressionValue(res, uicomponent.getTitle()) :
+ _ctx.appRes("UIContainer.title.Container");
+ %>
+ <div class="ContainerIcon DefaultContainer16x16Icon"><%=hasPermission ? strTitle : _ctx.appRes("UIPortlet.label.protectedContent")%></div>
+ <%if(hasPermission) {%>
+ <a href="<%=uicomponent.event("DeleteComponent","$uicomponent.id")%>" class="DeleteContainerIcon" title="<%=_ctx.appRes("UIContainer.tooltip.closeContainer")%>"><span></span></a>
+ <a href="<%=uicomponent.event("EditContainer","$uicomponent.id")%>;eXo.portal.UIPortal.changeComposerSaveButton()" class="EditContainerIcon" title="<%=_ctx.appRes("UIContainer.tooltip.editContainer")%>"><span></span></a>
+ <%}%>
+ <div class="ClearBoth"><span></span></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <%/*End InfoBar*/ %>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <%} %>
+
+ </div>
+ </div>
+ </div>
+
+</div>
\ No newline at end of file
14 years, 9 months