/*
 * blanco Framework
 * Copyright (C) 2004-2007 IGA Tosiki
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.valueobjectdotnet.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;

import blanco.commons.util.BlancoJavaSourceUtil;

public class BlancoValueObjectDotNetUtil {
    /**
     * 改行処理付で、与えられた文字列をC#.NETのXMLコメントとしてエスケープ処理します。
     * 
     * @param arg
     *            エスケープ処理を行いたい文字列。
     * @return エスケープ処理されたあとの文字列
     */
    public static final String[] escapeStringAsCsDocWithNewLine(final String arg) {
        final ArrayList result = new ArrayList();
        try {
            final BufferedReader reader = new BufferedReader(new StringReader(
                    arg));
            try {
                for (;;) {
                    final String readLine = reader.readLine();
                    if (readLine == null) {
                        break;
                    }
                    result.add(BlancoJavaSourceUtil
                            .escapeStringAsJavaDoc(readLine));
                }
            } finally {
                reader.close();
            }
        } catch (IOException e) {
            throw new IllegalArgumentException("ありえない入出力例外が発生しました。"
                    + e.toString());
        }

        // ArrayListを配列化します。
        final String[] returnValue = new String[result.size()];
        result.toArray(returnValue);
        for (int index = 0; index < returnValue.length; index++) {
            String readLine = returnValue[index];
            if (index < returnValue.length - 1) {
                // 最後の行以外は 改行文字を付与します。
                readLine += "\n";
            }
            // 文字列中のすべての改行文字を無効化します。
            // これは C#.NETの改行が特殊だからです。
            readLine = readLine.replaceAll("\n", "");
            returnValue[index] = readLine;
        }
        return returnValue;
    }
}
