/* ============================================================================
 *  PROTECTED Methods
 */
void THGoogleDetectLanguage::parseResponse (const QByteArray& data) {   
    THJsonStreamReader::TokenType tokenType;
    THJsonStreamReader jsonReader(data);

    while (!jsonReader.atEnd()) {
        tokenType = jsonReader.readNext();

        if (!jsonReader.isProperty())
            continue;

        QStringRef propertyName = jsonReader.name();
        if (propertyName == "language") {
            d->language = jsonReader.value().toString();
        } else if (propertyName == "isReliable") {
            d->isReliable = jsonReader.value().toBool();
        } else if (propertyName == "confidence") {
            d->confidence = jsonReader.value().toDouble();
        } else if (propertyName == "responseStatus") {
            setResponseStatus(jsonReader.value().toInt());
        } else if (propertyName == "responseDetails" &&
                   tokenType != THJsonStreamReader::PropertyNull)
        {
            setErrorString(jsonReader.value().toString());
        }
    }

    emit finished(responseStatus() != 200);
}
/* ============================================================================
 *  PROTECTED Methods
 */
void THGoogleTranslator::parseResponse (const QByteArray& data) {   
    THJsonStreamReader::TokenType tokenType;
    THJsonStreamReader jsonReader(data);

    while (!jsonReader.atEnd()) {
        tokenType = jsonReader.readNext();

        if (!jsonReader.isProperty())
            continue;

        QStringRef propertyName = jsonReader.name();
        if (propertyName == "translatedText") {
            d->translatedText = jsonReader.value().toString();
        } else if (propertyName == "detectedSourceLanguage") {
            d->detectedSourceLanguage = jsonReader.value().toString();
        } else if (propertyName == "responseStatus") {
            setResponseStatus(jsonReader.value().toInt());
        } else if (propertyName == "responseDetails" &&
                   tokenType != THJsonStreamReader::PropertyNull)
        {
            setErrorString(jsonReader.value().toString());
        }
    }

    emit finished(responseStatus() != 200);
}
Пример #3
0
void Controller::render()
{
	if ( _view.isNull() ) return; // No view set, don't do anything

	_view->initializeResponse(*_response);
	
	std::stringstream ss;
	bool rendered = _view->render(_data, ss);
	if ( rendered )
	{
		Poco::StreamCopier::copyStream(ss, _response->send());
	}
	else
	{
		//TODO: redirect to an error page?
		setResponseStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR);
	}
}
Пример #4
0
void WebController::message()
{
	std::vector<std::string> parameters = getParameters();
	if ( parameters.size() < 2 )
	{
		setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Missing URI parameters");
		return;
	}

	mqwebData().set("queue", parameters[1]);
	std::string messageId;
	if ( parameters.size() > 2 )
	{
		messageId = parameters[2];
		mqwebData().set("messageId", messageId);
	}

	Poco::SharedPtr<MultiView> multiView = new MultiView("base.tpl");
	multiView->add("head", new TemplateView("message/head.tpl"));
	multiView->add("main", new TemplateView("message/index.tpl"));
	setView(multiView);
}
Пример #5
0
void AuthorityRecordController::inquire()
{
	if ( qmgr()->zos() )
	{
		// Authority records are not supported on z/OS
		setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_IMPLEMENTED, "/authrec/inquire not implemented for z/OS");
		return;
	}

	Poco::JSON::Object::Ptr pcfParameters;

	if ( data().has("input") && data().isObject("input") )
	{
		pcfParameters = data().getObject("input");
	}
	else
	{
		pcfParameters = new Poco::JSON::Object();
		setData("input", pcfParameters);

		std::vector<std::string> parameters = getParameters();
		// First parameter is queuemanager
		// Second parameter can be a authentication information name and will result in inquiring
		// only that queue and ignores all query parameters.
		if ( parameters.size() > 1 )
		{
			pcfParameters->set("ProfileName", parameters[1]);
		}
		else
		{
			// Handle query parameters
			if ( form().has("ProfileName") )
			{
				pcfParameters->set("ProfileName", form().get("ProfileName"));
			}
		}

		Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array();
		formElementToJSONArray("ProfileAttrs", attrs);
		if ( attrs->size() == 0 ) // Nothing found for ProfileAttrs, try Attrs
		{
			formElementToJSONArray("Attrs", attrs);
		}
		if ( attrs->size() > 0 )
		{
			pcfParameters->set("ProfileAttrs", attrs);
		}

		Poco::JSON::Array::Ptr jsonOptions = new Poco::JSON::Array();
		pcfParameters->set("Options", jsonOptions);
		for(Poco::Net::NameValueCollection::ConstIterator itOptions = form().find("Options");
			itOptions != form().end() && Poco::icompare(itOptions->first, "Options") == 0;
			++itOptions)
		{
			jsonOptions->add(itOptions->second);
		}

		if ( form().has("ObjectType") ) pcfParameters->set("ObjectType", form().get("ObjectType"));
		if ( form().has("EntityName") ) pcfParameters->set("EntityName", form().get("EntityName"));
		if ( form().has("EntityType") ) pcfParameters->set("EntityType", form().get("EntityType"));
		if ( form().has("ServiceComponent") ) pcfParameters->set("ServiceComponent", form().get("ServiceComponent"));
	}

	AuthorityRecordInquire command(*commandServer(), pcfParameters);
	setData("data", command.execute());
}
Пример #6
0
void Controller::handle(const std::vector<std::string>& parameters, Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
{
	_parameters = parameters;
	_request = &request;
	_response = &response;

	if ( _parameters.size() > 0 )
	{
		_action = _parameters.front();
		_parameters.erase(_parameters.begin());
	}
	else
	{
		setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Invalid URI parameters");
		return;
	}

	for(std::vector<std::string>::iterator it = _parameters.begin(); it != _parameters.end(); ++it)
	{
		int pos = it->find_first_of(':');
		if ( pos != std::string::npos )
		{
			std::string name = it->substr(0, pos);
			std::string value = it->substr(pos+1);
			_namedParameters[name] = value;
		}
	}

	std::string contentType = request.getContentType();
	if ( contentType == "application/json" )
	{
		Poco::JSON::Parser parser;
		try
		{
			Poco::Dynamic::Var json = parser.parse(request.stream());
			if ( ! json.isEmpty() && json.type() == typeid(Poco::JSON::Object::Ptr) )
			{
				_data->set("filter", json.extract<Poco::JSON::Object::Ptr>());
			}
		}
		catch(Poco::JSON::JSONException& jsone)
		{
			// Make sure everything is read, otherwise this can result
			// in Bad Request error in the next call.
			Poco::NullOutputStream nos;
			Poco::StreamCopier::copyStream(request.stream(), nos);

			setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "JSON error occurred: " + jsone.displayText());
			return;
		}
	}
	else
	{
		_form.load(request, request.stream(), *this);
	}

	// Make sure everything is read, otherwise this can result
	// in Bad Request error in the next call.
	Poco::NullOutputStream nos;
	Poco::StreamCopier::copyStream(request.stream(), nos);

	beforeAction();

	if ( response.getStatus() != Poco::Net::HTTPResponse::HTTP_OK
		|| _data->has("error") )
	{
		//TODO: return error template file or json error
	}

	const ActionMap& actions = getActions();
	ActionMap::const_iterator it = actions.find(_action);
	if ( it == actions.end() )
	{
		setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, "Invalid action '" + _action + "' specified.");
		return;
	}

	ActionFn action = it->second;
	(this->*action)();

	afterAction();
}