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.
139 lines
6.9 KiB
C++
139 lines
6.9 KiB
C++
// Copyright 2009, 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 declaration of some convenience functions for
|
|
// processing Atom and Atom with KML. While no code here is specific to
|
|
// the Google Maps Data API much of this is useful in coding to that service.
|
|
// See RFC 4287 for more information about Atom.
|
|
|
|
#ifndef KML_CONVENIENCE_ATOM_UTIL_H_
|
|
#define KML_CONVENIENCE_ATOM_UTIL_H_
|
|
|
|
#include "kml/dom.h"
|
|
|
|
namespace kmlconvenience {
|
|
|
|
class HttpClient;
|
|
|
|
// This class is an API of Atom (RFC 4287) utility functions especially with
|
|
// particular emphasis on wrapping KML.
|
|
class AtomUtil {
|
|
public:
|
|
// This creates an <atom:entry> with the specified values for <atom:title>
|
|
// and <atom:summary>.
|
|
static kmldom::AtomEntryPtr CreateBasicEntry(const string& title,
|
|
const string& summary);
|
|
|
|
// This creates an <atom:link> with the specified values of href=, rel=,
|
|
// and type=.
|
|
static kmldom::AtomLinkPtr CreateBasicLink(const string& href,
|
|
const string& rel,
|
|
const string& type);
|
|
|
|
// This creates an <atom:entry> from and for the KML Feature. The
|
|
// <atom:entry>'s <atom:title> is set from the Feature's <name> and the
|
|
// <atom:summary> is set from the Feature's <description>.
|
|
static kmldom::AtomEntryPtr CreateEntryForFeature(
|
|
const kmldom::FeaturePtr& feature);
|
|
|
|
// This returns the <atom:entry>'s <atom:content>'s src= and returns true
|
|
// if these exist. False is returned if the <atom:entry> has no
|
|
// <atom:content> or if the <atom:content> has no src=. Passing a NULL
|
|
// src is safe and has no bearing on the return value.
|
|
static bool GetContentSrc(const kmldom::AtomEntryPtr& entry,
|
|
string* src);
|
|
|
|
// This returns the first <atom:category> who's scheme= ends with scheme.
|
|
// NULL is returned if no matching <atom:category> is found.
|
|
static kmldom::AtomCategoryPtr FindCategoryByScheme(
|
|
const kmldom::AtomCommon& atom_common, const string& scheme);
|
|
|
|
// This returns true if the given <atom:link>'s rel= ends with rel_type.
|
|
static bool LinkIsOfRel(const kmldom::AtomLinkPtr& link,
|
|
const string& rel_type);
|
|
|
|
// This returns the first <atom:link> matching the given link relation
|
|
// (rel= attribute) and mimetype (type= attribute). LinkIsOfRel is used
|
|
// to match the rel_type. The mime_type is an exact match. NULL is
|
|
// returned if no matching <atom:link> is found.
|
|
static kmldom::AtomLinkPtr FindLink(const kmldom::AtomCommon& atom_common,
|
|
const string& rel_type,
|
|
const string& mime_type);
|
|
|
|
// Return the first <entry> in the feed with the given title.
|
|
// This returns NULL if no <entry>'s have this exact <title>.
|
|
static kmldom::AtomEntryPtr FindEntryByTitle(const kmldom::AtomFeedPtr& feed,
|
|
const string& title);
|
|
|
|
// This returns the href= value of the first <atom:link> whose first rel=
|
|
// ends with the given link relation type. Both AtomFeed (<atom:feed>)
|
|
// and AtomEntry (<atom:entry>) are of the AtomCommon type.
|
|
static bool FindRelUrl(const kmldom::AtomCommon& atom_common,
|
|
const string& rel_type, string* href);
|
|
|
|
// This returns a clone of the KML Feature contained in the <atom:entry>.
|
|
// The returned clone Feature's <atom:link> is set to the <atom:entry>'s
|
|
// "self" link relation if such is found in the <atom:entry>.
|
|
// NULL is returned if no KML Feature is contained by this <atom:entry>.
|
|
static kmldom::FeaturePtr CloneEntryFeature(
|
|
const kmldom::AtomEntryPtr& entry);
|
|
|
|
// This simply gets the KML Feature in the <atom:entry> if it has one.
|
|
// See CloneEntryFeature() for a slightly richer function for use in
|
|
// reconstructing a KML file from one or more <atom:entry>'s. Note: since
|
|
// this feature is the child of another element it cannot be directly
|
|
// parented to any other element, hence the use of kmlengine::Clone()
|
|
// in the CloneEntryFeature() function.
|
|
static kmldom::FeaturePtr GetEntryFeature(const kmldom::AtomEntryPtr& entry);
|
|
|
|
// This calls CloneEntryFeature() for each <atom:entry> in the <atom:feed>.
|
|
// The Container's <atom:link> is set to the <atom:feed>'s "self" link
|
|
// relation if such is found in the <atom:feed>.
|
|
static void GetFeedFeatures(const kmldom::AtomFeedPtr& feed,
|
|
kmldom::ContainerPtr container);
|
|
|
|
// This fetches and parses the given <atom:feed> at the given URL. NULL is
|
|
// returned on any fetch or parse errors. The HttpClient is expected to be
|
|
// "logged in" as appropriate for the URL.
|
|
static kmldom::AtomFeedPtr GetAndParseFeed(const string& feed_url,
|
|
const HttpClient& http_client);
|
|
|
|
// This fetches and parses the given feed's rel="next" link if it has one.
|
|
// The HttpClient is expected to be "logged in" as appropriate for the URL.
|
|
static kmldom::AtomFeedPtr GetNextFeed(const kmldom::AtomFeedPtr& feed,
|
|
const HttpClient& http_client);
|
|
|
|
// If the <atom:entry> has a <gd:resourceId> true is returned. Also return
|
|
// the value of this element if a resource_id string is supplied.
|
|
// Note: the gd:resourceId is a Google Data API extension to Atom.
|
|
static bool GetGdResourceId(const kmldom::AtomEntryPtr& entry,
|
|
string* resource_id);
|
|
|
|
};
|
|
|
|
} // end namespace kmlconvenience
|
|
|
|
#endif // KML_CONVENIENCE_ATOM_UTIL_H
|