From f9ffe3bb743b633b93237c01feb41628932d165b Mon Sep 17 00:00:00 2001 From: Aron Roberts Date: Wed, 24 Jun 2009 16:30:28 +0000 Subject: [PATCH] NOJIRA Returns a current ID - appending the initial value of the next component in the ID - when supplied with a partial ID. --- .../services/id/IDPattern.java | 38 ++++++++---- .../services/id/IDPatternTest.java | 62 ++++++++++--------- 2 files changed, 60 insertions(+), 40 deletions(-) diff --git a/sandbox/aron/id/src/main/java/org/collectionspace/services/id/IDPattern.java b/sandbox/aron/id/src/main/java/org/collectionspace/services/id/IDPattern.java index f927a0034..3df25ca94 100644 --- a/sandbox/aron/id/src/main/java/org/collectionspace/services/id/IDPattern.java +++ b/sandbox/aron/id/src/main/java/org/collectionspace/services/id/IDPattern.java @@ -63,6 +63,12 @@ public class IDPattern { // Returns the current value of this ID, given a // supplied ID that partly matches the pattern. // + // This will result in an ID that matches + // the supplied ID, with an optional next ID component + // that reflects the initial ID of that component. + // (E.g. "2009.5." becomes "2009.5.1", if the next + // ID component is an incrementing numeric IDPart.) + // // @TODO: Throws IllegalArgumentException public synchronized String getCurrentID(String value) { @@ -119,9 +125,8 @@ public class IDPattern { } // Temporary for debugging - return regex.toString(); + // return regex.toString(); -/* // Otherwise, if the supplied ID partly matches the pattern, // split the ID into its components and store those values in // each of the pattern's IDParts. @@ -131,21 +136,30 @@ public class IDPattern { currentPart.setCurrentID(matcher.group(i)); } - // Obtain the initial value of the next IDPart. - int nextPartNum = matchedParts - 1; - this.parts.get(nextPartNum).getInitialID(); + // Obtain the initial value of the next IDPart, + // and set the current value of that part to its initial value. + // + // If the supplied ID fully matches the pattern, there will + // be no 'next' IDPart, and an Exception will be thrown. + int nextPartNum = matchedParts; + try { + String initial = this.parts.get(nextPartNum).getInitialID(); + this.parts.get(nextPartNum).setCurrentID(initial); + matchedParts++; + } catch (ArrayIndexOutOfBoundsException e ) { + // Do nothing here; we simply won't increment + // the number of matched parts for the loop below. + } - // Then call the getCurrentID() method on each of the - // supplied IDParts, as well as on the additional - // IDPart whose current value was just obtained. + // Call the getCurrentID() method on each of the + // supplied IDParts, as well as on the added IDPart + // whose current value was just obtained, if any. StringBuffer sb = new StringBuffer(); - IDPart part = null; - for (int i = 1; i <= matchedParts - 1; i++) { - sb.append(part.getCurrentID()); + for (int i = 1; i <= matchedParts; i++) { + sb.append(this.parts.get(i - 1).getCurrentID()); } return sb.toString(); -*/ } diff --git a/sandbox/aron/id/src/test/java/org/collectionspace/services/id/IDPatternTest.java b/sandbox/aron/id/src/test/java/org/collectionspace/services/id/IDPatternTest.java index 3ed1a7fe5..bb89f25e0 100644 --- a/sandbox/aron/id/src/test/java/org/collectionspace/services/id/IDPatternTest.java +++ b/sandbox/aron/id/src/test/java/org/collectionspace/services/id/IDPatternTest.java @@ -63,46 +63,40 @@ public class IDPatternTest extends TestCase { pattern = new IDPattern(); pattern.add(new StringIDPart("E")); pattern.add(new NumericIDPart("1")); - assertEquals("(E)", pattern.getCurrentID("E")); - - // assertEquals("E1", pattern.getCurrentID("E")); - // assertEquals("E2.", pattern.getNextID()); + assertEquals("E1", pattern.getCurrentID("E")); + assertEquals("E2", pattern.getNextID()); pattern = new IDPattern(); pattern.add(new YearIDPart()); pattern.add(new StringIDPart(".")); - assertEquals("(\\d{4})", pattern.getCurrentID("2009")); - - // assertEquals("2009.", pattern.getCurrentID("2009")); - // assertEquals("2009.", pattern.getNextID()); - // assertEquals("2010.", pattern.getCurrentID("2010")); - // assertEquals("2010.", pattern.getNextID()); + assertEquals("2009.", pattern.getCurrentID("2009")); + assertEquals("2009.", pattern.getNextID()); + assertEquals("2010.", pattern.getCurrentID("2010")); + assertEquals("2010.", pattern.getNextID()); pattern = new IDPattern(); pattern.add(new YearIDPart()); pattern.add(new StringIDPart(".")); pattern.add(new NumericIDPart("1")); - assertEquals("(\\d{4})(\\.)", pattern.getCurrentID("2009.")); - - // assertEquals("2009.1", pattern.getCurrentID("2009.")); - // assertEquals("2009.2", pattern.getNextID()); + assertEquals("2009.1", pattern.getCurrentID("2009.")); + assertEquals("2009.2", pattern.getNextID()); pattern = new IDPattern(); pattern.add(new YearIDPart()); pattern.add(new StringIDPart(".")); pattern.add(new NumericIDPart("55")); - assertEquals("(\\d{4})(\\.)", pattern.getCurrentID("2010.")); - - // assertEquals("2010.55", pattern.getCurrentID("2010.")); - // assertEquals("2010.56", pattern.getNextID()); + assertEquals("2010.55", pattern.getCurrentID("2010.")); + assertEquals("2010.56", pattern.getNextID()); pattern = new IDPattern(); pattern.add(new YearIDPart("2009")); pattern.add(new StringIDPart(".")); - assertEquals("(\\d{4})(\\.)", pattern.getCurrentID("2009.")); - - // assertEquals("2009.1", pattern.getCurrentID("2009.")); - // assertEquals("2009.2", pattern.getNextID()); + pattern.add(new NumericIDPart()); + assertEquals("2009.1", pattern.getCurrentID("2009.")); + assertEquals("2009.2", pattern.getNextID()); + // Test a repeat of the last two operations. + assertEquals("2009.1", pattern.getCurrentID("2009.")); + assertEquals("2009.2", pattern.getNextID()); pattern = new IDPattern(); pattern.add(new YearIDPart("2009")); @@ -110,17 +104,29 @@ public class IDPatternTest extends TestCase { pattern.add(new NumericIDPart("1")); pattern.add(new StringIDPart("-")); pattern.add(new AlphabeticIDPart("a")); - assertEquals("(\\d{4})(\\.)(\\d{1,6})(-)", pattern.getCurrentID("2009.1-")); - - // assertEquals("2009.1-a", pattern.getNextID("2009.1-")); - // assertEquals("2009.1-b", pattern.getNextID(); - // assertEquals("2009.3-a", pattern.getNextID("2009.3-")); + assertEquals("2009.1-a", pattern.getCurrentID("2009.1-")); + assertEquals("2009.1-b", pattern.getNextID()); + assertEquals("2009.3-a", pattern.getCurrentID("2009.3-")); } public void testCurrentIDWithFullSuppliedID() { - // @TODO TBA + pattern = new IDPattern(); + pattern.add(new YearIDPart("2009")); + pattern.add(new StringIDPart(".")); + pattern.add(new NumericIDPart("55")); + assertEquals("2009.55", pattern.getCurrentID("2009.55")); + assertEquals("2009.56", pattern.getNextID()); + + pattern = new IDPattern(); + pattern.add(new YearIDPart("2009")); + pattern.add(new StringIDPart(".")); + pattern.add(new NumericIDPart("1")); + pattern.add(new StringIDPart("-")); + pattern.add(new AlphabeticIDPart("a")); + assertEquals("2009.1-a", pattern.getCurrentID("2009.1-a")); + assertEquals("2009.1-b", pattern.getNextID()); } -- 2.47.3