package de.unisiegen.gtitool.start.i18n;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/**
* The messages test class.
*
* @author Christian Fehler
* @version $Id$
*/
public class MessagesTest
{
/**
* The readed line list en.
*/
private static ArrayList readedLineListEn = new ArrayList ( 1000 );
/**
* The readed split line list en.
*/
private static ArrayList readedLineSplitListEn = new ArrayList ( 1000 );
/**
* The readed line list de.
*/
private static ArrayList readedLineListDe = new ArrayList ( 1000 );
/**
* The readed split line list de.
*/
private static ArrayList readedLineSplitListDe = new ArrayList ( 1000 );
/**
* The error list.
*/
private static ArrayList errorList = new ArrayList ();
/**
* The allowed chars.
*/
private static char [] allowedChars =
{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C',
'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4',
'5', '6', '7', '8', '9', ' ', ',', '{', '}', '-', '\\', '>', '(', ')',
'.', ':', '[', ']' };
/**
* Returns the formatted string.
*
* @param number The input number.
* @return The formatted string.
*/
private static String formatString ( int number )
{
String result = String.valueOf ( number );
int max = readedLineListEn.size () > readedLineListDe.size () ? readedLineListEn
.size ()
: readedLineListDe.size ();
for ( int i = String.valueOf ( number ).length () ; i < String.valueOf (
max ).length () ; i++ )
{
result = " " + result; //$NON-NLS-1$
}
return result;
}
/**
* The main method.
*
* @param arguments The arguments.
*/
public static void main ( String [] arguments )
{
// core
System.out.println ( "*** core ***" ); //$NON-NLS-1$
String fileNameEnCore = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/core/i18n/messages.properties" ).getFile (); //$NON-NLS-1$
String fileNameDeCore = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/core/i18n/messages_de.properties" ).getFile (); //$NON-NLS-1$
testFiles ( fileNameEnCore, fileNameDeCore );
// ui
System.out.println ();
System.out.println ( "*** ui ***" ); //$NON-NLS-1$
String fileNameEnUi = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/ui/i18n/messages.properties" ).getFile (); //$NON-NLS-1$
String fileNameDeUi = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/ui/i18n/messages_de.properties" ).getFile (); //$NON-NLS-1$
testFiles ( fileNameEnUi, fileNameDeUi );
// start
System.out.println ();
System.out.println ( "*** start ***" ); //$NON-NLS-1$
String fileNameEnStart = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/start/i18n/messages.properties" ).getFile (); //$NON-NLS-1$
String fileNameDeStart = MessagesTest.class.getResource (
"/de/unisiegen/gtitool/start/i18n/messages_de.properties" ).getFile (); //$NON-NLS-1$
testFiles ( fileNameEnStart, fileNameDeStart );
}
/**
* Tests the given files.
*
* @param fileNameEn The english file.
* @param fileNameDe The german file.
*/
private static void testFiles ( String fileNameEn, String fileNameDe )
{
try
{
FileReader fileReaderEn = new FileReader ( fileNameEn );
BufferedReader bufferedReaderEn = new BufferedReader ( fileReaderEn );
String inputEn;
while ( ( inputEn = bufferedReaderEn.readLine () ) != null )
{
readedLineListEn.add ( inputEn );
readedLineSplitListEn.add ( inputEn.split ( "=" ) ); //$NON-NLS-1$
}
bufferedReaderEn.close ();
FileReader fileReaderDe = new FileReader ( fileNameDe );
BufferedReader bufferedReaderDe = new BufferedReader ( fileReaderDe );
String inputDe;
while ( ( inputDe = bufferedReaderDe.readLine () ) != null )
{
readedLineListDe.add ( inputDe );
readedLineSplitListDe.add ( inputDe.split ( "=" ) ); //$NON-NLS-1$
}
bufferedReaderDe.close ();
// Check for different keys
for ( int i = 0 ; i < readedLineListEn.size () ; i++ )
{
String [] splitLineEn = ( String [] ) readedLineSplitListEn.get ( i );
// Key found
if ( splitLineEn.length >= 2 )
{
if ( i >= readedLineListDe.size () )
{
break;
}
String [] splitLineDe = ( String [] ) readedLineSplitListDe.get ( i );
if ( splitLineDe.length >= 2 )
{
if ( !splitLineEn [ 0 ].equals ( splitLineDe [ 0 ] ) )
{
errorList.add ( formatString ( i + 1 )
+ ": different keys ('EN': '" //$NON-NLS-1$
+ splitLineEn [ 0 ] + "' 'DE': '" + splitLineDe [ 0 ] + "')" ); //$NON-NLS-1$ //$NON-NLS-2$
}
}
else
{
errorList.add ( formatString ( i + 1 ) + ": no key found in 'DE'" ); //$NON-NLS-1$
}
}
}
// Duplicated keys En
for ( int i = 0 ; i < readedLineListEn.size () ; i++ )
{
for ( int j = i + 1 ; j < readedLineListEn.size () ; j++ )
{
String [] splitLine0 = ( String [] ) readedLineSplitListEn.get ( i );
String [] splitLine1 = ( String [] ) readedLineSplitListEn.get ( j );
if ( ( splitLine0.length >= 2 ) && ( splitLine1.length >= 2 ) )
{
if ( splitLine0 [ 0 ].equals ( splitLine1 [ 0 ] ) )
{
errorList.add ( formatString ( i + 1 )
+ ": 'EN': same key found in line " + ( j + 1 ) + ": '" //$NON-NLS-1$//$NON-NLS-2$
+ splitLine1 [ 0 ] + "'" ); //$NON-NLS-1$
}
}
}
}
// Duplicated keys De
for ( int i = 0 ; i < readedLineListDe.size () ; i++ )
{
for ( int j = i + 1 ; j < readedLineListDe.size () ; j++ )
{
String [] splitLine0 = ( String [] ) readedLineSplitListDe.get ( i );
String [] splitLine1 = ( String [] ) readedLineSplitListDe.get ( j );
if ( ( splitLine0.length >= 2 ) && ( splitLine1.length >= 2 ) )
{
if ( splitLine0 [ 0 ].equals ( splitLine1 [ 0 ] ) )
{
errorList.add ( formatString ( i + 1 )
+ ": 'DE': same key found in line " + ( j + 1 ) + ": '" //$NON-NLS-1$ //$NON-NLS-2$
+ splitLine1 [ 0 ] + "'" ); //$NON-NLS-1$
}
}
}
}
// Not allowed keys En
for ( int i = 0 ; i < readedLineListEn.size () ; i++ )
{
String [] splitLineEn = ( String [] ) readedLineSplitListEn.get ( i );
// Key found
if ( splitLineEn.length >= 2 )
{
String value = splitLineEn [ 1 ];
for ( int k = 0 ; k < value.length () ; k++ )
{
boolean found = false;
for ( int j = 0 ; j < allowedChars.length ; j++ )
{
if ( value.charAt ( k ) == allowedChars [ j ] )
{
found = true;
}
}
if ( !found )
{
errorList.add ( formatString ( i + 1 )
+ ": 'EN': not allowed char: " + value.charAt ( k ) ); //$NON-NLS-1$
}
}
}
}
// Not allowed keys De
for ( int i = 0 ; i < readedLineListDe.size () ; i++ )
{
String [] splitLineDe = ( String [] ) readedLineSplitListDe.get ( i );
// Key found
if ( splitLineDe.length >= 2 )
{
String value = splitLineDe [ 1 ];
for ( int k = 0 ; k < value.length () ; k++ )
{
boolean found = false;
for ( int j = 0 ; j < allowedChars.length ; j++ )
{
if ( value.charAt ( k ) == allowedChars [ j ] )
{
found = true;
}
}
if ( !found )
{
errorList.add ( formatString ( i + 1 )
+ ": 'DE': not allowed char: " + value.charAt ( k ) ); //$NON-NLS-1$
}
}
}
}
// Not the same number of lines
if ( readedLineListEn.size () != readedLineListDe.size () )
{
errorList.add ( "different line numbers" ); //$NON-NLS-1$
}
System.out.println ( "Readed lines 'EN': " + readedLineListEn.size () ); //$NON-NLS-1$
System.out.println ( "Readed lines 'DE': " + readedLineListDe.size () ); //$NON-NLS-1$
if ( errorList.size () > 0 )
{
System.err.println ();
System.err.println ( "=> Errors found:" ); //$NON-NLS-1$
for ( int i = 0 ; i < errorList.size () ; i++ )
{
System.err.println ( errorList.get ( i ) );
}
}
else
{
System.out.println ( "=> No errors found!" ); //$NON-NLS-1$
}
}
catch ( FileNotFoundException exc )
{
exc.printStackTrace ();
}
catch ( IOException exc )
{
exc.printStackTrace ();
}
readedLineListEn.clear ();
readedLineSplitListEn.clear ();
readedLineListDe.clear ();
readedLineSplitListDe.clear ();
}
}