package org.apache.magma.database.openjpa; import javax.persistence.PrePersist; import org.apache.magma.database.Database; import org.apache.magma.database.LogicallyNamed; public aspect LogicalNameHandling { @PrePersist public void LogicallyNamed.jpaInitializeLogicalName() { if (getLogicalName() != null) return; String tempname = this.computeLogicalName(); tempname = tempname.toLowerCase(); if (tempname == null) { tempname = this.getClass().getName() + System.currentTimeMillis() + System.nanoTime(); } StringBuilder normalized = new StringBuilder(); for (int i = 0; i < tempname.length(); i++) { char acc = tempname.charAt(i); if ((acc >= 'a' && acc <= 'z') || (acc >= '0' && acc <= '9')) { normalized.append(acc); } else if (acc == ' ' || acc == '-') { normalized.append('-'); } else if (acc == '.') { normalized.append('.'); } if (normalized.length() == 30) break; } tempname = normalized.toString(); Database db = new Database(); if (db.count(this.getClass(), "x.logicalName=?1", tempname) > 0) { int prog = 2; while (db.count(this.getClass(), "x.logicalName=?1", tempname + "-" + prog) > 0) prog++; tempname += "-" + prog; } setLogicalName(tempname); } }