Author: julien(a)jboss.com
Date: 2007-02-13 10:08:45 -0500 (Tue, 13 Feb 2007)
New Revision: 6250
Modified:
trunk/common/src/main/org/jboss/portal/common/text/FastURLEncoder.java
trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObjectId.java
trunk/core/src/main/org/jboss/portal/core/portlet/management/LazyPortalObjectTreeNode.java
trunk/core/src/main/org/jboss/portal/core/portlet/management/PortalObjectManagerBean.java
Log:
JBPORTAL-1188 : In the management portlet, can't configure a page that has a name
containing accents or other special characters
Modified: trunk/common/src/main/org/jboss/portal/common/text/FastURLEncoder.java
===================================================================
--- trunk/common/src/main/org/jboss/portal/common/text/FastURLEncoder.java 2007-02-13
14:13:18 UTC (rev 6249)
+++ trunk/common/src/main/org/jboss/portal/common/text/FastURLEncoder.java 2007-02-13
15:08:45 UTC (rev 6250)
@@ -37,6 +37,9 @@
{
/** . */
+ public static final FastURLEncoder DEFAULT_ENCODER = create("UTF-8", 0,
1024);
+
+ /** . */
protected final String encoding;
/** . */
Modified: trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObjectId.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObjectId.java 2007-02-13
14:13:18 UTC (rev 6249)
+++ trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObjectId.java 2007-02-13
15:08:45 UTC (rev 6250)
@@ -25,9 +25,11 @@
import org.jboss.portal.common.NotYetImplemented;
import org.jboss.portal.common.util.ParameterValidation;
import org.jboss.portal.common.util.Tools;
+import org.jboss.portal.common.util.Base64;
import java.util.Iterator;
import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
/**
* A composite id for a portal object.
@@ -334,9 +336,12 @@
};
/** The internal format when it is persisted, smth like a.b.c */
- public static final Format LEGACY_FORMAT = new Format()
+ public static final Format LEGACY_FORMAT = new LegacyFormat();
+
+ public static class LegacyFormat extends Format
{
+ /** . */
private final String[] EMPTY_STRING_ARRAY = new String[0];
public String[] parse(String value)
@@ -360,9 +365,13 @@
int previous = 0;
for (int next = value.indexOf('.'); next != -1; previous = next + 1,
next = value.indexOf('.', next + 1))
{
- names[length++] = value.substring(previous, next);
+ String name = value.substring(previous, next);
+ name = decodeName(name);
+ names[length++] = name;
}
- names[length] = value.substring(previous);
+ String name = value.substring(previous);
+ name = decodeName(name);
+ names[length] = name;
//
return names;
@@ -387,9 +396,51 @@
{
throw new IllegalArgumentException("No null name expected in the name
string array");
}
+ name = encodeName(name);
buffer.append(name);
}
return buffer.toString();
}
+
+ protected String decodeName(String name)
+ {
+ return name;
+ }
+
+ protected String encodeName(String name)
+ {
+ return name;
+ }
+ }
+
+ public static final Format LEGACY_BASE64_FORMAT = new LegacyFormat()
+ {
+
+ protected String decodeName(String name)
+ {
+ try
+ {
+ byte[] bytes = Base64.decode(name);
+ return new String(bytes, "UTF-8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new Error(e);
+ }
+ }
+
+ protected String encodeName(String name)
+ {
+ try
+ {
+ byte[] bytes = name.getBytes("UTF-8");
+ name = Base64.encodeBytes(bytes);
+ return name;
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new Error(e);
+ }
+ }
};
}
Modified:
trunk/core/src/main/org/jboss/portal/core/portlet/management/LazyPortalObjectTreeNode.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/portlet/management/LazyPortalObjectTreeNode.java 2007-02-13
14:13:18 UTC (rev 6249)
+++
trunk/core/src/main/org/jboss/portal/core/portlet/management/LazyPortalObjectTreeNode.java 2007-02-13
15:08:45 UTC (rev 6250)
@@ -140,7 +140,7 @@
public String getIdentifier()
{
- return object.getId().toString(PortalObjectId.CANONICAL_FORMAT);
+ return object.getId().toString(PortalObjectId.LEGACY_BASE64_FORMAT);
}
public void setIdentifier(String name)
Modified:
trunk/core/src/main/org/jboss/portal/core/portlet/management/PortalObjectManagerBean.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/portlet/management/PortalObjectManagerBean.java 2007-02-13
14:13:18 UTC (rev 6249)
+++
trunk/core/src/main/org/jboss/portal/core/portlet/management/PortalObjectManagerBean.java 2007-02-13
15:08:45 UTC (rev 6250)
@@ -88,8 +88,18 @@
public class PortalObjectManagerBean implements Serializable
{
- private Logger log = Logger.getLogger(getClass());
+ /** . */
+ private static final int MOVE_UP = 0;
+ /** . */
+ private static final int MOVE_DOWN = 1;
+
+ /** . */
+ private static final int MOVE_LEFT = 2;
+
+ /** . */
+ private static final int MOVE_RIGHT = 3;
+
/** The serialVersionUID */
private static final long serialVersionUID = -8923517554726982622L;
@@ -123,8 +133,7 @@
LocalizedString displayName =
portlet.getInfo().getMeta().getMetaValue(MetaInfo.DISPLAY_NAME);
FacesContext ctx = FacesContext.getCurrentInstance();
Locale locale = ctx.getExternalContext().getRequestLocale();
- String name = displayName.getString(locale, true);
- return name;
+ return displayName.getString(locale, true);
}
});
portletDef.addAccessor("description", new PropertyDef(String.class)
@@ -149,19 +158,18 @@
{
Portlet portlet = (Portlet)base;
PortletInfo info = portlet.getInfo();
- Boolean remotable = info.isRemotable();
- return remotable;
+ return info.isRemotable();
}
});
DelegatingPropertyResolver.registerTypeDef(portletDef);
}
+ /** . */
+ private Logger log = Logger.getLogger(getClass());
+
/** The selected id. */
private String selectedId;
- /** The selected node properties. */
- private List selectedProperties;
-
/** The current tab name. */
private String selectedPlugin;
@@ -192,6 +200,9 @@
/** . */
private ThemeBean themes = new ThemeBean();
+ /** . */
+ private HtmlTree _tree;
+
/** Compares two windows according to their order. */
private static final Comparator comparator = new Comparator()
{
@@ -248,19 +259,11 @@
this.layoutService = layoutService;
}
-
public ThemeService getThemeService()
{
return themeService;
}
-
- /**
- * bind the theme service. (defined in the faces-config.xml; injected in
WebAppEnhancer, based on jboss-portlet.xml
- * service entry)
- *
- * @param themeService
- */
public void setThemeService(ThemeService themeService)
{
this.themeService = themeService;
@@ -300,7 +303,7 @@
{
try
{
- PortalObjectId id = PortalObjectId.parse(selectedId,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId id = PortalObjectId.parse(selectedId,
PortalObjectId.LEGACY_BASE64_FORMAT);
result = portalObjectContainer.getObject(id);
}
catch (Exception e)
@@ -341,12 +344,8 @@
{
try
{
- // Select the empty plugin
- // selectedPlugin = null;
-
// Clear state
selectedId = null;
- selectedProperties = null;
selectedPlugin = null;
// Get id
@@ -356,23 +355,14 @@
// Set the state from the id
if (id != null)
{
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
PortalObject object = portalObjectContainer.getObject(poid);
- //
+ // Update state if possible
if (object != null)
{
- List properties = new ArrayList();
- for (Iterator i = object.getDeclaredProperties().entrySet().iterator();
i.hasNext();)
- {
- Map.Entry entry = (Map.Entry)i.next();
- properties.add(new String[]{(String)entry.getKey(),
(String)entry.getValue()});
- }
-
- // Update state
selectedId = id;
selectedPlugin = "manager";
- selectedProperties = properties;
}
}
}
@@ -389,7 +379,6 @@
{
// Clear state
selectedId = null;
- selectedProperties = null;
selectedPlugin = null;
// Get id
@@ -399,7 +388,7 @@
// Destroy the object
if (id != null)
{
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
PortalObject object = portalObjectContainer.getObject(poid);
//
@@ -412,8 +401,6 @@
}
}
- private HtmlTree _tree;
-
public TreeNode getTreeData()
{
PortalObject root = portalObjectContainer.getRootObject();
@@ -516,7 +503,7 @@
{
Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String id = (String)pmap.get("id");
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
Window target = (Window)portalObjectContainer.getObject(poid);
move(target, MOVE_UP);
}
@@ -532,7 +519,7 @@
{
Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String id = (String)pmap.get("id");
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
Window target = (Window)portalObjectContainer.getObject(poid);
move(target, MOVE_DOWN);
}
@@ -548,7 +535,7 @@
{
Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String id = (String)pmap.get("id");
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
Window target = (Window)portalObjectContainer.getObject(poid);
move(target, MOVE_RIGHT);
}
@@ -564,7 +551,7 @@
{
Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String id = (String)pmap.get("id");
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.CANONICAL_FORMAT);
+ PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectId.LEGACY_BASE64_FORMAT);
Window target = (Window)portalObjectContainer.getObject(poid);
move(target, MOVE_LEFT);
}
@@ -763,14 +750,6 @@
return (Map[])maps.toArray(new Map[maps.size()]);
}
-
- private static final int MOVE_UP = 0;
- private static final int MOVE_DOWN = 1;
- private static final int MOVE_LEFT = 2;
- private static final int MOVE_RIGHT = 3;
-
- // ***
-
/**
* NOTE: This is just to show an alternative way of supplying tree data. You can
supply either a TreeModel or
* TreeNode.