mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-09 00:35:20 -05:00
177 lines
6.5 KiB
Python
177 lines
6.5 KiB
Python
from sextante.admintools.geoserver.support import ResourceInfo, xml_property, write_string, bbox, \
|
|
write_bbox, string_list, write_string_list, attribute_list, write_bool, url
|
|
|
|
def md_link(node):
|
|
"""Extract a metadata link tuple from an xml node"""
|
|
mimetype = node.find("type")
|
|
mdtype = node.find("metadataType")
|
|
content = node.find("content")
|
|
if None in [mimetype, mdtype, content]:
|
|
return None
|
|
else:
|
|
return (mimetype.text, mdtype.text, content.text)
|
|
|
|
def metadata_link_list(node):
|
|
if node is not None:
|
|
return [md_link(n) for n in node.findall("metadataLink")]
|
|
|
|
def write_metadata_link_list(name):
|
|
def write(builder, md_links):
|
|
builder.start(name, dict())
|
|
for (mime, md_type, content_url) in md_links:
|
|
builder.start("metadataLink", dict())
|
|
builder.start("type", dict())
|
|
builder.data(mime)
|
|
builder.end("type")
|
|
builder.start("metadataType", dict())
|
|
builder.data(md_type)
|
|
builder.end("metadataType")
|
|
builder.start("content", dict())
|
|
builder.data(content_url)
|
|
builder.end("content")
|
|
builder.end("metadataLink")
|
|
builder.end("metadataLinks")
|
|
return write
|
|
|
|
def featuretype_from_index(catalog, workspace, store, node):
|
|
name = node.find("name")
|
|
return FeatureType(catalog, workspace, store, name.text)
|
|
|
|
def coverage_from_index(catalog, workspace, store, node):
|
|
name = node.find("name")
|
|
return Coverage(catalog, workspace, store, name.text)
|
|
|
|
class FeatureType(ResourceInfo):
|
|
resource_type = "featureType"
|
|
save_method = "PUT"
|
|
|
|
def __init__(self, catalog, workspace, store, name):
|
|
super(FeatureType, self).__init__()
|
|
|
|
assert isinstance(store, ResourceInfo)
|
|
assert isinstance(name, basestring)
|
|
|
|
self.catalog = catalog
|
|
self.workspace = workspace
|
|
self.store = store
|
|
self.name = name
|
|
|
|
@property
|
|
def href(self):
|
|
return url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name,
|
|
"datastores", self.store.name,
|
|
"featuretypes", self.name + ".xml"])
|
|
|
|
title = xml_property("title")
|
|
abstract = xml_property("abstract")
|
|
enabled = xml_property("enabled")
|
|
native_bbox = xml_property("nativeBoundingBox", bbox)
|
|
latlon_bbox = xml_property("latLonBoundingBox", bbox)
|
|
projection = xml_property("srs")
|
|
projection_policy = xml_property("projectionPolicy")
|
|
keywords = xml_property("keywords", string_list)
|
|
attributes = xml_property("attributes", attribute_list)
|
|
metadata_links = xml_property("metadataLinks", metadata_link_list)
|
|
|
|
writers = dict(
|
|
title = write_string("title"),
|
|
abstract = write_string("abstract"),
|
|
enabled = write_bool("enabled"),
|
|
nativeBoundingBox = write_bbox("nativeBoundingBox"),
|
|
latLonBoundingBox = write_bbox("latLonBoundingBox"),
|
|
srs = write_string("srs"),
|
|
projectionPolicy = write_string("projectionPolicy"),
|
|
keywords = write_string_list("keywords"),
|
|
metadataLinks = write_metadata_link_list("metadataLinks")
|
|
)
|
|
|
|
class CoverageDimension(object):
|
|
def __init__(self, name, description, dimension_range):
|
|
self.name = name
|
|
self.description = description
|
|
self.dimension_range = dimension_range
|
|
|
|
def coverage_dimension(node):
|
|
name = node.find("name")
|
|
name = name.text if name is not None else None
|
|
description = node.find("description")
|
|
description = description.text if description is not None else None
|
|
range_min = node.find("range/min")
|
|
range_max = node.find("range/max")
|
|
dimension_range = None
|
|
if None not in [min, max]:
|
|
dimension_range = float(range_min.text), float(range_max.text)
|
|
if None not in [name, description]:
|
|
return CoverageDimension(name, description, dimension_range)
|
|
else:
|
|
return None # should we bomb out more spectacularly here?
|
|
|
|
def coverage_dimension_xml(builder, dimension):
|
|
builder.start("coverageDimension", dict())
|
|
builder.start("name", dict())
|
|
builder.data(dimension.name)
|
|
builder.end("name")
|
|
|
|
builder.start("description", dict())
|
|
builder.data(dimension.description)
|
|
builder.end("description")
|
|
|
|
if dimension.range is not None:
|
|
builder.start("range", dict())
|
|
builder.start("min", dict())
|
|
builder.data(str(dimension.range[0]))
|
|
builder.end("min")
|
|
builder.start("max", dict())
|
|
builder.data(str(dimension.range[1]))
|
|
builder.end("max")
|
|
builder.end("range")
|
|
|
|
builder.end("coverageDimension")
|
|
|
|
class Coverage(ResourceInfo):
|
|
def __init__(self, catalog, workspace, store, name):
|
|
super(Coverage, self).__init__()
|
|
self.catalog = catalog
|
|
self.workspace = workspace
|
|
self.store = store
|
|
self.name = name
|
|
|
|
@property
|
|
def href(self):
|
|
return url(self.catalog.service_url,
|
|
["workspaces", self.workspace.name,
|
|
"coveragestores", self.store.name,
|
|
"coverages", self.name + ".xml"])
|
|
|
|
resource_type = "coverage"
|
|
save_method = "PUT"
|
|
|
|
title = xml_property("title")
|
|
abstract = xml_property("abstract")
|
|
enabled = xml_property("enabled")
|
|
native_bbox = xml_property("nativeBoundingBox", bbox)
|
|
latlon_bbox = xml_property("latLonBoundingBox", bbox)
|
|
projection = xml_property("srs")
|
|
projection_policy = xml_property("projectionPolicy")
|
|
keywords = xml_property("keywords", string_list)
|
|
request_srs_list = xml_property("requestSRS", string_list)
|
|
response_srs_list = xml_property("responseSRS", string_list)
|
|
supported_formats = xml_property("supportedFormats", string_list)
|
|
metadata_links = xml_property("metadataLinks", metadata_link_list)
|
|
|
|
writers = dict(
|
|
title = write_string("title"),
|
|
abstract = write_string("abstract"),
|
|
enabled = write_bool("enabled"),
|
|
nativeBoundingBox = write_bbox("nativeBoundingBox"),
|
|
latLonBoundingBox = write_bbox("latLonBoundingBox"),
|
|
srs = write_string("srs"),
|
|
projection_policy = write_string("projectionPolicy"),
|
|
keywords = write_string_list("keywords"),
|
|
metadataLinks = write_metadata_link_list("metadataLinks"),
|
|
requestSRS = write_string_list("requestSRS"),
|
|
responseSRS = write_string_list("responseSRS"),
|
|
supportedFormats = write_string_list("supportedFormats")
|
|
)
|