/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.    
 */
#include "apache/das/StringWrapper.h"

namespace apache {
	namespace das {

StringWrapper::StringWrapper(std::string str) : str(str) {}

StringWrapper::StringWrapper(commonj::sdo::DataObjectPtr dataObject, std::string propertyName) {
	unsigned int length = dataObject->getLength(propertyName);
	wchar_t* buffer = new wchar_t[length];
	dataObject->getString(propertyName, buffer, length);

	std::wstring wstr(buffer, 0, length);
	this->str = std::string(wstr.begin(), wstr.end());
	delete buffer;

}

std::string StringWrapper::toLower(void) const {
	std::string str = this->str;
	unsigned int length = str.length();

	for(int i=0; i != length; i++) {
		str[i] = tolower(str[i]);
	}

	return str;

}

std::string StringWrapper::toUpper(void) const {
	std::string str = this->str;
	unsigned int length = str.length();

	for(int i=0; i != length; i++) {
		str[i] = toupper(str[i]);
	}

	return str;

}

bool StringWrapper::isValidRDBName(void) const {
	
	if (str.find(' ') != -1 || str.find('\t') != -1 || str.find('\n') != -1 || str.find('\r') != -1) {
		return false;
	} else {
		return true;
	}

}

std::string StringWrapper::toString(const double& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const float& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const long double& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const unsigned char& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const wchar_t& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const int& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::toString(const long& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

std::string StringWrapper::getString(void) const {
	return str;
}


std::string StringWrapper::toString(const unsigned int& t) {
	std::stringstream ss;
	ss << t;

	return ss.str();

}

void StringWrapper::defineOnDataObject(commonj::sdo::DataObjectPtr dataObject, std::string propertyName) const {
		std::wstring wstr(str.begin(), str.end());
		dataObject->setString(propertyName, wstr.c_str(), wstr.size());

}


	};
};
