geo_concerns 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +41 -0
- data/app/jobs/delivery_job.rb +1 -1
- data/app/services/geo_concerns/delivery/geoserver.rb +36 -25
- data/app/services/geo_concerns/delivery_service.rb +2 -2
- data/docker-compose.yml +10 -0
- data/geo_concerns.gemspec +1 -1
- data/lib/generators/geo_concerns/templates/config/geoserver.yml +23 -15
- data/lib/geo_concerns/version.rb +1 -1
- data/run-docker.sh +7 -0
- data/spec/jobs/delivery_job_spec.rb +4 -3
- data/spec/services/geo_concerns/delivery/geoserver_spec.rb +65 -40
- data/spec/services/geo_concerns/delivery_service_spec.rb +14 -5
- data/template.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7859ed88c8abf63d62c3f01656c86bef9100759a
|
4
|
+
data.tar.gz: 9d9b2132b6e5497633bc66604656917fe6cf801b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9396b438f6ee45eef45ecd87b180e54f66e4a23bc83297c27dad047f4065eede959f5870c84ae94adff9529c3a13d6242067be951cbc1ccef497921618d83efb
|
7
|
+
data.tar.gz: a21f787e7a4762b5aeab53a76386975a6f92170a2b55dec1e2537438cb5466df028e9ddbf4856dc3eff3da6c51b5eafa7186910d9528bce9a9a60e8c218ec468
|
data/.travis.yml
CHANGED
@@ -18,6 +18,7 @@ before_install:
|
|
18
18
|
- sudo apt-add-repository --yes ppa:mapnik/nightly-${MAPNIK_VERSION}
|
19
19
|
- sudo apt-get update -y
|
20
20
|
- sudo apt-get -y install libmapnik=${MAPNIK_VERSION}* mapnik-utils=${MAPNIK_VERSION}* libmapnik-dev=${MAPNIK_VERSION}* mapnik-input-plugin*=${MAPNIK_VERSION}*
|
21
|
+
- gem install bundler -v 1.13.1 # hopefully temporary
|
21
22
|
install: bundle install --jobs=3 --retry=3
|
22
23
|
before_script:
|
23
24
|
- gdalinfo --version
|
data/README.md
CHANGED
@@ -21,6 +21,7 @@ Rails application for developing Hydra Geo models. Built around Curation Concern
|
|
21
21
|
1. [GDAL](http://www.gdal.org/)
|
22
22
|
* You can install it on Mac OSX with `brew install gdal`.
|
23
23
|
* On Ubuntu, use `sudo apt-get install gdal-bin`.
|
24
|
+
1. [GeoServer](http://geoserver.org/) (Optional)
|
24
25
|
|
25
26
|
## Mapnik
|
26
27
|
|
@@ -73,3 +74,43 @@ Then, in another terminal window:
|
|
73
74
|
```
|
74
75
|
$ rake spec
|
75
76
|
```
|
77
|
+
|
78
|
+
## Running GeoServer for Development with Docker
|
79
|
+
|
80
|
+
### MacOS
|
81
|
+
|
82
|
+
1. Make sure you have docker engine, docker-machine, and docker-compose installed.
|
83
|
+
- Docker Toolbox: [https://www.docker.com/products/docker-toolbox](https://www.docker.com/products/docker-toolbox)
|
84
|
+
|
85
|
+
1. Execute the following command in the geo_concerns directory:
|
86
|
+
|
87
|
+
```
|
88
|
+
$ source ./run-docker.sh
|
89
|
+
```
|
90
|
+
|
91
|
+
### Linux
|
92
|
+
|
93
|
+
1. Make sure you have docker engine and docker-compose installed.
|
94
|
+
- [https://docs.docker.com/engine/installation/linux/](https://docs.docker.com/engine/installation/linux/)
|
95
|
+
- [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
|
96
|
+
|
97
|
+
1. Execute the following commands in the geo_concerns directory:
|
98
|
+
|
99
|
+
```
|
100
|
+
$ docker-compose up -d
|
101
|
+
$ export GEOSERVER_URL="http://localhost:8181/geoserver/rest"
|
102
|
+
```
|
103
|
+
|
104
|
+
## Running GeoServer for Development with Vagrant
|
105
|
+
|
106
|
+
1. Make sure you have VirtualBox and Vagrant installed.
|
107
|
+
- [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
|
108
|
+
- [https://www.vagrantup.com/docs/installation/](https://www.vagrantup.com/docs/installation/)
|
109
|
+
1. Execute the following commands:
|
110
|
+
|
111
|
+
```
|
112
|
+
$ git clone https://github.com/geoconcerns/geoserver-vagrant.git
|
113
|
+
$ cd geoserver-vagrant/
|
114
|
+
$ vagrant up
|
115
|
+
|
116
|
+
```
|
data/app/jobs/delivery_job.rb
CHANGED
@@ -13,6 +13,6 @@ class DeliveryJob < ActiveJob::Base
|
|
13
13
|
def perform(file_set, content_url)
|
14
14
|
uri = URI.parse(content_url)
|
15
15
|
raise NotImplementedError, 'Only supports file URLs' unless uri.scheme == 'file'
|
16
|
-
GeoConcerns::DeliveryService.new
|
16
|
+
GeoConcerns::DeliveryService.new(file_set, uri.path).publish
|
17
17
|
end
|
18
18
|
end
|
@@ -1,25 +1,18 @@
|
|
1
1
|
require 'active_support/core_ext/hash/indifferent_access'
|
2
2
|
require 'rgeoserver'
|
3
3
|
require 'yaml'
|
4
|
+
require 'erb'
|
4
5
|
|
5
6
|
module GeoConcerns
|
6
7
|
module Delivery
|
7
8
|
class Geoserver
|
8
|
-
|
9
|
-
url: 'http://localhost:8181/geoserver/rest',
|
10
|
-
user: 'admin',
|
11
|
-
password: 'geoserver'
|
12
|
-
}.with_indifferent_access.freeze
|
9
|
+
attr_reader :config, :workspace_name, :file_set, :file_path
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@config = YAML.load(data)['geoserver'].with_indifferent_access.freeze
|
20
|
-
rescue Errno::ENOENT
|
21
|
-
@config = DEFAULT_CONFIG
|
22
|
-
end
|
11
|
+
def initialize(file_set, file_path)
|
12
|
+
@file_set = file_set
|
13
|
+
@file_path = file_path
|
14
|
+
@config = fetch_config
|
15
|
+
@workspace_name = @config.delete(:workspace)
|
23
16
|
validate!
|
24
17
|
end
|
25
18
|
|
@@ -27,12 +20,12 @@ module GeoConcerns
|
|
27
20
|
@catalog ||= RGeoServer.catalog(config)
|
28
21
|
end
|
29
22
|
|
30
|
-
def publish(
|
23
|
+
def publish(type = :vector)
|
31
24
|
case type
|
32
25
|
when :vector
|
33
|
-
publish_vector
|
26
|
+
publish_vector
|
34
27
|
when :raster
|
35
|
-
publish_raster
|
28
|
+
publish_raster
|
36
29
|
else
|
37
30
|
raise ArgumentError, "Unknown file type #{type}"
|
38
31
|
end
|
@@ -40,23 +33,41 @@ module GeoConcerns
|
|
40
33
|
|
41
34
|
private
|
42
35
|
|
36
|
+
def fetch_config
|
37
|
+
raise ArgumentError, "FileSet visibility must be open or authenticated" unless visibility
|
38
|
+
|
39
|
+
data = ERB.new(File.read(Rails.root.join('config', 'geoserver.yml'))).result
|
40
|
+
YAML.load(data)['geoserver'][visibility].with_indifferent_access
|
41
|
+
end
|
42
|
+
|
43
|
+
def visibility
|
44
|
+
return file_set.visibility if file_set.visibility == 'open'
|
45
|
+
return file_set.visibility if file_set.visibility == 'authenticated'
|
46
|
+
end
|
47
|
+
|
43
48
|
def validate!
|
44
49
|
%w(url user password).map(&:to_sym).each do |k|
|
45
50
|
raise ArgumentError, "Missing #{k} in configuration" unless config[k].present?
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
workspace = RGeoServer::Workspace.new catalog, name: 'geo'
|
54
|
+
def workspace
|
55
|
+
workspace = RGeoServer::Workspace.new catalog, name: workspace_name
|
53
56
|
workspace.save if workspace.new?
|
54
|
-
|
55
|
-
|
57
|
+
workspace
|
58
|
+
end
|
59
|
+
|
60
|
+
def datastore
|
61
|
+
RGeoServer::DataStore.new catalog, workspace: workspace, name: file_set.id
|
62
|
+
end
|
63
|
+
|
64
|
+
def publish_vector
|
65
|
+
raise ArgumentError, "Not ZIPed Shapefile: #{file_path}" unless file_path =~ /\.zip$/
|
66
|
+
datastore.upload_file file_path, publish: true
|
56
67
|
end
|
57
68
|
|
58
|
-
def publish_raster
|
59
|
-
raise ArgumentError, "Not GeoTIFF: #{
|
69
|
+
def publish_raster
|
70
|
+
raise ArgumentError, "Not GeoTIFF: #{file_path}" unless file_path =~ /\.tif$/
|
60
71
|
raise NotImplementedError
|
61
72
|
end
|
62
73
|
end
|
@@ -2,8 +2,8 @@ module GeoConcerns
|
|
2
2
|
class DeliveryService
|
3
3
|
attr_reader :geoserver
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
@geoserver = GeoConcerns::Delivery::Geoserver.new
|
5
|
+
def initialize(file_set, file_path)
|
6
|
+
@geoserver = GeoConcerns::Delivery::Geoserver.new(file_set, file_path)
|
7
7
|
end
|
8
8
|
|
9
9
|
delegate :publish, to: :geoserver
|
data/docker-compose.yml
ADDED
data/geo_concerns.gemspec
CHANGED
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'json-schema', '>= 2.6.2'
|
27
27
|
spec.add_dependency 'rgeoserver', '>= 0.9.1'
|
28
28
|
|
29
|
-
spec.add_dependency 'bundler', '~> 1.12.5' # TODO: 1.13 breaks our builds
|
30
29
|
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
31
31
|
spec.add_development_dependency 'sqlite3'
|
32
32
|
spec.add_development_dependency 'devise', '>= 3.0', '< 5'
|
33
33
|
spec.add_development_dependency 'rspec-rails', '>= 3.5.2'
|
@@ -1,17 +1,25 @@
|
|
1
1
|
geoserver:
|
2
|
-
# Set to the REST API for the GeoServer
|
3
|
-
url: "http://localhost:8181/geoserver/rest"
|
4
|
-
# Optional user/password, set to false to disable
|
5
|
-
user: "admin"
|
6
|
-
password: "geoserver"
|
7
|
-
# Set to your GWC server, or "builtin" for the one bundled with GeoServer
|
8
|
-
geowebcache_url: "builtin"
|
9
2
|
|
10
|
-
#
|
11
|
-
|
12
|
-
# Set to
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
# GeoServer config options for open and public data
|
4
|
+
open: &open
|
5
|
+
# Set to the REST API for the GeoServer
|
6
|
+
url: <%= ENV['PUBLIC_GEOSERVER_URL'] || "http://localhost:8181/geoserver/rest" %>
|
7
|
+
# Optional user and password, set to false to disable
|
8
|
+
user: <%= ENV['PUBLIC_GEOSERVER_USER'] || "admin" %>
|
9
|
+
password: <%= ENV['PUBLIC_GEOSERVER_PASSWORD'] || "geoserver" %>
|
10
|
+
# Set to your GWC server, or "builtin" for the one bundled with GeoServer
|
11
|
+
geowebcache_url: <%= ENV['PUBLIC_GEOSERVER_GWC_URL'] || "builtin" %>
|
12
|
+
# Name of the workspace to save your data in
|
13
|
+
workspace: <%= ENV['PUBLIC_GEOSERVER_WS'] || "public" %>
|
14
|
+
restclient:
|
15
|
+
# Set to false to disable or stdout, stderr, or filename
|
16
|
+
logfile: stderr
|
17
|
+
# Timeout (in seconds)
|
18
|
+
timeout: 300
|
19
|
+
# Open Timeout (in seconds)
|
20
|
+
open_timeout: 60
|
21
|
+
|
22
|
+
# GeoServer config options for restricted data or data that needs authentication
|
23
|
+
authenticated:
|
24
|
+
<<: *open
|
25
|
+
workspace: <%= ENV['AUTH_GEOSERVER_WS'] || "restricted" %>
|
data/lib/geo_concerns/version.rb
CHANGED
data/run-docker.sh
ADDED
@@ -7,13 +7,14 @@ describe GeoConcerns::DeliveryJob do
|
|
7
7
|
context '#perform' do
|
8
8
|
context 'local file' do
|
9
9
|
let(:content_url) { 'file:/somewhere-to-display-copy' }
|
10
|
+
let(:service) { instance_double('GeoConcerns::DeliveryService') }
|
10
11
|
it 'delegates to DeliveryService' do
|
11
|
-
|
12
|
-
expect(
|
13
|
-
expect(dbl).to receive(:publish).with(file_set.id, URI(content_url).path)
|
12
|
+
expect(GeoConcerns::DeliveryService).to receive(:new).with(file_set, URI(content_url).path).and_return(service)
|
13
|
+
expect(service).to receive(:publish)
|
14
14
|
subject.perform(file_set, content_url)
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
17
18
|
context 'remote file' do
|
18
19
|
let(:content_url) { 'http://somewhere/to-display-copy' }
|
19
20
|
it 'errors out' do
|
@@ -2,71 +2,96 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GeoConcerns::Delivery::Geoserver do
|
4
4
|
let(:id) { 'abc123' }
|
5
|
+
let(:file_set) { instance_double("FileSet") }
|
6
|
+
let(:visibility) { 'open' }
|
7
|
+
let(:path) { 'spec/fixtures/files/tufts-cambridgegrid100-04.zip' }
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
+
subject { described_class.new file_set, path }
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow(file_set).to receive(:visibility).and_return(visibility)
|
13
|
+
allow(file_set).to receive(:id).and_return(id)
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with an authenticated file set visibility' do
|
17
|
+
let(:visibility) { 'authenticated' }
|
18
|
+
it 'does not raise error' do
|
9
19
|
expect { subject }.not_to raise_error
|
10
|
-
expect(subject.config).to include('url' => 'http://localhost:8181/geoserver/rest',
|
11
|
-
'user' => 'admin',
|
12
|
-
'password' => 'geoserver')
|
13
20
|
end
|
14
21
|
end
|
15
22
|
|
16
|
-
context '
|
17
|
-
|
18
|
-
|
19
|
-
subject.
|
20
|
-
subject.catalog # should cache result
|
23
|
+
context 'with a private file set visibility' do
|
24
|
+
let(:visibility) { 'private' }
|
25
|
+
it 'raises an error' do
|
26
|
+
expect { subject }.to raise_error(ArgumentError, /FileSet visibility/)
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
24
|
-
|
30
|
+
describe '#publish' do
|
25
31
|
it 'requires a valid type' do
|
26
|
-
expect { subject.publish(
|
32
|
+
expect { subject.publish(:unknown) }.to raise_error(ArgumentError, /Unknown file type/)
|
27
33
|
end
|
28
|
-
|
34
|
+
|
35
|
+
context 'when type is vector' do
|
29
36
|
let(:type) { :vector }
|
30
|
-
let(:filename) { 'file.zip' }
|
31
37
|
it 'routes to publish_vector' do
|
32
|
-
expect(subject).to receive(:publish_vector)
|
33
|
-
subject.publish(
|
38
|
+
expect(subject).to receive(:publish_vector)
|
39
|
+
subject.publish(type)
|
34
40
|
end
|
35
41
|
end
|
36
|
-
|
42
|
+
|
43
|
+
context 'when type is raster' do
|
37
44
|
let(:type) { :raster }
|
38
|
-
let(:filename) { 'file.tif' }
|
39
45
|
it 'routes to publish_raster' do
|
40
|
-
expect(subject).to receive(:publish_raster)
|
41
|
-
subject.publish(
|
46
|
+
expect(subject).to receive(:publish_raster)
|
47
|
+
subject.publish(type)
|
42
48
|
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
describe '#publish_vector' do
|
53
|
+
context 'when a vector is not a zip file' do
|
54
|
+
let(:path) { 'not-a-zip' }
|
55
|
+
it 'raises an error' do
|
56
|
+
expect { subject.send(:publish_vector) }.to raise_error(ArgumentError, /Not ZIPed Shapefile/)
|
57
|
+
end
|
50
58
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
59
|
+
|
60
|
+
context 'with a path to a zipped shapefile' do
|
61
|
+
let(:ws) { double }
|
62
|
+
let(:ds) { double }
|
63
|
+
|
64
|
+
it 'dispatches to RGeoServer' do
|
65
|
+
expect(RGeoServer::Workspace).to receive(:new).with(subject.catalog, hash_including(name: 'public')).and_return(ws)
|
66
|
+
expect(ws).to receive(:'new?').and_return(true)
|
67
|
+
expect(ws).to receive(:save)
|
68
|
+
expect(RGeoServer::DataStore).to receive(:new).with(subject.catalog, hash_including(workspace: ws, name: id)).and_return(ds)
|
69
|
+
expect(ds).to receive(:upload_file).with(path, hash_including(publish: true))
|
70
|
+
subject.send(:publish_vector)
|
71
|
+
end
|
60
72
|
end
|
61
73
|
end
|
62
74
|
|
63
|
-
|
64
|
-
let(:
|
65
|
-
|
66
|
-
expect { subject.send(:publish_raster, id, 'not-a-tiff') }.to raise_error(ArgumentError, /Not GeoTIFF/)
|
67
|
-
end
|
75
|
+
describe '#publish_raster' do
|
76
|
+
let(:path) { 'spec/fixtures/files/S_566_1914_clip.tif' }
|
77
|
+
|
68
78
|
it 'is not implemented yet' do
|
69
|
-
expect { subject.send(:publish_raster
|
79
|
+
expect { subject.send(:publish_raster) }.to raise_error(NotImplementedError)
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when a raster is not a GeoTIFF file' do
|
83
|
+
let(:path) { 'not-a-tiff' }
|
84
|
+
it 'raises an error' do
|
85
|
+
expect { subject.send(:publish_raster) }.to raise_error(ArgumentError, /Not GeoTIFF/)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#catalog' do
|
91
|
+
it 'connects to a RGeoServer catalog' do
|
92
|
+
expect(RGeoServer).to receive(:catalog).with(hash_including(:url, :user, :password)).and_return(double).once
|
93
|
+
subject.catalog
|
94
|
+
subject.catalog # should cache result
|
70
95
|
end
|
71
96
|
end
|
72
97
|
end
|
@@ -2,14 +2,23 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GeoConcerns::DeliveryService do
|
4
4
|
let(:id) { 'abc123' }
|
5
|
-
let(:
|
5
|
+
let(:path) { 'somewhere-to-display-copy' }
|
6
|
+
let(:file_set) { instance_double("FileSet") }
|
7
|
+
let(:visibility) { 'open' }
|
8
|
+
let(:service) { instance_double('GeoConcerns::Delivery::Geoserver') }
|
9
|
+
|
10
|
+
subject { described_class.new file_set, path }
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(file_set).to receive(:visibility).and_return(visibility)
|
14
|
+
allow(service).to receive(:visibility).and_return(visibility)
|
15
|
+
end
|
6
16
|
|
7
17
|
context '#publish' do
|
8
18
|
it 'dispatches to Geoserver delivery' do
|
9
|
-
|
10
|
-
expect(
|
11
|
-
|
12
|
-
subject.publish(id, filename)
|
19
|
+
expect(subject).to receive(:geoserver).and_return(service)
|
20
|
+
expect(service).to receive(:publish)
|
21
|
+
subject.publish
|
13
22
|
end
|
14
23
|
end
|
15
24
|
end
|
data/template.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_concerns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Griffin
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2016-09-
|
15
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: curation_concerns
|
@@ -90,14 +90,14 @@ dependencies:
|
|
90
90
|
requirements:
|
91
91
|
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: 1.
|
94
|
-
type: :
|
93
|
+
version: '1.13'
|
94
|
+
type: :development
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
98
|
- - "~>"
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: 1.
|
100
|
+
version: '1.13'
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: sqlite3
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -468,6 +468,7 @@ files:
|
|
468
468
|
- app/views/geo_concerns/related/_parent_works.html.erb
|
469
469
|
- app/vocabs/geo_concerns/geo_terms.rb
|
470
470
|
- config/routes.rb
|
471
|
+
- docker-compose.yml
|
471
472
|
- geo_concerns.gemspec
|
472
473
|
- lib/generators/geo_concerns/install_generator.rb
|
473
474
|
- lib/generators/geo_concerns/templates/actors/curation_concerns/actors/image_work_actor.rb
|
@@ -499,6 +500,7 @@ files:
|
|
499
500
|
- lib/geo_concerns/engine.rb
|
500
501
|
- lib/geo_concerns/version.rb
|
501
502
|
- lib/tasks/geo_concerns_tasks.rake
|
503
|
+
- run-docker.sh
|
502
504
|
- solr/config/_rest_managed.json
|
503
505
|
- solr/config/admin-extra.html
|
504
506
|
- solr/config/elevate.xml
|