Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.data.old.format.Csv");
dojo.require("dojo.lang.assert");
dojo.data.old.format.Csv = new function () {
        this.getArrayStructureFromCsvFileContents = function (csvFileContents) {
                dojo.lang.assertType(csvFileContents, String);
                var lineEndingCharacters = new RegExp("\r\n|\n|\r");
                var leadingWhiteSpaceCharacters = new RegExp("^\\s+", "g");
                var trailingWhiteSpaceCharacters = new RegExp("\\s+$", "g");
                var doubleQuotes = new RegExp("\"\"", "g");
                var arrayOfOutputRecords = [];
                var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
                for (var i in arrayOfInputLines) {
                        var singleLine = arrayOfInputLines[i];
                        if (singleLine.length > 0) {
                                var listOfFields = singleLine.split(",");
                                var j = 0;
                                while (j < listOfFields.length) {
                                        var space_field_space = listOfFields[j];
                                        var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, "");
                                        var field = field_space.replace(trailingWhiteSpaceCharacters, "");
                                        var firstChar = field.charAt(0);
                                        var lastChar = field.charAt(field.length - 1);
                                        var secondToLastChar = field.charAt(field.length - 2);
                                        var thirdToLastChar = field.charAt(field.length - 3);
                                        if ((firstChar == "\"") && ((lastChar != "\"") || ((lastChar == "\"") && (secondToLastChar == "\"") && (thirdToLastChar != "\"")))) {
                                                if (j + 1 === listOfFields.length) {
                                                        return null;
                                                }
                                                var nextField = listOfFields[j + 1];
                                                listOfFields[j] = field_space + "," + nextField;
                                                listOfFields.splice(j + 1, 1);
                                        } else {
                                                if ((firstChar == "\"") && (lastChar == "\"")) {
                                                        field = field.slice(1, (field.length - 1));
                                                        field = field.replace(doubleQuotes, "\"");
                                                }
                                                listOfFields[j] = field;
                                                j += 1;
                                        }
                                }
                                arrayOfOutputRecords.push(listOfFields);
                        }
                }
                return arrayOfOutputRecords;
        };
        this.loadDataProviderFromFileContents = function (dataProvider, csvFileContents) {
                dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base);
                dojo.lang.assertType(csvFileContents, String);
                var arrayOfArrays = this.getArrayStructureFromCsvFileContents(csvFileContents);
                if (arrayOfArrays) {
                        var arrayOfKeys = arrayOfArrays[0];
                        for (var i = 1; i < arrayOfArrays.length; ++i) {
                                var row = arrayOfArrays[i];
                                var item = dataProvider.getNewItemToLoad();
                                for (var j in row) {
                                        var value = row[j];
                                        var key = arrayOfKeys[j];
                                        item.load(key, value);
                                }
                        }
                }
        };
        this.getCsvStringFromResultSet = function (resultSet) {
                dojo.unimplemented("dojo.data.old.format.Csv.getCsvStringFromResultSet");
                var csvString = null;
                return csvString;
        };
}();