NumericListValue now displays short ranges of 2 with comma, only starting from 3 range is displayed with dash

git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@172 375186e5-ef17-0410-b0b6-91563547dcda
This commit is contained in:
angryziber 2007-07-18 20:56:38 +00:00
parent d9d944f7a1
commit 789bed2faa
2 changed files with 24 additions and 16 deletions

View File

@ -14,7 +14,7 @@ import java.util.Collection;
*
* TODO: add parsing functionality here.
*
* @author Anton Keks Keks
* @author Anton Keks
*/
public class NumericListValue {
@ -29,7 +29,7 @@ public class NumericListValue {
* @param displayAsRanges whether toString() outputs all number or their ranges
*/
public NumericListValue(Collection<Integer> numbers, boolean displayAsRanges) {
// copy numbers to an array (unfortunately toArray() cannot be used because int[] is not IS-A Object[])
// copy numbers to an array (unfortunately toArray() cannot be used because int[] is not an Object[])
this.numbers = new int[numbers.size()];
int c = 0;
for (Number n : numbers) {
@ -45,33 +45,38 @@ public class NumericListValue {
public String toString() {
StringBuffer sb = new StringBuffer();
int prevPort = Integer.MAX_VALUE;
int prevNumber = Integer.MAX_VALUE;
int rangeStartNumber = 0;
boolean isRange = false;
int i = 0;
if (numbers.length > 0) {
prevPort = numbers[0];
sb.append(prevPort);
prevNumber = numbers[0];
sb.append(prevNumber);
}
while (++i < numbers.length) {
int port = numbers[i];
int curNumber = numbers[i];
if (displayAsRanges && prevPort + 1 == port) {
isRange = true;
if (displayAsRanges && prevNumber + 1 == curNumber) {
if (!isRange) {
isRange = true;
rangeStartNumber = prevNumber;
}
}
else {
if (isRange) {
sb.append('-').append(prevPort);
// display short ranges with comma, long ranges with dash
sb.append(rangeStartNumber+1 == prevNumber ? ',' : '-').append(prevNumber);
isRange = false;
}
sb.append(',').append(port);
sb.append(',').append(curNumber);
}
prevPort = port;
prevNumber = curNumber;
}
if (isRange) {
sb.append('-').append(prevPort);
sb.append(rangeStartNumber+1 == prevNumber ? ',' : '-').append(prevNumber);
}
return sb.toString();

View File

@ -1,5 +1,7 @@
/**
*
* This file is a part of Angry IP Scanner source code,
* see http://www.azib.net/ for more information.
* Licensed under GPLv2.
*/
package net.azib.ipscan.core.values;
@ -11,9 +13,8 @@ import java.util.TreeSet;
import org.junit.Test;
/**
* @author Anton Keks Keks
* @author Anton Keks
*/
public class NumericListValueTest {
@ -21,10 +22,12 @@ public class NumericListValueTest {
public void testToString() {
assertEquals("", new NumericListValue(Collections.<Integer>emptyList(), true).toString());
assertEquals("1", new NumericListValue(Arrays.asList(1), true).toString());
assertEquals("1,2", new NumericListValue(Arrays.asList(1, 2), true).toString());
assertEquals("1-3", new NumericListValue(Arrays.asList(1, 2, 3), true).toString());
assertEquals("1-3", new NumericListValue(new TreeSet<Integer>(Arrays.asList(2, 3, 1)), true).toString());
assertEquals("1,2,3", new NumericListValue(Arrays.asList(1, 2, 3), false).toString());
assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString());
assertEquals("1,5,6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString());
assertEquals("1,5-8,15", new NumericListValue(Arrays.asList(1, 5, 6, 7, 8, 15), true).toString());
assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(103, 85, 89, 1), true).toString());
}
}