package org.jacorb.test.orb;
import java.util.Arrays;
import org.jacorb.test.CodesetServerPOA;
/**
* <code>CodesetServerImpl</code> is the server implementation for testing
* codesets.
* Chars, wchars, strings and wstrings will be passed in here with codesets
* turned on and off. The first parameter denotes the static field within
* the AbstractCodesetTestCase class - this may be used to retrieve the value to match
* against. Check AbstractCodesetTestCase::codesetEnabled for whether we expect the
* values to match or not - will NOT match if
* codeSet is disabled AND value if not in Latin-1
*
*
* @author <a href="mailto:rnc@prismtechnologies.com"></a>
* @version 1.0
*/
public class CodesetServerImpl extends CodesetServerPOA
{
/**
* <code>pass_in_char</code> is the implementation for CodesetServer.
*
* @param name a <code>String</code> representing the variable name of the
* character as defined in AbstractCodesetTestCase.
* @param x a <code>char</code>, the transmitted value.
* @return a <code>boolean</code>, denoting whether the transmitted value is
* equal to the original.
*/
public boolean pass_in_char(String name, char x)
{
boolean result = false;
try
{
char value = AbstractCodesetTestCase.class.getField( name ).getChar(null);
if( x == value )
{
result = true;
}
}
catch( NoSuchFieldException e )
{
throw new RuntimeException( "Incorrect name for variable: " + e);
}
catch( IllegalAccessException e )
{
throw new RuntimeException( "Internal error - failed to get field: " + e);
}
return result;
}
/**
* <code>pass_in_string</code> is the implementation for CodesetServer.
*
* @param name See {@link CodesetServerImpl#pass_in_char(String,char)}
* @param x a <code>String</code> the transmitted value.
* @return See {@link CodesetServerImpl#pass_in_char(String,char)}
*/
public boolean pass_in_string(String name, String x)
{
boolean result = false;
try
{
String value = (String)AbstractCodesetTestCase.class.getField( name ).get( null );
if( value != null && value.equals( x ) )
{
result = true;
}
}
catch( NoSuchFieldException e )
{
throw new RuntimeException( "Incorrect name for variable: " + e);
}
catch( IllegalAccessException e )
{
throw new RuntimeException( "Internal error - failed to get field: " + e);
}
return result;
}
/**
* <code>pass_in_wchar</code> is the implementation for CodesetServer.
*
* @param name See {@link CodesetServerImpl#pass_in_char(String,char)}
* @param x a <code>char</code>, the transmitted value.
* @return See {@link CodesetServerImpl#pass_in_char(String,char)}
*/
public boolean pass_in_wchar(String name, char x)
{
throw new RuntimeException( "NYI");
}
/**
* <code>pass_in_wstring</code> is the implementation for CodesetServer.
*
* @param name See {@link CodesetServerImpl#pass_in_char(String,char)}
* @param x a <code>String</code> the transmitted value.
* @return See {@link CodesetServerImpl#pass_in_char(String,char)}
*/
public boolean pass_in_wstring(String name, String x)
{
throw new RuntimeException( "NYI");
}
/**
* <code>pass_in_char_array</code> is the implementation for CodesetServer.
*
* @param name See {@link CodesetServerImpl#pass_in_char(String,char)}
* @param x a <code>char[]</code>, the transmitted value.
* @return See {@link CodesetServerImpl#pass_in_char(String,char)}
*/
public boolean pass_in_char_array(String name, char[] x)
{
boolean result = false;
try
{
if ( ! name.equals("multibyte"))
{
char[] value = (char[])AbstractCodesetTestCase.class.getField( name ).get(null);
if( Arrays.equals( x, value ) )
{
result = true;
}
}
else
{
// Special handling for multibyte char array where bytes
// are in char[0...n]
byte []temp =
(new String(new char []{AbstractCodesetTestCase.E_ACUTE})).getBytes("UTF-8");
char []topass = new char[2];
topass[0]=(char)(temp[0] & 0xFF);
topass[1]=(char)(temp[1] & 0xFF);
if (x.length == 2 && x[0] == topass[0] && x[1] == topass[1])
{
result = true;
}
}
}
catch( NoSuchFieldException e )
{
throw new RuntimeException( "Incorrect name for variable: " + e);
}
catch( IllegalAccessException e )
{
throw new RuntimeException( "Internal error - failed to get field: " + e);
}
catch (java.io.UnsupportedEncodingException e)
{
throw new RuntimeException( "Internal error - encoding issue " + e);
}
return result;
}
}