131 lines
3.2 KiB
Java
131 lines
3.2 KiB
Java
|
|
package PSEditor;
|
||
|
|
|
||
|
|
import java.text.ParseException;
|
||
|
|
import java.util.StringTokenizer;
|
||
|
|
|
||
|
|
import javax.swing.text.DefaultFormatter;
|
||
|
|
|
||
|
|
class IPAddressFormatter extends DefaultFormatter {
|
||
|
|
public String valueToString(Object value) throws ParseException {
|
||
|
|
if (!(value instanceof byte[]))
|
||
|
|
throw new ParseException("Not a byte[]", 0);
|
||
|
|
byte[] a = (byte[]) value;
|
||
|
|
if (a.length != 4)
|
||
|
|
throw new ParseException("Length != 4", 0);
|
||
|
|
StringBuilder builder = new StringBuilder();
|
||
|
|
for (int i = 0; i < 4; i++) {
|
||
|
|
int b = a[i];
|
||
|
|
if (b < 0)
|
||
|
|
b += 256;
|
||
|
|
builder.append(String.valueOf(b));
|
||
|
|
if (i < 3)
|
||
|
|
builder.append('.');
|
||
|
|
}
|
||
|
|
return builder.toString();
|
||
|
|
}
|
||
|
|
|
||
|
|
public Object stringToValue(String text) throws ParseException {
|
||
|
|
StringTokenizer tokenizer = new StringTokenizer(text, ".");
|
||
|
|
byte[] a = new byte[4];
|
||
|
|
for (int i = 0; i < 4; i++) {
|
||
|
|
int b = 0;
|
||
|
|
if (!tokenizer.hasMoreTokens())
|
||
|
|
throw new ParseException("Too few bytes", 0);
|
||
|
|
try {
|
||
|
|
b = Integer.parseInt(tokenizer.nextToken());
|
||
|
|
} catch (NumberFormatException e) {
|
||
|
|
throw new ParseException("Not an integer", 0);
|
||
|
|
}
|
||
|
|
if (b < 0 || b >= 256)
|
||
|
|
throw new ParseException("Byte out of range", 0);
|
||
|
|
a[i] = (byte) b;
|
||
|
|
}
|
||
|
|
if (tokenizer.hasMoreTokens())
|
||
|
|
throw new ParseException("Too many bytes", 0);
|
||
|
|
return a;
|
||
|
|
}
|
||
|
|
|
||
|
|
static public boolean isValidIP(String value)
|
||
|
|
{
|
||
|
|
//Validate the IP address input
|
||
|
|
StringTokenizer tokenizer = new StringTokenizer(value, ".");
|
||
|
|
byte[] a = new byte[4];
|
||
|
|
boolean ok = true;
|
||
|
|
for (int i = 0; i < 4; i++) {
|
||
|
|
int b = 0;
|
||
|
|
if (!tokenizer.hasMoreTokens()){
|
||
|
|
//"Too few bytes"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
b = Integer.parseInt(tokenizer.nextToken());
|
||
|
|
} catch (NumberFormatException nfe) {
|
||
|
|
//"Not an integer"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (b < 0 || b >= 256){
|
||
|
|
//"Byte out of range"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
a[i] = (byte) b;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (tokenizer.hasMoreTokens()){
|
||
|
|
//"Too many bytes"
|
||
|
|
ok = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
return ok;
|
||
|
|
}
|
||
|
|
|
||
|
|
static public Object toBytesValue(String value)
|
||
|
|
{
|
||
|
|
//Validate the IP address input
|
||
|
|
StringTokenizer tokenizer = new StringTokenizer(value, ".");
|
||
|
|
byte[] a = new byte[4];
|
||
|
|
boolean ok = true;
|
||
|
|
for (int i = 0; i < 4; i++) {
|
||
|
|
int b = 0;
|
||
|
|
if (!tokenizer.hasMoreTokens()){
|
||
|
|
//"Too few bytes"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
String sv = tokenizer.nextToken();
|
||
|
|
// b = Integer.parseInt(tokenizer.nextToken());
|
||
|
|
b = Integer.parseInt(sv);
|
||
|
|
System.out.println("tokenzier " + i + " is " + sv + ", while the byte is: " + b);
|
||
|
|
} catch (NumberFormatException nfe) {
|
||
|
|
//"Not an integer"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (b < 0 || b >= 256){
|
||
|
|
//"Byte out of range"
|
||
|
|
ok = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
a[i] = (byte) b;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (tokenizer.hasMoreTokens()){
|
||
|
|
//"Too many bytes"
|
||
|
|
ok = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!ok)
|
||
|
|
return new byte[0];
|
||
|
|
else
|
||
|
|
return a;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|