You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
348 lines
9.7 KiB
C++
348 lines
9.7 KiB
C++
// Copyright 2008, Google Inc. All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are met:
|
|
//
|
|
// 1. Redistributions of source code must retain the above copyright notice,
|
|
// this list of conditions and the following disclaimer.
|
|
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
// this list of conditions and the following disclaimer in the documentation
|
|
// and/or other materials provided with the distribution.
|
|
// 3. Neither the name of Google Inc. nor the names of its contributors may be
|
|
// used to endorse or promote products derived from this software without
|
|
// specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
// This file contains the declarations of the SimpleData, SchemaData,
|
|
// Data, and ExtendedData elements.
|
|
|
|
#ifndef KML_DOM_EXTENDEDDATA_H__
|
|
#define KML_DOM_EXTENDEDDATA_H__
|
|
|
|
#include <vector>
|
|
#include "kml/dom/element.h"
|
|
#include "kml/dom/kml22.h"
|
|
#include "kml/dom/kml_ptr.h"
|
|
#include "kml/dom/object.h"
|
|
#include "kml/base/util.h"
|
|
|
|
namespace kmlbase {
|
|
class Attributes;
|
|
}
|
|
|
|
namespace kmldom {
|
|
|
|
class Visitor;
|
|
class VisitorDriver;
|
|
|
|
// <SimpleData>
|
|
class SimpleData : public BasicElement<Type_SimpleData> {
|
|
public:
|
|
virtual ~SimpleData();
|
|
|
|
// name=
|
|
const string& get_name() const { return name_; }
|
|
bool has_name() const { return has_name_; }
|
|
void set_name(const string& value) {
|
|
name_ = value;
|
|
has_name_ = true;
|
|
}
|
|
void clear_name() {
|
|
name_.clear();
|
|
has_name_ = false;
|
|
}
|
|
|
|
// char data
|
|
const string& get_text() const { return text_; }
|
|
bool has_text() const { return has_text_; }
|
|
void set_text(const string& value) {
|
|
text_ = value;
|
|
has_text_ = true;
|
|
}
|
|
void clear_text() {
|
|
text_.clear();
|
|
has_text_ = false;
|
|
}
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
SimpleData();
|
|
friend class KmlHandler;
|
|
virtual void ParseAttributes(kmlbase::Attributes* attributes);
|
|
virtual void AddElement(const ElementPtr& child);
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
virtual void SerializeAttributes(kmlbase::Attributes* attributes) const;
|
|
string name_;
|
|
bool has_name_;
|
|
string text_;
|
|
bool has_text_;
|
|
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SimpleData);
|
|
};
|
|
|
|
// <gx:SimpleArrayData>
|
|
class GxSimpleArrayData : public BasicElement<Type_GxSimpleArrayData> {
|
|
public:
|
|
virtual ~GxSimpleArrayData();
|
|
|
|
// name=
|
|
const string& get_name() const { return name_; }
|
|
bool has_name() const { return has_name_; }
|
|
void set_name(const string& value) {
|
|
name_ = value;
|
|
has_name_ = true;
|
|
}
|
|
void clear_name() {
|
|
name_.clear();
|
|
has_name_ = false;
|
|
}
|
|
|
|
// <gx:value>
|
|
void add_gx_value(const string& value) {
|
|
gx_value_array_.push_back(value);
|
|
}
|
|
|
|
size_t get_gx_value_array_size() const {
|
|
return gx_value_array_.size();
|
|
}
|
|
|
|
const string& get_gx_value_array_at(size_t index) const {
|
|
return gx_value_array_[index];
|
|
}
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
GxSimpleArrayData();
|
|
friend class KmlHandler;
|
|
virtual void ParseAttributes(kmlbase::Attributes* attributes);
|
|
virtual void AddElement(const ElementPtr& child);
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
virtual void SerializeAttributes(kmlbase::Attributes* attributes) const;
|
|
string name_;
|
|
bool has_name_;
|
|
std::vector<string> gx_value_array_;
|
|
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxSimpleArrayData);
|
|
};
|
|
|
|
// <SchemaData>
|
|
class SchemaData : public Object {
|
|
public:
|
|
virtual ~SchemaData();
|
|
virtual KmlDomType Type() const { return ElementType(); }
|
|
virtual bool IsA(KmlDomType type) const {
|
|
return type == ElementType() || Object::IsA(type);
|
|
}
|
|
static KmlDomType ElementType() { return Type_SchemaData; }
|
|
|
|
// schemaUrl=
|
|
const string& get_schemaurl() const { return schemaurl_; }
|
|
bool has_schemaurl() const { return has_schemaurl_; }
|
|
void set_schemaurl(const string& value) {
|
|
schemaurl_ = value;
|
|
has_schemaurl_ = true;
|
|
}
|
|
void clear_schemaurl() {
|
|
schemaurl_.clear();
|
|
has_schemaurl_ = false;
|
|
}
|
|
|
|
void add_simpledata(const SimpleDataPtr& simpledata) {
|
|
AddComplexChild(simpledata, &simpledata_array_);
|
|
}
|
|
|
|
size_t get_simpledata_array_size() const {
|
|
return simpledata_array_.size();
|
|
}
|
|
|
|
const SimpleDataPtr& get_simpledata_array_at(size_t index) const {
|
|
return simpledata_array_[index];
|
|
}
|
|
|
|
void add_gx_simplearraydata(
|
|
const GxSimpleArrayDataPtr& gx_simplearraydata) {
|
|
AddComplexChild(gx_simplearraydata, &gx_simplearraydata_array_);
|
|
}
|
|
|
|
size_t get_gx_simplearraydata_array_size() const {
|
|
return gx_simplearraydata_array_.size();
|
|
}
|
|
|
|
const GxSimpleArrayDataPtr& get_gx_simplearraydata_array_at(
|
|
size_t index) const {
|
|
return gx_simplearraydata_array_[index];
|
|
}
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
virtual void AcceptChildren(VisitorDriver* driver);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
SchemaData();
|
|
friend class KmlHandler;
|
|
virtual void AddElement(const ElementPtr& element);
|
|
virtual void ParseAttributes(kmlbase::Attributes* attributes);
|
|
friend class ExtendedData;
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
virtual void SerializeAttributes(kmlbase::Attributes* attributes) const;
|
|
string schemaurl_;
|
|
bool has_schemaurl_;
|
|
std::vector<SimpleDataPtr> simpledata_array_;
|
|
std::vector<GxSimpleArrayDataPtr> gx_simplearraydata_array_;
|
|
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SchemaData);
|
|
};
|
|
|
|
// <Data>
|
|
class Data : public Object {
|
|
public:
|
|
virtual ~Data();
|
|
virtual KmlDomType Type() const { return ElementType(); }
|
|
virtual bool IsA(KmlDomType type) const {
|
|
return type == ElementType() || Object::IsA(type);
|
|
}
|
|
static KmlDomType ElementType() { return Type_Data; }
|
|
|
|
// name=
|
|
const string& get_name() const { return name_; }
|
|
bool has_name() const { return has_name_; }
|
|
void set_name(const string& value) {
|
|
name_ = value;
|
|
has_name_ = true;
|
|
}
|
|
void clear_name() {
|
|
name_.clear();
|
|
has_name_ = false;
|
|
}
|
|
|
|
// <displayname>
|
|
const string& get_displayname() const { return displayname_; }
|
|
bool has_displayname() const { return has_displayname_; }
|
|
void set_displayname(const string& value) {
|
|
displayname_ = value;
|
|
has_displayname_ = true;
|
|
}
|
|
void clear_displayname() {
|
|
displayname_.clear();
|
|
has_displayname_ = false;
|
|
}
|
|
|
|
// <value>
|
|
const string& get_value() const { return value_; }
|
|
bool has_value() const { return has_value_; }
|
|
void set_value(const string& value) {
|
|
value_ = value;
|
|
has_value_ = true;
|
|
}
|
|
void clear_value() {
|
|
value_.clear();
|
|
has_value_ = false;
|
|
}
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
Data();
|
|
friend class KmlHandler;
|
|
virtual void AddElement(const ElementPtr& element);
|
|
virtual void ParseAttributes(kmlbase::Attributes* attributes);
|
|
friend class ExtendedData;
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
virtual void SerializeAttributes(kmlbase::Attributes* attributes) const;
|
|
string name_;
|
|
bool has_name_;
|
|
string displayname_;
|
|
bool has_displayname_;
|
|
string value_;
|
|
bool has_value_;
|
|
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Data);
|
|
};
|
|
|
|
// <ExtendedData>
|
|
class ExtendedData : public BasicElement<Type_ExtendedData> {
|
|
public:
|
|
virtual ~ExtendedData();
|
|
|
|
// <Data>.
|
|
void add_data(const DataPtr& data) {
|
|
AddComplexChild(data, &data_array_);
|
|
}
|
|
|
|
size_t get_data_array_size() const {
|
|
return data_array_.size();
|
|
}
|
|
|
|
const DataPtr& get_data_array_at(size_t index) const {
|
|
return data_array_[index];
|
|
}
|
|
|
|
// <SchemaData>.
|
|
void add_schemadata(const SchemaDataPtr& schemadata) {
|
|
AddComplexChild(schemadata, &schemadata_array_);
|
|
}
|
|
|
|
size_t get_schemadata_array_size() const {
|
|
return schemadata_array_.size();
|
|
}
|
|
|
|
const SchemaDataPtr& get_schemadata_array_at(size_t index) const {
|
|
return schemadata_array_[index];
|
|
}
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
virtual void AcceptChildren(VisitorDriver* driver);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
ExtendedData();
|
|
friend class KmlHandler;
|
|
virtual void AddElement(const ElementPtr& element);
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
std::vector<DataPtr> data_array_;
|
|
std::vector<SchemaDataPtr> schemadata_array_;
|
|
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ExtendedData);
|
|
};
|
|
|
|
// <Metadata>
|
|
// This element is deprecated in OGC KML 2.2. New KML should use
|
|
// <ExtendedData>.
|
|
class Metadata : public BasicElement<Type_Metadata> {
|
|
public:
|
|
virtual ~Metadata();
|
|
|
|
// Visitor API methods, see visitor.h.
|
|
virtual void Accept(Visitor* visitor);
|
|
|
|
private:
|
|
friend class KmlFactory;
|
|
Metadata();
|
|
friend class Serializer;
|
|
virtual void Serialize(Serializer& serializer) const;
|
|
};
|
|
|
|
} // end namespace kmldom
|
|
|
|
#endif // KML_DOM_EXTENDEDDATA_H__
|