r3710 - in trunk/lima-business/src: main/java/org/chorem/lima/business/ejb main/java/org/chorem/lima/business/utils test/java/org/chorem/lima/business
Author: Bavencoff Date: 2013-10-11 15:56:17 +0200 (Fri, 11 Oct 2013) New Revision: 3710 Url: http://chorem.org/projects/lima/repository/revisions/3710 Log: refs #735 : [lettrage]Mauvaise incr?\195?\169mentation des lettres Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java trunk/lima-business/src/main/java/org/chorem/lima/business/utils/LetteringComparator.java trunk/lima-business/src/test/java/org/chorem/lima/business/FinancialTransactionServiceImplTest.java Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java 2013-09-27 14:03:11 UTC (rev 3709) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java 2013-10-11 13:56:17 UTC (rev 3710) @@ -25,6 +25,9 @@ package org.chorem.lima.business.ejb; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.Filter.FilterGenerator; @@ -58,6 +61,7 @@ import javax.ejb.TransactionAttribute; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; @@ -149,49 +153,37 @@ throw new LimaException("Can't get new letters", ex); } - /**Increment letter alphabetically*/ - int indexCharToIncrement = 0; - int lastActualLettersLength = lastActualLetters.length(); - String findLastLetters; - String findFirstLetters =""; - int numberOfA; + nextLetters = lettersAfter(lastActualLetters); - /*Searching which letter is 'Z', and so must be incremented*/ - for (int i = 0; i < lastActualLettersLength; i++) { - if (lastActualLetters.charAt(i) != 'Z') { - indexCharToIncrement = i; - } - } + return nextLetters; + } - /*When no letter, just set 'A'*/ - if (lastActualLettersLength != 0) { - /*Get first letter(s), only if we have more of one letter (One letter = letter to increment)*/ - String firstPartActualLetters = lastActualLetters.substring(0, indexCharToIncrement); - if (firstPartActualLetters.length() > 1) { - findFirstLetters = firstPartActualLetters; - } + public static String lettersAfter(String letters) { - /*Get the letters after the correct letter to increment and - *increment it (Using 'indexCharToIncrement') - * */ - findLastLetters = lastActualLetters.substring(indexCharToIncrement+1, lastActualLettersLength); - if (lastActualLetters.charAt(indexCharToIncrement) != 'Z') { - /*Last letters transform to x 'A' (x = Number of 'Z'), if they are 'Z'*/ - if (findLastLetters.length() > 0) { - if (findLastLetters.charAt(0) == 'Z') { - numberOfA = findLastLetters.length(); - findLastLetters=getCharsA(numberOfA); - } - } - nextLetters = findFirstLetters + String.valueOf( (char) (lastActualLetters.charAt(indexCharToIncrement) + 1)) + findLastLetters; - } + String letterAfter = null; + /* "" -> "A" */ + if (StringUtils.isEmpty(letters)) { + + letterAfter = "A"; + } else { - numberOfA = lastActualLettersLength +1; - nextLetters = getCharsA(numberOfA); + char endChar = letters.charAt(letters.length() - 1); + + if (endChar < 'Z') { + + /* si la lettre n'est pas un 'Z' on ajout a la reste de la chaine le caratère suivant */ + letterAfter = letters.substring(0, letters.length() -1) + ((char) (endChar + 1)); + } else { + /* si non on réitére sur le reste de la chaine en ajoutant "A" a la nouvelle chaine */ + letterAfter = lettersAfter(letters.substring(0, letters.length() -1)) + 'A'; + + } + } - return nextLetters; + return letterAfter; + } @Override @@ -320,26 +312,24 @@ costOrProductEntry.setAccount(costOrProductAccount); } - protected String getCharsA(int numberOfA) { - String charsA=""; - for (int j = 0; j < numberOfA; j++) { - charsA = charsA+"A"; - } - return charsA; - } - public String findLastLetter(List<String> letters) { String result; - Collections.sort(letters, new LetteringComparator()); - Collections.reverse(letters); + /** filtre sur les valeurs potentiellement généré */ + Collection<String> generatedLetters = Collections2.filter(letters, new Predicate<String>() { + @Override + public boolean apply(String input) { + return input != null && + input.matches("[A-Z]+"); + } + }); - if (letters.isEmpty()) { + if (generatedLetters.isEmpty()) { result = ""; } else { - result = letters.get(0); + result = Collections.max(generatedLetters, new LetteringComparator()); } return result; } Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/utils/LetteringComparator.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/utils/LetteringComparator.java 2013-09-27 14:03:11 UTC (rev 3709) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/utils/LetteringComparator.java 2013-10-11 13:56:17 UTC (rev 3710) @@ -35,16 +35,16 @@ int lengthFirstString = firstString.length(); int lengthSecondString = secondString.length(); + int result = 0; + if (lengthFirstString < lengthSecondString) { - return -1; + result = -1; } else if (lengthFirstString > lengthSecondString) { - return 1; + result = 1; } else { - if (firstString.charAt(0) < secondString.charAt(0)) { - return -1; - } else { - return 1; - } + result = firstString.compareTo(secondString); } + + return result; } } Modified: trunk/lima-business/src/test/java/org/chorem/lima/business/FinancialTransactionServiceImplTest.java =================================================================== --- trunk/lima-business/src/test/java/org/chorem/lima/business/FinancialTransactionServiceImplTest.java 2013-09-27 14:03:11 UTC (rev 3709) +++ trunk/lima-business/src/test/java/org/chorem/lima/business/FinancialTransactionServiceImplTest.java 2013-10-11 13:56:17 UTC (rev 3710) @@ -37,6 +37,7 @@ import java.math.BigDecimal; import java.text.ParseException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -146,20 +147,31 @@ } @Test + public void testLettersAfter() { + + Assert.assertEquals("A", FinancialTransactionServiceImpl.lettersAfter(null)); + Assert.assertEquals("A", FinancialTransactionServiceImpl.lettersAfter("")); + Assert.assertEquals("E", FinancialTransactionServiceImpl.lettersAfter("D")); + Assert.assertEquals("AA", FinancialTransactionServiceImpl.lettersAfter("Z")); + Assert.assertEquals("ASDGUAAAA", FinancialTransactionServiceImpl.lettersAfter("ASDGTZZZZ")); + + } + + @Test public void testFindLastLetter() { - List<String> letters = Arrays.asList("A", "BZ", "ZZZ", "C", "Z", "E"); - FinancialTransactionServiceImpl instance = new FinancialTransactionServiceImpl(); - String nextLetter = instance.findLastLetter(letters); + String nextLetter = instance.findLastLetter(Arrays.asList("A", "BZ", "ZZZ", "C", "Z", "E")); Assert.assertEquals("ZZZ", nextLetter); - Assert.assertEquals("A", letters.get(5)); - Assert.assertEquals("C", letters.get(4)); - Assert.assertEquals("E", letters.get(3)); - Assert.assertEquals("Z", letters.get(2)); - Assert.assertEquals("BZ", letters.get(1)); - Assert.assertEquals("ZZZ", letters.get(0)); + nextLetter = instance.findLastLetter(Arrays.asList("sfvq", "sfvr")); + Assert.assertEquals("", nextLetter); + + nextLetter = instance.findLastLetter(Arrays.asList("zzz", "ABC", "DEF")); + Assert.assertEquals("DEF", nextLetter); + + nextLetter = instance.findLastLetter(new ArrayList<String>()); + Assert.assertEquals("", nextLetter); } }
participants (1)
-
Bavencoff@users.chorem.org