Fixed AdempiereIdGenerator doesn't always generate valid uuid which should only include ascii alphabet, digit and the '_' character.
This commit is contained in:
parent
dcdd67d07c
commit
5bdee92457
|
@ -14,6 +14,9 @@
|
||||||
|
|
||||||
package org.adempiere.webui;
|
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.Component;
|
||||||
import org.zkoss.zk.ui.Desktop;
|
import org.zkoss.zk.ui.Desktop;
|
||||||
import org.zkoss.zk.ui.Page;
|
import org.zkoss.zk.ui.Page;
|
||||||
|
@ -21,24 +24,45 @@ import org.zkoss.zk.ui.sys.IdGenerator;
|
||||||
|
|
||||||
public class AdempiereIdGenerator implements 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
|
@Override
|
||||||
public String nextComponentUuid(Desktop desktop, Component comp) {
|
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)
|
if (prefix == null || prefix.length() == 0)
|
||||||
prefix = "zk_comp_";
|
prefix = DEFAULT_ZK_COMP_PREFIX;
|
||||||
int i = Integer.parseInt(desktop.getAttribute("Id_Num").toString());
|
else {
|
||||||
i++;// Start from 1
|
Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]");
|
||||||
desktop.setAttribute("Id_Num", String.valueOf(i));
|
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;
|
return prefix + i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String nextDesktopId(Desktop desktop) {
|
public String nextDesktopId(Desktop desktop) {
|
||||||
if (desktop.getAttribute("Id_Num") == null) {
|
if (desktop.getAttribute(DESKTOP_ID_ATTRIBUTE) == null) {
|
||||||
String number = "0";
|
String number = "0";
|
||||||
desktop.setAttribute("Id_Num", number);
|
desktop.setAttribute(DESKTOP_ID_ATTRIBUTE, number);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue