
package jp.riken.brain.ni.samuraigraph.application;

import java.io.PrintWriter;
import java.net.Socket;
import jp.riken.brain.ni.samuraigraph.base.SGUtility;


public class SGClient
{

	public static void main(String[] args)
	{

		try
		{

			// コマンドラインのチェック
			if( readCommandLine( args ) == false )
			{
				System.out.println("コマンドライン文字列が不正です。");
				return;
			}


			// ソケットを生成
			Socket socket = new Socket( "localhost", SGDrawingServer.PORT_NUMBER );
			socket.setSoTimeout(10000);


			// 出力ストリームを取得
			PrintWriter out = new PrintWriter( socket.getOutputStream() );


			// コマンドライン引数で渡された文字列をサーバーに送る
			for( int ii=0; ii<args.length; ii++ )
			{
				out.println(args[ii]);
			}
// TODO:サーバからの返事を聞く


			// 出力ストリームを閉じる
			out.close();

			// ソケットを閉じる
			socket.close();

		}
		catch( Exception e )
		{
			e.printStackTrace();
			System.exit(200);
		}

	}



	/**
	 * コマンドライン文字列に応じた処理を行う
	 */
	private static boolean readCommandLine( String[] args )
	{

		// check
		if( args==null )
		{
			return false;
		}
		if( args.length==0 )
		{
			return false;
		}

		// the first argument is the command name
		String command = args[0];
		if( command==null )
		{
			return false;
		}
		if( command.equals( SGDrawingServer.COM_ADD_DATE ) )
		{
			if( !onAddData( args ) )
			{
				return false;
			}
		}
		else if( command.equals( SGDrawingServer.COM_READ_PROPERTY ) )
		{
			if( !onReadProperty( args ) )
			{
				return false;
			}
		}

		return true;
	}



	/**
	 * 
	 */
	private static boolean onAddData( String[] args )
	{
		if( args.length < 2 )
		{
			return false;
		}
		if( args[1] == null )
		{
			return false;
		}

//System.out.println("before:"+args[1]);
		args[1] = SGUtility.getCanonicalPath( args[1] );
//System.out.println("after:"+args[1]);
//System.out.println();

		if( args[1] == null )
		{
			return false;
		}

		return true;
	}



	/**
	 * 
	 */
	private static boolean onReadProperty( String[] args )
	{

		if( args.length < 3 )
		{
			return false;
		}
		if( args[1] == null )
		{
			return false;
		}
		args[1] = SGUtility.getCanonicalPath( args[1] );
		if( args[1] == null )
		{
			return false;
		}


		if( args[2] == null )
		{
			return false;
		}
		args[2] = SGUtility.getCanonicalPath( args[2] );
		if( args[2] == null )
		{
			return false;
		}

		return true;
	}




}

