Author: bleny Date: 2014-02-03 17:29:58 +0100 (Mon, 03 Feb 2014) New Revision: 2997 Url: http://nuiton.org/projects/topia/repository/revisions/2997 Log: fixes #3022 Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/DefaultTopiaIdFactory.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/LegacyTopiaIdFactory.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java 2014-02-03 14:01:46 UTC (rev 2996) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java 2014-02-03 16:29:58 UTC (rev 2997) @@ -67,4 +67,9 @@ */ String getSeparator(); + /** + * @return true if given argument is a well formatted topiaId + */ + boolean isTopiaId(String str); + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/DefaultTopiaIdFactory.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/DefaultTopiaIdFactory.java 2014-02-03 14:01:46 UTC (rev 2996) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/DefaultTopiaIdFactory.java 2014-02-03 16:29:58 UTC (rev 2997) @@ -24,13 +24,15 @@ * #L% */ -import java.util.UUID; - import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaIdFactory; +import java.util.UUID; + /** * Default implementation of {@link TopiaIdFactory}. Generates a FQN followed by a random UUID. * @@ -39,6 +41,8 @@ */ public class DefaultTopiaIdFactory implements TopiaIdFactory { + private static final Log log = LogFactory.getLog(DefaultTopiaIdFactory.class); + @Override public <E extends TopiaEntity> String newTopiaId(Class<E> entityClass, TopiaEntity topiaEntity) { if (!entityClass.isInterface()) { @@ -70,4 +74,25 @@ return StringUtils.substringAfter(topiaId, getSeparator()); } + @Override + public boolean isTopiaId(String str) { + boolean isTopiaId = false; + if (str != null) { + String[] split = str.split(getSeparator()); + if (split.length == 2) { + String className = split[0]; + try { + Class.forName(className); + isTopiaId = StringUtils.isNoneBlank(split[1]); + } catch (ClassNotFoundException eee) { + // nothing to do, just return false + if (log.isDebugEnabled()) { + log.debug(eee); + } + } + } + } + return isTopiaId; + } + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/LegacyTopiaIdFactory.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/LegacyTopiaIdFactory.java 2014-02-03 14:01:46 UTC (rev 2996) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/LegacyTopiaIdFactory.java 2014-02-03 16:29:58 UTC (rev 2997) @@ -25,6 +25,8 @@ */ import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaIdFactory; import org.nuiton.topia.persistence.TopiaNotFoundException; @@ -38,6 +40,8 @@ */ public class LegacyTopiaIdFactory implements TopiaIdFactory { + private static final Log log = LogFactory.getLog(LegacyTopiaIdFactory.class); + @Override public <E extends TopiaEntity> String newTopiaId(Class<E> entityClass, TopiaEntity topiaEntity) { if (!entityClass.isInterface()) { @@ -61,10 +65,6 @@ @Override public <E extends TopiaEntity> Class<E> getClassName(String topiaId) { String className = StringUtils.substringBefore(topiaId, getSeparator()); -// int i = topiaId.indexOf('#'); -// if (i > 0) { -// className = topiaId.substring(0, i); -// } try { Class result = Class.forName(className); return result; @@ -83,4 +83,25 @@ public String getRandomPart(String topiaId) { return StringUtils.substringBefore(topiaId, getSeparator()); } + + @Override + public boolean isTopiaId(String str) { + boolean isTopiaId = false; + if (str != null) { + String[] split = str.split(getSeparator()); + if (split.length == 2) { + String className = split[0]; + try { + Class.forName(className); + isTopiaId = StringUtils.isNoneBlank(split[1]); + } catch (ClassNotFoundException eee) { + // nothing to do, just return false + if (log.isDebugEnabled()) { + log.debug(eee); + } + } + } + } + return isTopiaId; + } }