rgeoserver 0.5.9 → 0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/.gitignore +1 -1
  2. data/Gemfile +1 -7
  3. data/Gemfile.lock +147 -0
  4. data/README.rdoc +69 -78
  5. data/Rakefile +2 -1
  6. data/VERSION +1 -1
  7. data/bin/batch_load.rb +138 -0
  8. data/config/defaults.yml +17 -0
  9. data/examples/batch_demo.rb +170 -0
  10. data/examples/catalog_migration.rb +2 -2
  11. data/examples/cluster_demo.rb +1 -1
  12. data/examples/coverage_stores.rb +42 -0
  13. data/examples/demo_druid_workspace.rb +6 -0
  14. data/examples/deploy_dor_layer.rb +19 -0
  15. data/examples/sql_layer_demo.rb +1 -1
  16. data/lib/rgeoserver/catalog.rb +83 -86
  17. data/lib/rgeoserver/config.rb +11 -1
  18. data/lib/rgeoserver/coverage.rb +43 -15
  19. data/lib/rgeoserver/coveragestore.rb +46 -11
  20. data/lib/rgeoserver/datastore.rb +73 -62
  21. data/lib/rgeoserver/featuretype.rb +134 -71
  22. data/lib/rgeoserver/geoserver_url_helpers.rb +140 -10
  23. data/lib/rgeoserver/layer.rb +52 -16
  24. data/lib/rgeoserver/layergroup.rb +1 -2
  25. data/lib/rgeoserver/namespace.rb +1 -2
  26. data/lib/rgeoserver/resource.rb +37 -34
  27. data/lib/rgeoserver/rest_api_client.rb +33 -14
  28. data/lib/rgeoserver/style.rb +1 -2
  29. data/lib/rgeoserver/utils/boundingbox.rb +59 -16
  30. data/lib/rgeoserver/utils/metadata.rb +21 -0
  31. data/lib/rgeoserver/version.rb +1 -1
  32. data/lib/rgeoserver/wmsstore.rb +1 -6
  33. data/lib/rgeoserver/workspace.rb +23 -8
  34. data/lib/rgeoserver.rb +31 -38
  35. data/rgeoserver.gemspec +28 -20
  36. data/spec/fixtures/load_ex1.yml +45 -0
  37. data/spec/fixtures/load_ex2.yml +14 -0
  38. data/spec/functional/catalog_spec.rb +71 -0
  39. data/spec/functional/rest_api_client_spec.rb +215 -0
  40. data/spec/integration/geoserver_spec.rb +2 -2
  41. metadata +120 -66
  42. data/config/config_defaults.yml +0 -10
  43. data/examples/batch_example.rb +0 -105
data/.gitignore CHANGED
@@ -6,7 +6,7 @@ doc
6
6
  .yardoc
7
7
  .bundle
8
8
  .rvmrc
9
- Gemfile.lock
10
9
  .DS_Store
11
10
  .swp
12
11
  .swo
12
+ *.log
data/Gemfile CHANGED
@@ -1,9 +1,3 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
-
5
- # general
6
- gem 'activemodel'
7
- gem 'rubyzip'
8
- gem 'rgeo'
9
- gem 'rgeo-shapefile'
data/Gemfile.lock ADDED
@@ -0,0 +1,147 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rgeoserver (0.7)
5
+ activemodel (~> 3.2.0)
6
+ activesupport (~> 3.2.0)
7
+ confstruct (~> 0.2.0)
8
+ mime-types (~> 2.0)
9
+ nokogiri (~> 1.6.0)
10
+ rest-client (~> 1.6.0)
11
+ rgeo (~> 0.3.0)
12
+ rgeo-shapefile (~> 0.2.0)
13
+ rubyzip (~> 0.9.0)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ activemodel (3.2.16)
19
+ activesupport (= 3.2.16)
20
+ builder (~> 3.0.0)
21
+ activesupport (3.2.16)
22
+ i18n (~> 0.6, >= 0.6.4)
23
+ multi_json (~> 1.0)
24
+ alias (0.2.3)
25
+ awesome_print (1.2.0)
26
+ binding.repl (0.8.0)
27
+ boson (1.2.4)
28
+ boson-more (0.2.2)
29
+ boson (>= 1.2.0)
30
+ builder (3.0.4)
31
+ childprocess (0.3.9)
32
+ ffi (~> 1.0, >= 1.0.11)
33
+ clipboard (1.0.5)
34
+ coderay (1.1.0)
35
+ columnize (0.3.6)
36
+ confstruct (0.2.5)
37
+ dbf (2.0.7)
38
+ fastercsv (~> 1.5.4)
39
+ debugger (1.6.3)
40
+ columnize (>= 0.3.1)
41
+ debugger-linecache (~> 1.2.0)
42
+ debugger-ruby_core_source (~> 1.2.4)
43
+ debugger-linecache (1.2.0)
44
+ debugger-ruby_core_source (1.2.4)
45
+ diff-lcs (1.2.5)
46
+ equivalent-xml (0.4.0)
47
+ nokogiri (>= 1.4.3)
48
+ every_day_irb (1.5.1)
49
+ fancy_irb (0.7.3)
50
+ paint (>= 0.8.1)
51
+ unicode-display_width (>= 0.1.1)
52
+ fastercsv (1.5.5)
53
+ ffi (1.9.3)
54
+ g (1.7.2)
55
+ hirb (0.7.1)
56
+ i18n (0.6.9)
57
+ interactive_editor (0.0.10)
58
+ spoon (>= 0.0.1)
59
+ irbtools (1.5.1)
60
+ alias (~> 0.2.3)
61
+ awesome_print (~> 1.2.0)
62
+ binding.repl (>= 0.7.0)
63
+ boson (~> 1.2.4)
64
+ boson-more (~> 0.2.2)
65
+ clipboard (~> 1.0.5)
66
+ coderay (~> 1.1.0)
67
+ every_day_irb (>= 1.5.1)
68
+ fancy_irb (>= 0.7.3)
69
+ g (>= 1.7.2)
70
+ hirb (~> 0.7.1)
71
+ interactive_editor (>= 0.0.10)
72
+ method_locator (>= 0.0.4)
73
+ method_source (>= 0.8.2)
74
+ methodfinder (>= 1.2.5)
75
+ ori (~> 0.1.0)
76
+ paint (>= 0.8.6)
77
+ wirb (>= 1.0.2)
78
+ zucker (>= 13.1)
79
+ jettywrapper (1.5.0)
80
+ activesupport (>= 3.0.0)
81
+ childprocess
82
+ i18n
83
+ logger
84
+ mediashelf-loggable
85
+ logger (1.2.8)
86
+ mediashelf-loggable (0.4.9)
87
+ method_locator (0.0.4)
88
+ method_source (0.8.2)
89
+ methodfinder (2.0.0)
90
+ mime-types (2.0)
91
+ mini_portile (0.5.2)
92
+ multi_json (1.8.2)
93
+ nokogiri (1.6.1)
94
+ mini_portile (~> 0.5.0)
95
+ ori (0.1.0)
96
+ paint (0.8.6)
97
+ pry (0.9.12.4)
98
+ coderay (~> 1.0)
99
+ method_source (~> 0.8)
100
+ slop (~> 3.4)
101
+ rake (10.1.0)
102
+ rest-client (1.6.7)
103
+ mime-types (>= 1.16)
104
+ rgeo (0.3.20)
105
+ rgeo-shapefile (0.2.3)
106
+ dbf (>= 1.7.0)
107
+ rgeo (>= 0.3.3)
108
+ rspec (2.14.1)
109
+ rspec-core (~> 2.14.0)
110
+ rspec-expectations (~> 2.14.0)
111
+ rspec-mocks (~> 2.14.0)
112
+ rspec-core (2.14.7)
113
+ rspec-expectations (2.14.4)
114
+ diff-lcs (>= 1.1.3, < 2.0)
115
+ rspec-mocks (2.14.4)
116
+ rubyzip (0.9.9)
117
+ shoulda (3.5.0)
118
+ shoulda-context (~> 1.0, >= 1.0.1)
119
+ shoulda-matchers (>= 1.4.1, < 3.0)
120
+ shoulda-context (1.1.6)
121
+ shoulda-matchers (2.4.0)
122
+ activesupport (>= 3.0.0)
123
+ slop (3.4.7)
124
+ spoon (0.0.4)
125
+ ffi
126
+ unicode-display_width (0.1.1)
127
+ wirb (1.0.2)
128
+ paint
129
+ yard (0.8.7.3)
130
+ zucker (13.1)
131
+
132
+ PLATFORMS
133
+ ruby
134
+
135
+ DEPENDENCIES
136
+ awesome_print
137
+ bundler (~> 1.0)
138
+ debugger (~> 1.0)
139
+ equivalent-xml
140
+ irbtools
141
+ jettywrapper
142
+ pry
143
+ rake
144
+ rgeoserver!
145
+ rspec
146
+ shoulda
147
+ yard
data/README.rdoc CHANGED
@@ -1,35 +1,40 @@
1
- {<img src="https://gemnasium.com/rnz0/rgeoserver.png" alt="Dependency Status" />}[https://gemnasium.com/rnz0/rgeoserver]
2
- {<img src="https://secure.travis-ci.org/rnz0/rgeoserver.png" />}[http://travis-ci.org/rnz0/rgeoserver]
3
-
4
1
  == RGeoServer
5
2
 
6
3
  RGeoServer is a Ruby client for the GeoServer RESTful Configuration interface.
7
4
 
5
+ Requirements:
6
+ * {GeoServer}[http://geoserver.org] 2.1.3 or later.
7
+ * Ruby 1.9.3
8
+
8
9
  It provides primitive Ruby model abstraction.
9
10
 
10
11
  == Documentation
11
- The GeoServer REST Configuration API Reference can be found here:
12
12
 
13
- http://docs.geoserver.org/stable/en/user/rest/index.html
13
+ See the {GeoServer REST Configuration API Reference}[http://docs.geoserver.org/stable/en/user/rest/index.html]
14
14
 
15
-
16
15
  == Installation
17
16
 
18
17
  $ gem install rgeoserver
19
18
 
20
-
21
19
  == Example:
22
20
 
23
- Sample usage from an irb console
21
+ Sample usage from an irb console, using a GeoServer installation with a topp workspace.
24
22
 
25
- > catalog = RGeoServer::Catalog.new :user=>"admin", :url=>"http://10.0.0.2/geoserver/rest", :password=>"osgeo!"
26
- => Catalog: http://10.0.0.2/geoserver/rest
27
- > w = catalog.get_workspace('topp')
23
+ $ rake console
24
+ > require 'rgeoserver'
25
+ > catalog = RGeoServer::Catalog.new
26
+ => Catalog: http://localhost:8080/geoserver/rest
27
+ > w = catalog.get_default_workspace
28
28
  => RGeoServer::Workspace: topp
29
29
  > ds = w.data_stores.first
30
30
  => RGeoServer::DataStore: states_shapefile
31
31
  > ds.profile
32
- => {"name"=>"states_shapefile", "enabled"=>"true", "connectionParameters"=>{"url"=>"file:data/shapefiles/states.shp", "namespace"=>"http://www.openplans.org/topp"}, "featureTypes"=>["states"]}
32
+ => {"name"=>"states_shapefile",
33
+ "enabled"=>"true",
34
+ "connectionParameters"=>{
35
+ "url"=>"file:data/shapefiles/states.shp",
36
+ "namespace"=>"http://www.openplans.org/topp"},
37
+ "featureTypes"=>["states"]}
33
38
  > ft = ds.featuretypes.first
34
39
  => RGeoServer::FeatureType: states
35
40
  > ft.profile
@@ -38,101 +43,85 @@ Sample usage from an irb console
38
43
  > lyr = RGeoServer::Layer.new c, :name => 'Arc_Sample'
39
44
  => RGeoServer::Layer: Arc_Sample
40
45
  > lyr.profile
41
- => {"name"=>"Arc_Sample", "path"=>"/", "defaultstyle"=>"rain", "styles"=>["raster"], "type"=>"RASTER", "enabled"=>"true", "attribution"=>{"logoWidth"=>"0", "logoHeight"=>"0"}, "resource"=>{"type"=>"coverage", "name"=>"Arc_Sample", "store"=>"arcGridSample", "workspace"=>"nurc"}, "metadata"=>{"GWC.autoCacheStyles"=>"true", "GWC.metaTilingX"=>"4", "GWC.metaTilingY"=>"4", "GWC.gutter"=>"0", "GWC.cachedNonDefaultStyles"=>"raster", "GWC.enabled"=>"true", "GWC.cacheFormats"=>"image/jpeg,image/png", "GWC.gridSets"=>"EPSG:4326,EPSG:900913"}}
46
+ => {"name"=>"Arc_Sample",
47
+ "path"=>"/",
48
+ "defaultstyle"=>"rain",
49
+ "styles"=>["raster"],
50
+ "type"=>"RASTER",
51
+ "enabled"=>"true",
52
+ "attribution"=>{"logoWidth"=>"0", "logoHeight"=>"0"},
53
+ "resource"=>{
54
+ "type"=>"coverage",
55
+ "name"=>"Arc_Sample",
56
+ "store"=>"arcGridSample",
57
+ "workspace"=>"nurc"},
58
+ "metadata"=>{
59
+ "GWC.autoCacheStyles"=>"true",
60
+ "GWC.metaTilingX"=>"4",
61
+ "GWC.metaTilingY"=>"4",
62
+ "GWC.gutter"=>"0",
63
+ "GWC.cachedNonDefaultStyles"=>"raster",
64
+ "GWC.enabled"=>"true",
65
+ "GWC.cacheFormats"=>"image/jpeg,image/png",
66
+ "GWC.gridSets"=>"EPSG:4326,EPSG:900913"}}
42
67
  > sld = lyr.styles.first
43
68
  => RGeoServer::Style: raster
44
69
  > sld.profile
45
- => {"name"=>"raster", "sld_version"=>"1.0.0", "filename"=>"raster.sld", "sld"=>{"sld_name"=>"raster", "sld_title"=>"Default Raster"}}
46
-
47
-
48
- A full sample script creating coverage stores in a small cluster:
49
-
50
- require 'rgeoserver'
51
-
52
- layers = {
53
- 'south_america_1787' => {
54
- 'url' => 'file:///geo_data/rumsey/g0411047.tif',
55
- 'description' => "Map of South America by D'Anville",
56
- 'type' => 'GeoTIFF'
57
- },
58
- 'city_of_san_francisco_1859' => {
59
- 'url' => 'file:///geo_data/rumsey/g1030000alpha.tif',
60
- 'description' => 'Map of San Francisco by the U.S. Coast Survey, with detail of the unsettled lands',
61
- 'type' => 'GeoTIFF'
62
- }
63
- }
64
-
65
- (1..7).each do |cat_id|
66
- cat = RGeoServer::Catalog.new :user=>'admin', :url => "http://geoserver-app#{cat_id}/rest", :password => "osgeo!"
67
- ws = cat.get_default_workspace
68
- cat.list(RGeoServer::CoverageStore, layers.keys, :workspace => ws) do |cs|
69
- cs.url = layers[cs.name]['url']
70
- cs.data_type = layers[cs.name]['type']
71
- cs.enabled = 'true'
72
- cs.save
73
- # Create the corresponding layer
74
- c = RGeoServer::Coverage.new cat, :workspace => ws, :coverage_store => cs, :name => cs.name
75
- c.title = cs_name.gsub('_',' ').titleize
76
- c.abstract = layers[cs.name]['description']
77
- c.save
78
- # Seed the tile cache
79
- l = RGeoServer::Layer.new cat, :name => cs.name
80
- l.seed :issue, {
81
- :srs => {
82
- :number => 4326
83
- },
84
- :zoomStart => 1,
85
- :zoomStop => 10,
86
- :format => 'image/png',
87
- :threadCount => 1
88
- }
89
- end
90
- end
70
+ => {"name"=>"raster",
71
+ "sld_version"=>"1.0.0",
72
+ "filename"=>"raster.sld",
73
+ "sld"=>{"sld_name"=>"raster", "sld_title"=>"Default Raster"}}
91
74
 
92
75
 
76
+ See *examples* directory for more examples.
77
+
93
78
  == Testing
79
+
94
80
  We use {jettywrapper}[https://github.com/projecthydra/jettywrapper] to wrap a test instance of GeoServer. In theory, you should be able to point to any other local installation. Suppose that you download the binary stable version 2.1.3 binary from {here}[http://sourceforge.net/project/downloading.php?groupname=geoserver&filename=geoserver-2.1.3-bin.zip&use_mirror=softlayer], then unzip it under say, /tmp/geoserver-2.1.3. The integration tests are executed as follows:
95
- $ rake integration['/tmp/geoserver-2.1.3','8080','-DGEOSERVER_DATA_DIR=data_dir']
81
+
82
+ $ rake integration
96
83
 
97
84
  If you have the test instance running already on port 8080, you can run the tests simply with:
98
85
 
99
86
  $ rake
100
87
 
101
88
  To generate the documentation run:
89
+
102
90
  $ rake yard
103
91
 
104
- To enter into an irb console with all classess loaded:
92
+ To enter into an irb console with all classes loaded:
93
+
105
94
  $ rake console
106
95
 
107
96
  == Logging
108
- For now we use {RestClient's}[https://github.com/archiloque/rest-client] base logger. It can be enabled by setting:
109
97
 
110
- RestClient.log = '/tmp/restclient.log'
98
+ To enable logging from {RestClient's}[https://github.com/archiloque/rest-client] base logger, add an entry in your `config.yml` for stdout/stderr or a file:
99
+
100
+ geoserver:
101
+ logfile: stderr
111
102
 
112
- or set an environment variable, for example:
103
+ or
113
104
 
114
- $ RESTCLIENT_LOG=stdout ruby ingest_layer.rb
115
- RestClient.get "http://localhost:8080/geoserver/rest/workspaces/cite.xml", "Accept"=>"application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Type"=>"application/xml"
116
- # => 200 OK | application/xml 662 bytes
117
- RestClient.get "http://localhost:8080/geoserver/rest/workspaces/cite/coveragestores/city_of_san_francisco_1859.xml", "Accept"=>"application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Type"=>"application/xml"
118
- # => 404 NotFound | text/plain 73 bytes
119
- RestClient.post "http://localhost:8080/geoserver/rest/workspaces/cite/coveragestores", "<?xml version=\"1.0\"?>\n<coverageStore>\n <name>city_of_san_francisco_1859</name>\n <workspace>\n <name>cite</name>\n </workspace>\n <enabled>true</enabled>\n <type>GeoTIFF</type>\n <description>Map of San Francisco by the U.S. Coast Survey, with detail of the unsettled lands</description>\n <url>file:///geo_data/rumsey/g1030000alpha.tif</url>\n</coverageStore>\n", "Accept"=>"application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"363", "Content-Type"=>"application/xml"
120
- # => 201 Created | 0 bytes
105
+ geoserver:
106
+ logfile: 'rgeoserver.log'
121
107
 
122
108
 
123
109
  == Related Resources
110
+
124
111
  * {OSGeo The Open Source Geospatial Foundation}[http://www.osgeo.org]
125
- * {GeoServer Project page}[http://docs.geoserver.org/stable/en/user/index.html]
126
- * {GeoServer Catalog design}[http://bit.ly/JrX1J8]
112
+ * {GeoServer}[http://geoserver.org]
113
+ * {Catalog design}[http://bit.ly/JrX1J8]
127
114
  * {GeoTools}[http://geotools.org/]
128
115
  * Implementation in other languages:
129
116
  * Python: {gsconfig.py}[https://github.com/dwins/gsconfig.py]
130
117
 
131
118
  == Release History
132
119
 
120
+ - <b>v0.7</b> - Major update with keywords, YAML config, REST API, unit testing and cleanup
133
121
  - <b>v0.5</b> - Initial alpha release
134
122
 
135
123
  == TODO
124
+
136
125
  - Complete data stores and coverages functionality and data upload.
137
126
  - Complete updating data in objects. On failure, objects should roll back.
138
127
  - Complete documentation.
@@ -143,12 +132,12 @@ or set an environment variable, for example:
143
132
  - Provide more examples:
144
133
  - Customize configuration.
145
134
  - Connect under SSL.
146
- - Batch processing.
147
135
  - Migrate base HTTP client to {Faraday}[https://github.com/technoweenie/faraday]?
148
136
  - Curlify operations: To provide optional log/output of the curl command that would produce the same
149
137
  result as the ResourceInfo#save method.
150
138
 
151
139
  == Contributing with Patches and Pull requests checklist
140
+
152
141
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
153
142
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
154
143
  * Fork the project
@@ -159,17 +148,19 @@ result as the ResourceInfo#save method.
159
148
 
160
149
 
161
150
  == Acknowledgements
151
+
162
152
  Inspired on the {Rubydora}[https://github.com/cbeer/rubydora] gem. Followed somewhat closely to {gsconfig.py}[https://github.com/dwins/gsconfig.py]
163
153
 
164
154
  == Contributors
155
+
165
156
  This package is supported and maintained by Stanford University Libraries.
166
157
 
167
- Bess Sadler <bess@stanford.edu>
158
+ * Renzo Sanchez-Silva <renzo.sanchez.silva@gmail.com> (Original Author)
159
+ * Bess Sadler <bess@stanford.edu>
160
+ * Darren Hardy <drh@stanford.edu>
168
161
 
169
162
  == License
170
163
 
171
- Copyright (c) 2012 Stanford University
172
-
173
- Author: Renzo Sanchez-Silva <renzo.sanchez.silva@gmail.com>.
164
+ Copyright (c) 2012-2013 Stanford University
174
165
 
175
166
  Licensed under the Apache License, Version 2.0
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
3
  require 'bundler/gem_tasks'
4
+ # require 'version_bumper'
4
5
 
5
6
  begin
6
7
  Bundler.setup(:default, :development)
@@ -29,7 +30,7 @@ end
29
30
 
30
31
  desc "Open an irb session preloaded with this library"
31
32
  task :console do
32
- sh "irb -rubygems -I lib -r rgeoserver.rb"
33
+ sh "irb --simple-prompt -rubygems -I lib -r rgeoserver.rb"
33
34
  end
34
35
 
35
36
  desc "Execute integration tests"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.9
1
+ 0.7
data/bin/batch_load.rb ADDED
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding : utf-8 -*-
3
+ #
4
+ # RGeoServer Batch load layers (batch_demo.rb)
5
+ # Usage: #{File.basename(__FILE__)} [input.yml]
6
+
7
+ require 'rubygems'
8
+ require 'yaml'
9
+ require 'rgeoserver'
10
+ require 'awesome_print'
11
+ require 'optparse'
12
+
13
+ #= Input data. *See DATA section at end of file*
14
+ # The input file is in YAML syntax with each record is a Hash with keys:
15
+ # - layername
16
+ # - filename
17
+ # - format
18
+ # - title
19
+ # and optionally
20
+ # - description
21
+ # - keywords
22
+ # - metadata_links
23
+
24
+ #= Configuration constants
25
+ WORKSPACE_NAME = 'rgeoserver'
26
+ NAMESPACE = 'urn:rgeoserver'
27
+
28
+ # GeoWebCache configuration
29
+ SEED = true
30
+ SEED_OPTIONS = {
31
+ :srs => {
32
+ :number => 4326
33
+ },
34
+ :zoomStart => 1,
35
+ :zoomStop => 8,
36
+ :format => 'image/png',
37
+ :threadCount => 1
38
+ }
39
+
40
+ def main layers, flags = {}
41
+ return unless layers
42
+ datadir = flags[:datadir]
43
+ # Connect to the GeoServer catalog
44
+ cat = RGeoServer::Catalog.new
45
+
46
+ # Obtain a handle to the workspace and clean it up.
47
+ ws = RGeoServer::Workspace.new cat, :name => WORKSPACE_NAME
48
+ ws.delete :recurse => true if flags[:delete] and not ws.new?
49
+ ws.save if ws.new?
50
+
51
+ # Iterate over all records in YAML file and create stores in the catalog
52
+ layers.each do |k, v|
53
+ ['layername', 'format', 'filename', 'title'].each do |id|
54
+ raise ArgumentError, "Layer is missing #{id}" unless v.include?(id)
55
+ end
56
+ ap v
57
+
58
+ layername = v['layername'].strip
59
+ format = v['format'].strip
60
+
61
+ ap "Layer: #{layername} #{format}"
62
+ if format == 'GeoTIFF'
63
+ # Create of a coverage store
64
+ cs = RGeoServer::CoverageStore.new cat, :workspace => ws, :name => layername
65
+ cs.url = File.join(datadir, v['filename'])
66
+ cs.description = v['description']
67
+ cs.enabled = 'true'
68
+ cs.data_type = format
69
+ cs.save
70
+
71
+ # Now create the actual coverage
72
+ cv = RGeoServer::Coverage.new cat, :workspace => ws, :coverage_store => cs, :name => layername
73
+ cv.title = v['title']
74
+ cv.keywords = v['keywords']
75
+ cv.metadata_links = v['metadata_links']
76
+ cv.save
77
+
78
+ elsif format == 'Shapefile'
79
+ # Create data stores for shapefiles
80
+ ds = RGeoServer::DataStore.new cat, :workspace => ws, :name => layername
81
+ ds.description = v['description']
82
+ ds.connection_parameters = {
83
+ "url" => File.join(datadir, v['filename']),
84
+ "namespace" => NAMESPACE
85
+ }
86
+ ds.enabled = 'true'
87
+ ds.save
88
+
89
+ ft = RGeoServer::FeatureType.new cat, :workspace => ws, :data_store => ds, :name => layername
90
+ ft.title = v['title']
91
+ ft.abstract = v['description']
92
+ ft.keywords = v['keywords']
93
+ ft.metadata_links = v['metadata_links']
94
+ ft.save
95
+ end
96
+
97
+ # Check if a layer has been created, extract some metadata
98
+ lyr = RGeoServer::Layer.new cat, :name => layername
99
+ if not lyr.new? and SEED
100
+ lyr.seed :issue, SEED_OPTIONS
101
+ else
102
+ raise NotImplementedError, "Unsupported format #{format}"
103
+ end
104
+ end
105
+ end
106
+
107
+ begin
108
+ flags = {
109
+ :delete => true,
110
+ :verbose => false,
111
+ :datadir => 'file:///data'
112
+ }
113
+
114
+ OptionParser.new do |opts|
115
+ opts.banner = "Usage: #{File.basename(__FILE__)} [-v] [--delete] [input.yml ...]"
116
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
117
+ flags[:verbose] = v
118
+ end
119
+ opts.on(nil, "--[no-]delete", "Delete workspaces recursively") do |v|
120
+ flags[:delete] = v
121
+ end
122
+ opts.on("-d DIR", "--datadir DIR", "Data directory on GeoServer (default: file:///data)") do |v|
123
+ flags[:datadir] = v
124
+ end
125
+ end.parse!
126
+ ap flags
127
+
128
+ if ARGV.size > 0
129
+ ARGV.each do |fn|
130
+ main(YAML::load_file(fn), flags)
131
+ end
132
+ else
133
+ main(YAML::load($stdin), flags)
134
+ end
135
+ rescue SystemCallError => e
136
+ $stderr.puts "ERROR: #{e.message}"
137
+ exit(-1)
138
+ end
@@ -0,0 +1,17 @@
1
+ geoserver:
2
+ # Set to the REST API for the GeoServer
3
+ url: "http://localhost:8080/geoserver/rest"
4
+ # Optional user/password, set to false to disable
5
+ user: "admin"
6
+ password: "admin"
7
+ # Set to your GWC server, or "builtin" for the one bundled with GeoServer
8
+ geowebcache_url: "builtin"
9
+
10
+ # RestClient:
11
+ restclient:
12
+ # Set to false to disable or stdout/stderr or 'filename.out'
13
+ logfile: 'rgeoserver.log' #stdout
14
+ # Timeout (in seconds)
15
+ timeout: 300
16
+ # Open Timeout (in seconds)
17
+ open_timeout: 60