From 5bdee924575dea267d47892adf1bdf965346e868 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 15 Dec 2010 16:21:25 +0800 Subject: [PATCH] Fixed AdempiereIdGenerator doesn't always generate valid uuid which should only include ascii alphabet, digit and the '_' character. --- .../adempiere/webui/AdempiereIdGenerator.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java index 158c39f057..91b0926777 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java @@ -14,6 +14,9 @@ package org.adempiere.webui; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Page; @@ -21,24 +24,45 @@ import org.zkoss.zk.ui.sys.IdGenerator; public class AdempiereIdGenerator implements IdGenerator { - public static final String ZK_COMPONENT_PREFIX = "zk_component_prefix"; + private static final String DEFAULT_ZK_COMP_PREFIX = "zk_comp_"; + private static final String DESKTOP_ID_ATTRIBUTE = "org.adempiere.comp.id"; + public static final String ZK_COMPONENT_PREFIX_ATTRIBUTE = "zk_component_prefix"; @Override public String nextComponentUuid(Desktop desktop, Component comp) { - String prefix = (String) comp.getAttribute(ZK_COMPONENT_PREFIX); + String prefix = (String) comp.getAttribute(ZK_COMPONENT_PREFIX_ATTRIBUTE); if (prefix == null || prefix.length() == 0) - prefix = "zk_comp_"; - int i = Integer.parseInt(desktop.getAttribute("Id_Num").toString()); - i++;// Start from 1 - desktop.setAttribute("Id_Num", String.valueOf(i)); + prefix = DEFAULT_ZK_COMP_PREFIX; + else { + Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]"); + Matcher matcher = pattern.matcher(prefix); + StringBuffer sb = new StringBuffer(); + while(matcher.find()) { + matcher.appendReplacement(sb, "_"); + } + matcher.appendTail(sb); + prefix = sb.toString(); + } + int i = 0; + try { + String number = null; + if (desktop.getAttribute(DESKTOP_ID_ATTRIBUTE) != null) { + number = desktop.getAttribute(DESKTOP_ID_ATTRIBUTE).toString(); + i = Integer.parseInt(number); + i++;// Start from 1 + } + } catch (Throwable t) { + i = 1; + } + desktop.setAttribute(DESKTOP_ID_ATTRIBUTE, String.valueOf(i)); return prefix + i; } @Override public String nextDesktopId(Desktop desktop) { - if (desktop.getAttribute("Id_Num") == null) { + if (desktop.getAttribute(DESKTOP_ID_ATTRIBUTE) == null) { String number = "0"; - desktop.setAttribute("Id_Num", number); + desktop.setAttribute(DESKTOP_ID_ATTRIBUTE, number); } return null; }