Search in sources :

Example 1 with ServerConnection

use of jp.ossc.nimbus.service.publish.ServerConnection in project nimbus by nimbus-org.

the class ServerConnectionSendActionService method execute.

/**
 * リソースの内容を読み込んで、{@link ServerConnection}に{@link Message}を送信する。<p>
 * リソースのフォーマットは、以下。<br>
 * <pre>
 * subject,key
 *
 * objectId
 * objectScript
 * </pre>
 * subjectは、{@link Message}に設定するサブジェクトを指定する。keyは、{@link Message}に設定するキーを指定する。サブジェクトを複数設定する場合は、改行して指定する。サブジェクト指定の終了には、空行を挿入する。<br>
 * objectIdは、{@link Message}に設定するオブジェクトを指定するもので、同一テストケース中に、このTestActionより前に、オブジェクトを戻すテストアクションが存在する場合は、そのアクションIDを指定する。また、同一シナリオ中に、このTestActionより前に、オブジェクトを戻すテストアクションが存在する場合は、テストケースIDとアクションIDをカンマ区切りで指定する。空行を指定した場合は、オブジェクトをTestActionの結果から取得しない。<br>
 * objectScriptは、{@link Message}に設定するオブジェクトを生成するスクリプトを指定する。スクリプトは、{@link Interpreter#evaluate(String,Map)}で評価され、引数の変数マップには、"context"で{@link TestContext}、"preResult"でpreResultが渡される。<br>
 * objectId、objectScriptの両方が指定されていない場合は、preResultを使用する。<br>
 *
 * @param context コンテキスト
 * @param actionId アクションID
 * @param preResult 更新クエリに対する引数オブジェクト
 * @param resource リソース
 * @return 送信したメッセージ
 */
public Object execute(TestContext context, String actionId, Object preResult, Reader resource) throws Exception {
    BufferedReader br = new BufferedReader(resource);
    Message message = null;
    Object object = preResult;
    ServerConnectionFactory scf = serverConnectionFactory;
    if (serverConnectionFactory == null && serverConnectionFactoryServiceName != null) {
        scf = (ServerConnectionFactory) ServiceManagerFactory.getServiceObject(serverConnectionFactoryServiceName);
    }
    final ServerConnection con = scf.getServerConnection();
    try {
        String subjectAndKey = br.readLine();
        if (subjectAndKey == null || subjectAndKey.length() == 0) {
            throw new Exception("Unexpected EOF on subject and key");
        }
        do {
            String[] subjectAndKeyArray = CSVReader.toArray(subjectAndKey, ',', '\\', null, null, true, false, true, true);
            if (subjectAndKeyArray == null || subjectAndKeyArray.length == 0 || subjectAndKeyArray.length > 2) {
                throw new Exception("Illegal subject and key format. subjectAndKey=" + subjectAndKey);
            }
            if (message == null) {
                message = con.createMessage(subjectAndKeyArray[0], subjectAndKeyArray.length == 2 ? subjectAndKeyArray[1] : null);
            } else {
                message.setSubject(subjectAndKeyArray[0], subjectAndKeyArray.length == 2 ? subjectAndKeyArray[1] : null);
            }
        } while ((subjectAndKey = br.readLine()) != null && subjectAndKey.length() != 0);
        final String objectId = br.readLine();
        if (objectId != null && objectId.length() != 0) {
            Object actionResult = null;
            if (objectId.indexOf(",") == -1) {
                actionResult = context.getTestActionResult(objectId);
            } else {
                String[] ids = objectId.split(",");
                if (ids.length != 2) {
                    throw new Exception("Illegal objectId format. id=" + objectId);
                }
                actionResult = context.getTestActionResult(ids[0], ids[1]);
            }
            if (actionResult == null) {
                throw new Exception("TestActionResult not found. id=" + objectId);
            }
            object = actionResult;
        }
        String objectScript = null;
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        try {
            String line = null;
            while ((line = br.readLine()) != null) {
                pw.println(line);
            }
            pw.flush();
            objectScript = sw.toString();
            if (objectScript.length() == 0) {
                objectScript = null;
            }
        } finally {
            sw.close();
            pw.close();
        }
        if (objectScript != null) {
            if (interpreter == null) {
                throw new UnsupportedOperationException("Interpreter is null.");
            }
            final Map params = new HashMap();
            params.put("context", context);
            params.put("preResult", preResult);
            object = interpreter.evaluate(objectScript, params);
        }
        if (object != null) {
            message.setObject(object);
        }
        con.send(message);
    } finally {
        br.close();
        br = null;
    }
    return message;
}
Also used : Message(jp.ossc.nimbus.service.publish.Message) HashMap(java.util.HashMap) ServerConnection(jp.ossc.nimbus.service.publish.ServerConnection) ServerConnectionFactory(jp.ossc.nimbus.service.publish.ServerConnectionFactory) StringWriter(java.io.StringWriter) BufferedReader(java.io.BufferedReader) HashMap(java.util.HashMap) Map(java.util.Map) PrintWriter(java.io.PrintWriter)

Aggregations

BufferedReader (java.io.BufferedReader)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Message (jp.ossc.nimbus.service.publish.Message)1 ServerConnection (jp.ossc.nimbus.service.publish.ServerConnection)1 ServerConnectionFactory (jp.ossc.nimbus.service.publish.ServerConnectionFactory)1