in vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageId.java [67:137]
public PackageId(String path) {
fromPath = true;
path = path.trim();
int idx = path.lastIndexOf('.');
if (idx > 0) {
String ext = path.substring(idx);
if (".zip".equalsIgnoreCase(ext) || ".jar".equalsIgnoreCase(ext)) {
path = path.substring(0, idx);
}
}
idx = path.lastIndexOf('/');
String name;
if (idx < 0) {
name = path;
this.group = "";
} else {
name = path.substring(idx + 1);
String grp = path.substring(0, idx);
if (grp.equals(ETC_PACKAGES)) {
grp = "";
} else if (grp.startsWith(ETC_PACKAGES_PREFIX)) {
grp = grp.substring(ETC_PACKAGES_PREFIX.length());
} else if (grp.startsWith("/")) {
grp = grp.substring(1);
}
this.group = grp;
}
// check if name contains a version
String[] segs = Text.explode(name, '-');
int i=segs.length-1;
while (i>0) {
try {
// accept numbers < 1000 (hotfix case)
if (Integer.parseInt(segs[i]) >= 1000) {
break;
}
} catch (NumberFormatException e) {
// ignore
}
// check if starts with a letter'
if (Character.isJavaIdentifierStart(segs[i].charAt(0))) {
// then need a digit
if (segs[i].length() == 1 || !Character.isDigit(segs[i].charAt(1)) && !"SNAPSHOT".equals(segs[i])) {
break;
}
}
i--;
}
if (i == segs.length-1) {
this.name = name;
version = Version.EMPTY;
} else {
StringBuilder str = new StringBuilder();
for (int j = 0; j<= i; j++) {
if (j > 0) {
str.append('-');
}
str.append(segs[j]);
}
this.name = str.toString();
str.setLength(0);
for (int j = i+1; j<segs.length; j++) {
if (j > i+1) {
str.append('-');
}
str.append(segs[j]);
}
this.version = Version.create(str.toString());
}
this.str = getString(group, this.name, version);
}