/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * JsonSections.cpp * This builds the json string for the web UI. * Copyright (C) 2010 Simon Newton */ #include #include #include #include #include #include "ola/web/JsonSections.h" #include "ola/Logging.h" #include "ola/StringUtils.h" namespace ola { namespace web { using std::endl; using std::pair; using std::string; using std::stringstream; using std::vector; using ola::EscapeString; string GenericItem::AsString() const { stringstream output; output << " {" << endl; if (!m_button_text.empty()) output << " \"button\": \"" << EscapeString(m_button_text) << "\"," << endl; output << " \"description\": \"" << EscapeString(m_description) << "\"," << endl; if (!m_id.empty()) output << " \"id\": \"" << EscapeString(m_id) << "\"," << endl; output << " \"type\": \"" << Type() << "\"," << endl; output << " \"value\": " << Value() << "," << endl; output << ExtraProperties(); output << " }," << endl; return output.str(); } string StringItem::Value() const { return "\"" + EscapeString(m_value) + "\""; } string UIntItem::ExtraProperties() const { stringstream output; if (m_min_set) output << " \"min\": " << m_min << "," << endl; if (m_max_set) output << " \"max\": " << m_max << "," << endl; return output.str(); } string BoolItem::Value() const { return m_value ? "1" : "0"; } string HiddenItem::Value() const { return "\"" + EscapeString(m_value) + "\""; } void SelectItem::AddItem(const string &label, const string &value) { pair p(label, value); m_values.push_back(p); } void SelectItem::AddItem(const string &label, unsigned int value) { AddItem(label, IntToString(value)); } string SelectItem::Value() const { stringstream str; str << "[" << endl; vector >::const_iterator iter; for (iter = m_values.begin(); iter != m_values.end(); ++iter) { str << " {" << endl; str << " \"label\": \"" << EscapeString(iter->first) << "\"," << endl; str << " \"value\": \"" << EscapeString(iter->second) << "\"," << endl; str << " }," << endl; } str << " ]"; return str.str(); } string SelectItem::ExtraProperties() const { stringstream output; output << " \"selected_offset\": " << m_selected_offset << "," << endl; return output.str(); } /** * Create a new section response */ JsonSection::JsonSection(bool allow_refresh) : m_allow_refresh(allow_refresh), m_error(""), m_save_button_text("") { } /** * Cleanup */ JsonSection::~JsonSection() { vector::const_iterator iter = m_items.begin(); for (; iter != m_items.end(); ++iter) { delete *iter; } } /** * Add an item to this section, ownership is transferred. */ void JsonSection::AddItem(const GenericItem *item) { m_items.push_back(item); } /* * Return the section as a string. */ string JsonSection::AsString() const { stringstream output; output << "{" << endl; output << " \"refresh\": " << m_allow_refresh << "," << endl; output << " \"error\": \"" << EscapeString(m_error) << "\"," << endl; if (!m_save_button_text.empty()) output << " \"save_button\": \"" << EscapeString(m_save_button_text) << "\"," << endl; output << " \"items\": [" << endl; vector::const_iterator iter = m_items.begin(); for (; iter != m_items.end(); ++iter) { output << (*iter)->AsString(); } output << " ]," << endl; output << "}" << endl; return output.str(); } } // web } // ola