Changed folder structure of test classes and renamed some packages

This commit is contained in:
Ziver Koc 2016-03-04 17:48:59 +01:00
parent ccd50ec104
commit 884c5d64c3
76 changed files with 5305 additions and 5375 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
Zutil.jar
/build/ /build/

2
src/zutil/Hasher.java Normal file → Executable file
View file

@ -24,7 +24,7 @@
package zutil; package zutil;
import zutil.converters.Converter; import zutil.converter.Converter;
import javax.crypto.Mac; import javax.crypto.Mac;
import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKeyFactory;

View file

@ -24,7 +24,7 @@
package zutil; package zutil;
import zutil.converters.Converter; import zutil.converter.Converter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;

View file

@ -1,460 +1,460 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.converters; package zutil.converter;
import zutil.io.DynamicByteArrayStream; import zutil.io.DynamicByteArrayStream;
import zutil.parser.Base64Decoder; import zutil.parser.Base64Decoder;
import java.io.*; import java.io.*;
import java.util.BitSet; import java.util.BitSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
public class Converter { public class Converter {
private Converter(){} private Converter(){}
/** /**
* Converts an object to an array of bytes. * Converts an object to an array of bytes.
* *
* @param object the object to convert. * @param object the object to convert.
* @return the associated byte array. * @return the associated byte array.
*/ */
public static byte[] toBytes(Object object) throws IOException{ public static byte[] toBytes(Object object) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos); ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object); oos.writeObject(object);
oos.flush(); oos.flush();
oos.close(); oos.close();
return baos.toByteArray(); return baos.toByteArray();
} }
/** /**
* Converts a Integer to an byte array * Converts a Integer to an byte array
* *
* @param num is the number to convert * @param num is the number to convert
* @return a byte array of four bytes * @return a byte array of four bytes
*/ */
public static byte[] toBytes(int num){ public static byte[] toBytes(int num){
return new byte[]{ return new byte[]{
(byte)(num & 0xff), (byte)(num & 0xff),
(byte)((num >> 8)& 0xff), (byte)((num >> 8)& 0xff),
(byte)((num >> 16)& 0xff), (byte)((num >> 16)& 0xff),
(byte)((num >> 24)& 0xff)}; (byte)((num >> 24)& 0xff)};
} }
/** /**
* Converts a Integer to a byte * Converts a Integer to a byte
* *
* @param num is the number to convert * @param num is the number to convert
* @return a byte value of the integer * @return a byte value of the integer
*/ */
public static byte toByte(int num){ public static byte toByte(int num){
return (byte)(num & 0xff); return (byte)(num & 0xff);
} }
/** /**
* Converts hex string to a byte array * Converts hex string to a byte array
* *
* @param hex a String containing data coded in hex * @param hex a String containing data coded in hex
* @return a byte array * @return a byte array
*/ */
public static byte[] hexToByte(String hex){ public static byte[] hexToByte(String hex){
if(hex == null) if(hex == null)
return null; return null;
if(hex.startsWith("0x")) if(hex.startsWith("0x"))
hex = hex.substring(2); hex = hex.substring(2);
byte[] b = new byte[(int)Math.ceil(hex.length()/2.0)]; byte[] b = new byte[(int)Math.ceil(hex.length()/2.0)];
for(int i=hex.length()-1; i>=0; i-=2){ for(int i=hex.length()-1; i>=0; i-=2){
if(i-1 < 0) if(i-1 < 0)
b[(hex.length()-i-1)/2] = hexToByte(hex.charAt(i)); b[(hex.length()-i-1)/2] = hexToByte(hex.charAt(i));
else else
b[(hex.length()-i-1)/2] = hexToByte(hex.charAt(i-1), hex.charAt(i)); b[(hex.length()-i-1)/2] = hexToByte(hex.charAt(i-1), hex.charAt(i));
} }
return b; return b;
} }
/** /**
* Converts hex chars to a byte * Converts hex chars to a byte
* *
* @param quad1 is the first hex value * @param quad1 is the first hex value
* @param quad2 is the second hex value * @param quad2 is the second hex value
* @return a byte that corresponds to the hex * @return a byte that corresponds to the hex
*/ */
public static byte hexToByte( char quad1, char quad2){ public static byte hexToByte( char quad1, char quad2){
byte b = hexToByte( quad2 ); byte b = hexToByte( quad2 );
b |= hexToByte( quad1 ) << 4; b |= hexToByte( quad1 ) << 4;
return b; return b;
} }
/** /**
* Converts a hex chars to a byte * Converts a hex chars to a byte
* *
* @param hex is the hex value * @param hex is the hex value
* @return a byte that corresponds to the hex * @return a byte that corresponds to the hex
*/ */
public static byte hexToByte( char hex ){ public static byte hexToByte( char hex ){
switch( Character.toLowerCase(hex) ){ switch( Character.toLowerCase(hex) ){
case '0': return 0x00; case '0': return 0x00;
case '1': return 0x01; case '1': return 0x01;
case '2': return 0x02; case '2': return 0x02;
case '3': return 0x03; case '3': return 0x03;
case '4': return 0x04; case '4': return 0x04;
case '5': return 0x05; case '5': return 0x05;
case '6': return 0x06; case '6': return 0x06;
case '7': return 0x07; case '7': return 0x07;
case '8': return 0x08; case '8': return 0x08;
case '9': return 0x09; case '9': return 0x09;
case 'a': return 0x0a; case 'a': return 0x0a;
case 'b': return 0x0b; case 'b': return 0x0b;
case 'c': return 0x0c; case 'c': return 0x0c;
case 'd': return 0x0d; case 'd': return 0x0d;
case 'e': return 0x0e; case 'e': return 0x0e;
case 'f': return 0x0f; case 'f': return 0x0f;
} }
return (byte)0; return (byte)0;
} }
/** /**
* Converts an array of bytes back to its constituent object. The * Converts an array of bytes back to its constituent object. The
* input array is assumed to have been created from the original object. * input array is assumed to have been created from the original object.
* *
* @param bytes the byte array to convert. * @param bytes the byte array to convert.
* @return the associated object. * @return the associated object.
*/ */
public static Object toObject(byte[] bytes) throws Exception{ public static Object toObject(byte[] bytes) throws Exception{
Object object = null; Object object = null;
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
object = ois.readObject(); object = ois.readObject();
ois.close(); ois.close();
return object; return object;
} }
/** /**
* Converts an array of bytes back to its constituent object. The * Converts an array of bytes back to its constituent object. The
* input array is assumed to have been created from the original object. * input array is assumed to have been created from the original object.
* *
* @param bytes the byte array to convert. * @param bytes the byte array to convert.
* @return the associated object. * @return the associated object.
*/ */
public static Object toObject(DynamicByteArrayStream bytes) throws Exception{ public static Object toObject(DynamicByteArrayStream bytes) throws Exception{
Object object = null; Object object = null;
ObjectInputStream ois = new ObjectInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bytes);
object = ois.readObject(); object = ois.readObject();
ois.close(); ois.close();
return object; return object;
} }
/** array needed for byteToHex */ /** array needed for byteToHex */
private static char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; private static char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
/** /**
* Converts a byte Array to a Hex String * Converts a byte Array to a Hex String
* *
* @param raw the byte array to convert * @param raw the byte array to convert
* @return a hex String * @return a hex String
*/ */
public static String toHexString(byte[][] raw){ public static String toHexString(byte[][] raw){
StringBuffer ret = new StringBuffer(); StringBuffer ret = new StringBuffer();
for(byte[] a : raw){ for(byte[] a : raw){
for(byte b : a){ for(byte b : a){
ret.append(HEX_CHARS[(int) (b >>> 0x04)& 0x0F ]); ret.append(HEX_CHARS[(int) (b >>> 0x04)& 0x0F ]);
ret.append(HEX_CHARS[(int) b & 0x0F ]); ret.append(HEX_CHARS[(int) b & 0x0F ]);
} }
} }
return ret.toString(); return ret.toString();
} }
public static String toHexStringByColumn(byte[][] raw){ public static String toHexStringByColumn(byte[][] raw){
StringBuffer ret = new StringBuffer(); StringBuffer ret = new StringBuffer();
for(int col=0; col<raw[0].length ;col++){ for(int col=0; col<raw[0].length ;col++){
for(int row=0; row<raw.length ;row++){ for(int row=0; row<raw.length ;row++){
ret.append(HEX_CHARS[(int) (raw[row][col] >>> 0x04)& 0x0F ]); ret.append(HEX_CHARS[(int) (raw[row][col] >>> 0x04)& 0x0F ]);
ret.append(HEX_CHARS[(int) raw[row][col] & 0x0F ]); ret.append(HEX_CHARS[(int) raw[row][col] & 0x0F ]);
} }
} }
return ret.toString(); return ret.toString();
} }
/** /**
* Converts a byte Array to a Hex String * Converts a byte Array to a Hex String
* *
* @param raw the byte array to convert * @param raw the byte array to convert
* @return a hex String * @return a hex String
*/ */
public static String toHexString(byte[] raw){ public static String toHexString(byte[] raw){
StringBuffer ret = new StringBuffer(); StringBuffer ret = new StringBuffer();
for(byte b : raw){ for(byte b : raw){
ret.append(HEX_CHARS[(int) (b >>> 0x04)& 0x0F ]); ret.append(HEX_CHARS[(int) (b >>> 0x04)& 0x0F ]);
ret.append(HEX_CHARS[(int) b & 0x0F ]); ret.append(HEX_CHARS[(int) b & 0x0F ]);
} }
return ret.toString(); return ret.toString();
} }
/** /**
* Converts a byte to a Hex String * Converts a byte to a Hex String
* *
* @param raw the byte to convert * @param raw the byte to convert
* @return a hex String * @return a hex String
*/ */
public static String toHexString(byte raw){ public static String toHexString(byte raw){
String ret = ""+HEX_CHARS[(int) (raw >>> 0x04)& 0x0F ]; String ret = ""+HEX_CHARS[(int) (raw >>> 0x04)& 0x0F ];
ret += ""+HEX_CHARS[(int) raw & 0x0F ]; ret += ""+HEX_CHARS[(int) raw & 0x0F ];
return ret; return ret;
} }
/** /**
* Converts the given byte to a String with 1's and 0's * Converts the given byte to a String with 1's and 0's
* *
* @param raw the byte to convert * @param raw the byte to convert
* @return a String with 1's and 0's * @return a String with 1's and 0's
*/ */
public static String toString(byte raw){ public static String toString(byte raw){
StringBuffer ret = new StringBuffer(); StringBuffer ret = new StringBuffer();
for(int i=128; i>0 ;i=( i<1 ? i=0 : i/2 ) ){ for(int i=128; i>0 ;i=( i<1 ? i=0 : i/2 ) ){
ret.append(( (raw & i) == 0 ? '0' : '1')); ret.append(( (raw & i) == 0 ? '0' : '1'));
} }
return ret.toString(); return ret.toString();
} }
/** /**
* Converts the given byte array to a String with 1's and 0's * Converts the given byte array to a String with 1's and 0's
* *
* @param raw the byte array to convert * @param raw the byte array to convert
* @return a String with 1's and 0's * @return a String with 1's and 0's
*/ */
public static String toString(byte[] raw){ public static String toString(byte[] raw){
StringBuffer ret = new StringBuffer(); StringBuffer ret = new StringBuffer();
for(byte b : raw){ for(byte b : raw){
for(int i=128; i>0 ;i=( i<1 ? i=0 : i/2 ) ){ for(int i=128; i>0 ;i=( i<1 ? i=0 : i/2 ) ){
ret.append(( (b & i) == 0 ? '0' : '1')); ret.append(( (b & i) == 0 ? '0' : '1'));
} }
} }
return ret.toString(); return ret.toString();
} }
/** /**
* Generates a comma separated string with key and value pairs * Generates a comma separated string with key and value pairs
* *
* @return a comma separated String * @return a comma separated String
*/ */
public static String toString(Map map){ public static String toString(Map map){
StringBuilder tmp = new StringBuilder(); StringBuilder tmp = new StringBuilder();
tmp.append("{"); tmp.append("{");
Iterator<Object> it = map.keySet().iterator(); Iterator<Object> it = map.keySet().iterator();
while(it.hasNext()){ while(it.hasNext()){
Object key = it.next(); Object key = it.next();
Object value = map.get(key); Object value = map.get(key);
tmp.append(key); tmp.append(key);
if (value != null) { if (value != null) {
if (value instanceof String) if (value instanceof String)
tmp.append(": \"").append(value).append("\""); tmp.append(": \"").append(value).append("\"");
else else
tmp.append(value); tmp.append(value);
} }
else else
tmp.append("null"); tmp.append("null");
if(it.hasNext()) if(it.hasNext())
tmp.append(", "); tmp.append(", ");
} }
tmp.append('}'); tmp.append('}');
return tmp.toString(); return tmp.toString();
} }
/** /**
* Converts a BitSet to a Integer * Converts a BitSet to a Integer
* *
* @param bits the BitSet to convert * @param bits the BitSet to convert
* @return a Integer * @return a Integer
*/ */
public static int toInt(BitSet bits){ public static int toInt(BitSet bits){
int ret = 0; int ret = 0;
for (int i = bits.nextSetBit(0); i >= 0; i = bits.nextSetBit(i+1)) { for (int i = bits.nextSetBit(0); i >= 0; i = bits.nextSetBit(i+1)) {
ret += Math.pow(2, i); ret += Math.pow(2, i);
} }
return ret; return ret;
} }
/** /**
* Converts a boolean array(bit sequence whit most significant bit at index 0) to a Integer * Converts a boolean array(bit sequence whit most significant bit at index 0) to a Integer
* *
* @param bits the boolean array to convert * @param bits the boolean array to convert
* @return a Integer * @return a Integer
*/ */
public static int toInt(boolean[] bits){ public static int toInt(boolean[] bits){
int ret = 0; int ret = 0;
for (int i = bits.length-1; i >= 0; i--) { for (int i = bits.length-1; i >= 0; i--) {
if(bits[i])ret += Math.pow(2, bits.length-i-1); if(bits[i])ret += Math.pow(2, bits.length-i-1);
} }
return ret; return ret;
} }
/** /**
* Converts a byte to a integer * Converts a byte to a integer
* *
* @param b is the byte to convert * @param b is the byte to convert
* @return the integer value of the byte * @return the integer value of the byte
*/ */
public static int toInt(byte b){ public static int toInt(byte b){
return (int)(b & 0xff); return (int)(b & 0xff);
} }
/** /**
* Converts a dynamic sized byte array to a integer * Converts a dynamic sized byte array to a integer
* *
* @param b is the byte array of size 1-4 * @param b is the byte array of size 1-4
* @return the int value of the byte array * @return the int value of the byte array
*/ */
public static int toInt(byte[] b){ public static int toInt(byte[] b){
int i = 0; int i = 0;
switch (b.length){ switch (b.length){
default: default:
case 4: case 4:
i |= 0xFF000000 & (b[0] << 24); i |= 0xFF000000 & (b[0] << 24);
i |= 0x00FF0000 & (b[1] << 16); i |= 0x00FF0000 & (b[1] << 16);
i |= 0x0000FF00 & (b[2] << 8); i |= 0x0000FF00 & (b[2] << 8);
i |= 0x000000FF & b[3]; i |= 0x000000FF & b[3];
break; break;
case 3: case 3:
i |= 0x00FF0000 & (b[0] << 16); i |= 0x00FF0000 & (b[0] << 16);
i |= 0x0000FF00 & (b[1] << 8); i |= 0x0000FF00 & (b[1] << 8);
i |= 0x000000FF & b[2]; i |= 0x000000FF & b[2];
break; break;
case 2: case 2:
i |= 0x0000FF00 & (b[0] << 8); i |= 0x0000FF00 & (b[0] << 8);
i |= 0x000000FF & b[1]; i |= 0x000000FF & b[1];
break; break;
case 1: case 1:
i |= 0x000000FF & b[0]; i |= 0x000000FF & b[0];
break; break;
case 0: break; case 0: break;
} }
return i; return i;
} }
/** /**
* Converts a Integer to a BitSet * Converts a Integer to a BitSet
* *
* @param num the Integer to convert * @param num the Integer to convert
* @return a BitSet object * @return a BitSet object
*/ */
public static BitSet toBitSet(int num){ public static BitSet toBitSet(int num){
BitSet ret = new BitSet(); BitSet ret = new BitSet();
String tmp = Integer.toBinaryString(num); String tmp = Integer.toBinaryString(num);
for(int i=0; i<tmp.length() ;i++){ for(int i=0; i<tmp.length() ;i++){
ret.set(i , tmp.charAt(tmp.length()-i-1) != '0'); ret.set(i , tmp.charAt(tmp.length()-i-1) != '0');
} }
return ret; return ret;
} }
/** /**
* Converts a given String to a specified class * Converts a given String to a specified class
* *
* @param <T> is the resulting class * @param <T> is the resulting class
* @param data is the String data to be converted * @param data is the String data to be converted
* @param c is the class to convert to * @param c is the class to convert to
* @return a instance of the class with the value in the string or null if there was an problem * @return a instance of the class with the value in the string or null if there was an problem
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> T fromString(String data, Class<T> c){ public static <T> T fromString(String data, Class<T> c){
if(data == null || data.isEmpty()) if(data == null || data.isEmpty())
return null; return null;
try{ try{
if( c == String.class) return (T) data; if( c == String.class) return (T) data;
else if(c == Integer.class) return (T) new Integer(data); else if(c == Integer.class) return (T) new Integer(data);
else if(c == int.class) return (T) new Integer(data); else if(c == int.class) return (T) new Integer(data);
else if(c == Long.class) return (T) new Long(data); else if(c == Long.class) return (T) new Long(data);
else if(c == long.class) return (T) new Long(data); else if(c == long.class) return (T) new Long(data);
else if(c == Float.class) return (T) new Float(data); else if(c == Float.class) return (T) new Float(data);
else if(c == float.class) return (T) new Float(data); else if(c == float.class) return (T) new Float(data);
else if(c == Double.class) return (T) new Double(data); else if(c == Double.class) return (T) new Double(data);
else if(c == double.class) return (T) new Double(data); else if(c == double.class) return (T) new Double(data);
else if(c == Boolean.class) return (T) new Boolean(data); else if(c == Boolean.class) return (T) new Boolean(data);
else if(c == boolean.class) return (T) new Boolean(data); else if(c == boolean.class) return (T) new Boolean(data);
else if(c == Byte.class) return (T) new Byte(data); else if(c == Byte.class) return (T) new Byte(data);
else if(c == byte.class) return (T) new Byte(data); else if(c == byte.class) return (T) new Byte(data);
else if(byte[].class.isAssignableFrom(c)) else if(byte[].class.isAssignableFrom(c))
return (T) Base64Decoder.decode(data); return (T) Base64Decoder.decode(data);
}catch(Exception e){ }catch(Exception e){
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
/** /**
* Replaces reserved and unsafe characters in URLs with hex values * Replaces reserved and unsafe characters in URLs with hex values
*/ */
public static String urlEncode( String str ){ public static String urlEncode( String str ){
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
for( char c : str.toCharArray() ){ for( char c : str.toCharArray() ){
if( c>='0' && c<='9' || c>='A' && c<='Z' || c>='a' && c<='z' || if( c>='0' && c<='9' || c>='A' && c<='Z' || c>='a' && c<='z' ||
c=='$' || c=='-' || c=='_' || c=='.' || c=='+' || c=='!' || c=='$' || c=='-' || c=='_' || c=='.' || c=='+' || c=='!' ||
c=='*' || c=='\'' || c=='(' || c==')' || c==',' ) c=='*' || c=='\'' || c=='(' || c==')' || c==',' )
out.append( c ); out.append( c );
else{ else{
out.append( '%' ).append( toHexString((byte)c) ); out.append( '%' ).append( toHexString((byte)c) );
} }
} }
return out.toString(); return out.toString();
} }
/** /**
* Replaces hex values from a URL with the proper characters * Replaces hex values from a URL with the proper characters
*/ */
public static String urlDecode( String str ){ public static String urlDecode( String str ){
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
char[] array = str.toCharArray(); char[] array = str.toCharArray();
for( int i=0; i<array.length ;i++ ){ for( int i=0; i<array.length ;i++ ){
char c = array[i]; char c = array[i];
if( c == '%' && i+2<array.length ){ if( c == '%' && i+2<array.length ){
out.append( (char)hexToByte( array[++i], array[++i]) ); out.append( (char)hexToByte( array[++i], array[++i]) );
} }
else else
out.append( c ); out.append( c );
} }
return out.toString(); return out.toString();
} }
} }

View file

@ -1,92 +1,93 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.converter;
import org.junit.Test; import org.junit.Test;
import zutil.converters.Converter; import zutil.converter.Converter;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
public class ConverterTest {
public class ConverterTest {
@Test
public void testHexToByte() { @Test
assertEquals( (byte)1, Converter.hexToByte('1') ); public void testHexToByte() {
assertEquals( (byte)5, Converter.hexToByte('5') ); assertEquals( (byte)1, Converter.hexToByte('1') );
assertEquals( (byte)10, Converter.hexToByte('A') ); assertEquals( (byte)5, Converter.hexToByte('5') );
assertEquals( (byte)10, Converter.hexToByte('a') ); assertEquals( (byte)10, Converter.hexToByte('A') );
} assertEquals( (byte)10, Converter.hexToByte('a') );
}
@Test
public void testHexToByte2() { @Test
assertEquals( 0x00, Converter.hexToByte('0','0') ); public void testHexToByte2() {
assertEquals( 0x11, Converter.hexToByte('1','1') ); assertEquals( 0x00, Converter.hexToByte('0','0') );
assertEquals( 0x75, Converter.hexToByte('7','5') ); assertEquals( 0x11, Converter.hexToByte('1','1') );
assertEquals( 0xDA, Converter.hexToByte('D','A') & 0xFF ); assertEquals( 0x75, Converter.hexToByte('7','5') );
assertEquals( 0xFA, Converter.hexToByte('F','a') & 0xFF ); assertEquals( 0xDA, Converter.hexToByte('D','A') & 0xFF );
assertEquals( 0xFF, Converter.hexToByte('f','f') & 0xFF ); assertEquals( 0xFA, Converter.hexToByte('F','a') & 0xFF );
} assertEquals( 0xFF, Converter.hexToByte('f','f') & 0xFF );
}
@Test
public void testHexStringToByte() { @Test
assertArrayEquals( null, Converter.hexToByte(null) ); public void testHexStringToByte() {
assertArrayEquals( new byte[]{}, Converter.hexToByte("") ); assertArrayEquals( null, Converter.hexToByte(null) );
assertArrayEquals( new byte[]{0x00}, Converter.hexToByte("0x00") ); assertArrayEquals( new byte[]{}, Converter.hexToByte("") );
assertArrayEquals( new byte[]{0x00}, Converter.hexToByte("00") ); assertArrayEquals( new byte[]{0x00}, Converter.hexToByte("0x00") );
assertArrayEquals(new byte[]{0x07,0x06,0x05,0x04,0x03,0x02,0x01}, assertArrayEquals( new byte[]{0x00}, Converter.hexToByte("00") );
Converter.hexToByte("01020304050607") ); assertArrayEquals(new byte[]{0x07,0x06,0x05,0x04,0x03,0x02,0x01},
assertArrayEquals( new byte[]{0x11,0x0F}, Converter.hexToByte("F11") ); Converter.hexToByte("01020304050607") );
} assertArrayEquals( new byte[]{0x11,0x0F}, Converter.hexToByte("F11") );
}
@Test
public void testUrlEncode() { @Test
assertEquals( "fas8dg7%20a0d1%2313f9g8d7%200h9a%25h0", public void testUrlEncode() {
Converter.urlEncode("fas8dg7 a0d1#13f9g8d7 0h9a%h0") ); assertEquals( "fas8dg7%20a0d1%2313f9g8d7%200h9a%25h0",
assertEquals( "9i34%202y9252%25%2623%20463765(%2f%26(", Converter.urlEncode("fas8dg7 a0d1#13f9g8d7 0h9a%h0") );
Converter.urlEncode("9i34 2y9252%&23 463765(/&(") ); assertEquals( "9i34%202y9252%25%2623%20463765(%2f%26(",
Converter.urlEncode("9i34 2y9252%&23 463765(/&(") );
}
}
@Test
public void testUrlDecode() { @Test
assertEquals( "fas8dg7 a0d1#13f9g8d7 0h9a%h0", public void testUrlDecode() {
Converter.urlDecode("fas8dg7%20a0d1%2313f9g8d7%200h9a%25h0") ); assertEquals( "fas8dg7 a0d1#13f9g8d7 0h9a%h0",
assertEquals( "9i34 2y9252%&23 463765(/&(", Converter.urlDecode("fas8dg7%20a0d1%2313f9g8d7%200h9a%25h0") );
Converter.urlDecode("9i34%202y9252%25%2623%20463765(%2f%26(") ); assertEquals( "9i34 2y9252%&23 463765(/&(",
} Converter.urlDecode("9i34%202y9252%25%2623%20463765(%2f%26(") );
}
@Test
public void byteArrayToInt(){ @Test
assertEquals(0, Converter.toInt(new byte[]{})); public void byteArrayToInt(){
assertEquals(1, Converter.toInt(new byte[]{0b0000_0001})); assertEquals(0, Converter.toInt(new byte[]{}));
assertEquals(1, Converter.toInt(new byte[]{0x00,0x01})); assertEquals(1, Converter.toInt(new byte[]{0b0000_0001}));
assertEquals(256, Converter.toInt(new byte[]{0x00,0x01,0x00})); assertEquals(1, Converter.toInt(new byte[]{0x00,0x01}));
assertEquals(-1, Converter.toInt(new byte[]{(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF})); assertEquals(256, Converter.toInt(new byte[]{0x00,0x01,0x00}));
assertEquals(Integer.MAX_VALUE, Converter.toInt(new byte[]{(byte)0x7F,(byte)0xFF,(byte)0xFF,(byte)0xFF})); assertEquals(-1, Converter.toInt(new byte[]{(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF}));
assertEquals(Integer.MAX_VALUE, Converter.toInt(new byte[]{(byte)0x7F,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF})); assertEquals(Integer.MAX_VALUE, Converter.toInt(new byte[]{(byte)0x7F,(byte)0xFF,(byte)0xFF,(byte)0xFF}));
} assertEquals(Integer.MAX_VALUE, Converter.toInt(new byte[]{(byte)0x7F,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF}));
} }
}

View file

@ -22,7 +22,7 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.converters; package zutil.converter;
import java.util.HashMap; import java.util.HashMap;

View file

@ -22,13 +22,13 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.converter;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.Parameterized; import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; import org.junit.runners.Parameterized.Parameters;
import zutil.converters.NumberToWordsConverter; import zutil.converter.NumberToWordsConverter;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;

View file

@ -1,72 +1,72 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.converters; package zutil.converter;
public class WGS84Converter { public class WGS84Converter {
public static void main(String[] args){ public static void main(String[] args){
System.out.println(toWGS84Decimal("N 59<35> 47' 43\"")+" "+toWGS84Decimal(" E 17<31> 42' 55\"")); System.out.println(toWGS84Decimal("N 59<35> 47' 43\"")+" "+toWGS84Decimal(" E 17<31> 42' 55\""));
System.out.println(toWGS84Decimal("55<EFBFBD> 0' 0\"")+" "+toWGS84Decimal("68<EFBFBD> 59' 59,999\"")); System.out.println(toWGS84Decimal("55<EFBFBD> 0' 0\"")+" "+toWGS84Decimal("68<EFBFBD> 59' 59,999\""));
System.out.println(toWGS84Decimal("55<EFBFBD> 0.001'")+" "+toWGS84Decimal("68<EFBFBD> 59.999'")); System.out.println(toWGS84Decimal("55<EFBFBD> 0.001'")+" "+toWGS84Decimal("68<EFBFBD> 59.999'"));
System.out.println(toWGS84Decimal("3444.0000S")+" "+toWGS84Decimal("13521.0000E")); System.out.println(toWGS84Decimal("3444.0000S")+" "+toWGS84Decimal("13521.0000E"));
System.out.println(toWGS84Decimal("-44.0001")+" "+toWGS84Decimal("521.0001")); System.out.println(toWGS84Decimal("-44.0001")+" "+toWGS84Decimal("521.0001"));
} }
/** /**
* Converts an WGS84 coordinate to an WGS84 decimal coordinate * Converts an WGS84 coordinate to an WGS84 decimal coordinate
* *
* @param coordinate is the coordinate to convert * @param coordinate is the coordinate to convert
* @return the new coordinate in decimal degrees, returns 0 if conversions fails * @return the new coordinate in decimal degrees, returns 0 if conversions fails
*/ */
public static float toWGS84Decimal(String coordinate){ public static float toWGS84Decimal(String coordinate){
float deg=0, min=0, sec=0, neg=1; float deg=0, min=0, sec=0, neg=1;
coordinate = coordinate.trim().replaceAll(",", ".").toUpperCase(); coordinate = coordinate.trim().replaceAll(",", ".").toUpperCase();
if(coordinate.contains("S") || coordinate.contains("W")) if(coordinate.contains("S") || coordinate.contains("W"))
neg = -1; neg = -1;
// 55<EFBFBD> 0' 68<EFBFBD> 59,999 or 55<EFBFBD> 0' 0" 68<36> 59' 59,999" // 55<EFBFBD> 0' 68<EFBFBD> 59,999 or 55<EFBFBD> 0' 0" 68<36> 59' 59,999"
if(coordinate.matches("[NSWE ]? ?[0-9]{1,3}<7D> [0-9]{1,2}.?[0-9]*'[ 0-9.\\\"]*")){ if(coordinate.matches("[NSWE ]? ?[0-9]{1,3}<7D> [0-9]{1,2}.?[0-9]*'[ 0-9.\\\"]*")){
coordinate = coordinate.replaceAll("[NSEW<45>'\\\"]", "").trim(); coordinate = coordinate.replaceAll("[NSEW<45>'\\\"]", "").trim();
String[] tmp = coordinate.split(" "); String[] tmp = coordinate.split(" ");
deg = Float.parseFloat(tmp[0]); deg = Float.parseFloat(tmp[0]);
min = Float.parseFloat(tmp[1]); min = Float.parseFloat(tmp[1]);
if(tmp.length > 2){ if(tmp.length > 2){
sec = Float.parseFloat(tmp[2]); sec = Float.parseFloat(tmp[2]);
} }
} }
// 3444.0000S 13521.0000E // 3444.0000S 13521.0000E
else if(coordinate.matches("[0-9]{4,5}.[0-9]*[NSEW]{1}")){ else if(coordinate.matches("[0-9]{4,5}.[0-9]*[NSEW]{1}")){
coordinate = coordinate.replaceAll("[NS EW]", ""); coordinate = coordinate.replaceAll("[NS EW]", "");
float tmpf = Float.parseFloat(coordinate); float tmpf = Float.parseFloat(coordinate);
deg = (int)(tmpf/100); deg = (int)(tmpf/100);
min = tmpf-(deg*100); min = tmpf-(deg*100);
} }
// 55.0 68.99999 // 55.0 68.99999
else if(coordinate.matches("\\-?[0-9]{2,3}.[0-9]*")){ else if(coordinate.matches("\\-?[0-9]{2,3}.[0-9]*")){
return Float.parseFloat(coordinate); return Float.parseFloat(coordinate);
} }
return neg*(deg + min/60 + sec/3600); return neg*(deg + min/60 + sec/3600);
} }
} }

2
src/zutil/db/DBQueue.java Normal file → Executable file
View file

@ -24,7 +24,7 @@
package zutil.db; package zutil.db;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.io.MultiPrintStream; import zutil.io.MultiPrintStream;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;

View file

@ -1,117 +1,117 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class BlurFilter extends ImageFilterProcessor{ public class BlurFilter extends ImageFilterProcessor{
private int blurValue; private int blurValue;
/** /**
* Creates a blur effect on the image * Creates a blur effect on the image
* @param img The image to blur * @param img The image to blur
*/ */
public BlurFilter(BufferedImage img){ public BlurFilter(BufferedImage img){
this(img, 10); this(img, 10);
} }
/** /**
* Creates a blur effect on the image * Creates a blur effect on the image
* @param img The image to blur * @param img The image to blur
* @param blur The amount to blur * @param blur The amount to blur
*/ */
public BlurFilter(BufferedImage img, int blur){ public BlurFilter(BufferedImage img, int blur){
super(img); super(img);
blurValue = blur; blurValue = blur;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
int inputPeak = RAWImageUtil.getPeakValue(data); int inputPeak = RAWImageUtil.getPeakValue(data);
int[][][] tmpData = new int[data.length][data[0].length][4]; int[][][] tmpData = new int[data.length][data[0].length][4];
int[][][] output = RAWImageUtil.copyArray(data); int[][][] output = RAWImageUtil.copyArray(data);
//Perform the convolution one or more times in succession //Perform the convolution one or more times in succession
int redSum, greenSum, blueSum, outputPeak; int redSum, greenSum, blueSum, outputPeak;
for(int i=0; i<blurValue ;i++){ for(int i=0; i<blurValue ;i++){
//Iterate on each pixel as a registration point. //Iterate on each pixel as a registration point.
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, (blurValue-1)*(stopY-startY-2), i*(stopY-startY-2)+y)); setProgress(ZMath.percent(0, (blurValue-1)*(stopY-startY-2), i*(stopY-startY-2)+y));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
if(x == 0 || x == output[0].length-1 || y == 0 || y == output.length-1){ if(x == 0 || x == output[0].length-1 || y == 0 || y == output.length-1){
redSum = output[y][x][1] * 9; redSum = output[y][x][1] * 9;
greenSum = output[y][x][2] * 9; greenSum = output[y][x][2] * 9;
blueSum = output[y][x][3] * 9; blueSum = output[y][x][3] * 9;
} }
else{ else{
redSum = redSum =
output[y - 1][x - 1][1] + output[y - 1][x - 1][1] +
output[y - 1][x - 0][1] + output[y - 1][x - 0][1] +
output[y - 1][x + 1][1] + output[y - 1][x + 1][1] +
output[y - 0][x - 1][1] + output[y - 0][x - 1][1] +
output[y - 0][x - 0][1] + output[y - 0][x - 0][1] +
output[y - 0][x + 1][1] + output[y - 0][x + 1][1] +
output[y + 1][x - 1][1] + output[y + 1][x - 1][1] +
output[y + 1][x - 0][1] + output[y + 1][x - 0][1] +
output[y + 1][x + 1][1]; output[y + 1][x + 1][1];
greenSum = greenSum =
output[y - 1][x - 1][2] + output[y - 1][x - 1][2] +
output[y - 1][x - 0][2] + output[y - 1][x - 0][2] +
output[y - 1][x + 1][2] + output[y - 1][x + 1][2] +
output[y - 0][x - 1][2] + output[y - 0][x - 1][2] +
output[y - 0][x - 0][2] + output[y - 0][x - 0][2] +
output[y - 0][x + 1][2] + output[y - 0][x + 1][2] +
output[y + 1][x - 1][2] + output[y + 1][x - 1][2] +
output[y + 1][x - 0][2] + output[y + 1][x - 0][2] +
output[y + 1][x + 1][2]; output[y + 1][x + 1][2];
blueSum = blueSum =
output[y - 1][x - 1][3] + output[y - 1][x - 1][3] +
output[y - 1][x - 0][3] + output[y - 1][x - 0][3] +
output[y - 1][x + 1][3] + output[y - 1][x + 1][3] +
output[y - 0][x - 1][3] + output[y - 0][x - 1][3] +
output[y - 0][x - 0][3] + output[y - 0][x - 0][3] +
output[y - 0][x + 1][3] + output[y - 0][x + 1][3] +
output[y + 1][x - 1][3] + output[y + 1][x - 1][3] +
output[y + 1][x - 0][3] + output[y + 1][x - 0][3] +
output[y + 1][x + 1][3]; output[y + 1][x + 1][3];
} }
tmpData[y][x][0] = output[y][x][0]; tmpData[y][x][0] = output[y][x][0];
tmpData[y][x][1] = redSum; tmpData[y][x][1] = redSum;
tmpData[y][x][2] = greenSum; tmpData[y][x][2] = greenSum;
tmpData[y][x][3] = blueSum; tmpData[y][x][3] = blueSum;
} }
} }
// getting the new peak value and normalizing the image // getting the new peak value and normalizing the image
outputPeak = RAWImageUtil.getPeakValue(tmpData); outputPeak = RAWImageUtil.getPeakValue(tmpData);
RAWImageUtil.normalize(output, tmpData, startX, startY, stopX, stopY, ((double)inputPeak)/outputPeak ); RAWImageUtil.normalize(output, tmpData, startX, startY, stopX, stopY, ((double)inputPeak)/outputPeak );
} }
return output; return output;
} }
} }

View file

@ -1,113 +1,113 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class ColorIntensityFilter extends ImageFilterProcessor{ public class ColorIntensityFilter extends ImageFilterProcessor{
private boolean invert; private boolean invert;
private double redScale; private double redScale;
private double greenScale; private double greenScale;
private double blueScale; private double blueScale;
public ColorIntensityFilter(BufferedImage img){ public ColorIntensityFilter(BufferedImage img){
this(img, 0.2, 0.2, 0.2, false); this(img, 0.2, 0.2, 0.2, false);
} }
/** /**
* Creates a ColorIntensityEffect object with the given values * Creates a ColorIntensityEffect object with the given values
* @param img The image data * @param img The image data
* @param inv If the image color should be inverted * @param inv If the image color should be inverted
*/ */
public ColorIntensityFilter(BufferedImage img, boolean inv){ public ColorIntensityFilter(BufferedImage img, boolean inv){
this(img, 0.5, 0.5, 0.5, inv); this(img, 0.5, 0.5, 0.5, inv);
} }
/** /**
* Creates a ColorIntensityEffect object with the given values * Creates a ColorIntensityEffect object with the given values
* @param img The image data * @param img The image data
* @param red The scale of red (0-1) * @param red The scale of red (0-1)
* @param green The scale of green (0-1) * @param green The scale of green (0-1)
* @param blue The scale of blue (0-1) * @param blue The scale of blue (0-1)
*/ */
public ColorIntensityFilter(BufferedImage img, double red, double green, double blue){ public ColorIntensityFilter(BufferedImage img, double red, double green, double blue){
this(img, red, green, blue, false); this(img, red, green, blue, false);
} }
/** /**
* Creates a ColorIntensityEffect object with the given values * Creates a ColorIntensityEffect object with the given values
* @param img The image data * @param img The image data
* @param red The scale of red (0-1) * @param red The scale of red (0-1)
* @param green The scale of green (0-1) * @param green The scale of green (0-1)
* @param blue The scale of blue (0-1) * @param blue The scale of blue (0-1)
* @param inv If the image color should be inverted * @param inv If the image color should be inverted
*/ */
public ColorIntensityFilter(BufferedImage img, double red, double green, double blue, boolean inv){ public ColorIntensityFilter(BufferedImage img, double red, double green, double blue, boolean inv){
super(img); super(img);
invert = false; invert = false;
redScale = red; redScale = red;
greenScale = green; greenScale = green;
blueScale = blue; blueScale = blue;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
int[][][] output = new int[data.length][data[0].length][4]; int[][][] output = new int[data.length][data[0].length][4];
// making sure the scales are right // making sure the scales are right
if(redScale > 1) redScale = 1; if(redScale > 1) redScale = 1;
else if(redScale < 0) redScale = 0; else if(redScale < 0) redScale = 0;
if(greenScale > 1) greenScale = 1; if(greenScale > 1) greenScale = 1;
else if(greenScale < 0) greenScale = 0; else if(greenScale < 0) greenScale = 0;
if(blueScale > 1) blueScale = 1; if(blueScale > 1) blueScale = 1;
else if(blueScale < 0) blueScale = 0; else if(blueScale < 0) blueScale = 0;
// Applying the color intensity to the image // Applying the color intensity to the image
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, stopY-startY-1, y)); setProgress(ZMath.percent(0, stopY-startY-1, y));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
if(!invert){ if(!invert){
// inversion // inversion
output[y][x][0] = data[y][x][0]; output[y][x][0] = data[y][x][0];
output[y][x][1] = (int)( 255 - data[y][x][1] * redScale ); output[y][x][1] = (int)( 255 - data[y][x][1] * redScale );
output[y][x][2] = (int)( 255 - data[y][x][2] * greenScale ); output[y][x][2] = (int)( 255 - data[y][x][2] * greenScale );
output[y][x][3] = (int)( 255 - data[y][x][3] * blueScale ); output[y][x][3] = (int)( 255 - data[y][x][3] * blueScale );
} }
else{ else{
output[y][x][0] = data[y][x][0]; output[y][x][0] = data[y][x][0];
output[y][x][1] = (int)( data[y][x][1] * redScale ); output[y][x][1] = (int)( data[y][x][1] * redScale );
output[y][x][2] = (int)( data[y][x][2] * greenScale ); output[y][x][2] = (int)( data[y][x][2] * greenScale );
output[y][x][3] = (int)( data[y][x][3] * blueScale ); output[y][x][3] = (int)( data[y][x][3] * blueScale );
} }
} }
} }
return output; return output;
} }
} }

View file

@ -1,71 +1,71 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class ContrastBrightnessFilter extends ImageFilterProcessor{ public class ContrastBrightnessFilter extends ImageFilterProcessor{
private double contrast; private double contrast;
private double brightness; private double brightness;
/** /**
* Creates a ContrastBrightnessEffect object with the given values * Creates a ContrastBrightnessEffect object with the given values
* @param img The image to apply the effect to * @param img The image to apply the effect to
*/ */
public ContrastBrightnessFilter(BufferedImage img){ public ContrastBrightnessFilter(BufferedImage img){
this(img, 3, 1.2); this(img, 3, 1.2);
} }
/** /**
* Creates a ContrastBrightnessEffect object with the given values * Creates a ContrastBrightnessEffect object with the given values
* @param img The image to apply the effect to * @param img The image to apply the effect to
* @param con The contrast to apply * @param con The contrast to apply
* @param brig The brightness to apply * @param brig The brightness to apply
*/ */
public ContrastBrightnessFilter(BufferedImage img, double con, double brig){ public ContrastBrightnessFilter(BufferedImage img, double con, double brig){
super(img); super(img);
contrast = con; contrast = con;
brightness = brig; brightness = brig;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
int mean = RAWImageUtil.getMeanValue(data); int mean = RAWImageUtil.getMeanValue(data);
int[][][] output = RAWImageUtil.copyArray(data); int[][][] output = RAWImageUtil.copyArray(data);
RAWImageUtil.addMeanValue(output, startX, startY, stopX, stopY, mean*(-1)); RAWImageUtil.addMeanValue(output, startX, startY, stopX, stopY, mean*(-1));
RAWImageUtil.scale(output, startX, startY, stopX, stopY, contrast); RAWImageUtil.scale(output, startX, startY, stopX, stopY, contrast);
RAWImageUtil.addMeanValue(output, startX, startY, stopX, stopY, (int)(brightness*mean)); RAWImageUtil.addMeanValue(output, startX, startY, stopX, stopY, (int)(brightness*mean));
RAWImageUtil.clip(output, startX, startY, stopX, stopY); RAWImageUtil.clip(output, startX, startY, stopX, stopY);
return output; return output;
} }
} }

View file

@ -1,107 +1,107 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
* Applies an Convolution kernel to the specified image * Applies an Convolution kernel to the specified image
* *
* @author Ziver * @author Ziver
*/ */
public class ConvolutionFilter extends ImageFilterProcessor{ public class ConvolutionFilter extends ImageFilterProcessor{
private double[][] kernel; private double[][] kernel;
protected ConvolutionFilter(BufferedImage img) { protected ConvolutionFilter(BufferedImage img) {
super(img); super(img);
} }
public ConvolutionFilter(double[][] kernel) { public ConvolutionFilter(double[][] kernel) {
this(null, kernel); this(null, kernel);
} }
/** /**
* Applies an Convolution kernel to the specified image * Applies an Convolution kernel to the specified image
* *
* @param img is the image * @param img is the image
* @param kernel is the kernel to apply to the image * @param kernel is the kernel to apply to the image
*/ */
public ConvolutionFilter(BufferedImage img, double[][] kernel) { public ConvolutionFilter(BufferedImage img, double[][] kernel) {
super(img); super(img);
this.kernel = kernel; this.kernel = kernel;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
if(kernel == null) this.kernel = generateKernel(); if(kernel == null) this.kernel = generateKernel();
int[][][] tmpData = new int[data.length][data[0].length][4]; int[][][] tmpData = new int[data.length][data[0].length][4];
int xk_length = kernel[0].length; int xk_length = kernel[0].length;
int yk_length = kernel.length; int yk_length = kernel.length;
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, (stopY-startY), y+1)); setProgress(ZMath.percent(0, (stopY-startY), y+1));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
tmpData[y][x][0] = data[y][x][0]; // alpha tmpData[y][x][0] = data[y][x][0]; // alpha
for(int yk=0; yk<yk_length ;yk++){ for(int yk=0; yk<yk_length ;yk++){
for(int xk=0; xk<xk_length ;xk++){ for(int xk=0; xk<xk_length ;xk++){
if(0 <= y-yk_length/2+yk && y-yk_length/2+yk < data.length && if(0 <= y-yk_length/2+yk && y-yk_length/2+yk < data.length &&
0 <= x-xk_length/2+xk && x-xk_length/2+xk < data[0].length){ // check that its not out of index 0 <= x-xk_length/2+xk && x-xk_length/2+xk < data[0].length){ // check that its not out of index
tmpData[y][x][1] += data[y-yk_length/2+yk][x-xk_length/2+xk][1] * kernel[yk][xk]; tmpData[y][x][1] += data[y-yk_length/2+yk][x-xk_length/2+xk][1] * kernel[yk][xk];
tmpData[y][x][2] += data[y-yk_length/2+yk][x-xk_length/2+xk][2] * kernel[yk][xk]; tmpData[y][x][2] += data[y-yk_length/2+yk][x-xk_length/2+xk][2] * kernel[yk][xk];
tmpData[y][x][3] += data[y-yk_length/2+yk][x-xk_length/2+xk][3] * kernel[yk][xk]; tmpData[y][x][3] += data[y-yk_length/2+yk][x-xk_length/2+xk][3] * kernel[yk][xk];
} }
} }
} }
} }
} }
RAWImageUtil.clip(tmpData, startX, startY, stopX, stopY); RAWImageUtil.clip(tmpData, startX, startY, stopX, stopY);
return tmpData; return tmpData;
} }
/** /**
* Returns the kernel or null if it has not been generated yet. * Returns the kernel or null if it has not been generated yet.
*/ */
public double[][] getKernel(){ public double[][] getKernel(){
return kernel; return kernel;
} }
/** /**
* Should be overridden by a subclass * Should be overridden by a subclass
* *
* @return an special generated kernel * @return an special generated kernel
*/ */
protected double[][] generateKernel(){ protected double[][] generateKernel(){
return null; return null;
} }
} }

View file

@ -1,111 +1,111 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class DitheringFilter extends ImageFilterProcessor{ public class DitheringFilter extends ImageFilterProcessor{
// default palette is black and white // default palette is black and white
private int[][] palette = { private int[][] palette = {
{255,0,0,0}, {255,0,0,0},
{255,255,255,255} {255,255,255,255}
}; };
/** /**
* Sets up a default DitheringEffect * Sets up a default DitheringEffect
*/ */
public DitheringFilter(BufferedImage img){ public DitheringFilter(BufferedImage img){
super(img); super(img);
} }
/** /**
* Creates a Dithering Effect object * Creates a Dithering Effect object
* @param img The image to apply the effect on * @param img The image to apply the effect on
* @param palette The palette to use on the image * @param palette The palette to use on the image
* int[colorCount][4] * int[colorCount][4]
* 0 -> Alpha data * 0 -> Alpha data
* Red data * Red data
* Green data * Green data
* 4 -> Blue data * 4 -> Blue data
*/ */
public DitheringFilter(BufferedImage img, int[][] palette){ public DitheringFilter(BufferedImage img, int[][] palette){
super(img); super(img);
this.palette = palette; this.palette = palette;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
int error, index; int error, index;
int[] currentPixel; int[] currentPixel;
int[][][] output = RAWImageUtil.copyArray(data); int[][][] output = RAWImageUtil.copyArray(data);
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, stopY-startY-1, y)); setProgress(ZMath.percent(0, stopY-startY-1, y));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
currentPixel = output[y][x]; currentPixel = output[y][x];
index = findNearestColor(currentPixel, palette); index = findNearestColor(currentPixel, palette);
output[y][x] = palette[index]; output[y][x] = palette[index];
for (int i = 1; i < 4; i++) { for (int i = 1; i < 4; i++) {
error = currentPixel[i] - palette[index][i]; error = currentPixel[i] - palette[index][i];
if (x + 1 < output[0].length) { if (x + 1 < output[0].length) {
output[y+0][x+1][i] = RAWImageUtil.clip( output[y+0][x+1][i] + (error*7)/16 ); output[y+0][x+1][i] = RAWImageUtil.clip( output[y+0][x+1][i] + (error*7)/16 );
} }
if (y + 1 < data.length) { if (y + 1 < data.length) {
if (x - 1 > 0) if (x - 1 > 0)
output[y+1][x-1][i] = RAWImageUtil.clip( output[y+1][x-1][i] + (error*3)/16 ); output[y+1][x-1][i] = RAWImageUtil.clip( output[y+1][x-1][i] + (error*3)/16 );
output[y+1][x+0][i] = RAWImageUtil.clip( output[y+1][x+0][i] + (error*5)/16 ); output[y+1][x+0][i] = RAWImageUtil.clip( output[y+1][x+0][i] + (error*5)/16 );
if (x + 1 < data[0].length) if (x + 1 < data[0].length)
output[y+1][x+1][i] = RAWImageUtil.clip( output[y+1][x+1][i] + (error*1)/16 ); output[y+1][x+1][i] = RAWImageUtil.clip( output[y+1][x+1][i] + (error*1)/16 );
} }
} }
} }
} }
return output; return output;
} }
private static int findNearestColor(int[] color, int[][] palette) { private static int findNearestColor(int[] color, int[][] palette) {
int minDistanceSquared = 255*255 + 255*255 + 255*255 + 1; int minDistanceSquared = 255*255 + 255*255 + 255*255 + 1;
int bestIndex = 0; int bestIndex = 0;
for (byte i = 0; i < palette.length; i++) { for (byte i = 0; i < palette.length; i++) {
int Rdiff = color[1] - palette[i][0]; int Rdiff = color[1] - palette[i][0];
int Gdiff = color[2] - palette[i][1]; int Gdiff = color[2] - palette[i][1];
int Bdiff = color[3] - palette[i][2]; int Bdiff = color[3] - palette[i][2];
int distanceSquared = Rdiff*Rdiff + Gdiff*Gdiff + Bdiff*Bdiff; int distanceSquared = Rdiff*Rdiff + Gdiff*Gdiff + Bdiff*Bdiff;
if (distanceSquared < minDistanceSquared) { if (distanceSquared < minDistanceSquared) {
minDistanceSquared = distanceSquared; minDistanceSquared = distanceSquared;
bestIndex = i; bestIndex = i;
} }
} }
return bestIndex; return bestIndex;
} }
} }

View file

@ -1,71 +1,71 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
* Blurs an image whit the Gaussian blur algorithm * Blurs an image whit the Gaussian blur algorithm
* *
* @author Ziver * @author Ziver
*/ */
public class GaussianBlurFilter extends ConvolutionFilter{ public class GaussianBlurFilter extends ConvolutionFilter{
private int size; private int size;
private double sigma; private double sigma;
public GaussianBlurFilter(BufferedImage img) { public GaussianBlurFilter(BufferedImage img) {
this(img, 5, 1.4); this(img, 5, 1.4);
} }
public GaussianBlurFilter(BufferedImage img, int size, double sigma) { public GaussianBlurFilter(BufferedImage img, int size, double sigma) {
super(img); super(img);
this.size = size; this.size = size;
this.sigma = sigma; this.sigma = sigma;
} }
protected double[][] generateKernel(){ protected double[][] generateKernel(){
return gaussianFunction(size, size, sigma); return gaussianFunction(size, size, sigma);
} }
/** /**
* Generates the kernel from the specified values * Generates the kernel from the specified values
*/ */
public static double[][] gaussianFunction(int size_x, int size_y, double sigma){ public static double[][] gaussianFunction(int size_x, int size_y, double sigma){
double[][] kernel; double[][] kernel;
int center_x = size_x/2; int center_x = size_x/2;
int center_y = size_y/2; int center_y = size_y/2;
kernel = new double[size_y][size_x]; kernel = new double[size_y][size_x];
for(int y=0; y<size_y ;y++){ for(int y=0; y<size_y ;y++){
for(int x=0; x<size_x ;x++){ for(int x=0; x<size_x ;x++){
double tmp_x = (double)( (x-center_x)*(x-center_x) )/(2*sigma*sigma); double tmp_x = (double)( (x-center_x)*(x-center_x) )/(2*sigma*sigma);
double tmp_y = (double)( (y-center_y)*(y-center_y) )/(2*sigma*sigma); double tmp_y = (double)( (y-center_y)*(y-center_y) )/(2*sigma*sigma);
kernel[y][x] = 1.0/(2*Math.PI*sigma*sigma) * Math.exp( -(tmp_x + tmp_y) ); kernel[y][x] = 1.0/(2*Math.PI*sigma*sigma) * Math.exp( -(tmp_x + tmp_y) );
} }
} }
return kernel; return kernel;
} }
} }

View file

@ -1,69 +1,69 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
* The MedianFilter is used for noise reduction and things * The MedianFilter is used for noise reduction and things
* *
* @author Ziver * @author Ziver
*/ */
public class MeanBlurFilter extends ConvolutionFilter{ public class MeanBlurFilter extends ConvolutionFilter{
private int windowSize; private int windowSize;
/** /**
* Setup a default MedianFilter * Setup a default MedianFilter
* *
* @param img is the image to process * @param img is the image to process
*/ */
public MeanBlurFilter(BufferedImage img) { public MeanBlurFilter(BufferedImage img) {
this(img, 10); this(img, 10);
} }
/** /**
* Setup a default MedianFilter * Setup a default MedianFilter
* *
* @param img is the image to process * @param img is the image to process
* @param pixels is the size of the window * @param pixels is the size of the window
*/ */
public MeanBlurFilter(BufferedImage img, int pixels) { public MeanBlurFilter(BufferedImage img, int pixels) {
super(img); super(img);
this.windowSize = pixels; this.windowSize = pixels;
} }
protected double[][] generateKernel(){ protected double[][] generateKernel(){
double[][] kernel = new double[windowSize][windowSize]; double[][] kernel = new double[windowSize][windowSize];
double mean = 1.0/(windowSize*windowSize); double mean = 1.0/(windowSize*windowSize);
for(int y=0; y<windowSize ;y++){ for(int y=0; y<windowSize ;y++){
for(int x=0; x<windowSize ;x++){ for(int x=0; x<windowSize ;x++){
kernel[y][x] = mean; kernel[y][x] = mean;
} }
} }
return kernel; return kernel;
} }
} }

View file

@ -1,194 +1,194 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.algo.sort.sortable.SortableDataList; import zutil.algo.sort.sortable.SortableDataList;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
* The MedianFilter is used for noise reduction and things * The MedianFilter is used for noise reduction and things
* *
* @author Ziver * @author Ziver
*/ */
public class MedianFilter extends ImageFilterProcessor{ public class MedianFilter extends ImageFilterProcessor{
private int windowSize; private int windowSize;
private boolean[] channels; private boolean[] channels;
/** /**
* Setup a default MedianFilter * Setup a default MedianFilter
* *
* @param img The image to process * @param img The image to process
*/ */
public MedianFilter(BufferedImage img) { public MedianFilter(BufferedImage img) {
this(img, 10); this(img, 10);
} }
/** /**
* Setup a default MedianFilter * Setup a default MedianFilter
* *
* @param img The image to process * @param img The image to process
* @param pixels The size of the window * @param pixels The size of the window
*/ */
public MedianFilter(BufferedImage img, int pixels) { public MedianFilter(BufferedImage img, int pixels) {
this(img, pixels, new boolean[]{true,true,true,true}); this(img, pixels, new boolean[]{true,true,true,true});
} }
/** /**
* Setup a default MedianFilter * Setup a default MedianFilter
* *
* @param img The image to process * @param img The image to process
* @param pixels The size of the window * @param pixels The size of the window
* @param channels Is a 4 element array for witch channels to use the filter on * @param channels Is a 4 element array for witch channels to use the filter on
*/ */
public MedianFilter(BufferedImage img, int pixels, boolean[] channels) { public MedianFilter(BufferedImage img, int pixels, boolean[] channels) {
super(img); super(img);
this.windowSize = pixels; this.windowSize = pixels;
this.channels = channels; this.channels = channels;
} }
/* /*
edgex := (window width / 2) rounded down edgex := (window width / 2) rounded down
edgey := (window height / 2) rounded down edgey := (window height / 2) rounded down
for x from edgex to image width - edgex: for x from edgex to image width - edgex:
for y from edgey to image height - edgey: for y from edgey to image height - edgey:
colorArray[window width][window height]; colorArray[window width][window height];
for fx from 0 to window width: for fx from 0 to window width:
for fy from 0 to window height: for fy from 0 to window height:
colorArray[fx][fy] := pixelvalue[x + fx - edgex][y + fy - edgey] colorArray[fx][fy] := pixelvalue[x + fx - edgex][y + fy - edgey]
Sort colorArray[][]; Sort colorArray[][];
pixelValue[x][y] := colorArray[window width / 2][window height / 2]; pixelValue[x][y] := colorArray[window width / 2][window height / 2];
*/ */
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
int[][][] tmpData = RAWImageUtil.copyArray(data); int[][][] tmpData = RAWImageUtil.copyArray(data);
int edgeX = windowSize / 2; int edgeX = windowSize / 2;
int edgeY = windowSize / 2; int edgeY = windowSize / 2;
int[][] tmpArray = new int[4][256*2]; int[][] tmpArray = new int[4][256*2];
int pixelCount = 0; int pixelCount = 0;
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, stopY-startY-1, y)); setProgress(ZMath.percent(0, stopY-startY-1, y));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
pixelCount = 0; pixelCount = 0;
for(int fy=0; fy<windowSize ;fy++){ for(int fy=0; fy<windowSize ;fy++){
for(int fx=0; fx<windowSize ;fx++){ for(int fx=0; fx<windowSize ;fx++){
if(y+fy-edgeY >= 0 && y+fy-edgeY < data.length && x+fx-edgeX >= 0 && x+fx-edgeX < data[0].length){ if(y+fy-edgeY >= 0 && y+fy-edgeY < data.length && x+fx-edgeX >= 0 && x+fx-edgeX < data[0].length){
//colorArray[fx][fy] := pixelvalue[x + fx - edgex][y + fy - edgey] //colorArray[fx][fy] := pixelvalue[x + fx - edgex][y + fy - edgey]
if(channels[0]) tmpArray[0][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][0] ) ]++; if(channels[0]) tmpArray[0][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][0] ) ]++;
if(channels[1]) tmpArray[1][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][1] ) ]++; if(channels[1]) tmpArray[1][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][1] ) ]++;
if(channels[2]) tmpArray[2][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][2] ) ]++; if(channels[2]) tmpArray[2][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][2] ) ]++;
if(channels[3]) tmpArray[3][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][3] ) ]++; if(channels[3]) tmpArray[3][ getMedianIndex( tmpData[y + fy - edgeY][x + fx - edgeX][3] ) ]++;
pixelCount++; pixelCount++;
} }
} }
} }
if(channels[0]) tmpData[y][x][0] = findMedian(tmpArray[0], pixelCount/2); if(channels[0]) tmpData[y][x][0] = findMedian(tmpArray[0], pixelCount/2);
if(channels[1]) tmpData[y][x][1] = findMedian(tmpArray[1], pixelCount/2); if(channels[1]) tmpData[y][x][1] = findMedian(tmpArray[1], pixelCount/2);
if(channels[2]) tmpData[y][x][2] = findMedian(tmpArray[2], pixelCount/2); if(channels[2]) tmpData[y][x][2] = findMedian(tmpArray[2], pixelCount/2);
if(channels[3]) tmpData[y][x][3] = findMedian(tmpArray[3], pixelCount/2); if(channels[3]) tmpData[y][x][3] = findMedian(tmpArray[3], pixelCount/2);
} }
} }
return tmpData; return tmpData;
} }
private int getMedianIndex(int i){ private int getMedianIndex(int i){
if(i < 0) return Math.abs(i); if(i < 0) return Math.abs(i);
else return i+256; else return i+256;
} }
private int findMedian(int[] median, int medianCount){ private int findMedian(int[] median, int medianCount){
int sum = 0; int sum = 0;
int ret = 0; int ret = 0;
for(int i=0; i<median.length ;i++){ for(int i=0; i<median.length ;i++){
sum += median[i]; sum += median[i];
median[i] = 0; median[i] = 0;
if(sum >= medianCount && ret == 0){ if(sum >= medianCount && ret == 0){
ret = i-256; ret = i-256;
} }
} }
return ret; return ret;
} }
class SortableARGB implements SortableDataList<Integer>{ class SortableARGB implements SortableDataList<Integer>{
private int[][][] data; private int[][][] data;
private int cols; private int cols;
private int rows; private int rows;
private int channel; private int channel;
public SortableARGB(int[][][] data, int cols, int rows, int channel){ public SortableARGB(int[][][] data, int cols, int rows, int channel){
this.data = data; this.data = data;
this.cols = cols; this.cols = cols;
this.rows = rows; this.rows = rows;
this.channel = channel; this.channel = channel;
} }
public int compare(int a, int b) { public int compare(int a, int b) {
return compare(a, data[ getY(b) ][ getX(b) ][ channel ]); return compare(a, data[ getY(b) ][ getX(b) ][ channel ]);
} }
public int compare(int a, Integer b) { public int compare(int a, Integer b) {
return ((Integer)data[ getY(a) ][ getX(a) ][ channel ]).compareTo(b); return ((Integer)data[ getY(a) ][ getX(a) ][ channel ]).compareTo(b);
} }
public Integer get(int i) { public Integer get(int i) {
return data[ getY(i) ][ getX(i) ][ channel ]; return data[ getY(i) ][ getX(i) ][ channel ];
} }
public void set(int i, Integer o){ public void set(int i, Integer o){
data[ getY(i) ][ getX(i) ][ channel ] = o; data[ getY(i) ][ getX(i) ][ channel ] = o;
} }
public int size() { public int size() {
return cols * rows; return cols * rows;
} }
public void swap(int a, int b) { public void swap(int a, int b) {
int tmp = data[ getY(a) ][ getX(a) ][ channel ]; int tmp = data[ getY(a) ][ getX(a) ][ channel ];
data[ getY(a) ][ getX(a) ][ channel ] = data[ getY(b) ][ getX(b) ][ channel ]; data[ getY(a) ][ getX(a) ][ channel ] = data[ getY(b) ][ getX(b) ][ channel ];
data[ getY(b) ][ getX(b) ][ channel ] = tmp; data[ getY(b) ][ getX(b) ][ channel ] = tmp;
} }
private int getX(int a){ private int getX(int a){
return a % cols; return a % cols;
} }
private int getY(int a){ private int getY(int a){
return a / cols; return a / cols;
} }
} }
} }

View file

@ -1,87 +1,87 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class ResizeImage extends ImageFilterProcessor{ public class ResizeImage extends ImageFilterProcessor{
private int width; private int width;
private int height; private int height;
private int[][][] newData; private int[][][] newData;
/** /**
* Will create a ResizeImage object and fix the height with the aspect * Will create a ResizeImage object and fix the height with the aspect
* of the width * of the width
* *
* @param img The image to resize * @param img The image to resize
* @param w The new width * @param w The new width
*/ */
public ResizeImage(BufferedImage img, int w){ public ResizeImage(BufferedImage img, int w){
this(img, w, -1); this(img, w, -1);
} }
/** /**
* Will create a ResizeImage object * Will create a ResizeImage object
* *
* @param img The image to resize * @param img The image to resize
* @param w The new width if -1 then it will be scaled whit aspect of the hight * @param w The new width if -1 then it will be scaled whit aspect of the hight
* @param h The new height if -1 then it will be scaled whit aspect of the width * @param h The new height if -1 then it will be scaled whit aspect of the width
*/ */
public ResizeImage(BufferedImage img, int w, int h){ public ResizeImage(BufferedImage img, int w, int h){
super(img); super(img);
width = w; width = w;
height = h; height = h;
} }
@Override @Override
public int[][][] process(final int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(final int[][][] data, int startX, int startY, int stopX, int stopY) {
if(width < 1){ if(width < 1){
height = (int)(((double)width/(stopX-startX))*(stopY-startY)); height = (int)(((double)width/(stopX-startX))*(stopY-startY));
} }
else if(height < 1){ else if(height < 1){
width = (int)(((double)height/(stopY-startY))*(stopX-startY)); width = (int)(((double)height/(stopY-startY))*(stopX-startY));
} }
newData = new int[height][width][4]; newData = new int[height][width][4];
double xScale = ((double)(stopX-startX)/width); double xScale = ((double)(stopX-startX)/width);
double yScale = ((double)(stopY-startY)/height); double yScale = ((double)(stopY-startY)/height);
for(int y=0; y<width ;y++){ for(int y=0; y<width ;y++){
setProgress(ZMath.percent(0, width-1, y)); setProgress(ZMath.percent(0, width-1, y));
for(int x=0; x<height ;x++){ for(int x=0; x<height ;x++){
newData[y][x][0] = data[(int)(y*yScale)][(int)(x*xScale)][0]; newData[y][x][0] = data[(int)(y*yScale)][(int)(x*xScale)][0];
newData[y][x][1] = data[(int)(y*yScale)][(int)(x*xScale)][1]; newData[y][x][1] = data[(int)(y*yScale)][(int)(x*xScale)][1];
newData[y][x][2] = data[(int)(y*yScale)][(int)(x*xScale)][2]; newData[y][x][2] = data[(int)(y*yScale)][(int)(x*xScale)][2];
newData[y][x][3] = data[(int)(y*yScale)][(int)(x*xScale)][3]; newData[y][x][3] = data[(int)(y*yScale)][(int)(x*xScale)][3];
} }
} }
return newData; return newData;
} }
} }

View file

@ -1,88 +1,88 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
* Generates an image that contains the edges of the source image * Generates an image that contains the edges of the source image
* *
* @author Ziver * @author Ziver
* INFO: http://en.wikipedia.org/wiki/Sobel_operator * INFO: http://en.wikipedia.org/wiki/Sobel_operator
*/ */
public class SobelEdgeDetectionFilter extends ImageFilterProcessor{ public class SobelEdgeDetectionFilter extends ImageFilterProcessor{
private static final double[][] xG_kernel = new double[][]{ private static final double[][] xG_kernel = new double[][]{
{+1, 0, -1}, {+1, 0, -1},
{+2, 0, -2}, {+2, 0, -2},
{+1, 0, -1} {+1, 0, -1}
}; };
private static final double[][] yG_kernel = new double[][]{ private static final double[][] yG_kernel = new double[][]{
{+1, +2, +1}, {+1, +2, +1},
{ 0, 0, 0}, { 0, 0, 0},
{-1, -2, -1} {-1, -2, -1}
}; };
public SobelEdgeDetectionFilter(BufferedImage img) { public SobelEdgeDetectionFilter(BufferedImage img) {
super(img); super(img);
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
ConvolutionFilter conv = new ConvolutionFilter(xG_kernel); ConvolutionFilter conv = new ConvolutionFilter(xG_kernel);
int[][][] xG = conv.process(data, startX, startY, stopX, stopY); int[][][] xG = conv.process(data, startX, startY, stopX, stopY);
setProgress(33); setProgress(33);
conv = new ConvolutionFilter(yG_kernel); conv = new ConvolutionFilter(yG_kernel);
int[][][] yG = conv.process(data, startX, startY, stopX, stopY); int[][][] yG = conv.process(data, startX, startY, stopX, stopY);
setProgress(66); setProgress(66);
int[][][] output = new int[data.length][data[0].length][4]; int[][][] output = new int[data.length][data[0].length][4];
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(66+ZMath.percent(0, (stopY-startY), y+1)/100*34); setProgress(66+ZMath.percent(0, (stopY-startY), y+1)/100*34);
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
output[y][x][0] = data[y][x][0]; output[y][x][0] = data[y][x][0];
output[y][x][1] = (int)Math.sqrt( xG[y][x][1]*xG[y][x][1] + yG[y][x][1]*yG[y][x][1] ); output[y][x][1] = (int)Math.sqrt( xG[y][x][1]*xG[y][x][1] + yG[y][x][1]*yG[y][x][1] );
output[y][x][2] = (int)Math.sqrt( xG[y][x][2]*xG[y][x][2] + yG[y][x][2]*yG[y][x][2] ); output[y][x][2] = (int)Math.sqrt( xG[y][x][2]*xG[y][x][2] + yG[y][x][2]*yG[y][x][2] );
output[y][x][3] = (int)Math.sqrt( xG[y][x][3]*xG[y][x][3] + yG[y][x][3]*yG[y][x][3] ); output[y][x][3] = (int)Math.sqrt( xG[y][x][3]*xG[y][x][3] + yG[y][x][3]*yG[y][x][3] );
/* /*
output[y][x][1] = Math.abs( xG[y][x][1] ) + Math.abs(yG[y][x][1] ); output[y][x][1] = Math.abs( xG[y][x][1] ) + Math.abs(yG[y][x][1] );
output[y][x][2] = Math.abs( xG[y][x][2] ) + Math.abs(yG[y][x][2] ); output[y][x][2] = Math.abs( xG[y][x][2] ) + Math.abs(yG[y][x][2] );
output[y][x][3] = Math.abs( xG[y][x][3] ) + Math.abs(yG[y][x][3] ); output[y][x][3] = Math.abs( xG[y][x][3] ) + Math.abs(yG[y][x][3] );
*/ */
} }
} }
// gradient's direction: // gradient's direction:
// 0 = arctan( yG/xG ) // 0 = arctan( yG/xG )
return output; return output;
} }
} }

View file

@ -1,99 +1,99 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.image.filters; package zutil.image.filter;
import zutil.image.ImageFilterProcessor; import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil; import zutil.image.RAWImageUtil;
import zutil.math.ZMath; import zutil.math.ZMath;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
public class SpotLightFilter extends ImageFilterProcessor{ public class SpotLightFilter extends ImageFilterProcessor{
private int radius; private int radius;
private int xPos; private int xPos;
private int yPos; private int yPos;
/** /**
* Sets up a default spotlight effect in * Sets up a default spotlight effect in
* the middle of the image * the middle of the image
*/ */
public SpotLightFilter(BufferedImage img){ public SpotLightFilter(BufferedImage img){
this(img, 100, -1, -1); this(img, 100, -1, -1);
} }
/** /**
* Sets up a custom spotlight * Sets up a custom spotlight
* @param r The radius of the spotlight in pixels * @param r The radius of the spotlight in pixels
*/ */
public SpotLightFilter(BufferedImage img, int r){ public SpotLightFilter(BufferedImage img, int r){
this(img, r, -1, -1); this(img, r, -1, -1);
} }
/** /**
* Sets up a custom spotlight * Sets up a custom spotlight
* @param r The radius of the spotlight in pixels * @param r The radius of the spotlight in pixels
* @param x The x position of the spotlight, if -1 then it will be centered * @param x The x position of the spotlight, if -1 then it will be centered
* @param y The y position of the spotlight, if -1 then it will be centered * @param y The y position of the spotlight, if -1 then it will be centered
*/ */
public SpotLightFilter(BufferedImage img, int r, int x, int y){ public SpotLightFilter(BufferedImage img, int r, int x, int y){
super(img); super(img);
radius = r; radius = r;
xPos = x; xPos = x;
yPos = y; yPos = y;
} }
@Override @Override
public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) { public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
if(xPos < 0) xPos = data[0].length/2; if(xPos < 0) xPos = data[0].length/2;
if(yPos < 0) yPos = data.length/2; if(yPos < 0) yPos = data.length/2;
int[][][] output = new int[data.length][data[0].length][4]; int[][][] output = new int[data.length][data[0].length][4];
double scale, dx, dy, distance; double scale, dx, dy, distance;
for(int y=startY; y<stopY ;y++){ for(int y=startY; y<stopY ;y++){
setProgress(ZMath.percent(0, (stopY-startY)-1, y)); setProgress(ZMath.percent(0, (stopY-startY)-1, y));
for(int x=startX; x<stopX ;x++){ for(int x=startX; x<stopX ;x++){
dx = x-xPos; dx = x-xPos;
dy = y-yPos; dy = y-yPos;
distance = Math.sqrt(dx*dx+dy*dy); distance = Math.sqrt(dx*dx+dy*dy);
if(distance > radius){ if(distance > radius){
scale = 0; scale = 0;
} }
else{ else{
scale = 1-(distance/radius); scale = 1-(distance/radius);
} }
output[y][x][0] = data[y][x][0]; output[y][x][0] = data[y][x][0];
output[y][x][1] = RAWImageUtil.clip((int)(scale * data[y][x][1])); output[y][x][1] = RAWImageUtil.clip((int)(scale * data[y][x][1]));
output[y][x][2] = RAWImageUtil.clip((int)(scale * data[y][x][2])); output[y][x][2] = RAWImageUtil.clip((int)(scale * data[y][x][2]));
output[y][x][3] = RAWImageUtil.clip((int)(scale * data[y][x][3])); output[y][x][3] = RAWImageUtil.clip((int)(scale * data[y][x][3]));
} }
} }
return output; return output;
} }
} }

View file

@ -24,7 +24,7 @@
package zutil.net.http; package zutil.net.http;
import zutil.converters.Converter; import zutil.converter.Converter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;

View file

@ -24,7 +24,7 @@
package zutil.net.http; package zutil.net.http;
import zutil.converters.Converter; import zutil.converter.Converter;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;

View file

@ -22,7 +22,7 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.net.http.pages; package zutil.net.http.page;
import zutil.io.IOUtil; import zutil.io.IOUtil;
import zutil.io.file.FileUtil; import zutil.io.file.FileUtil;

2
src/zutil/net/nio/NioNetwork.java Normal file → Executable file
View file

@ -25,7 +25,7 @@
package zutil.net.nio; package zutil.net.nio;
import zutil.Encrypter; import zutil.Encrypter;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.io.DynamicByteArrayStream; import zutil.io.DynamicByteArrayStream;
import zutil.io.MultiPrintStream; import zutil.io.MultiPrintStream;
import zutil.log.LogUtil; import zutil.log.LogUtil;

View file

@ -1,39 +1,39 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.net.upnp.services; package zutil.net.upnp.service;
import zutil.net.ws.WSReturnObject; import zutil.net.ws.WSReturnObject;
public class BrowseRetObj extends WSReturnObject{ public class BrowseRetObj extends WSReturnObject{
@WSValueName("Result") @WSValueName("Result")
public String Result; public String Result;
@WSValueName("NumberReturned") @WSValueName("NumberReturned")
public int NumberReturned; public int NumberReturned;
@WSValueName("TotalMatches") @WSValueName("TotalMatches")
public int TotalMatches; public int TotalMatches;
@WSValueName("UpdateID") @WSValueName("UpdateID")
public int UpdateID; public int UpdateID;
} }

View file

@ -22,7 +22,7 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.net.upnp.services; package zutil.net.upnp.service;
import org.dom4j.DocumentException; import org.dom4j.DocumentException;
import zutil.io.file.FileUtil; import zutil.io.file.FileUtil;

View file

@ -24,7 +24,7 @@
package zutil.net.ws.rest; package zutil.net.ws.rest;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.io.StringOutputStream; import zutil.io.StringOutputStream;
import zutil.net.http.HttpHeader; import zutil.net.http.HttpHeader;
import zutil.net.http.HttpPage; import zutil.net.http.HttpPage;

View file

@ -31,9 +31,9 @@ import org.dom4j.Element;
import org.dom4j.io.OutputFormat; import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.http.HttpHeader; import zutil.net.http.HttpHeader;
import zutil.net.http.HttpPage; import zutil.net.http.HttpPage;
import zutil.net.http.HttpPrintStream; import zutil.net.http.HttpPrintStream;
import zutil.net.ws.*; import zutil.net.ws.*;
@ -113,7 +113,7 @@ public class SOAPHttpPage implements HttpPage{
public void respond(HttpPrintStream out, public void respond(HttpPrintStream out,
HttpHeader headers, HttpHeader headers,
Map<String, Object> session, Map<String, Object> session,
Map<String, String> cookie, Map<String, String> cookie,
Map<String, String> request) { Map<String, String> request) {

View file

@ -24,7 +24,7 @@
package zutil.parser; package zutil.parser;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.io.DynamicByteArrayStream; import zutil.io.DynamicByteArrayStream;
public class Base64Decoder { public class Base64Decoder {

View file

@ -24,7 +24,7 @@
package zutil.parser; package zutil.parser;
import zutil.converters.Converter; import zutil.converter.Converter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;

View file

@ -25,7 +25,7 @@
package zutil.parser.binary; package zutil.parser.binary;
import zutil.ByteUtil; import zutil.ByteUtil;
import zutil.converters.Converter; import zutil.converter.Converter;
import zutil.parser.binary.BinaryStruct.BinaryField; import zutil.parser.binary.BinaryStruct.BinaryField;
import java.lang.reflect.Field; import java.lang.reflect.Field;

View file

@ -1,70 +1,70 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.ui.wizard.pages; package zutil.ui.wizard.page;
import zutil.ui.wizard.WizardPage; import zutil.ui.wizard.WizardPage;
import javax.swing.*; import javax.swing.*;
import java.util.HashMap; import java.util.HashMap;
/** /**
* This class will show a summary of all the values * This class will show a summary of all the values
* in the wizard * in the wizard
* *
* @author Ziver * @author Ziver
* *
*/ */
public class SummaryPage extends WizardPage{ public class SummaryPage extends WizardPage{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public SummaryPage(HashMap<String, Object> values){ public SummaryPage(HashMap<String, Object> values){
this.setFinalPage( true ); this.setFinalPage( true );
JTextArea summary = new JTextArea(); JTextArea summary = new JTextArea();
summary.setEditable(false); summary.setEditable(false);
summary.setEnabled(false); summary.setEnabled(false);
this.add( summary ); this.add( summary );
StringBuffer tmp = new StringBuffer(); StringBuffer tmp = new StringBuffer();
for(String key : values.keySet()){ for(String key : values.keySet()){
tmp.append(key); tmp.append(key);
tmp.append(": "); tmp.append(": ");
tmp.append(values.get( key )); tmp.append(values.get( key ));
tmp.append("\n"); tmp.append("\n");
} }
summary.setText( tmp.toString() ); summary.setText( tmp.toString() );
} }
@Override @Override
public WizardPage getNextPage(HashMap<String, Object> values) { public WizardPage getNextPage(HashMap<String, Object> values) {
return null; return null;
} }
@Override @Override
public String getPageDescription() { public String getPageDescription() {
return "Summary"; return "Summary";
} }
} }

View file

@ -22,13 +22,13 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil;
import org.junit.Test; import org.junit.Test;
import zutil.ByteUtil;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
/** /**
* Created by Ziver on 2016-01-31. * Created by Ziver on 2016-01-31.
*/ */

View file

@ -1,73 +1,73 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil;
import org.junit.Test; import org.junit.Test;
import zutil.Encrypter; import zutil.Encrypter.Algorithm;
import zutil.Encrypter.Algorithm;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class EncrypterTest { public class EncrypterTest {
public static final String data = "Hello there, wats yor name, my is a secret, 123456789"; public static final String data = "Hello there, wats yor name, my is a secret, 123456789";
public static final String key = "abcdefghijklmnopqrstuvwxyz"; public static final String key = "abcdefghijklmnopqrstuvwxyz";
@Test @Test
public void encryptDES() throws Exception { public void encryptDES() throws Exception {
Encrypter.randomizeSalt(); Encrypter.randomizeSalt();
Encrypter encrypter = new Encrypter(key, Algorithm.DES); Encrypter encrypter = new Encrypter(key, Algorithm.DES);
Encrypter decrypter = new Encrypter(key, Algorithm.DES); Encrypter decrypter = new Encrypter(key, Algorithm.DES);
assertEquals(data, encryptDecrypt(encrypter, decrypter, data)); assertEquals(data, encryptDecrypt(encrypter, decrypter, data));
} }
@Test @Test
public void encryptBLOWFISH() throws Exception { public void encryptBLOWFISH() throws Exception {
Encrypter.randomizeSalt(); Encrypter.randomizeSalt();
Encrypter encrypter = new Encrypter(Algorithm.Blowfish); Encrypter encrypter = new Encrypter(Algorithm.Blowfish);
Encrypter.randomizeSalt(); Encrypter.randomizeSalt();
Encrypter decrypter = new Encrypter(encrypter.getKey()); Encrypter decrypter = new Encrypter(encrypter.getKey());
assertEquals(data, encryptDecrypt(encrypter, decrypter, data)); assertEquals(data, encryptDecrypt(encrypter, decrypter, data));
} }
@Test @Test
public void encryptAES() throws Exception { public void encryptAES() throws Exception {
Encrypter.randomizeSalt(); Encrypter.randomizeSalt();
Encrypter encrypter = new Encrypter(key, Algorithm.AES); Encrypter encrypter = new Encrypter(key, Algorithm.AES);
Encrypter decrypter = new Encrypter(key, Algorithm.AES); Encrypter decrypter = new Encrypter(key, Algorithm.AES);
assertEquals(data, encryptDecrypt(encrypter, decrypter, data)); assertEquals(data, encryptDecrypt(encrypter, decrypter, data));
} }
public static String encryptDecrypt(Encrypter encrypter, Encrypter decrypter, String data){ public static String encryptDecrypt(Encrypter encrypter, Encrypter decrypter, String data){
byte[] encrypted = encrypter.encrypt(data.getBytes()); byte[] encrypted = encrypter.encrypt(data.getBytes());
byte[] decrypted = decrypter.decrypt(encrypted); byte[] decrypted = decrypter.decrypt(encrypted);
return new String(decrypted); return new String(decrypted);
} }
} }

View file

@ -1,52 +1,51 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil;
import org.junit.Test; import org.junit.Test;
import zutil.Hasher;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class HasherTest {
public class HasherTest {
@Test
@Test public void MD5Test(){
public void MD5Test(){ assertEquals(Hasher.MD5("AAAABBBB"), "9da4fc50e09e5eeb8ae8149ef4f23792");
assertEquals(Hasher.MD5("AAAABBBB"), "9da4fc50e09e5eeb8ae8149ef4f23792"); assertEquals(Hasher.MD5("qwerty12345"), "85064efb60a9601805dcea56ec5402f7");
assertEquals(Hasher.MD5("qwerty12345"), "85064efb60a9601805dcea56ec5402f7"); assertEquals(Hasher.MD5("123456789"), "25f9e794323b453885f5181f1b624d0b");
assertEquals(Hasher.MD5("123456789"), "25f9e794323b453885f5181f1b624d0b"); //assertEquals(Hasher.MD5(".,<>|!#<23>%&/()=?"), "20d5cda029514fa49a8bbe854a539847");
//assertEquals(Hasher.MD5(".,<>|!#<23>%&/()=?"), "20d5cda029514fa49a8bbe854a539847"); assertEquals(Hasher.MD5("Test45"), "fee43a4c9d88769e14ec6a1d8b80f2e7");
assertEquals(Hasher.MD5("Test45"), "fee43a4c9d88769e14ec6a1d8b80f2e7"); }
}
@Test
@Test public void SHA1Test(){
public void SHA1Test(){ assertEquals(Hasher.SHA1("AAAABBBB"), "7cd188ef3a9ea7fa0ee9c62c168709695460f5c0");
assertEquals(Hasher.SHA1("AAAABBBB"), "7cd188ef3a9ea7fa0ee9c62c168709695460f5c0"); assertEquals(Hasher.SHA1("qwerty12345"), "4e17a448e043206801b95de317e07c839770c8b8");
assertEquals(Hasher.SHA1("qwerty12345"), "4e17a448e043206801b95de317e07c839770c8b8"); assertEquals(Hasher.SHA1("123456789"), "f7c3bc1d808e04732adf679965ccc34ca7ae3441");
assertEquals(Hasher.SHA1("123456789"), "f7c3bc1d808e04732adf679965ccc34ca7ae3441"); //assertEquals(Hasher.SHA1(".,<>|!#<23>%&/()=?"), "6b3de029cdb367bb365d5154a197294ee590a77a");
//assertEquals(Hasher.SHA1(".,<>|!#<23>%&/()=?"), "6b3de029cdb367bb365d5154a197294ee590a77a"); assertEquals(Hasher.SHA1("Test45"), "9194c6e64a6801e24e63a924d5843a46428d2b3a");
assertEquals(Hasher.SHA1("Test45"), "9194c6e64a6801e24e63a924d5843a46428d2b3a"); }
} }
}

View file

@ -1,104 +1,105 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil;
import org.junit.Test; import org.junit.Test;
import zutil.StringUtil; import zutil.StringUtil;
import java.util.Arrays; import java.util.Arrays;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
public class StringUtilTest {
public class StringUtilTest {
@Test
public void formatByteSizeToStringTest() { @Test
assertEquals( "100.0 B", StringUtil.formatByteSizeToString(100) ); public void formatByteSizeToStringTest() {
assertEquals( "9.7 kB", StringUtil.formatByteSizeToString(10000) ); assertEquals( "100.0 B", StringUtil.formatByteSizeToString(100) );
} assertEquals( "9.7 kB", StringUtil.formatByteSizeToString(10000) );
}
@Test
public void formatTimeToStringTest() { @Test
assertEquals( "1 sec ", StringUtil.formatTimeToString( 1000 ) ); public void formatTimeToStringTest() {
assertEquals( "1 month 1 day 1 hour 1 min 1 sec 1 milisec ", assertEquals( "1 sec ", StringUtil.formatTimeToString( 1000 ) );
StringUtil.formatTimeToString( 2629743830l+86400000+3600000+60000+1000+1 ) ); assertEquals( "1 month 1 day 1 hour 1 min 1 sec 1 milisec ",
assertEquals( "2 months 2 days 2 hours 2 min 2 sec 2 milisec ", StringUtil.formatTimeToString( 2629743830l+86400000+3600000+60000+1000+1 ) );
StringUtil.formatTimeToString( (2629743830l+86400000+3600000+60000+1000+1)*2 ) ); assertEquals( "2 months 2 days 2 hours 2 min 2 sec 2 milisec ",
} StringUtil.formatTimeToString( (2629743830l+86400000+3600000+60000+1000+1)*2 ) );
}
@Test
public void trimTest() { @Test
assertEquals( "", StringUtil.trim("", ' ') ); public void trimTest() {
assertEquals( "aa", StringUtil.trim(" aa ", ' ') ); assertEquals( "", StringUtil.trim("", ' ') );
assertEquals( "aa", StringUtil.trim("aa ", ' ') ); assertEquals( "aa", StringUtil.trim(" aa ", ' ') );
assertEquals( "aa", StringUtil.trim(" aa", ' ') ); assertEquals( "aa", StringUtil.trim("aa ", ' ') );
assertEquals( "", StringUtil.trim(" aa ", 'a') ); assertEquals( "aa", StringUtil.trim(" aa", ' ') );
assertEquals( "aa", StringUtil.trim("\u0010 aa ", ' ') ); assertEquals( "", StringUtil.trim(" aa ", 'a') );
assertEquals( "aa", StringUtil.trim("\n\naa\n\t", ' ') ); assertEquals( "aa", StringUtil.trim("\u0010 aa ", ' ') );
assertEquals( "aa", StringUtil.trim("\"aa\"", '\"') ); assertEquals( "aa", StringUtil.trim("\n\naa\n\t", ' ') );
} assertEquals( "aa", StringUtil.trim("\"aa\"", '\"') );
}
@Test
public void trimQuotesTest() { @Test
assertEquals( "", StringUtil.trimQuotes("") ); public void trimQuotesTest() {
assertEquals( "\"", StringUtil.trimQuotes("\"") ); assertEquals( "", StringUtil.trimQuotes("") );
assertEquals( "", StringUtil.trimQuotes("\"\"") ); assertEquals( "\"", StringUtil.trimQuotes("\"") );
assertEquals( "\"aa", StringUtil.trimQuotes("\"aa") ); assertEquals( "", StringUtil.trimQuotes("\"\"") );
assertEquals( "aa\"", StringUtil.trimQuotes("aa\"") ); assertEquals( "\"aa", StringUtil.trimQuotes("\"aa") );
assertEquals( "aa", StringUtil.trimQuotes("\"aa\"") ); assertEquals( "aa\"", StringUtil.trimQuotes("aa\"") );
} assertEquals( "aa", StringUtil.trimQuotes("\"aa\"") );
}
@Test
public void formatBytesToStringTest(){ @Test
byte[] data = new byte[1]; public void formatBytesToStringTest(){
assertEquals("000 00 '. '", byte[] data = new byte[1];
StringUtil.formatBytesToString(data)); assertEquals("000 00 '. '",
StringUtil.formatBytesToString(data));
data[0] = 65;
assertEquals("000 41 'A '", data[0] = 65;
StringUtil.formatBytesToString(data)); assertEquals("000 41 'A '",
StringUtil.formatBytesToString(data));
byte[] data2 = new byte[8];
data2[4] = 65; byte[] data2 = new byte[8];
assertEquals("000 00 00 00 00 41 00 00 00 '....A...'", data2[4] = 65;
StringUtil.formatBytesToString(data2)); assertEquals("000 00 00 00 00 41 00 00 00 '....A...'",
StringUtil.formatBytesToString(data2));
byte[] data3 = new byte[32];
data3[4] = 65; byte[] data3 = new byte[32];
assertEquals("000 00 00 00 00 41 00 00 00 '....A...'\n"+ data3[4] = 65;
"008 00 00 00 00 00 00 00 00 '........'\n"+ assertEquals("000 00 00 00 00 41 00 00 00 '....A...'\n"+
"016 00 00 00 00 00 00 00 00 '........'\n"+ "008 00 00 00 00 00 00 00 00 '........'\n"+
"024 00 00 00 00 00 00 00 00 '........'", "016 00 00 00 00 00 00 00 00 '........'\n"+
StringUtil.formatBytesToString(data3)); "024 00 00 00 00 00 00 00 00 '........'",
} StringUtil.formatBytesToString(data3));
}
@Test
public void joinTest(){ @Test
assertEquals("", StringUtil.join(Arrays.asList(), ",")); public void joinTest(){
assertEquals("1,2,3,4,5", StringUtil.join(Arrays.asList(1,2,3,4,5), ",")); assertEquals("", StringUtil.join(Arrays.asList(), ","));
assertEquals("animal,monkey,dog", StringUtil.join(Arrays.asList("animal", "monkey", "dog"), ",")); assertEquals("1,2,3,4,5", StringUtil.join(Arrays.asList(1,2,3,4,5), ","));
assertEquals("12345", StringUtil.join(Arrays.asList(1,2,3,4,5), "")); assertEquals("animal,monkey,dog", StringUtil.join(Arrays.asList("animal", "monkey", "dog"), ","));
} assertEquals("12345", StringUtil.join(Arrays.asList(1,2,3,4,5), ""));
} }
}

View file

@ -1,50 +1,53 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.algo.search;
import zutil.algo.search.QuickSelect; import zutil.algo.sort.sortable.SortableIntArray;
import zutil.algo.sort.sortable.SortableIntArray;
import java.util.Arrays;
import java.util.Arrays;
public class QuickSelectTest { /**
public static void main(String[] args){ * TODO: Convert to JUnit
int[] array = {1,3,4,6,3,2,98,5,7,8,543,2,4,5,8,9,5,2,3,5,7,5,3,2,6,8,5,324,8,6}; */
//int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20}; public class QuickSelectTest {
public static void main(String[] args){
long time = System.currentTimeMillis(); int[] array = {1,3,4,6,3,2,98,5,7,8,543,2,4,5,8,9,5,2,3,5,7,5,3,2,6,8,5,324,8,6};
int median = (Integer)QuickSelect.find(new SortableIntArray(array), array.length/2); //int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20};
System.out.println("QuickSelection("+(System.currentTimeMillis()-time)+"ms): "+median);
long time = System.currentTimeMillis();
time = System.currentTimeMillis(); int median = (Integer)QuickSelect.find(new SortableIntArray(array), array.length/2);
Arrays.sort(array); System.out.println("QuickSelection("+(System.currentTimeMillis()-time)+"ms): "+median);
System.out.println("RightAnswer("+(System.currentTimeMillis()-time)+"ms): "+array[array.length/2]);
time = System.currentTimeMillis();
System.out.println("Sorted Array("+array.length+"): "); Arrays.sort(array);
for(int i=0; i<array.length ;i++){ System.out.println("RightAnswer("+(System.currentTimeMillis()-time)+"ms): "+array[array.length/2]);
System.out.println(array[i] +",");
} System.out.println("Sorted Array("+array.length+"): ");
} for(int i=0; i<array.length ;i++){
} System.out.println(array[i] +",");
}
}
}

View file

@ -1,44 +1,42 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.algo.sort;
import zutil.algo.sort.ExternalSort; import java.io.File;
import java.io.File;
public class ExternalSortTest {
public static void main(String[] args){
public class ExternalSortTest { try {
public static void main(String[] args){ File file = new File("C:\\Users\\Ziver\\Desktop\\IndexFile.txt");
try { File sortedFile = new File("C:\\Users\\Ziver\\Desktop\\SortedIndexFile.txt");
File file = new File("C:\\Users\\Ziver\\Desktop\\IndexFile.txt");
File sortedFile = new File("C:\\Users\\Ziver\\Desktop\\SortedIndexFile.txt"); ExternalSort sort = new ExternalSort(file, sortedFile);
sort.sort();
ExternalSort sort = new ExternalSort(file, sortedFile); } catch (Exception e) {
sort.sort(); e.printStackTrace();
} catch (Exception e) { }
e.printStackTrace(); }
} }
}
}

View file

@ -1,70 +1,71 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.algo.sort;
import zutil.algo.sort.MergeSort; import zutil.algo.sort.MergeSort;
import zutil.algo.sort.sortable.SortableIntArray; import zutil.algo.sort.sortable.SortableIntArray;
@SuppressWarnings("unused") // TODO: Convert to JUnit
public class SortTestSimple { @SuppressWarnings("unused")
public static final int SIZE = 10000; public class MergeSortTest {
public static final int MAX_INT = 10000; public static final int SIZE = 10000;
public static final int MAX_INT = 10000;
public static void main(String[] args){
int[] array = new int[SIZE]; public static void main(String[] args){
int[] array = new int[SIZE];
for(int i=0; i<array.length ;i++){
array[i] = (int)(Math.random()*MAX_INT); for(int i=0; i<array.length ;i++){
} array[i] = (int)(Math.random()*MAX_INT);
}
for(int i=0; i<array.length ;i++){
System.out.print(array[i]+", "); for(int i=0; i<array.length ;i++){
} System.out.print(array[i]+", ");
}
long time = System.currentTimeMillis();
//SimpleSort.bubbleSort( new SortableIntArray(array) ); long time = System.currentTimeMillis();
//SimpleSort.selectionSort( new SortableIntArray(array) ); //SimpleSort.bubbleSort( new SortableIntArray(array) );
//SimpleSort.insertionSort( new SortableIntArray(array) ); //SimpleSort.selectionSort( new SortableIntArray(array) );
//QuickSort.sort( new SortableIntArray(array) ); //SimpleSort.insertionSort( new SortableIntArray(array) );
//MergeSort.sort( array ); //QuickSort.sort( new SortableIntArray(array) );
MergeSort.sort( new SortableIntArray(array) ); //MergeSort.sort( array );
time = System.currentTimeMillis() - time; MergeSort.sort( new SortableIntArray(array) );
time = System.currentTimeMillis() - time;
System.out.println("\n--------------------------------------------");
System.out.print(array[0]+", "); System.out.println("\n--------------------------------------------");
int error = -1; System.out.print(array[0]+", ");
for(int i=1; i<array.length ;i++){ int error = -1;
System.out.print(array[i]+", "); for(int i=1; i<array.length ;i++){
if(array[i-1] > array[i]){ System.out.print(array[i]+", ");
error = i; if(array[i-1] > array[i]){
} error = i;
} }
}
if(error >= 0){
System.out.println("\nArray not sorted!! ("+array[error-1]+" > "+array[error]+")"); if(error >= 0){
} System.out.println("\nArray not sorted!! ("+array[error-1]+" > "+array[error]+")");
System.out.println("\nTime: "+time+" ms"); }
} System.out.println("\nTime: "+time+" ms");
} }
}

View file

@ -1,62 +1,61 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.chart;
import zutil.chart.ChartData; import zutil.log.LogUtil;
import zutil.chart.LineChart;
import zutil.log.LogUtil; import javax.swing.*;
import java.util.logging.Level;
import javax.swing.*;
import java.util.logging.Level;
public class ChartTest extends JFrame{
public class ChartTest extends JFrame{ private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
public static void main(String[] args) { LogUtil.setLevel("zutil", Level.FINEST);
LogUtil.setLevel("zutil", Level.FINEST); ChartTest frame = new ChartTest();
ChartTest frame = new ChartTest(); frame.setVisible(true);
frame.setVisible(true); }
}
public ChartTest(){
public ChartTest(){ ChartData data = new ChartData();
ChartData data = new ChartData(); data.addPoint(1,1);
data.addPoint(1,1); data.addPoint(2,1);
data.addPoint(2,1); data.addPoint(3,1);
data.addPoint(3,1); data.addPoint(4,1);
data.addPoint(4,1); data.addPoint(5,1);
data.addPoint(5,1); data.addPoint(6,1);
data.addPoint(6,1); data.addPoint(7,1);
data.addPoint(7,1); data.addPoint(8,1);
data.addPoint(8,1);
LineChart chart = new LineChart();
LineChart chart = new LineChart(); chart.setChartData( data );
chart.setChartData( data ); this.add( chart );
this.add( chart );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); this.setSize(600, 400);
this.setSize(600, 400); }
}
}
}

View file

@ -1,61 +1,61 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.db;
import zutil.db.DBConnection; import zutil.db.handler.SimpleSQLResult;
import zutil.db.handler.SimpleSQLResult;
import java.sql.PreparedStatement;
import java.sql.PreparedStatement;
public class DBConnectionTest { public class DBConnectionTest {
public static void main(String[] args){ public static void main(String[] args){
try { try {
DBConnection db = new DBConnection("koc.se","db","user","password"); DBConnection db = new DBConnection("koc.se","db","user","password");
// Query 1 // Query 1
PreparedStatement sql = db.getPreparedStatement("SELECT ?"); PreparedStatement sql = db.getPreparedStatement("SELECT ?");
sql.setInt(1, 1); sql.setInt(1, 1);
DBConnection.exec(sql); DBConnection.exec(sql);
// Query 2 // Query 2
db.exec("UPDATE ..."); db.exec("UPDATE ...");
// Query 3 // Query 3
String s = db.exec("SELECT hello", new SimpleSQLResult<String>()); String s = db.exec("SELECT hello", new SimpleSQLResult<String>());
System.out.println( s ); System.out.println( s );
// Query 4 // Query 4
PreparedStatement sql2 = db.getPreparedStatement("SELECT ?"); PreparedStatement sql2 = db.getPreparedStatement("SELECT ?");
sql2.setString(1, "hello"); sql2.setString(1, "hello");
String s2 = DBConnection.exec(sql2, new SimpleSQLResult<String>()); String s2 = DBConnection.exec(sql2, new SimpleSQLResult<String>());
System.out.println( s2 ); System.out.println( s2 );
db.close(); db.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }

View file

@ -1,120 +1,120 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.db;
import org.junit.Test; import org.junit.Test;
import zutil.db.SQLQuery;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class SQLQueryTest { public class SQLQueryTest {
@Test @Test
public void selectTest() { public void selectTest() {
assertEquals( "SELECT * FROM test1", assertEquals( "SELECT * FROM test1",
""+SQLQuery.SELECT().FROM("test1") ); ""+SQLQuery.SELECT().FROM("test1") );
assertEquals( "SELECT * FROM test1", assertEquals( "SELECT * FROM test1",
""+SQLQuery.SELECT("*").FROM("test1") ); ""+SQLQuery.SELECT("*").FROM("test1") );
assertEquals( "SELECT test1,test2 FROM test1", assertEquals( "SELECT test1,test2 FROM test1",
""+SQLQuery.SELECT("test1","test2").FROM("test1") ); ""+SQLQuery.SELECT("test1","test2").FROM("test1") );
} }
@Test @Test
public void selectJoinTest() { public void selectJoinTest() {
assertEquals( "SELECT * FROM test1 JOIN test2", assertEquals( "SELECT * FROM test1 JOIN test2",
""+SQLQuery.SELECT("*").FROM("test1").JOIN("test2") ); ""+SQLQuery.SELECT("*").FROM("test1").JOIN("test2") );
assertEquals( "SELECT * FROM test1 NATURAL JOIN test2", assertEquals( "SELECT * FROM test1 NATURAL JOIN test2",
""+SQLQuery.SELECT("*").FROM("test1").NATURAL_JOIN("test2") ); ""+SQLQuery.SELECT("*").FROM("test1").NATURAL_JOIN("test2") );
assertEquals( "SELECT * FROM test1 UNION test2", assertEquals( "SELECT * FROM test1 UNION test2",
""+SQLQuery.SELECT("*").FROM("test1").UNION("test2") ); ""+SQLQuery.SELECT("*").FROM("test1").UNION("test2") );
assertEquals( "SELECT * FROM test1 JOIN test2 NATURAL JOIN test3 UNION test4", assertEquals( "SELECT * FROM test1 JOIN test2 NATURAL JOIN test3 UNION test4",
""+SQLQuery.SELECT("*").FROM("test1").JOIN("test2").NATURAL_JOIN("test3").UNION("test4") ); ""+SQLQuery.SELECT("*").FROM("test1").JOIN("test2").NATURAL_JOIN("test3").UNION("test4") );
assertEquals( "SELECT * FROM test1 NATURAL JOIN test2 NATURAL JOIN test3 NATURAL JOIN test4", assertEquals( "SELECT * FROM test1 NATURAL JOIN test2 NATURAL JOIN test3 NATURAL JOIN test4",
""+SQLQuery.SELECT("*").FROM().NATURAL_JOIN("test1","test2","test3","test4") ); ""+SQLQuery.SELECT("*").FROM().NATURAL_JOIN("test1","test2","test3","test4") );
assertEquals( "SELECT * FROM test1 JOIN test2 JOIN test3 JOIN test4", assertEquals( "SELECT * FROM test1 JOIN test2 JOIN test3 JOIN test4",
""+SQLQuery.SELECT("*").FROM().JOIN("test1","test2","test3","test4") ); ""+SQLQuery.SELECT("*").FROM().JOIN("test1","test2","test3","test4") );
assertEquals( "SELECT * FROM test1 UNION test2 UNION test3 UNION test4", assertEquals( "SELECT * FROM test1 UNION test2 UNION test3 UNION test4",
""+SQLQuery.SELECT("*").FROM().UNION("test1","test2","test3","test4") ); ""+SQLQuery.SELECT("*").FROM().UNION("test1","test2","test3","test4") );
} }
@Test @Test
public void selectWhereTest() { public void selectWhereTest() {
assertEquals( "SELECT * FROM test1 WHERE arg=value", assertEquals( "SELECT * FROM test1 WHERE arg=value",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value") ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value") );
} }
@Test @Test
public void selectGroupByTest() { public void selectGroupByTest() {
assertEquals( "SELECT * FROM test1 GROUP BY col1", assertEquals( "SELECT * FROM test1 GROUP BY col1",
""+SQLQuery.SELECT("*").FROM("test1").GROUP_BY("col1") ); ""+SQLQuery.SELECT("*").FROM("test1").GROUP_BY("col1") );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1") ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1") );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ASC", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ASC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ASC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ASC() );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 DESC", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 DESC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").DESC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").DESC() );
} }
@Test @Test
public void selectOrderByTest() { public void selectOrderByTest() {
assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1", assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1") ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1") );
assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 ASC", assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 ASC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").ASC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").ASC() );
assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 DESC", assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 DESC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").DESC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").DESC() );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ORDER BY col2 DESC", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ORDER BY col2 DESC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ORDER_BY("col2").DESC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ORDER_BY("col2").DESC() );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ASC ORDER BY col2 DESC", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ASC ORDER BY col2 DESC",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ASC().ORDER_BY("col2").DESC() ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ASC().ORDER_BY("col2").DESC() );
} }
@Test @Test
public void selectLimitTest() { public void selectLimitTest() {
assertEquals( "SELECT * FROM test1 LIMIT 1", assertEquals( "SELECT * FROM test1 LIMIT 1",
""+SQLQuery.SELECT("*").FROM("test1").LIMIT(1) ); ""+SQLQuery.SELECT("*").FROM("test1").LIMIT(1) );
assertEquals( "SELECT * FROM test1 LIMIT 1 4", assertEquals( "SELECT * FROM test1 LIMIT 1 4",
""+SQLQuery.SELECT("*").FROM("test1").LIMIT(1).TO(4) ); ""+SQLQuery.SELECT("*").FROM("test1").LIMIT(1).TO(4) );
assertEquals( "SELECT * FROM test1 WHERE arg=value LIMIT 1", assertEquals( "SELECT * FROM test1 WHERE arg=value LIMIT 1",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").LIMIT(1) ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").LIMIT(1) );
assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 DESC LIMIT 1", assertEquals( "SELECT * FROM test1 WHERE arg=value ORDER BY col1 DESC LIMIT 1",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").DESC().LIMIT(1) ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").ORDER_BY("col1").DESC().LIMIT(1) );
assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ORDER BY col2 DESC LIMIT 1", assertEquals( "SELECT * FROM test1 WHERE arg=value GROUP BY col1 ORDER BY col2 DESC LIMIT 1",
""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ORDER_BY("col2").DESC().LIMIT(1) ); ""+SQLQuery.SELECT("*").FROM("test1").WHERE().EQ("arg","value").GROUP_BY("col1").ORDER_BY("col2").DESC().LIMIT(1) );
} }
@Test @Test
public void updateTest() { public void updateTest() {
} }
@Test @Test
public void deleteTest() { public void deleteTest() {
} }
@Test @Test
public void createTest() { public void createTest() {
} }
} }

View file

@ -1,130 +1,130 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.image;
import zutil.ProgressListener; import zutil.ProgressListener;
import zutil.image.ImageFilterProcessor; import zutil.image.filter.GaussianBlurFilter;
import zutil.image.filters.GaussianBlurFilter;
import javax.imageio.ImageIO;
import javax.imageio.ImageIO; import javax.swing.*;
import javax.swing.*; import java.awt.*;
import java.awt.*; import java.awt.event.WindowAdapter;
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;
import java.awt.event.WindowEvent; import java.awt.image.BufferedImage;
import java.awt.image.BufferedImage; import java.io.BufferedInputStream;
import java.io.BufferedInputStream; import java.io.FileInputStream;
import java.io.FileInputStream; import java.io.IOException;
import java.io.IOException; import java.io.InputStream;
import java.io.InputStream;
@SuppressWarnings({ "unused", "rawtypes" }) @SuppressWarnings({ "unused", "rawtypes" })
public class ImageProcessorTest implements ProgressListener{ public class ImageProcessorTest implements ProgressListener{
private static String imgPath = "test.gif"; private static String imgPath = "test.gif";
//private static String imgPath = "test2.jpg"; //private static String imgPath = "test2.jpg";
private JLabel processedLabel; private JLabel processedLabel;
private JLabel orginalLabel; private JLabel orginalLabel;
private JProgressBar progress; private JProgressBar progress;
public static void main(String[] args){ public static void main(String[] args){
new ImageProcessorTest(); new ImageProcessorTest();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public ImageProcessorTest(){ public ImageProcessorTest(){
JFrame frame = getJFrame(); JFrame frame = getJFrame();
BufferedImage img = null; BufferedImage img = null;
try { try {
// Read from an input stream // Read from an input stream
InputStream is = new BufferedInputStream(new FileInputStream(imgPath)); InputStream is = new BufferedInputStream(new FileInputStream(imgPath));
img = ImageIO.read(is); img = ImageIO.read(is);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
System.exit(1); System.exit(1);
} }
ImageIcon orginalIcon = new ImageIcon(img); ImageIcon orginalIcon = new ImageIcon(img);
orginalLabel.setIcon(orginalIcon); orginalLabel.setIcon(orginalIcon);
frame.setVisible(true); frame.setVisible(true);
frame.pack(); frame.pack();
BufferedImage procImg = null; BufferedImage procImg = null;
try { try {
//ImageFilterProcessor processor = new SobelEdgeDetectionFilter(img); //ImageFilterProcessor processor = new SobelEdgeDetectionFilter(img);
ImageFilterProcessor processor = new GaussianBlurFilter(img); ImageFilterProcessor processor = new GaussianBlurFilter(img);
//ImageFilterProcessor processor = new BlurFilter(img, 100); //ImageFilterProcessor processor = new BlurFilter(img, 100);
//ImageFilterProcessor processor = new ColorIntensityFilter(img, true); //ImageFilterProcessor processor = new ColorIntensityFilter(img, true);
//ImageFilterProcessor processor = new ContrastBrightnessFilter(img); //ImageFilterProcessor processor = new ContrastBrightnessFilter(img);
//ImageFilterProcessor processor = new DitheringFilter(img); //ImageFilterProcessor processor = new DitheringFilter(img);
//ImageFilterProcessor processor = new MeanBlurFilter(img); //ImageFilterProcessor processor = new MeanBlurFilter(img);
//ImageFilterProcessor processor = new MedianFilter(img); //ImageFilterProcessor processor = new MedianFilter(img);
//ImageFilterProcessor processor = new ResizeImage(img,100,100); //ImageFilterProcessor processor = new ResizeImage(img,100,100);
//ImageFilterProcessor processor = new SpotLightFilter(img,100,100,100); //ImageFilterProcessor processor = new SpotLightFilter(img,100,100,100);
processor.setProgressListener(this); processor.setProgressListener(this);
procImg = processor.process(); procImg = processor.process();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
ImageIcon processedIcon = new ImageIcon(procImg); ImageIcon processedIcon = new ImageIcon(procImg);
processedLabel.setIcon(processedIcon); processedLabel.setIcon(processedIcon);
frame.pack(); frame.pack();
} }
private JFrame getJFrame() { private JFrame getJFrame() {
processedLabel = new JLabel("Processed"); processedLabel = new JLabel("Processed");
orginalLabel = new JLabel("Orginal"); orginalLabel = new JLabel("Orginal");
progress = new JProgressBar(); progress = new JProgressBar();
progress.setMaximum(100); progress.setMaximum(100);
progress.setValue(0); progress.setValue(0);
progress.setIndeterminate(false); progress.setIndeterminate(false);
progress.setStringPainted(true); progress.setStringPainted(true);
JPanel jPanel = new JPanel(); JPanel jPanel = new JPanel();
jPanel.setLayout(new BorderLayout()); jPanel.setLayout(new BorderLayout());
jPanel.add(orginalLabel, BorderLayout.NORTH); jPanel.add(orginalLabel, BorderLayout.NORTH);
jPanel.add(processedLabel, BorderLayout.CENTER); jPanel.add(processedLabel, BorderLayout.CENTER);
jPanel.add(progress, BorderLayout.SOUTH); jPanel.add(progress, BorderLayout.SOUTH);
JFrame jFrame = new JFrame("ImageProcessorTest"); JFrame jFrame = new JFrame("ImageProcessorTest");
jFrame.setSize(new Dimension(715, 361)); jFrame.setSize(new Dimension(715, 361));
jFrame.setContentPane(jPanel); jFrame.setContentPane(jPanel);
jFrame.addWindowListener(new WindowAdapter() { jFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
System.exit(0); System.exit(0);
} }
}); });
return jFrame; return jFrame;
} }
public void progressUpdate(Object source, Object info, double percent) { public void progressUpdate(Object source, Object info, double percent) {
progress.setValue((int)percent); progress.setValue((int)percent);
} }
} }

View file

@ -1,100 +1,99 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.io;
import org.junit.Test; import org.junit.Test;
import zutil.io.BoundaryBufferedInputStream;
import zutil.io.StringInputStream; import java.io.IOException;
import java.io.IOException; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
@SuppressWarnings("resource")
@SuppressWarnings("resource") public class BoundaryBufferedInputStreamTest {
public class BoundaryBufferedInputStreamTest {
@Test
@Test public void testReadB1() throws IOException {
public void testReadB1() throws IOException { StringInputStream inin = new StringInputStream();
StringInputStream inin = new StringInputStream(); BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin);
BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin); inin.add("aaa#aaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaa#");
inin.add("aaa#aaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaa#");
in.setBoundary("#");
in.setBoundary("#");
int n = 0;
int n = 0; for(n=0; in.read() != -1; n++);
for(n=0; in.read() != -1; n++); assertEquals(3, n);
assertEquals(3, n);
in.next();
in.next(); n = 0;
n = 0; for(n=0; in.read() != -1; n++);
for(n=0; in.read() != -1; n++); assertEquals(16, n);
assertEquals(16, n);
in.next();
in.next(); n = 0;
n = 0; for(n=0; in.read() != -1; n++);
for(n=0; in.read() != -1; n++); assertEquals(15, n);
assertEquals(15, n);
in.next();
in.next(); assertEquals(-1, in.read());
assertEquals(-1, in.read());
}
}
@Test
@Test public void testOnlyBoundaries() throws IOException {
public void testOnlyBoundaries() throws IOException { StringInputStream inin = new StringInputStream();
StringInputStream inin = new StringInputStream(); BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin);
BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin); inin.add("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
inin.add("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
in.setBoundary("a");
in.setBoundary("a");
int n;
int n; for(n=1; true; n++){
for(n=1; true; n++){ assertEquals(-1, in.read());
assertEquals(-1, in.read()); assertEquals(-1, in.read());
assertEquals(-1, in.read()); in.next();
in.next(); if(!in.isBoundary())
if(!in.isBoundary()) break;
break; }
} assertEquals(35, n);
assertEquals(35, n); }
}
@Test
@Test public void testNoBounds() throws IOException {
public void testNoBounds() throws IOException { String data = "1234567891011121314151617181920";
String data = "1234567891011121314151617181920"; StringInputStream inin = new StringInputStream();
StringInputStream inin = new StringInputStream(); BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin);
BoundaryBufferedInputStream in = new BoundaryBufferedInputStream(inin); inin.add(data);
inin.add(data); in.setBoundary("#");
in.setBoundary("#");
int out;
int out; StringBuilder output = new StringBuilder();
StringBuilder output = new StringBuilder(); while((out = in.read()) != -1){
while((out = in.read()) != -1){ output.append((char)out);
output.append((char)out); }
} assertEquals(data, output.toString());
assertEquals(data, output.toString()); }
}
}
}

View file

@ -1,58 +1,58 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.io;
import org.junit.Test; import org.junit.Test;
import zutil.io.DynamicByteArrayStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
/** /**
* User: Ziver * User: Ziver
*/ */
public class DynamicByteArrayStreamTest { public class DynamicByteArrayStreamTest {
@Test @Test
public void emptyArray(){ public void emptyArray(){
DynamicByteArrayStream out = new DynamicByteArrayStream(); DynamicByteArrayStream out = new DynamicByteArrayStream();
assertEquals(0, out.available()); assertEquals(0, out.available());
assertEquals(0, out.getBytes().length); assertEquals(0, out.getBytes().length);
assertTrue(out.toString().isEmpty()); assertTrue(out.toString().isEmpty());
} }
@Test @Test
public void oneByteArray(){ public void oneByteArray(){
byte[] b = new byte[]{0x01,0x02,0x03,0x04}; byte[] b = new byte[]{0x01,0x02,0x03,0x04};
DynamicByteArrayStream out = new DynamicByteArrayStream(); DynamicByteArrayStream out = new DynamicByteArrayStream();
out.append(b); out.append(b);
byte[] result = out.getBytes(); byte[] result = out.getBytes();
for(int i=0; i<b.length; i++){ for(int i=0; i<b.length; i++){
assertEquals(b[i], result[i]); assertEquals(b[i], result[i]);
} }
} }
} }

View file

@ -1,53 +1,50 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.io.file;
import zutil.io.file.FileChangeListener; import java.io.File;
import zutil.io.file.FileUtil; import java.io.FileNotFoundException;
import zutil.io.file.FileWatcher; import java.net.URISyntaxException;
import java.io.File;
import java.io.FileNotFoundException; public class FileChangedTest implements FileChangeListener{
import java.net.URISyntaxException; public static void main(String[] args) throws URISyntaxException, FileNotFoundException{
FileWatcher watcher = new FileWatcher(FileUtil.find("test.txt"));
public class FileChangedTest implements FileChangeListener{ watcher.setListener(new FileChangedTest());
public static void main(String[] args) throws URISyntaxException, FileNotFoundException{
FileWatcher watcher = new FileWatcher(FileUtil.find("test.txt")); while(true){
watcher.setListener(new FileChangedTest()); try {
Thread.sleep(10);
while(true){ } catch (InterruptedException e) {
try { // TODO Auto-generated catch block
Thread.sleep(10); e.printStackTrace();
} catch (InterruptedException e) { }
// TODO Auto-generated catch block }
e.printStackTrace(); }
}
} public void fileChangedEvent(File file) {
} System.out.println(file);
}
public void fileChangedEvent(File file) { }
System.out.println(file);
}
}

View file

@ -1,73 +1,73 @@
<!-- <!--
~ The MIT License (MIT) ~ The MIT License (MIT)
~ ~
~ Copyright (c) 2015 Ziver Koc ~ Copyright (c) 2015 Ziver Koc
~ ~
~ Permission is hereby granted, free of charge, to any person obtaining a copy ~ Permission is hereby granted, free of charge, to any person obtaining a copy
~ of this software and associated documentation files (the "Software"), to deal ~ of this software and associated documentation files (the "Software"), to deal
~ in the Software without restriction, including without limitation the rights ~ in the Software without restriction, including without limitation the rights
~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
~ copies of the Software, and to permit persons to whom the Software is ~ copies of the Software, and to permit persons to whom the Software is
~ furnished to do so, subject to the following conditions: ~ furnished to do so, subject to the following conditions:
~ ~
~ The above copyright notice and this permission notice shall be included in ~ The above copyright notice and this permission notice shall be included in
~ all copies or substantial portions of the Software. ~ all copies or substantial portions of the Software.
~ ~
~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
~ THE SOFTWARE. ~ THE SOFTWARE.
--> -->
<html> <html>
<head> <head>
<script type='text/javascript' src='js/jquery-1.4.2.min.js'></script> <script type='text/javascript' src='js/jquery-1.4.2.min.js'></script>
<script type='text/javascript' src='upload?js'></script> <script type='text/javascript' src='upload?js'></script>
<style type='text/css'> <style type='text/css'>
.progressbar{ .progressbar{
background: transparent url(img/bar-grey.gif) repeat-x scroll 0%; background: transparent url(img/bar-grey.gif) repeat-x scroll 0%;
border: 1px solid black; border: 1px solid black;
color: white; color: white;
height: 16px; height: 16px;
margin: 0pt; margin: 0pt;
padding: 0pt; padding: 0pt;
position: relative; position: relative;
text-align: center; text-align: center;
width; 150px; width; 150px;
border-collapse: collapse; border-collapse: collapse;
} }
.progressbar b{ .progressbar b{
background: transparent url(img/bar-revered.gif) repeat-x scroll 0%; background: transparent url(img/bar-revered.gif) repeat-x scroll 0%;
float: left; float: left;
height: 16px; height: 16px;
margin: 0pt; margin: 0pt;
padding: 0pt; padding: 0pt;
font-size: 11px; font-size: 11px;
} }
ul{ ul{
list-style-type: none; list-style-type: none;
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
} }
</style> </style>
</head> </head>
<body> <body>
<FORM id="AjaxFileUpload"> <FORM id="AjaxFileUpload">
<INPUT type="file" name="file" multiple/> <INPUT type="file" name="file" multiple/>
<INPUT type="submit" /> <INPUT type="submit" />
</FORM> </FORM>
<UL id="UploadQueue"> <UL id="UploadQueue">
<li id="1367232194"> <li id="1367232194">
<div class="progressbar"> <div class="progressbar">
<b id="progress" style="width: 70%; display: block; "> <b id="progress" style="width: 70%; display: block; ">
<span id="filename">Test</span> <span id="filename">Test</span>
</b> </b>
</div> </div>
</li> </li>
</UL> </UL>
</body> </body>
</html> </html>

View file

@ -1,53 +1,53 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.log.net;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.log.net.NetLogServer;
import java.util.logging.Level;
import java.util.logging.Level; import java.util.logging.Logger;
import java.util.logging.Logger;
public class NetLogServerTest { public class NetLogServerTest {
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
public static void main(String[] args){ public static void main(String[] args){
LogUtil.setGlobalLevel(Level.FINEST); LogUtil.setGlobalLevel(Level.FINEST);
LogUtil.addGlobalHandler(new NetLogServer(5050)); LogUtil.addGlobalHandler(new NetLogServer(5050));
while(true){ while(true){
logger.log(Level.SEVERE, "Test Severe"); logger.log(Level.SEVERE, "Test Severe");
logger.log(Level.WARNING, "Test Warning"); logger.log(Level.WARNING, "Test Warning");
logger.log(Level.INFO, "Test Info"); logger.log(Level.INFO, "Test Info");
logger.log(Level.FINE, "Test Fine"); logger.log(Level.FINE, "Test Fine");
logger.log(Level.FINER, "Test Finer"); logger.log(Level.FINER, "Test Finer");
logger.log(Level.FINEST, "Test Finest"); logger.log(Level.FINEST, "Test Finest");
logger.log(Level.SEVERE, "Test Exception", new Exception("Test")); logger.log(Level.SEVERE, "Test Exception", new Exception("Test"));
try{Thread.sleep(3000);}catch(Exception e){} try{Thread.sleep(3000);}catch(Exception e){}
} }
} }
} }

View file

@ -1,40 +1,41 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net;
import zutil.net.ServerFindClient; import zutil.net.ServerFindClient;
import java.io.IOException; import java.io.IOException;
public class ServerFindClientTest {
public static void main(String[] args){ public class ServerFindClientTest {
try { public static void main(String[] args){
ServerFindClient client = new ServerFindClient(2000); try {
System.out.println(client.find().getHostAddress()); ServerFindClient client = new ServerFindClient(2000);
} catch (IOException e) { System.out.println(client.find().getHostAddress());
e.printStackTrace(); } catch (IOException e) {
} e.printStackTrace();
} }
} }
}

View file

@ -1,39 +1,38 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net;
import zutil.net.ServerFind; import java.io.IOException;
import java.io.IOException;
public class ServerFindServerTest {
public class ServerFindServerTest { public static void main(String[] args){
public static void main(String[] args){ try {
try { new ServerFind(2000);
new ServerFind(2000); } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); }
} }
} }
}

View file

@ -1,107 +1,102 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.http;
import zutil.net.http.HttpHeader; import java.io.IOException;
import zutil.net.http.HttpPage; import java.util.Map;
import zutil.net.http.HttpPrintStream;
import zutil.net.http.HttpServer;
public class HTTPGuessTheNumber implements HttpPage{
import java.io.IOException;
import java.util.Map; public static void main(String[] args) throws IOException{
//HttpServer server = new HttpServer("localhost", 443, FileFinder.find("keySSL"), "rootroot");//SSL
HttpServer server = new HttpServer(8080);
public class HTTPGuessTheNumber implements HttpPage{ server.setDefaultPage(new HTTPGuessTheNumber());
server.run();
public static void main(String[] args) throws IOException{ }
//HttpServer server = new HttpServer("localhost", 443, FileFinder.find("keySSL"), "rootroot");//SSL
HttpServer server = new HttpServer(8080); public void respond(HttpPrintStream out,
server.setDefaultPage(new HTTPGuessTheNumber()); HttpHeader client_info,
server.run(); Map<String, Object> session,
} Map<String, String> cookie,
Map<String, String> request) throws IOException {
public void respond(HttpPrintStream out,
HttpHeader client_info, out.enableBuffering(true);
Map<String, Object> session, out.println("<html>");
Map<String, String> cookie, out.println("<H2>Welcome To The Number Guess Game!</H2>");
Map<String, String> request) throws IOException {
if(session.containsKey("random_nummber") && request.containsKey("guess") && !request.get("guess").isEmpty()){
out.enableBuffering(true); int guess = Integer.parseInt(request.get("guess"));
out.println("<html>"); int nummber = (Integer)session.get("random_nummber");
out.println("<H2>Welcome To The Number Guess Game!</H2>"); try {
if(guess == nummber){
if(session.containsKey("random_nummber") && request.containsKey("guess") && !request.get("guess").isEmpty()){ session.remove("random_nummber");
int guess = Integer.parseInt(request.get("guess")); out.println("You Guessed Right! Congrats!");
int nummber = (Integer)session.get("random_nummber"); out.println("</html>");
try { return;
if(guess == nummber){ }
session.remove("random_nummber"); else if(guess > nummber){
out.println("You Guessed Right! Congrats!"); out.println("<b>To High</b><br>");
out.println("</html>"); if(Integer.parseInt(cookie.get("high")) > guess){
return; out.setCookie("high", ""+guess);
} cookie.put("high", ""+guess);
else if(guess > nummber){ }
out.println("<b>To High</b><br>"); }
if(Integer.parseInt(cookie.get("high")) > guess){ else{
out.setCookie("high", ""+guess); out.println("<b>To Low</b><br>");
cookie.put("high", ""+guess); if(Integer.parseInt(cookie.get("low")) < guess){
} out.setCookie("low", ""+guess);
} cookie.put("low", ""+guess);
else{ }
out.println("<b>To Low</b><br>"); }
if(Integer.parseInt(cookie.get("low")) < guess){ } catch (Exception e) {
out.setCookie("low", ""+guess); e.printStackTrace();
cookie.put("low", ""+guess); }
} }
} else{
} catch (Exception e) { session.put("random_nummber", (int)(Math.random()*99+1));
e.printStackTrace(); try {
} out.setCookie("low", "0");
} out.setCookie("high", "100");
else{ cookie.put("low", "0");
session.put("random_nummber", (int)(Math.random()*99+1)); cookie.put("high", "100");
try { } catch (Exception e) {
out.setCookie("low", "0"); e.printStackTrace();
out.setCookie("high", "100"); }
cookie.put("low", "0"); }
cookie.put("high", "100");
} catch (Exception e) { out.println("<form method='post'>");
e.printStackTrace(); out.println(cookie.get("low")+" < X < "+cookie.get("high")+"<br>");
} out.println("Guess a number between 0 and 100:<br>");
} out.println("<input type='text' name='guess'>");
out.println("<input type='hidden' name='test' value='test'>");
out.println("<form method='post'>"); out.println("<input type='submit' value='Guess'>");
out.println(cookie.get("low")+" < X < "+cookie.get("high")+"<br>"); out.println("</form>");
out.println("Guess a number between 0 and 100:<br>"); out.println("<script>document.all.guess.focus();</script>");
out.println("<input type='text' name='guess'>"); out.println("<b>DEBUG: nummber="+session.get("random_nummber")+"</b><br>");
out.println("<input type='hidden' name='test' value='test'>"); out.println("</html>");
out.println("<input type='submit' value='Guess'>"); }
out.println("</form>");
out.println("<script>document.all.guess.focus();</script>"); }
out.println("<b>DEBUG: nummber="+session.get("random_nummber")+"</b><br>");
out.println("</html>");
}
}

View file

@ -1,62 +1,57 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.http;
import zutil.net.http.HttpHeader; import java.io.IOException;
import zutil.net.http.HttpPage; import java.util.Map;
import zutil.net.http.HttpPrintStream;
import zutil.net.http.HttpServer;
public class HTTPUploaderTest implements HttpPage{
import java.io.IOException;
import java.util.Map; public static void main(String[] args) throws IOException{
HttpServer server = new HttpServer(80);
server.setDefaultPage(new HTTPUploaderTest());
public class HTTPUploaderTest implements HttpPage{ server.run();
}
public static void main(String[] args) throws IOException{
HttpServer server = new HttpServer(80); public void respond(HttpPrintStream out,
server.setDefaultPage(new HTTPUploaderTest()); HttpHeader client_info,
server.run(); Map<String, Object> session,
} Map<String, String> cookie,
Map<String, String> request) throws IOException {
public void respond(HttpPrintStream out,
HttpHeader client_info, if(!session.containsKey("file1")){
Map<String, Object> session, out.println("</html>" +
Map<String, String> cookie, " <form enctype='multipart/form-data' method='post'>" +
Map<String, String> request) throws IOException { " <p>Please specify a file, or a set of files:<br>" +
" <input type='file' name='datafile' size='40'>" +
if(!session.containsKey("file1")){ " </p>" +
out.println("</html>" + " <input type='submit' value='Send'>" +
" <form enctype='multipart/form-data' method='post'>" + " </form>" +
" <p>Please specify a file, or a set of files:<br>" + "</html>");
" <input type='file' name='datafile' size='40'>" + }
" </p>" + }
" <input type='submit' value='Send'>" +
" </form>" + }
"</html>");
}
}
}

View file

@ -1,75 +1,74 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.http;
import org.junit.Test; import org.junit.Test;
import zutil.net.http.HttpURL;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.both; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
public class HttpURLTest {
public class HttpURLTest {
@Test
@Test public void fullURLTest() {
public void fullURLTest() { HttpURL url = new HttpURL();
HttpURL url = new HttpURL(); url.setProtocol("http");
url.setProtocol("http"); assertEquals( "http://127.0.0.1/", url.getURL() );
assertEquals( "http://127.0.0.1/", url.getURL() );
url.setHost("koc.se");
url.setHost("koc.se"); assertEquals( "http://koc.se/", url.getURL() );
assertEquals( "http://koc.se/", url.getURL() );
url.setPort( 80 );
url.setPort( 80 ); assertEquals( "http://koc.se:80/", url.getURL() );
assertEquals( "http://koc.se:80/", url.getURL() );
url.setPath("test/index.html");
url.setPath("test/index.html"); assertEquals( "http://koc.se:80/test/index.html", url.getURL() );
assertEquals( "http://koc.se:80/test/index.html", url.getURL() );
url.setParameter("key", "value");
url.setParameter("key", "value"); assertEquals( "http://koc.se:80/test/index.html?key=value", url.getURL() );
assertEquals( "http://koc.se:80/test/index.html?key=value", url.getURL() );
url.setAnchor( "anch" );
url.setAnchor( "anch" ); assertEquals( "http://koc.se:80/test/index.html?key=value#anch", url.getURL() );
assertEquals( "http://koc.se:80/test/index.html?key=value#anch", url.getURL() ); }
}
@Test
@Test public void urlParameterTest() {
public void urlParameterTest() { HttpURL url = new HttpURL();
HttpURL url = new HttpURL(); url.setParameter("key1", "value1");
url.setParameter("key1", "value1"); assertEquals( "key1=value1", url.getParameterString() );
assertEquals( "key1=value1", url.getParameterString() );
url.setParameter("key1", "value1");
url.setParameter("key1", "value1"); assertEquals( "key1=value1", url.getParameterString() );
assertEquals( "key1=value1", url.getParameterString() );
url.setParameter("key2", "value2");
url.setParameter("key2", "value2"); assertThat(url.getParameterString(), allOf(containsString("key2=value2"), containsString("key1=value1")));
assertThat(url.getParameterString(), allOf(containsString("key2=value2"), containsString("key1=value1")));
}
}
}
}

View file

@ -1,60 +1,59 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.nio;
import zutil.net.nio.NioClient; import zutil.net.nio.message.StringMessage;
import zutil.net.nio.message.StringMessage; import zutil.net.nio.response.PrintRsp;
import zutil.net.nio.response.PrintRsp;
import java.io.IOException;
import java.io.IOException; import java.net.InetAddress;
import java.net.InetAddress; import java.security.NoSuchAlgorithmException;
import java.security.NoSuchAlgorithmException;
@SuppressWarnings("unused")
@SuppressWarnings("unused") public class NetworkClientTest {
public class NetworkClientTest { public static void main(String[] args) throws NoSuchAlgorithmException {
public static void main(String[] args) throws NoSuchAlgorithmException { try {
try { int count = 0;
int count = 0; long time = System.currentTimeMillis()+1000*60;
long time = System.currentTimeMillis()+1000*60; NioClient client = new NioClient(InetAddress.getByName("localhost"), 6056);
NioClient client = new NioClient(InetAddress.getByName("localhost"), 6056); //client.setEncrypter(new Encrypter("lol", Encrypter.PASSPHRASE_DES_ALGO));
//client.setEncrypter(new Encrypter("lol", Encrypter.PASSPHRASE_DES_ALGO)); while(time > System.currentTimeMillis()){
while(time > System.currentTimeMillis()){ PrintRsp handler = new PrintRsp();
PrintRsp handler = new PrintRsp(); client.send(handler, new StringMessage("StringMessage: "+count));
client.send(handler, new StringMessage("StringMessage: "+count)); handler.waitForResponse();
handler.waitForResponse(); //try {Thread.sleep(100);} catch (InterruptedException e) {}
//try {Thread.sleep(100);} catch (InterruptedException e) {} //System.out.println("sending..");
//System.out.println("sending.."); count++;
count++; }
}
System.out.println("Message Count 1m: "+count);
System.out.println("Message Count 1m: "+count); System.out.println("Message Count 1s: "+count/60);
System.out.println("Message Count 1s: "+count/60); System.exit(0);
System.exit(0); } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); }
} }
} }
}

View file

@ -1,43 +1,41 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.nio;
import zutil.net.nio.NioServer; import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
@SuppressWarnings("unused")
public class NetworkServerTest {
@SuppressWarnings("unused") public static void main(String[] args) throws NoSuchAlgorithmException {
public class NetworkServerTest { try {
public static void main(String[] args) throws NoSuchAlgorithmException { NioServer server = new NioServer(6056);
try { //server.setEncrypter(new Encrypter("lol", Encrypter.PASSPHRASE_DES_ALGO));
NioServer server = new NioServer(6056); } catch (IOException e) {
//server.setEncrypter(new Encrypter("lol", Encrypter.PASSPHRASE_DES_ALGO)); e.printStackTrace();
} catch (IOException e) { }
e.printStackTrace(); }
} }
}
}

View file

@ -1,51 +1,52 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.ssdp;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.ssdp.SSDPClient; import zutil.net.ssdp.SSDPClient;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level; import java.util.logging.Level;
/**
* Created by Ziver on 2015-09-29. /**
*/ * Created by Ziver on 2015-09-29.
public class SSDPClientTest { */
public class SSDPClientTest {
public static void main(String[] args) throws IOException {
System.out.println(LogUtil.getCallingClass()); public static void main(String[] args) throws IOException {
LogUtil.setGlobalLevel(Level.FINEST); System.out.println(LogUtil.getCallingClass());
SSDPClient ssdp = new SSDPClient(); LogUtil.setGlobalLevel(Level.FINEST);
ssdp.requestService("upnp:rootdevice"); SSDPClient ssdp = new SSDPClient();
ssdp.start(); ssdp.requestService("upnp:rootdevice");
ssdp.start();
for(int i=0; true ;++i){
while( i==ssdp.getServicesCount("upnp:rootdevice") ){ try{Thread.sleep(100);}catch(Exception e){} } for(int i=0; true ;++i){
System.out.println("************************" ); while( i==ssdp.getServicesCount("upnp:rootdevice") ){ try{Thread.sleep(100);}catch(Exception e){} }
System.out.println("" + ssdp.getServices("upnp:rootdevice").get(i)); System.out.println("************************" );
} System.out.println("" + ssdp.getServices("upnp:rootdevice").get(i));
} }
} }
}

View file

@ -1,54 +1,53 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.ssdp;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.ssdp.SSDPServer;
import zutil.net.ssdp.StandardSSDPInfo; import java.io.IOException;
import java.util.logging.Level;
import java.io.IOException;
import java.util.logging.Level;
/**
/** * Created by Ziver on 2015-09-29.
* Created by Ziver on 2015-09-29. */
*/ public class SSDPServerTest {
public class SSDPServerTest {
public static void main(String[] args) throws IOException {
public static void main(String[] args) throws IOException { LogUtil.setGlobalLevel(Level.FINEST);
LogUtil.setGlobalLevel(Level.FINEST);
StandardSSDPInfo service = new StandardSSDPInfo();
StandardSSDPInfo service = new StandardSSDPInfo(); service.setLocation("nowhere");
service.setLocation("nowhere"); service.setST("zep:discover");
service.setST("zep:discover"); service.setHeader("Alias", "Desktop");
service.setHeader("Alias", "Desktop"); service.setHeader("PublicKey", "SuperDesktopKey");
service.setHeader("PublicKey", "SuperDesktopKey");
SSDPServer ssdp = new SSDPServer();
SSDPServer ssdp = new SSDPServer(); ssdp.addService(service);
ssdp.addService(service); ssdp.start();
ssdp.start(); System.out.println("SSDP Server running");
System.out.println("SSDP Server running"); }
} }
}

View file

@ -1,75 +1,73 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.update;
import zutil.ProgressListener; import zutil.ProgressListener;
import zutil.log.CompactLogFormatter; import zutil.log.CompactLogFormatter;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.update.FileInfo;
import zutil.net.update.UpdateClient; import java.awt.*;
import zutil.net.update.Zupdater; import java.util.logging.Level;
import java.awt.*;
import java.util.logging.Level; public class UpdateClientTest implements ProgressListener<UpdateClient, FileInfo>{
public static void main(String[] args){
public class UpdateClientTest implements ProgressListener<UpdateClient, FileInfo>{ LogUtil.setLevel("zutil", Level.FINEST);
public static void main(String[] args){ LogUtil.setFormatter("zutil", new CompactLogFormatter());
LogUtil.setLevel("zutil", Level.FINEST);
LogUtil.setFormatter("zutil", new CompactLogFormatter()); UpdateClientTest client = new UpdateClientTest();
client.start();
UpdateClientTest client = new UpdateClientTest(); }
client.start();
} public void start(){
try {
public void start(){ final UpdateClient client = new UpdateClient("localhost", 2000, "C:\\Users\\Ziver\\Desktop\\client");
try { client.setProgressListener(new Zupdater());
final UpdateClient client = new UpdateClient("localhost", 2000, "C:\\Users\\Ziver\\Desktop\\client");
client.setProgressListener(new Zupdater()); //client.setProgressListener(this);
//client.setProgressListener(this); EventQueue.invokeLater(new Runnable() {
public void run() {
EventQueue.invokeLater(new Runnable() { try {
public void run() { Zupdater gui = new Zupdater();
try { client.setProgressListener(gui);
Zupdater gui = new Zupdater(); gui.setVisible(true);
client.setProgressListener(gui); } catch (Exception e) {
gui.setVisible(true); e.printStackTrace();
} catch (Exception e) { }
e.printStackTrace(); }
} });
}
}); client.update();
client.close();
client.update(); } catch (Exception e) {
client.close(); e.printStackTrace();
} catch (Exception e) { }
e.printStackTrace(); }
}
} public void progressUpdate(UpdateClient source, FileInfo info, double percent) {
System.out.println(info+": "+percent+"%");
public void progressUpdate(UpdateClient source, FileInfo info, double percent) { }
System.out.println(info+": "+percent+"%"); }
}
}

View file

@ -1,44 +1,44 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.update;
import zutil.log.CompactLogFormatter; import zutil.log.CompactLogFormatter;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.update.UpdateServer;
import java.util.logging.Level;
import java.util.logging.Level;
public class UpdateServerTest { public class UpdateServerTest {
public static void main(String[] args){ public static void main(String[] args){
try { try {
LogUtil.setGlobalLevel(Level.FINEST); LogUtil.setGlobalLevel(Level.FINEST);
LogUtil.setGlobalFormatter(new CompactLogFormatter()); LogUtil.setGlobalFormatter(new CompactLogFormatter());
new UpdateServer(2000, "C:\\Users\\Ziver\\Desktop\\server"); new UpdateServer(2000, "C:\\Users\\Ziver\\Desktop\\server");
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }

View file

@ -1,63 +1,63 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.upnp;
import zutil.io.MultiPrintStream; import zutil.io.MultiPrintStream;
import zutil.net.http.HttpServer; import zutil.net.http.HttpServer;
import zutil.net.ssdp.SSDPServer; import zutil.net.ssdp.SSDPServer;
import zutil.net.upnp.UPnPMediaServer; import zutil.net.upnp.service.UPnPContentDirectory;
import zutil.net.upnp.services.UPnPContentDirectory; import zutil.net.ws.WebServiceDef;
import zutil.net.ws.WebServiceDef; import zutil.net.ws.soap.SOAPHttpPage;
import zutil.net.ws.soap.SOAPHttpPage;
import java.io.File;
import java.io.File; import java.io.IOException;
import java.io.IOException;
public class UPnPServerTest { public class UPnPServerTest {
public static void main(String[] args) throws IOException{ public static void main(String[] args) throws IOException{
UPnPMediaServer upnp = new UPnPMediaServer("http://192.168.0.60:8080/"); UPnPMediaServer upnp = new UPnPMediaServer("http://192.168.0.60:8080/");
MultiPrintStream.out.println("UPNP Server running"); MultiPrintStream.out.println("UPNP Server running");
UPnPContentDirectory cds = new UPnPContentDirectory(new File("C:\\Users\\Ziver\\Desktop\\lan")); UPnPContentDirectory cds = new UPnPContentDirectory(new File("C:\\Users\\Ziver\\Desktop\\lan"));
WebServiceDef ws = new WebServiceDef( UPnPContentDirectory.class ); WebServiceDef ws = new WebServiceDef( UPnPContentDirectory.class );
HttpServer http = new HttpServer(8080); HttpServer http = new HttpServer(8080);
//http.setDefaultPage(upnp); //http.setDefaultPage(upnp);
http.setPage("/RootDesc", upnp ); http.setPage("/RootDesc", upnp );
http.setPage("/SCP/ContentDir", cds ); http.setPage("/SCP/ContentDir", cds );
SOAPHttpPage soap = new SOAPHttpPage(ws); SOAPHttpPage soap = new SOAPHttpPage(ws);
soap.setObject( cds ); soap.setObject( cds );
soap.enableSession( false ); soap.enableSession( false );
http.setPage("/Action/ContentDir", soap ); http.setPage("/Action/ContentDir", soap );
http.start(); http.start();
MultiPrintStream.out.println("HTTP Server running"); MultiPrintStream.out.println("HTTP Server running");
SSDPServer ssdp = new SSDPServer(); SSDPServer ssdp = new SSDPServer();
ssdp.addService( upnp ); ssdp.addService( upnp );
ssdp.start(); ssdp.start();
MultiPrintStream.out.println("SSDP Server running"); MultiPrintStream.out.println("SSDP Server running");
} }
} }

View file

@ -1,54 +1,55 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.ws.soap;
import zutil.log.CompactLogFormatter; import zutil.log.CompactLogFormatter;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.ws.WSInterface; import zutil.net.ws.WSInterface;
import zutil.net.ws.soap.SOAPClientFactory;
import java.net.MalformedURLException;
import java.net.MalformedURLException; import java.net.URL;
import java.net.URL; import java.util.logging.Level;
import java.util.logging.Level;
public class SOAPClientTest { // TODO: COnvert to JUnit
public class SOAPClientTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, MalformedURLException {
LogUtil.setGlobalLevel(Level.ALL); public static void main(String[] args) throws InstantiationException, IllegalAccessException, MalformedURLException {
LogUtil.setFormatter("", new CompactLogFormatter()); LogUtil.setGlobalLevel(Level.ALL);
LogUtil.setFormatter("", new CompactLogFormatter());
TestClient intf = SOAPClientFactory.createClient(new URL("http://localhost:3289"), TestClient.class);
intf.m(); TestClient intf = SOAPClientFactory.createClient(new URL("http://localhost:3289"), TestClient.class);
intf.c(); intf.m();
} intf.c();
}
public interface TestClient extends WSInterface{
public void m(); public interface TestClient extends WSInterface{
public void m();
public void c();
public void c();
}
} }
}

View file

@ -1,156 +1,157 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.net.ws.soap;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.io.OutputFormat; import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; import org.dom4j.io.XMLWriter;
import zutil.net.ws.WSInterface;
import zutil.net.ws.WSInterface.WSNamespace; import zutil.net.ws.WSInterface;
import zutil.net.ws.WSReturnObject; import zutil.net.ws.WSInterface.WSNamespace;
import zutil.net.ws.WebServiceDef; import zutil.net.ws.WSReturnObject;
import zutil.net.ws.soap.SOAPHttpPage; import zutil.net.ws.WebServiceDef;
import zutil.parser.wsdl.WSDLWriter; import zutil.parser.wsdl.WSDLWriter;
public class SOAPTest { // TODO: Convert to JUnit
/************************* TEST CASES ************************/ public class SOAPTest {
public static void main(String[] args){ /************************* TEST CASES ************************/
new SOAPTest(); public static void main(String[] args){
} new SOAPTest();
}
public SOAPTest(){
WebServiceDef wsDef = new WebServiceDef( MainSOAPClass.class ); public SOAPTest(){
SOAPHttpPage soap = new SOAPHttpPage( wsDef ); WebServiceDef wsDef = new WebServiceDef( MainSOAPClass.class );
SOAPHttpPage soap = new SOAPHttpPage( wsDef );
System.out.println( "****************** WSDL *********************" );
WSDLWriter wsdl = new WSDLWriter( wsDef ); System.out.println( "****************** WSDL *********************" );
wsdl.write(System.out); WSDLWriter wsdl = new WSDLWriter( wsDef );
wsdl.write(System.out);
// Response
try { // Response
System.out.println( "\n****************** REQUEST *********************" ); try {
String request = "<?xml version=\"1.0\"?>\n" + System.out.println( "\n****************** REQUEST *********************" );
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + String request = "<?xml version=\"1.0\"?>\n" +
" <soap:Body xmlns:m=\"http://www.example.org/stock\">\n" + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
" <m:stringArrayMethod>\n" + " <soap:Body xmlns:m=\"http://www.example.org/stock\">\n" +
" <m:StringName>IBM</m:StringName>\n" + " <m:stringArrayMethod>\n" +
" </m:stringArrayMethod>\n" + " <m:StringName>IBM</m:StringName>\n" +
" </m:stringArrayMethod>\n" +
" <m:simpleReturnClassMethod>\n" +
" <m:byte>IBM</m:byte>\n" + " <m:simpleReturnClassMethod>\n" +
" </m:simpleReturnClassMethod>\n" + " <m:byte>IBM</m:byte>\n" +
" </soap:Body>\n" + " </m:simpleReturnClassMethod>\n" +
"</soap:Envelope>"; " </soap:Body>\n" +
System.out.println(request); "</soap:Envelope>";
System.out.println( "\n****************** EXECUTION *********************" ); System.out.println(request);
Document document = soap.genSOAPResponse(request); System.out.println( "\n****************** EXECUTION *********************" );
System.out.println( "\n****************** RESPONSE *********************" ); Document document = soap.genSOAPResponse(request);
System.out.println( "\n****************** RESPONSE *********************" );
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter( System.out, format ); OutputFormat format = OutputFormat.createPrettyPrint();
writer.write( document ); XMLWriter writer = new XMLWriter( System.out, format );
writer.write( document );
System.out.println();
} catch (Exception e) { System.out.println();
e.printStackTrace(); } catch (Exception e) {
} e.printStackTrace();
} }
}
/************************* TEST CLASSES ************************/
@SuppressWarnings("unused") /************************* TEST CLASSES ************************/
public static class SpecialReturnClass extends WSReturnObject{ @SuppressWarnings("unused")
@WSValueName(value="otherValue1") public static class SpecialReturnClass extends WSReturnObject{
public String param1 = "otherValue1"; @WSValueName(value="otherValue1")
@WSValueName("otherValue2") public String param1 = "otherValue1";
public String param2 = "otherValue2"; @WSValueName("otherValue2")
public byte[] b = new byte[]{0x12, 0x23}; public String param2 = "otherValue2";
public InnerClass inner = new InnerClass(); public byte[] b = new byte[]{0x12, 0x23};
} public InnerClass inner = new InnerClass();
}
@SuppressWarnings("unused")
public static class InnerClass extends WSReturnObject{ @SuppressWarnings("unused")
public String innerClassParam1 = "innerClass1"; public static class InnerClass extends WSReturnObject{
public String innerClassParam2 = "innerClass2"; public String innerClassParam1 = "innerClass1";
} public String innerClassParam2 = "innerClass2";
}
@SuppressWarnings("unused")
public static class SimpleReturnClass extends WSReturnObject{ @SuppressWarnings("unused")
@WSValueName("otherParam1") public static class SimpleReturnClass extends WSReturnObject{
public String param1 = "param1"; @WSValueName("otherParam1")
public String param2 = "param2"; public String param1 = "param1";
} public String param2 = "param2";
}
@SuppressWarnings("unused")
@WSNamespace("http://test.se:8080/") @SuppressWarnings("unused")
public static class MainSOAPClass implements WSInterface{ @WSNamespace("http://test.se:8080/")
public MainSOAPClass(){} public static class MainSOAPClass implements WSInterface{
public MainSOAPClass(){}
@WSHeader()
@WSDocumentation("Documentation of method exceptionMethod()") @WSHeader()
public void exceptionMethod( @WSDocumentation("Documentation of method exceptionMethod()")
@WSParamName(value="otherParam1", optional=true) int param1, public void exceptionMethod(
@WSParamName(value="otherParam2", optional=true) int param2) throws Exception{ @WSParamName(value="otherParam1", optional=true) int param1,
System.out.println("Executing method: exceptionMethod(int param1="+param1+", int param2="+param2+",)"); @WSParamName(value="otherParam2", optional=true) int param2) throws Exception{
throw new Exception("This is an Exception"); System.out.println("Executing method: exceptionMethod(int param1="+param1+", int param2="+param2+",)");
} throw new Exception("This is an Exception");
}
@WSReturnName("stringArray")
@WSParamDocumentation("Documentation of stringArrayMethod()") @WSReturnName("stringArray")
public String[][] stringArrayMethod ( @WSParamDocumentation("Documentation of stringArrayMethod()")
@WSParamName("StringName") String str) throws Exception{ public String[][] stringArrayMethod (
System.out.println("Executing method: stringArrayMethod(String str='"+str+"')"); @WSParamName("StringName") String str) throws Exception{
return new String[][]{{"test","test2"},{"test3","test4"}}; System.out.println("Executing method: stringArrayMethod(String str='"+str+"')");
} return new String[][]{{"test","test2"},{"test3","test4"}};
}
@WSReturnName("specialReturnClass")
@WSParamDocumentation("Documentation of specialReturnMethod()") @WSReturnName("specialReturnClass")
public SpecialReturnClass[] specialReturnMethod ( @WSParamDocumentation("Documentation of specialReturnMethod()")
@WSParamName("StringName2") String str) throws Exception{ public SpecialReturnClass[] specialReturnMethod (
System.out.println("Executing method: specialReturnMethod(String str='"+str+"')"); @WSParamName("StringName2") String str) throws Exception{
return new SpecialReturnClass[]{new SpecialReturnClass(), new SpecialReturnClass()}; System.out.println("Executing method: specialReturnMethod(String str='"+str+"')");
} return new SpecialReturnClass[]{new SpecialReturnClass(), new SpecialReturnClass()};
}
@WSReturnName("SimpleReturnClass")
@WSParamDocumentation("null is the kala") @WSReturnName("SimpleReturnClass")
public SimpleReturnClass simpleReturnClassMethod ( @WSParamDocumentation("null is the kala")
@WSParamName("byte") String lol) throws Exception{ public SimpleReturnClass simpleReturnClassMethod (
System.out.println("Executing method: simpleReturnClassMethod()"); @WSParamName("byte") String lol) throws Exception{
SimpleReturnClass tmp = new SimpleReturnClass(); System.out.println("Executing method: simpleReturnClassMethod()");
tmp.param1 = "newParam1"; SimpleReturnClass tmp = new SimpleReturnClass();
tmp.param2 = "newParam2"; tmp.param1 = "newParam1";
return tmp; tmp.param2 = "newParam2";
} return tmp;
}
@WSParamDocumentation("void method documentation")
public void voidMethod (){ } @WSParamDocumentation("void method documentation")
public void voidMethod (){ }
@WSDisabled()
public void disabledMethod(){ } @WSDisabled()
protected void protectedMethod(){ } public void disabledMethod(){ }
protected void protectedMethod(){ }
private void privateMethod(){ }
} private void privateMethod(){ }
} }
}

View file

@ -1,49 +1,48 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser;
import org.junit.Test; import org.junit.Test;
import zutil.parser.BBCodeParser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class BBCodeParserTest{
public class ParserTest{
@Test
@Test public void BBCodeParser() {
public void BBCodeParser() { BBCodeParser parser = new BBCodeParser();
BBCodeParser parser = new BBCodeParser();
assertEquals("1234", parser.read("1234"));
assertEquals("1234", parser.read("1234")); assertEquals("<i>1234</i>", parser.read("[i]1234[/i]"));
assertEquals("<i>1234</i>", parser.read("[i]1234[/i]")); assertEquals("[apa]lol[/apa]", parser.read("[apa]lol[/apa]"));
assertEquals("[apa]lol[/apa]", parser.read("[apa]lol[/apa]")); assertEquals("jshdkj <u>lol [apa]lol[/apa]</u>", parser.read("jshdkj [u]lol [apa]lol[/apa]"));
assertEquals("jshdkj <u>lol [apa]lol[/apa]</u>", parser.read("jshdkj [u]lol [apa]lol[/apa]")); //assertEquals("jshdkj [m]lol[/k] <i>lol</i>", parser.read("jshdkj [m]lol[/k] [i]lol[/i]"));
//assertEquals("jshdkj [m]lol[/k] <i>lol</i>", parser.read("jshdkj [m]lol[/k] [i]lol[/i]")); assertEquals("jshdkj [m", parser.read("jshdkj [m"));
assertEquals("jshdkj [m", parser.read("jshdkj [m")); assertEquals("jshdkj [/m", parser.read("jshdkj [/m"));
assertEquals("jshdkj [/m", parser.read("jshdkj [/m")); assertEquals("jshdkj m]", parser.read("jshdkj m]"));
assertEquals("jshdkj m]", parser.read("jshdkj m]")); assertEquals("jshdkj <br />", parser.read("jshdkj <br />"));
assertEquals("jshdkj <br />", parser.read("jshdkj <br />")); }
} }
}

View file

@ -1,77 +1,76 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser;
import org.junit.Test; import org.junit.Test;
import zutil.parser.Base64Decoder;
import zutil.parser.Base64Encoder; import java.util.Base64;
import java.util.Base64; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
public class Base64Test {
public class Base64Test {
@Test
@Test public void decode() {
public void decode() { assertEquals( "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.",
assertEquals( "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.", Base64Decoder.decode("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=")
Base64Decoder.decode("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=") );
);
Base64Decoder decoder = new Base64Decoder();
Base64Decoder decoder = new Base64Decoder(); decoder.clear();
decoder.clear(); decoder.read("YW55IGNhcm5hbCBwbGVhc3VyZQ==");
decoder.read("YW55IGNhcm5hbCBwbGVhc3VyZQ=="); assertEquals( "any carnal pleasure", decoder.toString() );
assertEquals( "any carnal pleasure", decoder.toString() ); decoder.clear();
decoder.clear(); decoder.read("bGVhc3VyZS4=");
decoder.read("bGVhc3VyZS4="); assertEquals( "leasure.", decoder.toString() );
assertEquals( "leasure.", decoder.toString() ); decoder.clear();
decoder.clear(); decoder.read("YW55IGNhcm5hbCBwbGVhc3Vy");
decoder.read("YW55IGNhcm5hbCBwbGVhc3Vy"); assertEquals( "any carnal pleasur", decoder.toString() );
assertEquals( "any carnal pleasur", decoder.toString() ); decoder.clear();
decoder.clear(); }
}
@Test
@Test public void encode() {
public void encode() { assertEquals("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" ,
assertEquals("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" , Base64Encoder.encode("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.")
Base64Encoder.encode("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.") );
);
assertEquals("YW55IGNhcm5hbCBwbGVhc3VyZQ==", Base64Encoder.encode("any carnal pleasure"));
assertEquals("YW55IGNhcm5hbCBwbGVhc3VyZQ==", Base64Encoder.encode("any carnal pleasure")); assertEquals("bGVhc3VyZS4=", Base64Encoder.encode("leasure."));
assertEquals("bGVhc3VyZS4=", Base64Encoder.encode("leasure.")); assertEquals("YW55IGNhcm5hbCBwbGVhc3Vy", Base64Encoder.encode("any carnal pleasur"));
assertEquals("YW55IGNhcm5hbCBwbGVhc3Vy", Base64Encoder.encode("any carnal pleasur")); }
}
@Test
@Test public void encodeJavaUtil() {
public void encodeJavaUtil() { assertEquals("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" ,
assertEquals("TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" , Base64.getEncoder().encodeToString("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.".getBytes())
Base64.getEncoder().encodeToString("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.".getBytes()) );
);
assertEquals("YW55IGNhcm5hbCBwbGVhc3VyZQ==", Base64.getEncoder().encodeToString("any carnal pleasure".getBytes()));
assertEquals("YW55IGNhcm5hbCBwbGVhc3VyZQ==", Base64.getEncoder().encodeToString("any carnal pleasure".getBytes())); assertEquals("bGVhc3VyZS4=", Base64.getEncoder().encodeToString("leasure.".getBytes()));
assertEquals("bGVhc3VyZS4=", Base64.getEncoder().encodeToString("leasure.".getBytes())); assertEquals("YW55IGNhcm5hbCBwbGVhc3Vy", Base64.getEncoder().encodeToString("any carnal pleasur".getBytes()));
assertEquals("YW55IGNhcm5hbCBwbGVhc3Vy", Base64.getEncoder().encodeToString("any carnal pleasur".getBytes())); }
} }
}

View file

@ -1,110 +1,109 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser;
import org.junit.Test; import org.junit.Test;
import zutil.parser.CSVParser;
import zutil.parser.DataNode; import java.io.IOException;
import java.io.StringReader;
import java.io.IOException;
import java.io.StringReader; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
/**
/** * Created by ezivkoc on 2015-07-30.
* Created by ezivkoc on 2015-07-30. */
*/ public class CSVParserTest {
public class CSVParserTest {
@Test
@Test public void emptyTest(){
public void emptyTest(){ DataNode node = CSVParser.read("");
DataNode node = CSVParser.read(""); assertEquals(null, node);
assertEquals(null, node); }
}
@Test
@Test public void simpleTest(){
public void simpleTest(){ DataNode node = CSVParser.read("hello,world,you");
DataNode node = CSVParser.read("hello,world,you"); assertEquals(3, node.size());
assertEquals(3, node.size()); assertEquals("hello", node.get(0).getString());
assertEquals("hello", node.get(0).getString()); assertEquals("world", node.get(1).getString());
assertEquals("world", node.get(1).getString()); assertEquals("you", node.get(2).getString());
assertEquals("you", node.get(2).getString()); }
}
@Test
@Test public void simpleHeaderTest() throws IOException {
public void simpleHeaderTest() throws IOException { CSVParser parser = new CSVParser(new StringReader("where,what,who\nhello,world,you"), true);
CSVParser parser = new CSVParser(new StringReader("where,what,who\nhello,world,you"), true); DataNode node = parser.read();
DataNode node = parser.read(); assertEquals(3, node.size());
assertEquals(3, node.size()); assertEquals("hello", node.get(0).getString());
assertEquals("hello", node.get(0).getString()); assertEquals("world", node.get(1).getString());
assertEquals("world", node.get(1).getString()); assertEquals("you", node.get(2).getString());
assertEquals("you", node.get(2).getString()); node = parser.getHeaders();
node = parser.getHeaders(); assertEquals("where", node.get(0).getString());
assertEquals("where", node.get(0).getString()); assertEquals("what", node.get(1).getString());
assertEquals("what", node.get(1).getString()); assertEquals("who", node.get(2).getString());
assertEquals("who", node.get(2).getString()); }
}
@Test
@Test public void simpleMultilineTest() throws IOException {
public void simpleMultilineTest() throws IOException { CSVParser parser = new CSVParser(
CSVParser parser = new CSVParser( new StringReader("hello,world,you\nhello,world,you\nhello,world,you"));
new StringReader("hello,world,you\nhello,world,you\nhello,world,you")); int rows=0;
int rows=0; for(DataNode node = parser.read(); node != null; node=parser.read(), ++rows) {
for(DataNode node = parser.read(); node != null; node=parser.read(), ++rows) { assertEquals(3, node.size());
assertEquals(3, node.size()); assertEquals("hello", node.get(0).getString());
assertEquals("hello", node.get(0).getString()); assertEquals("world", node.get(1).getString());
assertEquals("world", node.get(1).getString()); assertEquals("you", node.get(2).getString());
assertEquals("you", node.get(2).getString()); }
} assertEquals(3, rows);
assertEquals(3, rows); }
}
@Test
@Test public void quotedTest(){
public void quotedTest(){ DataNode node = CSVParser.read("\"hello\",\"world\",\"you\"");
DataNode node = CSVParser.read("\"hello\",\"world\",\"you\""); assertEquals(3, node.size());
assertEquals(3, node.size()); assertEquals("hello", node.get(0).getString());
assertEquals("hello", node.get(0).getString()); assertEquals("world", node.get(1).getString());
assertEquals("world", node.get(1).getString()); assertEquals("you", node.get(2).getString());
assertEquals("you", node.get(2).getString()); }
}
@Test
@Test public void quotedIncorrectlyTest(){
public void quotedIncorrectlyTest(){ DataNode node = CSVParser.read("hello\",wo\"rl\"d,\"you\"");
DataNode node = CSVParser.read("hello\",wo\"rl\"d,\"you\""); assertEquals(3, node.size());
assertEquals(3, node.size()); assertEquals("hello\"", node.get(0).getString());
assertEquals("hello\"", node.get(0).getString()); assertEquals("wo\"rl\"d", node.get(1).getString());
assertEquals("wo\"rl\"d", node.get(1).getString()); assertEquals("you", node.get(2).getString());
assertEquals("you", node.get(2).getString()); }
}
@Test
@Test public void quotedCommaTest(){
public void quotedCommaTest(){ DataNode node = CSVParser.read("hello,\"world,you\"");
DataNode node = CSVParser.read("hello,\"world,you\""); assertEquals(2, node.size());
assertEquals(2, node.size()); assertEquals("hello", node.get(0).getString());
assertEquals("hello", node.get(0).getString()); assertEquals("world,you", node.get(1).getString());
assertEquals("world,you", node.get(1).getString()); }
} }
}

View file

@ -1,305 +1,305 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser;
import org.junit.Test; import org.junit.Test;
import zutil.parser.Templator;
import java.util.ArrayList;
import java.util.ArrayList; import java.util.Arrays;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
/** /**
* Created by Ziver on 2015-03-23. * Created by Ziver on 2015-03-23.
*/ */
public class TemplatorTest { public class TemplatorTest {
class TestClass{ class TestClass{
public String attr; public String attr;
} }
class TestSubClass extends TestClass{ class TestSubClass extends TestClass{
public String subAttr; public String subAttr;
} }
class TestFuncClass{ class TestFuncClass{
public boolean isTrue(){ public boolean isTrue(){
return true; return true;
} }
public boolean isFalse(){ public boolean isFalse(){
return false; return false;
} }
} }
@Test @Test
public void tagIncorrectTest(){ public void tagIncorrectTest(){
assertEquals("<HTML>{{</HTML>", assertEquals("<HTML>{{</HTML>",
new Templator("<HTML>{{</HTML>").compile()); new Templator("<HTML>{{</HTML>").compile());
assertEquals("<HTML>}}</HTML>", assertEquals("<HTML>}}</HTML>",
new Templator("<HTML>}}</HTML>").compile()); new Templator("<HTML>}}</HTML>").compile());
assertEquals("<HTML></HTML>}}", assertEquals("<HTML></HTML>}}",
new Templator("<HTML></HTML>}}").compile()); new Templator("<HTML></HTML>}}").compile());
assertEquals("<HTML></HTML>{{", assertEquals("<HTML></HTML>{{",
new Templator("<HTML></HTML>{{").compile()); new Templator("<HTML></HTML>{{").compile());
assertEquals("<HTML>{</HTML>", assertEquals("<HTML>{</HTML>",
new Templator("<HTML>{</HTML>").compile()); new Templator("<HTML>{</HTML>").compile());
assertEquals("<HTML>}</HTML>", assertEquals("<HTML>}</HTML>",
new Templator("<HTML>}</HTML>").compile()); new Templator("<HTML>}</HTML>").compile());
assertEquals("<HTML>{}</HTML>", assertEquals("<HTML>{}</HTML>",
new Templator("<HTML>{}</HTML>").compile()); new Templator("<HTML>{}</HTML>").compile());
assertEquals("<HTML>{test}</HTML>", assertEquals("<HTML>{test}</HTML>",
new Templator("<HTML>{test}</HTML>").compile()); new Templator("<HTML>{test}</HTML>").compile());
} }
@Test @Test
public void attributeEmptyTest(){ public void attributeEmptyTest(){
Templator tmpl = new Templator("<HTML>{{test}}</HTML>"); Templator tmpl = new Templator("<HTML>{{test}}</HTML>");
assertEquals("<HTML>null</HTML>", tmpl.compile()); assertEquals("<HTML>null</HTML>", tmpl.compile());
} }
@Test @Test
public void attributeSimpleTest() { public void attributeSimpleTest() {
Templator tmpl = new Templator("<HTML>{{test}}</HTML>"); Templator tmpl = new Templator("<HTML>{{test}}</HTML>");
tmpl.set("test", "1234"); tmpl.set("test", "1234");
assertEquals("<HTML>1234</HTML>", tmpl.compile()); assertEquals("<HTML>1234</HTML>", tmpl.compile());
} }
@Test @Test
public void attributeObjectTest(){ public void attributeObjectTest(){
Templator tmpl = new Templator("<HTML>{{test.attr}}</HTML>"); Templator tmpl = new Templator("<HTML>{{test.attr}}</HTML>");
TestClass obj = new TestClass(); TestClass obj = new TestClass();
obj.attr = "1234"; obj.attr = "1234";
tmpl.set("test", obj); tmpl.set("test", obj);
assertEquals("<HTML>1234</HTML>", tmpl.compile()); assertEquals("<HTML>1234</HTML>", tmpl.compile());
} }
@Test @Test
public void conditionIncompleteTest(){ public void conditionIncompleteTest(){
assertEquals("<HTML>{{#key}}</HTML>", assertEquals("<HTML>{{#key}}</HTML>",
new Templator("<HTML>{{#key}}</HTML>").compile()); new Templator("<HTML>{{#key}}</HTML>").compile());
assertEquals("<HTML>{{/key}}</HTML>", assertEquals("<HTML>{{/key}}</HTML>",
new Templator("<HTML>{{/key}}</HTML>").compile()); new Templator("<HTML>{{/key}}</HTML>").compile());
assertEquals("", assertEquals("",
new Templator("{{#key}}{{/key}}").compile()); new Templator("{{#key}}{{/key}}").compile());
assertEquals("<HTML></HTML>", assertEquals("<HTML></HTML>",
new Templator("<HTML>{{#key}}{{/key}}</HTML>").compile()); new Templator("<HTML>{{#key}}{{/key}}</HTML>").compile());
} }
@Test @Test
public void conditionEmptyTest(){ public void conditionEmptyTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{#key}}123456789{{/key}}</HTML>"); "<HTML>{{#key}}123456789{{/key}}</HTML>");
assertEquals( assertEquals(
"<HTML></HTML>", "<HTML></HTML>",
tmpl.compile()); tmpl.compile());
} }
@Test @Test
public void conditionSimpleTest(){ public void conditionSimpleTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{#key}}123456789{{/key}}</HTML>"); "<HTML>{{#key}}123456789{{/key}}</HTML>");
tmpl.set("key", "set"); tmpl.set("key", "set");
assertEquals( assertEquals(
"<HTML>123456789</HTML>", "<HTML>123456789</HTML>",
tmpl.compile()); tmpl.compile());
} }
@Test @Test
public void conditionObjectTest(){ public void conditionObjectTest(){
Templator tmpl = new Templator("<HTML>{{#test.attr}}5678{{/test.attr}}</HTML>"); Templator tmpl = new Templator("<HTML>{{#test.attr}}5678{{/test.attr}}</HTML>");
TestClass obj = new TestClass(); TestClass obj = new TestClass();
obj.attr = "1234"; obj.attr = "1234";
tmpl.set("test", obj); tmpl.set("test", obj);
assertEquals("<HTML>5678</HTML>", tmpl.compile()); assertEquals("<HTML>5678</HTML>", tmpl.compile());
tmpl.clear(); tmpl.clear();
tmpl.set("test", new TestClass()); tmpl.set("test", new TestClass());
assertEquals("<HTML></HTML>", tmpl.compile()); assertEquals("<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void conditionBooleanTest(){ public void conditionBooleanTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{#key}}123456789{{/key}}</HTML>"); "<HTML>{{#key}}123456789{{/key}}</HTML>");
tmpl.set("key", true); tmpl.set("key", true);
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
tmpl.set("key", false); tmpl.set("key", false);
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void conditionIteratorEmptyTest(){ public void conditionIteratorEmptyTest(){
Templator tmpl = new Templator("<HTML>{{#list}}1234 {{.}} {{/list}}</HTML>"); Templator tmpl = new Templator("<HTML>{{#list}}1234 {{.}} {{/list}}</HTML>");
tmpl.set("list", new ArrayList()); tmpl.set("list", new ArrayList());
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void conditionIteratorTest(){ public void conditionIteratorTest(){
Templator tmpl = new Templator("<HTML>{{#list}}{{.}}{{/list}}</HTML>"); Templator tmpl = new Templator("<HTML>{{#list}}{{.}}{{/list}}</HTML>");
tmpl.set("list", Arrays.asList(1,2,3,4,5,6,7,8,9)); tmpl.set("list", Arrays.asList(1,2,3,4,5,6,7,8,9));
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
} }
@Test @Test
public void conditionArrayTest(){ public void conditionArrayTest(){
Templator tmpl = new Templator("<HTML>{{#list}}{{.}}{{/list}}</HTML>"); Templator tmpl = new Templator("<HTML>{{#list}}{{.}}{{/list}}</HTML>");
tmpl.set("list", new int[]{1,2,3,4,5,6,7,8,9}); tmpl.set("list", new int[]{1,2,3,4,5,6,7,8,9});
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
} }
@Test @Test
public void conditionArrayLength(){ public void conditionArrayLength(){
Templator tmpl = new Templator("<HTML>{{#list.length}}run once{{/list.length}}</HTML>"); Templator tmpl = new Templator("<HTML>{{#list.length}}run once{{/list.length}}</HTML>");
tmpl.set("list", new int[]{}); tmpl.set("list", new int[]{});
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
tmpl.set("list", new int[]{1}); tmpl.set("list", new int[]{1});
assertEquals( assertEquals(
"<HTML>run once</HTML>", tmpl.compile()); "<HTML>run once</HTML>", tmpl.compile());
tmpl.set("list", new int[]{1,2,3,4,5,6,7,8,9}); tmpl.set("list", new int[]{1,2,3,4,5,6,7,8,9});
assertEquals( assertEquals(
"<HTML>run once</HTML>", tmpl.compile()); "<HTML>run once</HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionEmptyTest(){ public void negativeConditionEmptyTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{^key}}123456789{{/key}}</HTML>"); "<HTML>{{^key}}123456789{{/key}}</HTML>");
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionSetTest(){ public void negativeConditionSetTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{^key}}123456789{{/key}}</HTML>"); "<HTML>{{^key}}123456789{{/key}}</HTML>");
tmpl.set("key", "set"); tmpl.set("key", "set");
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionObjectTest(){ public void negativeConditionObjectTest(){
Templator tmpl = new Templator("<HTML>{{^test.attr}}5678{{/test.attr}}</HTML>"); Templator tmpl = new Templator("<HTML>{{^test.attr}}5678{{/test.attr}}</HTML>");
TestClass obj = new TestClass(); TestClass obj = new TestClass();
obj.attr = "1234"; obj.attr = "1234";
tmpl.set("test", obj); tmpl.set("test", obj);
assertEquals("<HTML></HTML>", tmpl.compile()); assertEquals("<HTML></HTML>", tmpl.compile());
tmpl.clear(); tmpl.clear();
tmpl.set("test", new TestClass()); tmpl.set("test", new TestClass());
assertEquals("<HTML>5678</HTML>", tmpl.compile()); assertEquals("<HTML>5678</HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionIteratorTest(){ public void negativeConditionIteratorTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{^key}}123456789{{/key}}</HTML>"); "<HTML>{{^key}}123456789{{/key}}</HTML>");
tmpl.set("key", Arrays.asList(1,2,3,4,5,6,7,8,9)); tmpl.set("key", Arrays.asList(1,2,3,4,5,6,7,8,9));
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionIteratorEmptyTest(){ public void negativeConditionIteratorEmptyTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{^key}}123456789{{/key}}</HTML>"); "<HTML>{{^key}}123456789{{/key}}</HTML>");
tmpl.set("key", new ArrayList()); tmpl.set("key", new ArrayList());
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
} }
@Test @Test
public void negativeConditionBooleanTest(){ public void negativeConditionBooleanTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{^key}}123456789{{/key}}</HTML>"); "<HTML>{{^key}}123456789{{/key}}</HTML>");
tmpl.set("key", true); tmpl.set("key", true);
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
tmpl.set("key", false); tmpl.set("key", false);
assertEquals( assertEquals(
"<HTML>123456789</HTML>", tmpl.compile()); "<HTML>123456789</HTML>", tmpl.compile());
} }
@Test @Test
public void commentTest(){ public void commentTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{! This is a comment}}</HTML>"); "<HTML>{{! This is a comment}}</HTML>");
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void functionCallTest(){ public void functionCallTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{#obj.isTrue()}}it is true{{/obj.isTrue()}}</HTML>"); "<HTML>{{#obj.isTrue()}}it is true{{/obj.isTrue()}}</HTML>");
tmpl.set("obj", new TestFuncClass()); tmpl.set("obj", new TestFuncClass());
assertEquals( assertEquals(
"<HTML>it is true</HTML>", tmpl.compile()); "<HTML>it is true</HTML>", tmpl.compile());
tmpl = new Templator( tmpl = new Templator(
"<HTML>{{#obj.isFalse()}}it is true{{/obj.isFalse()}}</HTML>"); "<HTML>{{#obj.isFalse()}}it is true{{/obj.isFalse()}}</HTML>");
tmpl.set("obj", new TestFuncClass()); tmpl.set("obj", new TestFuncClass());
assertEquals( assertEquals(
"<HTML></HTML>", tmpl.compile()); "<HTML></HTML>", tmpl.compile());
} }
@Test @Test
public void functionInArrayTest(){ public void functionInArrayTest(){
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{#list}}{{#.isTrue()}}1{{/.isTrue()}}{{/list}}</HTML>"); "<HTML>{{#list}}{{#.isTrue()}}1{{/.isTrue()}}{{/list}}</HTML>");
tmpl.set("list", new TestFuncClass[]{ tmpl.set("list", new TestFuncClass[]{
new TestFuncClass(),new TestFuncClass(),new TestFuncClass() new TestFuncClass(),new TestFuncClass(),new TestFuncClass()
}); });
assertEquals( assertEquals(
"<HTML>111</HTML>", tmpl.compile()); "<HTML>111</HTML>", tmpl.compile());
} }
@Test @Test
public void recursiveTemplateorTest(){ public void recursiveTemplateorTest(){
Templator tmpl2 = new Templator( Templator tmpl2 = new Templator(
"{{value1}},{{value2}}"); "{{value1}},{{value2}}");
tmpl2.set("value1", "sub1"); tmpl2.set("value1", "sub1");
tmpl2.set("value2", "sub2"); tmpl2.set("value2", "sub2");
Templator tmpl = new Templator( Templator tmpl = new Templator(
"<HTML>{{parent}}:{{child}}</HTML>"); "<HTML>{{parent}}:{{child}}</HTML>");
tmpl.set("parent", "super"); tmpl.set("parent", "super");
tmpl.set("child", tmpl2); tmpl.set("child", tmpl2);
assertEquals( assertEquals(
"<HTML>super:sub1,sub2</HTML>", tmpl.compile()); "<HTML>super:sub1,sub2</HTML>", tmpl.compile());
} }
@Test @Test
public void subClassTest(){ public void subClassTest(){
Templator tmpl = new Templator("<HTML>{{test.attr}}:{{test.subAttr}}</HTML>"); Templator tmpl = new Templator("<HTML>{{test.attr}}:{{test.subAttr}}</HTML>");
TestSubClass obj = new TestSubClass(); TestSubClass obj = new TestSubClass();
obj.attr = "1234"; obj.attr = "1234";
obj.subAttr = "5678"; obj.subAttr = "5678";
tmpl.set("test", obj); tmpl.set("test", obj);
assertEquals("<HTML>1234:5678</HTML>", tmpl.compile()); assertEquals("<HTML>1234:5678</HTML>", tmpl.compile());
} }
} }

View file

@ -22,7 +22,7 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser;
import org.junit.Test; import org.junit.Test;
import zutil.parser.URLDecoder; import zutil.parser.URLDecoder;

View file

@ -22,15 +22,14 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser.binary;
import org.junit.Test; import org.junit.Test;
import zutil.parser.binary.BinaryStruct;
import zutil.parser.binary.BinaryStructParser;
import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertFalse;
/** /**
* Created by Ziver on 2016-01-28. * Created by Ziver on 2016-01-28.
*/ */

View file

@ -1,183 +1,183 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser.json;
import org.junit.Test; import org.junit.Test;
import zutil.parser.DataNode; import zutil.parser.DataNode;
import zutil.parser.DataNode.DataType; import zutil.parser.DataNode.DataType;
import zutil.parser.json.JSONParser; import zutil.parser.json.JSONParser;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
public class JSONParserTest { public class JSONParserTest {
@Test @Test
public void nullString(){ public void nullString(){
DataNode data = JSONParser.read(null); DataNode data = JSONParser.read(null);
assertNull(data); assertNull(data);
} }
@Test @Test
public void emptyString(){ public void emptyString(){
DataNode data = JSONParser.read(""); DataNode data = JSONParser.read("");
assertNull(data); assertNull(data);
} }
@Test @Test
public void emptyMap(){ public void emptyMap(){
DataNode data = JSONParser.read("{}"); DataNode data = JSONParser.read("{}");
assertEquals(DataType.Map, data.getType()); assertEquals(DataType.Map, data.getType());
assertEquals( 0, data.size()); assertEquals( 0, data.size());
} }
@Test @Test
public void emptyList(){ public void emptyList(){
DataNode data = JSONParser.read("[]"); DataNode data = JSONParser.read("[]");
assertEquals(DataType.List, data.getType()); assertEquals(DataType.List, data.getType());
assertEquals( 0, data.size()); assertEquals( 0, data.size());
} }
@Test @Test
public void valueInt(){ public void valueInt(){
DataNode data = JSONParser.read("1234"); DataNode data = JSONParser.read("1234");
assert(data.isValue()); assert(data.isValue());
assertEquals( DataType.Number, data.getType()); assertEquals( DataType.Number, data.getType());
assertEquals( 1234, data.getInt()); assertEquals( 1234, data.getInt());
} }
@Test @Test
public void valueDouble(){ public void valueDouble(){
DataNode data = JSONParser.read("12.34"); DataNode data = JSONParser.read("12.34");
assert(data.isValue()); assert(data.isValue());
assertEquals( DataType.Number, data.getType()); assertEquals( DataType.Number, data.getType());
assertEquals( 12.34, data.getDouble(), 0); assertEquals( 12.34, data.getDouble(), 0);
} }
@Test @Test
public void valueBoolean(){ public void valueBoolean(){
DataNode data = JSONParser.read("false"); DataNode data = JSONParser.read("false");
assert(data.isValue()); assert(data.isValue());
assertEquals( DataType.Boolean, data.getType()); assertEquals( DataType.Boolean, data.getType());
assertEquals( false, data.getBoolean()); assertEquals( false, data.getBoolean());
} }
@Test @Test
public void valueBooleanUpperCase(){ public void valueBooleanUpperCase(){
DataNode data = JSONParser.read("TRUE"); DataNode data = JSONParser.read("TRUE");
assert(data.isValue()); assert(data.isValue());
assertEquals( DataType.Boolean, data.getType()); assertEquals( DataType.Boolean, data.getType());
assertEquals( true, data.getBoolean()); assertEquals( true, data.getBoolean());
} }
@Test @Test
public void valueStringNoQuotes(){ public void valueStringNoQuotes(){
DataNode data = JSONParser.read("teststring"); DataNode data = JSONParser.read("teststring");
assert(data.isValue()); assert(data.isValue());
assertEquals( DataType.String, data.getType()); assertEquals( DataType.String, data.getType());
assertEquals( "teststring", data.getString()); assertEquals( "teststring", data.getString());
} }
@Test @Test
public void toManyCommasInList(){ public void toManyCommasInList(){
DataNode data = JSONParser.read("[1,2,3,]"); DataNode data = JSONParser.read("[1,2,3,]");
assertEquals(DataType.List, data.getType()); assertEquals(DataType.List, data.getType());
assertEquals( 1, data.get(0).getInt()); assertEquals( 1, data.get(0).getInt());
assertEquals( 2, data.get(1).getInt()); assertEquals( 2, data.get(1).getInt());
assertEquals( 3, data.get(2).getInt()); assertEquals( 3, data.get(2).getInt());
} }
@Test @Test
public void toManyCommasInMap(){ public void toManyCommasInMap(){
DataNode data = JSONParser.read("{1:1,2:2,3:3,}"); DataNode data = JSONParser.read("{1:1,2:2,3:3,}");
assertEquals(DataType.Map, data.getType()); assertEquals(DataType.Map, data.getType());
assertEquals( 1, data.get("1").getInt()); assertEquals( 1, data.get("1").getInt());
assertEquals( 2, data.get("2").getInt()); assertEquals( 2, data.get("2").getInt());
assertEquals( 3, data.get("3").getInt()); assertEquals( 3, data.get("3").getInt());
} }
@Test @Test
public void nullValueInList(){ public void nullValueInList(){
DataNode data = JSONParser.read("[1,null,3,]"); DataNode data = JSONParser.read("[1,null,3,]");
assertEquals(DataType.List, data.getType()); assertEquals(DataType.List, data.getType());
assertEquals(3, data.size()); assertEquals(3, data.size());
assertEquals( "1", data.get(0).getString()); assertEquals( "1", data.get(0).getString());
assertNull(data.get(1)); assertNull(data.get(1));
assertEquals( "3", data.get(2).getString()); assertEquals( "3", data.get(2).getString());
} }
@Test @Test
public void nullValueInMap(){ public void nullValueInMap(){
DataNode data = JSONParser.read("{1:1,2:null,3:3,}"); DataNode data = JSONParser.read("{1:1,2:null,3:3,}");
assertEquals(DataType.Map, data.getType()); assertEquals(DataType.Map, data.getType());
assertEquals(3, data.size()); assertEquals(3, data.size());
assertEquals( "1", data.getString("1")); assertEquals( "1", data.getString("1"));
assertNull(data.get("2")); assertNull(data.get("2"));
assertEquals( "3", data.getString("3")); assertEquals( "3", data.getString("3"));
} }
@Test @Test
public void emptyStringInMap(){ public void emptyStringInMap(){
DataNode data = JSONParser.read("{1:{2:\"\"}}"); DataNode data = JSONParser.read("{1:{2:\"\"}}");
assertEquals(DataType.Map, data.getType()); assertEquals(DataType.Map, data.getType());
assertEquals(1, data.size()); assertEquals(1, data.size());
assertEquals( "", data.get("1").getString("2")); assertEquals( "", data.get("1").getString("2"));
} }
@Test @Test
public void complexMap() { public void complexMap() {
String json = "{" + String json = "{" +
"\"test1\": 1234," + "\"test1\": 1234," +
"\"TEST1\": 5678," + "\"TEST1\": 5678," +
"\"test3\": 1234.99," + "\"test3\": 1234.99," +
"\"test4\": \"91011\"," + "\"test4\": \"91011\"," +
"\"test5\": [12,13,14,15]," + "\"test5\": [12,13,14,15]," +
"\"test6\": [\"a\",\"b\",\"c\",\"d\"]" + "\"test6\": [\"a\",\"b\",\"c\",\"d\"]" +
"}"; "}";
DataNode data = JSONParser.read(json); DataNode data = JSONParser.read(json);
assert( data.isMap() ); assert( data.isMap() );
assert( 1234 == data.get("test1").getInt() ); assert( 1234 == data.get("test1").getInt() );
assert( 5678 == data.get("TEST1").getInt() ); assert( 5678 == data.get("TEST1").getInt() );
assert( 1234.99 == data.get("test3").getDouble() ); assert( 1234.99 == data.get("test3").getDouble() );
assertEquals( "91011", data.get("test4").getString() ); assertEquals( "91011", data.get("test4").getString() );
assert( data.get("test5").isList() ); assert( data.get("test5").isList() );
assertEquals( 4, data.get("test5").size() ); assertEquals( 4, data.get("test5").size() );
assertEquals( 12, data.get("test5").get(0).getInt() ); assertEquals( 12, data.get("test5").get(0).getInt() );
assertEquals( 13, data.get("test5").get(1).getInt() ); assertEquals( 13, data.get("test5").get(1).getInt() );
assertEquals( 14, data.get("test5").get(2).getInt() ); assertEquals( 14, data.get("test5").get(2).getInt() );
assertEquals( 15, data.get("test5").get(3).getInt() ); assertEquals( 15, data.get("test5").get(3).getInt() );
assert( data.get("test6").isList() ); assert( data.get("test6").isList() );
assertEquals( 4, data.get("test6").size() ); assertEquals( 4, data.get("test6").size() );
assertEquals( "a", data.get("test6").get(0).getString() ); assertEquals( "a", data.get("test6").get(0).getString() );
assertEquals( "b", data.get("test6").get(1).getString() ); assertEquals( "b", data.get("test6").get(1).getString() );
assertEquals( "c", data.get("test6").get(2).getString() ); assertEquals( "c", data.get("test6").get(2).getString() );
assertEquals( "d", data.get("test6").get(3).getString() ); assertEquals( "d", data.get("test6").get(3).getString() );
} }
} }

View file

@ -1,125 +1,126 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser.json;
import com.carrotsearch.junitbenchmarks.BenchmarkRule; import com.carrotsearch.junitbenchmarks.BenchmarkRule;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import zutil.test.JSONSerializerTest.TestClass; import zutil.parser.json.JSONSerializerTest.TestClass;
import java.io.*; import java.io.*;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
public class JSONSerializerBenchmark {
private static final int TEST_EXECUTIONS = 2000; public class JSONSerializerBenchmark {
private static final int TEST_EXECUTIONS = 2000;
@Rule
public BenchmarkRule benchmarkRun = new BenchmarkRule(); @Rule
public BenchmarkRule benchmarkRun = new BenchmarkRule();
@Test
public void testJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
for(int i=0; i<TEST_EXECUTIONS; i++){ public void testJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{
TestClass sourceObj = new TestClass().init(); for(int i=0; i<TEST_EXECUTIONS; i++){
TestClass sourceObj = new TestClass().init();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout); ByteArrayOutputStream bout = new ByteArrayOutputStream();
out.writeObject(sourceObj); ObjectOutputStream out = new ObjectOutputStream(bout);
out.flush(); out.writeObject(sourceObj);
out.close(); out.flush();
byte[] data = bout.toByteArray(); out.close();
byte[] data = bout.toByteArray();
ByteArrayInputStream bin = new ByteArrayInputStream(data);
ObjectInputStream in = new ObjectInputStream(bin); ByteArrayInputStream bin = new ByteArrayInputStream(data);
TestClass targetObj = (TestClass) in.readObject(); ObjectInputStream in = new ObjectInputStream(bin);
in.close(); TestClass targetObj = (TestClass) in.readObject();
in.close();
assertEquals( sourceObj, targetObj );
} assertEquals( sourceObj, targetObj );
} }
}
@Test
public void testJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
for(int i=0; i<TEST_EXECUTIONS; i++){ public void testJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{
TestClass sourceObj = new TestClass().init(); for(int i=0; i<TEST_EXECUTIONS; i++){
TestClass sourceObj = new TestClass().init();
TestClass targetObj = JSONSerializerTest.sendReceiveObject(sourceObj);
TestClass targetObj = JSONSerializerTest.sendReceiveObject(sourceObj);
assertEquals( sourceObj, targetObj );
} assertEquals( sourceObj, targetObj );
} }
}
@Test
public void testOutputJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
for(int i=0; i<TEST_EXECUTIONS; i++){ public void testOutputJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{
TestClass sourceObj = new TestClass().init(); for(int i=0; i<TEST_EXECUTIONS; i++){
TestClass sourceObj = new TestClass().init();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout); ByteArrayOutputStream bout = new ByteArrayOutputStream();
out.writeObject(sourceObj); ObjectOutputStream out = new ObjectOutputStream(bout);
out.flush(); out.writeObject(sourceObj);
out.close(); out.flush();
byte[] data = bout.toByteArray(); out.close();
} byte[] data = bout.toByteArray();
} }
}
@Test
public void testOutputJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
for(int i=0; i<TEST_EXECUTIONS; i++){ public void testOutputJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{
TestClass sourceObj = new TestClass().init(); for(int i=0; i<TEST_EXECUTIONS; i++){
TestClass sourceObj = new TestClass().init();
String targetObj = JSONSerializerTest.writeObjectToJson(sourceObj);
} String targetObj = JSONSerializerTest.writeObjectToJson(sourceObj);
} }
}
@Test
public void testInputJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
TestClass sourceObj = new TestClass().init(); public void testInputJavaLegacySerialize() throws InterruptedException, IOException, ClassNotFoundException{
TestClass sourceObj = new TestClass().init();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout); ByteArrayOutputStream bout = new ByteArrayOutputStream();
out.writeObject(sourceObj); ObjectOutputStream out = new ObjectOutputStream(bout);
out.flush(); out.writeObject(sourceObj);
out.close(); out.flush();
byte[] data = bout.toByteArray(); out.close();
byte[] data = bout.toByteArray();
for(int i=0; i<TEST_EXECUTIONS; i++){
ByteArrayInputStream bin = new ByteArrayInputStream(data); for(int i=0; i<TEST_EXECUTIONS; i++){
ObjectInputStream in = new ObjectInputStream(bin); ByteArrayInputStream bin = new ByteArrayInputStream(data);
TestClass targetObj = (TestClass) in.readObject(); ObjectInputStream in = new ObjectInputStream(bin);
in.close(); TestClass targetObj = (TestClass) in.readObject();
} in.close();
} }
}
@Test
public void testInputJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{ @Test
TestClass sourceObj = new TestClass().init(); public void testInputJavaJSONSerialize() throws InterruptedException, IOException, ClassNotFoundException{
String sourceStr = JSONSerializerTest.writeObjectToJson(sourceObj); TestClass sourceObj = new TestClass().init();
String sourceStr = JSONSerializerTest.writeObjectToJson(sourceObj);
for(int i=0; i<TEST_EXECUTIONS; i++){
TestClass targetObj = JSONSerializerTest.readObjectFromJson(sourceStr); for(int i=0; i<TEST_EXECUTIONS; i++){
} TestClass targetObj = JSONSerializerTest.readObjectFromJson(sourceStr);
} }
} }
}

View file

@ -1,309 +1,308 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.parser.json;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import zutil.io.StringOutputStream; import zutil.io.StringOutputStream;
import zutil.parser.json.JSONObjectInputStream;
import zutil.parser.json.JSONObjectOutputStream; import java.io.IOException;
import java.io.Serializable;
import java.io.IOException; import java.io.StringReader;
import java.io.Serializable; import java.util.ArrayList;
import java.io.StringReader; import java.util.Arrays;
import java.util.ArrayList; import java.util.HashMap;
import java.util.Arrays;
import java.util.HashMap; import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
public class JSONSerializerTest{
public class JSONSerializerTest{
@Test
@Test public void testOutputSerializerWithPrimitives() throws InterruptedException, IOException, ClassNotFoundException{
public void testOutputSerializerWithPrimitives() throws InterruptedException, IOException, ClassNotFoundException{ TestClass sourceObj = new TestClass().init();
TestClass sourceObj = new TestClass().init();
String data = writeObjectToJson(sourceObj);
String data = writeObjectToJson(sourceObj); data = data.replace("\"", "'");
data = data.replace("\"", "'");
assertThat(data, containsString("'str': 'abcd'"));
assertThat(data, containsString("'str': 'abcd'")); assertThat(data, containsString("'value': 42"));
assertThat(data, containsString("'value': 42")); assertThat(data, containsString("'decimal': 1.1"));
assertThat(data, containsString("'decimal': 1.1")); }
}
@Test
@Test public void testInputSerializerWithPrimitives() throws InterruptedException, IOException, ClassNotFoundException{
public void testInputSerializerWithPrimitives() throws InterruptedException, IOException, ClassNotFoundException{ TestClass sourceObj = new TestClass().init();
TestClass sourceObj = new TestClass().init();
TestClass targetObj = sendReceiveObject(sourceObj);
TestClass targetObj = sendReceiveObject(sourceObj);
TestClass.assertEquals(sourceObj, targetObj);
TestClass.assertEquals(sourceObj, targetObj); }
}
@Test
@Test public void testOutputSerializerWithClones() throws InterruptedException, IOException, ClassNotFoundException{
public void testOutputSerializerWithClones() throws InterruptedException, IOException, ClassNotFoundException{ TestClassObjClone sourceObj = new TestClassObjClone().init();
TestClassObjClone sourceObj = new TestClassObjClone().init();
String data = writeObjectToJson(sourceObj);
String data = writeObjectToJson(sourceObj); data = data.replace("\"", "'");
data = data.replace("\"", "'");
assertThat(data, containsString("'@class': 'zutil.test.JSONSerializerTest$TestClassObjClone'"));
assertThat(data, containsString("'@class': 'zutil.test.JSONSerializerTest$TestClassObjClone'")); assertThat(data, containsString("'obj1': {'@class': 'zutil.test.JSONSerializerTest$TestObj', '@object_id': 2, 'value': 42}"));
assertThat(data, containsString("'obj1': {'@class': 'zutil.test.JSONSerializerTest$TestObj', '@object_id': 2, 'value': 42}")); assertThat(data, containsString("'obj2': {'@object_id': 2}"));
assertThat(data, containsString("'obj2': {'@object_id': 2}")); }
}
@Test
@Test public void testInputSerializerWithClones() throws InterruptedException, IOException, ClassNotFoundException{
public void testInputSerializerWithClones() throws InterruptedException, IOException, ClassNotFoundException{ TestClassObjClone sourceObj = new TestClassObjClone().init();
TestClassObjClone sourceObj = new TestClassObjClone().init();
TestClassObjClone targetObj = sendReceiveObject(sourceObj);
TestClassObjClone targetObj = sendReceiveObject(sourceObj);
assertEquals( sourceObj, targetObj );
assertEquals( sourceObj, targetObj ); }
}
@Test
@Test public void testOutputSerializerWithArrays() throws InterruptedException, IOException, ClassNotFoundException{
public void testOutputSerializerWithArrays() throws InterruptedException, IOException, ClassNotFoundException{ TestClassArray sourceObj = new TestClassArray().init();
TestClassArray sourceObj = new TestClassArray().init();
String data = writeObjectToJson(sourceObj);
String data = writeObjectToJson(sourceObj); data = data.replace("\"", "'");
data = data.replace("\"", "'");
assertEquals(
assertEquals( "{'@class': 'zutil.test.JSONSerializerTest$TestClassArray', 'array': [1, 2, 3, 4], '@object_id': 1}\n",
"{'@class': 'zutil.test.JSONSerializerTest$TestClassArray', 'array': [1, 2, 3, 4], '@object_id': 1}\n", data);
data); }
}
@Test
@Test public void testInputSerializerWithArrays() throws InterruptedException, IOException, ClassNotFoundException{
public void testInputSerializerWithArrays() throws InterruptedException, IOException, ClassNotFoundException{ TestClassArray sourceObj = new TestClassArray().init();
TestClassArray sourceObj = new TestClassArray().init();
TestClassArray targetObj = sendReceiveObject(sourceObj);
TestClassArray targetObj = sendReceiveObject(sourceObj); assertEquals( sourceObj, targetObj );
assertEquals( sourceObj, targetObj ); }
}
@Test
@Test public void testInputSerializerWithStringArrays() throws InterruptedException, IOException, ClassNotFoundException{
public void testInputSerializerWithStringArrays() throws InterruptedException, IOException, ClassNotFoundException{ TestClassStringArray sourceObj = new TestClassStringArray().init();
TestClassStringArray sourceObj = new TestClassStringArray().init();
TestClassStringArray targetObj = sendReceiveObject(sourceObj);
TestClassStringArray targetObj = sendReceiveObject(sourceObj); assertEquals( sourceObj, targetObj );
assertEquals( sourceObj, targetObj ); }
}
@Test
@Test public void testSerializerWithNullFieldsHidden() throws InterruptedException, IOException, ClassNotFoundException{
public void testSerializerWithNullFieldsHidden() throws InterruptedException, IOException, ClassNotFoundException{ TestClass sourceObj = new TestClass();
TestClass sourceObj = new TestClass();
String data = writeObjectToJson(sourceObj, false);
String data = writeObjectToJson(sourceObj, false); data = data.replace("\"", "'");
data = data.replace("\"", "'"); assertEquals(
assertEquals( "{'decimal': 0.0}\n",
"{'decimal': 0.0}\n", data);
data);
TestClass targetObj = sendReceiveObject(sourceObj);
TestClass targetObj = sendReceiveObject(sourceObj); TestClass.assertEquals(sourceObj, targetObj);
TestClass.assertEquals(sourceObj, targetObj); }
}
@Test
@Test public void testSerializerWithMapField() throws InterruptedException, IOException, ClassNotFoundException{
public void testSerializerWithMapField() throws InterruptedException, IOException, ClassNotFoundException{ TestClassMap sourceObj = new TestClassMap().init();
TestClassMap sourceObj = new TestClassMap().init();
TestClassMap targetObj = sendReceiveObject(sourceObj);
TestClassMap targetObj = sendReceiveObject(sourceObj); TestClassMap.assertEquals(sourceObj, targetObj);
TestClassMap.assertEquals(sourceObj, targetObj); }
}
@Test
@Test public void testSerializerWithMapFieldWithNullEntry() throws InterruptedException, IOException, ClassNotFoundException{
public void testSerializerWithMapFieldWithNullEntry() throws InterruptedException, IOException, ClassNotFoundException{ TestClassMap sourceObj = new TestClassMap().init();
TestClassMap sourceObj = new TestClassMap().init(); sourceObj.map.put("key1", null);
sourceObj.map.put("key1", null);
TestClassMap targetObj = sendReceiveObject(sourceObj);
TestClassMap targetObj = sendReceiveObject(sourceObj); sourceObj.map.remove("key1"); // key1 should not be set in destination
sourceObj.map.remove("key1"); // key1 should not be set in destination TestClassMap.assertEquals(sourceObj, targetObj);
TestClassMap.assertEquals(sourceObj, targetObj); }
}
@Test
@Test public void testSerializerWithListField() throws InterruptedException, IOException, ClassNotFoundException{
public void testSerializerWithListField() throws InterruptedException, IOException, ClassNotFoundException{ TestClassList sourceObj = new TestClassList().init();
TestClassList sourceObj = new TestClassList().init();
String data = writeObjectToJson(sourceObj);
String data = writeObjectToJson(sourceObj); data = data.replace("\"", "'");
data = data.replace("\"", "'"); assertThat(data, containsString("'list': ['value1', 'value2']"));
assertThat(data, containsString("'list': ['value1', 'value2']"));
TestClassList targetObj = sendReceiveObject(sourceObj);
TestClassList targetObj = sendReceiveObject(sourceObj); TestClassList.assertEquals(sourceObj, targetObj);
TestClassList.assertEquals(sourceObj, targetObj); }
}
/******************* Utility Functions ************************************/
/******************* Utility Functions ************************************/
public static <T> T sendReceiveObject(T sourceObj) throws IOException{
public static <T> T sendReceiveObject(T sourceObj) throws IOException{ return readObjectFromJson(
return readObjectFromJson( writeObjectToJson(sourceObj));
writeObjectToJson(sourceObj)); }
}
@SuppressWarnings("unchecked")
@SuppressWarnings("unchecked") public static <T> T readObjectFromJson(String json) throws IOException{
public static <T> T readObjectFromJson(String json) throws IOException{ StringReader bin = new StringReader(json);
StringReader bin = new StringReader(json); JSONObjectInputStream in = new JSONObjectInputStream(bin);
JSONObjectInputStream in = new JSONObjectInputStream(bin); T targetObj = (T) in.readObject();
T targetObj = (T) in.readObject(); in.close();
in.close();
return targetObj;
return targetObj; }
}
public static <T> String writeObjectToJson(T sourceObj) throws IOException{
public static <T> String writeObjectToJson(T sourceObj) throws IOException{ return writeObjectToJson(sourceObj, true);
return writeObjectToJson(sourceObj, true); }
} public static <T> String writeObjectToJson(T sourceObj, boolean metadata) throws IOException{
public static <T> String writeObjectToJson(T sourceObj, boolean metadata) throws IOException{ StringOutputStream bout = new StringOutputStream();
StringOutputStream bout = new StringOutputStream(); JSONObjectOutputStream out = new JSONObjectOutputStream(bout);
JSONObjectOutputStream out = new JSONObjectOutputStream(bout); out.enableMetaData(metadata);
out.enableMetaData(metadata);
out.writeObject(sourceObj);
out.writeObject(sourceObj); out.flush();
out.flush(); out.close();
out.close();
String data = bout.toString();
String data = bout.toString(); System.out.println(data);
System.out.println(data);
return data;
return data; }
}
/******************** Test Classes ************************************/
/******************** Test Classes ************************************/
public static class TestClass implements Serializable{
public static class TestClass implements Serializable{ private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L; String str;
String str; double decimal;
double decimal; TestObj obj1;
TestObj obj1; TestObj obj2;
TestObj obj2;
public TestClass init(){
public TestClass init(){ this.str = "abcd";
this.str = "abcd"; this.decimal = 1.1;
this.decimal = 1.1; this.obj1 = new TestObj().init();
this.obj1 = new TestObj().init(); this.obj2 = new TestObj().init();
this.obj2 = new TestObj().init(); return this;
return this; }
}
public static void assertEquals(TestClass obj1, TestClass obj2){
public static void assertEquals(TestClass obj1, TestClass obj2){ Assert.assertEquals(obj1.str, obj2.str);
Assert.assertEquals(obj1.str, obj2.str); Assert.assertEquals(obj1.decimal, obj2.decimal, 0.001);
Assert.assertEquals(obj1.decimal, obj2.decimal, 0.001); Assert.assertEquals(obj1.obj1, obj2.obj1);
Assert.assertEquals(obj1.obj1, obj2.obj1); Assert.assertEquals(obj1.obj2, obj2.obj2);
Assert.assertEquals(obj1.obj2, obj2.obj2); }
} }
}
public static class TestClassObjClone{
public static class TestClassObjClone{ TestObj obj1;
TestObj obj1; TestObj obj2;
TestObj obj2;
public TestClassObjClone init(){
public TestClassObjClone init(){ this.obj1 = this.obj2 = new TestObj().init();
this.obj1 = this.obj2 = new TestObj().init(); return this;
return this; }
}
public boolean equals(Object obj){
public boolean equals(Object obj){ return obj instanceof TestClassObjClone &&
return obj instanceof TestClassObjClone && this.obj1.equals(((TestClassObjClone)obj).obj1) &&
this.obj1.equals(((TestClassObjClone)obj).obj1) && this.obj1 == this.obj2 &&
this.obj1 == this.obj2 && ((TestClassObjClone)obj).obj1 == ((TestClassObjClone)obj).obj2;
((TestClassObjClone)obj).obj1 == ((TestClassObjClone)obj).obj2; }
} }
}
public static class TestObj implements Serializable{
public static class TestObj implements Serializable{ private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L; int value;
int value;
public TestObj init(){
public TestObj init(){ this.value = 42;
this.value = 42; return this;
return this; }
}
public boolean equals(Object obj){
public boolean equals(Object obj){ return obj instanceof TestObj &&
return obj instanceof TestObj && this.value == ((TestObj)obj).value;
this.value == ((TestObj)obj).value; }
} }
}
public static class TestClassArray{
public static class TestClassArray{ private int[] array;
private int[] array;
public TestClassArray init(){
public TestClassArray init(){ array = new int[]{1,2,3,4};
array = new int[]{1,2,3,4}; return this;
return this; }
}
public boolean equals(Object obj){
public boolean equals(Object obj){ return obj instanceof TestClassArray &&
return obj instanceof TestClassArray && Arrays.equals(this.array ,((TestClassArray)obj).array);
Arrays.equals(this.array ,((TestClassArray)obj).array); }
} }
}
public static class TestClassStringArray{
public static class TestClassStringArray{ private String[] array;
private String[] array;
public TestClassStringArray init(){
public TestClassStringArray init(){ array = new String[]{"test","string","array"};
array = new String[]{"test","string","array"}; return this;
return this; }
}
public boolean equals(Object obj){
public boolean equals(Object obj){ return obj instanceof TestClassStringArray &&
return obj instanceof TestClassStringArray && Arrays.equals(this.array ,((TestClassStringArray)obj).array);
Arrays.equals(this.array ,((TestClassStringArray)obj).array); }
} }
}
public static class TestClassMap{
public static class TestClassMap{ private HashMap<String,String> map;
private HashMap<String,String> map;
public TestClassMap init(){
public TestClassMap init(){ map = new HashMap<>();
map = new HashMap<>(); map.put("key1", "value1");
map.put("key1", "value1"); map.put("key2", "value2");
map.put("key2", "value2"); return this;
return this; }
}
public static void assertEquals(TestClassMap obj1, TestClassMap obj2){
public static void assertEquals(TestClassMap obj1, TestClassMap obj2){ Assert.assertEquals(obj1.map, obj2.map);
Assert.assertEquals(obj1.map, obj2.map); }
} }
}
public static class TestClassList{
public static class TestClassList{ private ArrayList<String> list;
private ArrayList<String> list;
public TestClassList init(){
public TestClassList init(){ list = new ArrayList<>();
list = new ArrayList<>(); list.add("value1");
list.add("value1"); list.add("value2");
list.add("value2"); return this;
return this; }
}
public static void assertEquals(TestClassList obj1, TestClassList obj2){
public static void assertEquals(TestClassList obj1, TestClassList obj2){ Assert.assertEquals(obj1.list, obj2.list);
Assert.assertEquals(obj1.list, obj2.list); }
} }
} }
}

View file

@ -1,87 +1,87 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.struct;
import junit.framework.TestCase; import junit.framework.TestCase;
import zutil.struct.BloomFilter;
import java.text.DecimalFormat;
import java.text.DecimalFormat; import java.util.HashSet;
import java.util.HashSet; import java.util.Random;
import java.util.Random;
/** /**
* This code may be used, modified, and redistributed provided that the * This code may be used, modified, and redistributed provided that the
* author tag below remains intact. * author tag below remains intact.
* *
* @author Ian Clarke <ian@uprizer.com> * @author Ian Clarke <ian@uprizer.com>
*/ */
public class BloomFilterTest extends TestCase { public class BloomFilterTest extends TestCase {
public void testBloomFilter() { public void testBloomFilter() {
DecimalFormat df = new DecimalFormat("0.00000"); DecimalFormat df = new DecimalFormat("0.00000");
Random r = new Random(124445l); Random r = new Random(124445l);
int bfSize = 400000; int bfSize = 400000;
System.out.println("Testing " + bfSize + " bit SimpleBloomFilter"); System.out.println("Testing " + bfSize + " bit SimpleBloomFilter");
for (int i = 5; i < 10; i++) { for (int i = 5; i < 10; i++) {
int addCount = 10000 * (i + 1); int addCount = 10000 * (i + 1);
BloomFilter<Integer> bf = new BloomFilter<Integer>(bfSize, addCount); BloomFilter<Integer> bf = new BloomFilter<Integer>(bfSize, addCount);
HashSet<Integer> added = new HashSet<Integer>(); HashSet<Integer> added = new HashSet<Integer>();
for (int x = 0; x < addCount; x++) { for (int x = 0; x < addCount; x++) {
int num = r.nextInt(); int num = r.nextInt();
added.add(num); added.add(num);
} }
bf.addAll(added); bf.addAll(added);
assertTrue("Assert that there are no false negatives", bf assertTrue("Assert that there are no false negatives", bf
.containsAll(added)); .containsAll(added));
int falsePositives = 0; int falsePositives = 0;
for (int x = 0; x < addCount; x++) { for (int x = 0; x < addCount; x++) {
int num = r.nextInt(); int num = r.nextInt();
// Ensure that this random number hasn't been added already // Ensure that this random number hasn't been added already
if (added.contains(num)) { if (added.contains(num)) {
continue; continue;
} }
// If necessary, record a false positive // If necessary, record a false positive
if (bf.contains(num)) { if (bf.contains(num)) {
falsePositives++; falsePositives++;
} }
} }
double expectedFP = bf.falsePosetiveProbability(); double expectedFP = bf.falsePosetiveProbability();
double actualFP = (double) falsePositives / (double) addCount; double actualFP = (double) falsePositives / (double) addCount;
System.out.println("Got " + falsePositives System.out.println("Got " + falsePositives
+ " false positives out of " + addCount + " added items, rate = " + " false positives out of " + addCount + " added items, rate = "
+ df.format(actualFP) + ", expected = " + df.format(actualFP) + ", expected = "
+ df.format(expectedFP)); + df.format(expectedFP));
double ratio = actualFP/expectedFP; double ratio = actualFP/expectedFP;
assertTrue( assertTrue(
"Assert that the actual false positive rate doesn't deviate by more than 10% from what was predicted, ratio: "+ratio, "Assert that the actual false positive rate doesn't deviate by more than 10% from what was predicted, ratio: "+ratio,
ratio < 1.1); ratio < 1.1);
} }
} }
} }

View file

@ -1,119 +1,119 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.struct;
import org.junit.Test; import org.junit.Test;
import zutil.struct.CircularBuffer;
import java.util.Iterator;
import java.util.Iterator; import java.util.NoSuchElementException;
import java.util.NoSuchElementException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail;
import static org.junit.Assert.fail;
/** /**
* Created by Ziver on 2015-09-22. * Created by Ziver on 2015-09-22.
*/ */
public class CircularBufferTest { public class CircularBufferTest {
@Test @Test
public void addToEmpty() { public void addToEmpty() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(0); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(0);
try { try {
buff.add(10); buff.add(10);
fail("IndexOutOfBoundsException was not thrown"); fail("IndexOutOfBoundsException was not thrown");
} catch (IndexOutOfBoundsException e) {} } catch (IndexOutOfBoundsException e) {}
} }
@Test @Test
public void addOneElement() { public void addOneElement() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(1); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(1);
assertEquals(0, buff.size()); assertEquals(0, buff.size());
buff.add(10); buff.add(10);
assertEquals(1, buff.size()); assertEquals(1, buff.size());
assertEquals((Integer) 10, buff.get(0)); assertEquals((Integer) 10, buff.get(0));
} }
@Test @Test
public void addThreeElements() { public void addThreeElements() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10);
buff.add(10); buff.add(10);
buff.add(11); buff.add(11);
buff.add(12); buff.add(12);
assertEquals(3, buff.size()); assertEquals(3, buff.size());
assertEquals((Integer) 12, buff.get(0)); assertEquals((Integer) 12, buff.get(0));
assertEquals((Integer) 11, buff.get(1)); assertEquals((Integer) 11, buff.get(1));
assertEquals((Integer) 10, buff.get(2)); assertEquals((Integer) 10, buff.get(2));
} }
@Test @Test
public void addOutOfRange() { public void addOutOfRange() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(2); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(2);
buff.add(10); buff.add(10);
buff.add(11); buff.add(11);
buff.add(12); buff.add(12);
assertEquals(2, buff.size()); assertEquals(2, buff.size());
assertEquals((Integer) 12, buff.get(0)); assertEquals((Integer) 12, buff.get(0));
assertEquals((Integer) 11, buff.get(1)); assertEquals((Integer) 11, buff.get(1));
try { try {
buff.get(2); buff.get(2);
fail("IndexOutOfBoundsException was not thrown"); fail("IndexOutOfBoundsException was not thrown");
} catch (IndexOutOfBoundsException e) {} } catch (IndexOutOfBoundsException e) {}
} }
@Test @Test
public void iteratorEmpty() { public void iteratorEmpty() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10);
Iterator<Integer> it = buff.iterator(); Iterator<Integer> it = buff.iterator();
assert (!it.hasNext()); assert (!it.hasNext());
try { try {
it.next(); it.next();
fail("NoSuchElementException was not thrown"); fail("NoSuchElementException was not thrown");
} catch (NoSuchElementException e) {} } catch (NoSuchElementException e) {}
} }
@Test @Test
public void iteratorThreeElements() { public void iteratorThreeElements() {
CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10); CircularBuffer<Integer> buff = new CircularBuffer<Integer>(10);
buff.add(10); buff.add(10);
buff.add(11); buff.add(11);
buff.add(12); buff.add(12);
Iterator<Integer> it = buff.iterator(); Iterator<Integer> it = buff.iterator();
assert (it.hasNext()); assert (it.hasNext());
assertEquals((Integer) 12, it.next()); assertEquals((Integer) 12, it.next());
assert (it.hasNext()); assert (it.hasNext());
assertEquals((Integer) 11, it.next()); assertEquals((Integer) 11, it.next());
assert (it.hasNext()); assert (it.hasNext());
assertEquals((Integer) 10, it.next()); assertEquals((Integer) 10, it.next());
assert (!it.hasNext()); assert (!it.hasNext());
try { try {
it.next(); it.next();
fail("NoSuchElementException was not thrown"); fail("NoSuchElementException was not thrown");
} catch (NoSuchElementException e) {} } catch (NoSuchElementException e) {}
} }
} }

View file

@ -22,13 +22,13 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.struct;
import org.junit.Test; import org.junit.Test;
import zutil.struct.TimedHashSet;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
/** /**
* Created by Ziver on 2015-11-20. * Created by Ziver on 2015-11-20.
*/ */

View file

@ -1,50 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2015 Ziver Koc
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package zutil.test;
import zutil.Hasher;
import zutil.io.file.FileUtil;
import java.io.File;
import java.net.URISyntaxException;
import java.util.List;
public class FileFinderHasherTest {
public static void main(String[] args) throws URISyntaxException{
String relativePath = "zutil/test";
File path = FileUtil.find(relativePath);
List<File> files = FileUtil.search(path);
for(int i=0; i<files.size(); i++){
try {
System.out.println(
FileUtil.relativePath(files.get(i), relativePath)+
": "+Hasher.hash(files.get(i),"MD5"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

View file

@ -1,50 +1,49 @@
/* /*
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2015 Ziver Koc * Copyright (c) 2015 Ziver Koc
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights * in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is * copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions: * furnished to do so, subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in * The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software. * all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package zutil.test; package zutil.ui;
import zutil.ui.Console; import java.io.BufferedReader;
import java.io.IOException;
import java.io.BufferedReader; import java.io.InputStreamReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ConsoleTest {
public class ConsoleTest { public static void main(String[] args) throws IOException{
public static void main(String[] args) throws IOException{ Console terminal = new Console("Console Test");
Console terminal = new Console("Console Test"); terminal.enableTray(true);
terminal.enableTray(true); BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(true){
while(true){ System.out.println("hello= "+in.readLine());
System.out.println("hello= "+in.readLine()); for(int i=0; i<2 ;i++){
for(int i=0; i<2 ;i++){ System.out.println(i+"Hello World!!!sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
System.out.println(i+"Hello World!!!sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); System.err.println(i+"Hello World!!!sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
System.err.println(i+"Hello World!!!sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); try {
try { Thread.sleep(100);
Thread.sleep(100); } catch (InterruptedException e) {}
} catch (InterruptedException e) {} }
} }
} }
} }
}