geo_concerns 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rubocop.yml +101 -0
- data/.travis.yml +17 -0
- data/Gemfile +46 -0
- data/LICENSE +202 -0
- data/README.md +46 -0
- data/Rakefile +21 -0
- data/app/actors/geo_concerns/file_actor.rb +20 -0
- data/app/actors/geo_concerns/file_set_actor.rb +7 -0
- data/app/assets/images/geo_concerns/.keep +0 -0
- data/app/assets/images/geo_concerns/images/geocoder.png +0 -0
- data/app/assets/images/geo_concerns/images/throbber.gif +0 -0
- data/app/assets/images/geo_concerns/img/filter-icon.png +0 -0
- data/app/assets/images/geo_concerns/img/move-handle.png +0 -0
- data/app/assets/images/geo_concerns/img/resize-handle.png +0 -0
- data/app/assets/javascripts/geo_concerns/Control.Geocoder.js +1056 -0
- data/app/assets/javascripts/geo_concerns/application.js +5 -0
- data/app/assets/javascripts/geo_concerns/bounding_box_selector.js +100 -0
- data/app/assets/javascripts/geo_concerns/leaflet-boundingbox.js +467 -0
- data/app/assets/stylesheets/geo_concerns/Control.Geocoder.css +104 -0
- data/app/assets/stylesheets/geo_concerns/application.css +18 -0
- data/app/assets/stylesheets/geo_concerns/bounding_box.scss +7 -0
- data/app/assets/stylesheets/geo_concerns/leaflet-boundingbox.css +17 -0
- data/app/controllers/concerns/geo_concerns/file_sets_controller_behavior.rb +19 -0
- data/app/controllers/concerns/geo_concerns/image_works_controller_behavior.rb +13 -0
- data/app/controllers/concerns/geo_concerns/raster_works_controller_behavior.rb +23 -0
- data/app/controllers/concerns/geo_concerns/vector_works_controller_behavior.rb +23 -0
- data/app/forms/geo_concerns/basic_geo_metadata_form.rb +8 -0
- data/app/forms/geo_concerns/external_metadata_file_form.rb +8 -0
- data/app/forms/geo_concerns/georeferenced_form.rb +9 -0
- data/app/forms/geo_concerns/image_work_form.rb +9 -0
- data/app/forms/geo_concerns/raster_work_form.rb +8 -0
- data/app/forms/geo_concerns/vector_work_form.rb +8 -0
- data/app/helpers/bounding_box_helper.rb +24 -0
- data/app/helpers/geo_concerns/application_helper.rb +4 -0
- data/app/models/concerns/geo_concerns/basic_geo_metadata.rb +21 -0
- data/app/models/concerns/geo_concerns/external_metadata_file_behavior.rb +31 -0
- data/app/models/concerns/geo_concerns/extractors/fgdc_helper.rb +9 -0
- data/app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb +114 -0
- data/app/models/concerns/geo_concerns/extractors/iso19139_helper.rb +50 -0
- data/app/models/concerns/geo_concerns/extractors/mods_helper.rb +15 -0
- data/app/models/concerns/geo_concerns/file_set/derivatives.rb +60 -0
- data/app/models/concerns/geo_concerns/file_set_presenter_behavior.rb +7 -0
- data/app/models/concerns/geo_concerns/geo_file_format_behavior.rb +37 -0
- data/app/models/concerns/geo_concerns/geo_file_set_behavior.rb +11 -0
- data/app/models/concerns/geo_concerns/georeferenced_behavior.rb +18 -0
- data/app/models/concerns/geo_concerns/image_file_behavior.rb +14 -0
- data/app/models/concerns/geo_concerns/image_work_behavior.rb +69 -0
- data/app/models/concerns/geo_concerns/metadata_extraction_helper.rb +28 -0
- data/app/models/concerns/geo_concerns/raster_file_behavior.rb +14 -0
- data/app/models/concerns/geo_concerns/raster_work_behavior.rb +82 -0
- data/app/models/concerns/geo_concerns/solr_document_behavior.rb +25 -0
- data/app/models/concerns/geo_concerns/vector_file_behavior.rb +14 -0
- data/app/models/concerns/geo_concerns/vector_work_behavior.rb +78 -0
- data/app/presenters/geo_concerns/geo_concerns_show_presenter.rb +30 -0
- data/app/presenters/geo_concerns/image_work_show_presenter.rb +18 -0
- data/app/presenters/geo_concerns/raster_work_show_presenter.rb +18 -0
- data/app/presenters/geo_concerns/vector_work_show_presenter.rb +10 -0
- data/app/processors/geo_concerns/processors/base_geo_processor.rb +86 -0
- data/app/processors/geo_concerns/processors/raster.rb +11 -0
- data/app/processors/geo_concerns/processors/raster/aig.rb +44 -0
- data/app/processors/geo_concerns/processors/raster/base.rb +74 -0
- data/app/processors/geo_concerns/processors/raster/dem.rb +46 -0
- data/app/processors/geo_concerns/processors/raster/processor.rb +27 -0
- data/app/processors/geo_concerns/processors/vector.rb +11 -0
- data/app/processors/geo_concerns/processors/vector/base.rb +68 -0
- data/app/processors/geo_concerns/processors/vector/processor.rb +25 -0
- data/app/processors/geo_concerns/processors/vector/shapefile.rb +20 -0
- data/app/processors/geo_concerns/processors/zip.rb +31 -0
- data/app/renderers/coverage_renderer.rb +34 -0
- data/app/runners/geo_concerns/runners/raster_derivatives.rb +9 -0
- data/app/runners/geo_concerns/runners/vector_derivatives.rb +9 -0
- data/app/schemas/geo_concerns/basic_geo_metadata_optional.rb +39 -0
- data/app/schemas/geo_concerns/basic_geo_metadata_required.rb +25 -0
- data/app/services/authority_service.rb +23 -0
- data/app/services/geo_concerns/derivative_path.rb +16 -0
- data/app/services/image_format_service.rb +4 -0
- data/app/services/metadata_format_service.rb +4 -0
- data/app/services/raster_format_service.rb +4 -0
- data/app/services/vector_format_service.rb +4 -0
- data/app/values/geo_concerns/coverage.rb +36 -0
- data/app/values/geo_concerns/time_period.rb +31 -0
- data/app/views/curation_concerns/file_sets/_form.html.erb +48 -0
- data/app/views/curation_concerns/image_works/_form.html.erb +23 -0
- data/app/views/curation_concerns/image_works/_image_work.html.erb +2 -0
- data/app/views/curation_concerns/image_works/_members.html.erb +30 -0
- data/app/views/curation_concerns/image_works/_related_image_files.html.erb +24 -0
- data/app/views/curation_concerns/image_works/_show_actions.html.erb +16 -0
- data/app/views/curation_concerns/image_works/show.html.erb +17 -0
- data/app/views/curation_concerns/raster_works/_form.html.erb +25 -0
- data/app/views/curation_concerns/raster_works/_members.html.erb +30 -0
- data/app/views/curation_concerns/raster_works/_raster_work.html.erb +2 -0
- data/app/views/curation_concerns/raster_works/_related_raster_files.html.erb +24 -0
- data/app/views/curation_concerns/raster_works/_show_actions.html.erb +16 -0
- data/app/views/curation_concerns/raster_works/show.html.erb +17 -0
- data/app/views/curation_concerns/vector_works/_form.html.erb +25 -0
- data/app/views/curation_concerns/vector_works/_related_vector_files.html.erb +24 -0
- data/app/views/curation_concerns/vector_works/_show_actions.html.erb +15 -0
- data/app/views/curation_concerns/vector_works/_vector_work.html.erb +2 -0
- data/app/views/curation_concerns/vector_works/show.html.erb +15 -0
- data/app/views/geo_concerns/_attribute_rows.html.erb +11 -0
- data/app/views/geo_concerns/_attributes.html.erb +13 -0
- data/app/views/geo_concerns/_form_additional_information.html.erb +11 -0
- data/app/views/geo_concerns/_form_bounding_box.html.erb +9 -0
- data/app/views/geo_concerns/_form_descriptive_fields.html.erb +9 -0
- data/app/views/geo_concerns/_form_files_and_links.html.erb +0 -0
- data/app/views/geo_concerns/_form_populate_metadata.html.erb +8 -0
- data/app/views/geo_concerns/_form_required_information.html.erb +12 -0
- data/app/views/geo_concerns/_form_supplementary_fields.html.erb +15 -0
- data/app/views/geo_concerns/_related_external_metadata_files.html.erb +24 -0
- data/app/vocabs/geo_concerns/geo_terms.rb +12 -0
- data/bin/rails +12 -0
- data/config/routes.rb +6 -0
- data/geo_concerns.gemspec +36 -0
- data/lib/generators/geo_concerns/install_generator.rb +119 -0
- data/lib/generators/geo_concerns/templates/actors/curation_concerns/image_work_actor.rb +4 -0
- data/lib/generators/geo_concerns/templates/actors/curation_concerns/raster_work_actor.rb +4 -0
- data/lib/generators/geo_concerns/templates/actors/curation_concerns/vector_work_actor.rb +4 -0
- data/lib/generators/geo_concerns/templates/config/authorities/image_formats.yml +5 -0
- data/lib/generators/geo_concerns/templates/config/authorities/metadata_formats.yml +7 -0
- data/lib/generators/geo_concerns/templates/config/authorities/raster_formats.yml +9 -0
- data/lib/generators/geo_concerns/templates/config/authorities/vector_formats.yml +5 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/file_sets_controller.rb +6 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/image_works_controller.rb +5 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/raster_works_controller.rb +6 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/vector_works_controller.rb +6 -0
- data/lib/generators/geo_concerns/templates/geo_concerns.js +1 -0
- data/lib/generators/geo_concerns/templates/geo_concerns.scss +3 -0
- data/lib/generators/geo_concerns/templates/jobs/characterize_job.rb +12 -0
- data/lib/generators/geo_concerns/templates/models/file_set.rb +4 -0
- data/lib/generators/geo_concerns/templates/models/image_work.rb +6 -0
- data/lib/generators/geo_concerns/templates/models/raster_work.rb +7 -0
- data/lib/generators/geo_concerns/templates/models/vector_work.rb +7 -0
- data/lib/generators/geo_concerns/templates/presenters/file_set_presenter.rb +3 -0
- data/lib/generators/geo_concerns/templates/spec/actor_spec.rb.erb +9 -0
- data/lib/generators/geo_concerns/templates/spec/controller_spec.rb.erb +9 -0
- data/lib/generators/geo_concerns/templates/spec/model_spec.rb.erb +9 -0
- data/lib/geo_concerns.rb +6 -0
- data/lib/geo_concerns/engine.rb +4 -0
- data/lib/geo_concerns/version.rb +3 -0
- data/lib/tasks/geo_concerns_tasks.rake +4 -0
- data/solr/config/_rest_managed.json +3 -0
- data/solr/config/admin-extra.html +31 -0
- data/solr/config/elevate.xml +36 -0
- data/solr/config/mapping-ISOLatin1Accent.txt +246 -0
- data/solr/config/protwords.txt +21 -0
- data/solr/config/schema.xml +372 -0
- data/solr/config/scripts.conf +24 -0
- data/solr/config/solrconfig.xml +312 -0
- data/solr/config/spellings.txt +2 -0
- data/solr/config/stopwords.txt +58 -0
- data/solr/config/stopwords_en.txt +58 -0
- data/solr/config/synonyms.txt +31 -0
- data/solr/config/xslt/example.xsl +132 -0
- data/solr/config/xslt/example_atom.xsl +67 -0
- data/solr/config/xslt/example_rss.xsl +66 -0
- data/solr/config/xslt/luke.xsl +337 -0
- data/spec/actors/geo_concerns/file_actor_spec.rb +26 -0
- data/spec/controllers/image_works_controller_spec.rb +25 -0
- data/spec/controllers/raster_works_controller_spec.rb +50 -0
- data/spec/controllers/vector_works_controller_spec.rb +50 -0
- data/spec/factories/external_metadata_files.rb +20 -0
- data/spec/factories/image_files.rb +32 -0
- data/spec/factories/image_works.rb +68 -0
- data/spec/factories/raster_files.rb +35 -0
- data/spec/factories/raster_works.rb +86 -0
- data/spec/factories/users.rb +26 -0
- data/spec/factories/vector_files.rb +31 -0
- data/spec/factories/vector_works.rb +83 -0
- data/spec/features/create_raster_work_spec.rb +49 -0
- data/spec/forms/geo_concerns/basic_geo_metadata_form_spec.rb +27 -0
- data/spec/forms/geo_concerns/external_metadata_file_form_spec.rb +27 -0
- data/spec/forms/geo_concerns/georeferenced_form_spec.rb +29 -0
- data/spec/forms/geo_concerns/image_work_form_spec.rb +11 -0
- data/spec/forms/geo_concerns/raster_work_form_spec.rb +15 -0
- data/spec/forms/geo_concerns/vector_work_form_spec.rb +15 -0
- data/spec/helpers/bounding_box_helper_spec.rb +34 -0
- data/spec/models/concerns/basic_geo_metadata_spec.rb +21 -0
- data/spec/models/concerns/geo_concerns/file_set/derivatives_spec.rb +108 -0
- data/spec/models/concerns/geo_concerns/file_set/geo_file_format_behavior_spec.rb +56 -0
- data/spec/models/external_metadata_file_spec.rb +118 -0
- data/spec/models/file_set_spec.rb +9 -0
- data/spec/models/image_file_spec.rb +48 -0
- data/spec/models/image_work_spec.rb +71 -0
- data/spec/models/raster_file_spec.rb +48 -0
- data/spec/models/raster_work_spec.rb +122 -0
- data/spec/models/solr_document_spec.rb +35 -0
- data/spec/models/vector_file_spec.rb +48 -0
- data/spec/models/vector_work_spec.rb +113 -0
- data/spec/presenters/file_set_presenter_spec.rb +13 -0
- data/spec/presenters/geo_concerns_show_presenter_spec.rb +56 -0
- data/spec/presenters/image_work_show_presenter_spec.rb +52 -0
- data/spec/presenters/raster_work_show_presenter_spec.rb +52 -0
- data/spec/presenters/vector_work_show_presenter_spec.rb +41 -0
- data/spec/processors/geo_concerns/processors/base_geo_processor_spec.rb +109 -0
- data/spec/processors/geo_concerns/processors/raster/aig_spec.rb +28 -0
- data/spec/processors/geo_concerns/processors/raster/base_spec.rb +86 -0
- data/spec/processors/geo_concerns/processors/raster/dem_spec.rb +26 -0
- data/spec/processors/geo_concerns/processors/raster/processor_spec.rb +39 -0
- data/spec/processors/geo_concerns/processors/vector/base_spec.rb +67 -0
- data/spec/processors/geo_concerns/processors/vector/processor_spec.rb +28 -0
- data/spec/processors/geo_concerns/processors/vector/shapefile_spec.rb +17 -0
- data/spec/processors/geo_concerns/processors/zip_spec.rb +39 -0
- data/spec/renderers/coverage_renderer_spec.rb +21 -0
- data/spec/services/derivative_path_spec.rb +12 -0
- data/spec/services/raster_format_service_spec.rb +13 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/controllers/engine_helpers.rb +7 -0
- data/spec/support/database_cleaner.rb +18 -0
- data/spec/support/devise.rb +10 -0
- data/spec/support/devise_helpers.rb +6 -0
- data/spec/support/factory_girl.rb +3 -0
- data/spec/support/features.rb +14 -0
- data/spec/support/features/session_helpers.rb +40 -0
- data/spec/support/fixture_reader.rb +7 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +20 -0
- data/spec/values/coverage_spec.rb +40 -0
- data/tasks/ci.rake +49 -0
- metadata +527 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
.leaflet-control-geocoder {
|
|
2
|
+
background: white;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.leaflet-control-geocoder a, .leaflet-control-geocoder .leaflet-control-geocoder-icon {
|
|
6
|
+
border-bottom-left-radius: 4px;
|
|
7
|
+
border-bottom-right-radius: 4px;
|
|
8
|
+
border-bottom: none;
|
|
9
|
+
display: inline-block;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.leaflet-control-geocoder .leaflet-control-geocoder-alternatives a {
|
|
13
|
+
width: inherit;
|
|
14
|
+
height: inherit;
|
|
15
|
+
line-height: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.leaflet-control-geocoder a:hover, .leaflet-control-geocoder .leaflet-control-geocoder-icon:hover {
|
|
19
|
+
border-bottom: none;
|
|
20
|
+
display: inline-block;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.leaflet-control-geocoder-form {
|
|
24
|
+
display: none;
|
|
25
|
+
vertical-align: middle;
|
|
26
|
+
}
|
|
27
|
+
.leaflet-control-geocoder-expanded .leaflet-control-geocoder-form {
|
|
28
|
+
display: inline-block;
|
|
29
|
+
}
|
|
30
|
+
.leaflet-control-geocoder-form input {
|
|
31
|
+
font-size: 120%;
|
|
32
|
+
border: 0;
|
|
33
|
+
background-color: transparent;
|
|
34
|
+
width: 246px;
|
|
35
|
+
}
|
|
36
|
+
.leaflet-control-geocoder-icon {
|
|
37
|
+
background-image: url(images/geocoder.png);
|
|
38
|
+
background-repeat: no-repeat;
|
|
39
|
+
background-position: center;
|
|
40
|
+
}
|
|
41
|
+
.leaflet-control-geocoder-throbber .leaflet-control-geocoder-icon {
|
|
42
|
+
background-image: url(images/throbber.gif);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.leaflet-control-geocoder-form-no-error {
|
|
46
|
+
display: none;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.leaflet-control-geocoder-form input:focus {
|
|
50
|
+
outline: none;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.leaflet-control-geocoder-form button {
|
|
54
|
+
display: none;
|
|
55
|
+
}
|
|
56
|
+
.leaflet-control-geocoder-error {
|
|
57
|
+
margin-top: 8px;
|
|
58
|
+
margin-left: 8px;
|
|
59
|
+
display: block;
|
|
60
|
+
color: #444;
|
|
61
|
+
}
|
|
62
|
+
.leaflet-control-geocoder-alternatives {
|
|
63
|
+
display: block;
|
|
64
|
+
width: 272px;
|
|
65
|
+
list-style: none;
|
|
66
|
+
padding: 0;
|
|
67
|
+
margin: 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.leaflet-control-geocoder-alternatives-minimized {
|
|
71
|
+
display: none;
|
|
72
|
+
height: 0;
|
|
73
|
+
}
|
|
74
|
+
.leaflet-control-geocoder-alternatives li {
|
|
75
|
+
white-space: nowrap;
|
|
76
|
+
display: block;
|
|
77
|
+
overflow: hidden;
|
|
78
|
+
padding: 5px 8px;
|
|
79
|
+
text-overflow: ellipsis;
|
|
80
|
+
border-bottom: 1px solid #ccc;
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.leaflet-control-geocoder-alternatives li a, .leaflet-control-geocoder-alternatives li a:hover {
|
|
85
|
+
width: inherit;
|
|
86
|
+
height: inherit;
|
|
87
|
+
line-height: inherit;
|
|
88
|
+
background: inherit;
|
|
89
|
+
border-radius: inherit;
|
|
90
|
+
text-align: left;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.leaflet-control-geocoder-alternatives li:last-child {
|
|
94
|
+
border-bottom: none;
|
|
95
|
+
}
|
|
96
|
+
.leaflet-control-geocoder-alternatives li:hover, .leaflet-control-geocoder-selected {
|
|
97
|
+
background-color: #f5f5f5;
|
|
98
|
+
}
|
|
99
|
+
.leaflet-control-geocoder-address-detail {
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
.leaflet-control-geocoder-address-context {
|
|
103
|
+
color: #666;
|
|
104
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
|
3
|
+
* listed below.
|
|
4
|
+
*
|
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
|
7
|
+
*
|
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
|
11
|
+
* file per style scope.
|
|
12
|
+
*
|
|
13
|
+
*= require leaflet
|
|
14
|
+
*= require geo_concerns/leaflet-boundingbox
|
|
15
|
+
*= require geo_concerns/Control.Geocoder
|
|
16
|
+
*= require_tree .
|
|
17
|
+
*= require_self
|
|
18
|
+
*/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
div.leaflet-marker-icon.location-filter.resize-marker {
|
|
2
|
+
background: url( img/resize-handle.png ) no-repeat;
|
|
3
|
+
cursor: move;
|
|
4
|
+
}
|
|
5
|
+
div.leaflet-marker-icon.location-filter.move-marker {
|
|
6
|
+
background: url( img/move-handle.png ) no-repeat;
|
|
7
|
+
cursor: move;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
div.location-filter.button-container {
|
|
11
|
+
background-color: white;
|
|
12
|
+
}
|
|
13
|
+
.leaflet-container div.location-filter.button-container a {
|
|
14
|
+
color: #6B6B6B;
|
|
15
|
+
font-size: 15px;
|
|
16
|
+
width: 90px;
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
module FileSetsControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
included do
|
|
5
|
+
self.show_presenter = ::FileSetPresenter
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# inject mime_type into permitted params
|
|
9
|
+
def file_set_params
|
|
10
|
+
super.tap do |permitted_params|
|
|
11
|
+
permitted_params[:mime_type] = params[:file_set][:mime_type]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def actor
|
|
16
|
+
@actor ||= GeoConcerns::FileSetActor.new(@file_set, current_user)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
module RasterWorksControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
self.show_presenter = GeoConcerns::RasterWorkShowPresenter
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def create
|
|
10
|
+
super
|
|
11
|
+
|
|
12
|
+
return unless parent_id
|
|
13
|
+
parent = ActiveFedora::Base.find(parent_id, cast: true)
|
|
14
|
+
parent.ordered_members << curation_concern.reload
|
|
15
|
+
parent.save
|
|
16
|
+
curation_concern.update_index
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def form_class
|
|
20
|
+
GeoConcerns::RasterWorkForm
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
module VectorWorksControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
self.show_presenter = GeoConcerns::VectorWorkShowPresenter
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def create
|
|
10
|
+
super
|
|
11
|
+
|
|
12
|
+
return unless parent_id
|
|
13
|
+
parent = ActiveFedora::Base.find(parent_id, cast: true)
|
|
14
|
+
parent.ordered_members << curation_concern.reload
|
|
15
|
+
parent.save
|
|
16
|
+
curation_concern.update_index
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def form_class
|
|
20
|
+
GeoConcerns::VectorWorkForm
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Generated via
|
|
2
|
+
# `rails generate curation_concerns:work ImageWork`
|
|
3
|
+
module GeoConcerns
|
|
4
|
+
class ImageWorkForm < CurationConcerns::Forms::WorkForm
|
|
5
|
+
include ::GeoConcerns::BasicGeoMetadataForm
|
|
6
|
+
include ::GeoConcerns::ExternalMetadataFileForm
|
|
7
|
+
self.model_class = ::ImageWork
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module BoundingBoxHelper
|
|
2
|
+
##
|
|
3
|
+
# Builds HTML string for bounding box selector tool.
|
|
4
|
+
# Calls boundingBoxSelector javascript function and
|
|
5
|
+
# passes the id of the location input element that it binds to.
|
|
6
|
+
# @param [Symbol] name of property that holds bounding box string
|
|
7
|
+
# @return[String]
|
|
8
|
+
def bbox(property)
|
|
9
|
+
%(
|
|
10
|
+
<div id='bbox'></div>
|
|
11
|
+
<script>
|
|
12
|
+
boundingBoxSelector({inputId: #{bbox_input_id(property)}});
|
|
13
|
+
</script>
|
|
14
|
+
).html_safe
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Returns id of location input that is bound to bbox selector.
|
|
19
|
+
# @param [Symbol] name of property that holds bounding box string
|
|
20
|
+
# @return[String] id of location input element
|
|
21
|
+
def bbox_input_id(property)
|
|
22
|
+
"#{curation_concern.class.name.underscore}_#{property}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
# Attributes and methods for basic geospatial metadata used by Works
|
|
3
|
+
module BasicGeoMetadata
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
apply_schema ::GeoConcerns::BasicGeoMetadataRequired,
|
|
8
|
+
ActiveFedora::SchemaIndexingStrategy.new(
|
|
9
|
+
ActiveFedora::Indexers::GlobalIndexer.new(
|
|
10
|
+
[:stored_searchable, :facetable, :symbol]
|
|
11
|
+
)
|
|
12
|
+
)
|
|
13
|
+
apply_schema ::GeoConcerns::BasicGeoMetadataOptional,
|
|
14
|
+
ActiveFedora::SchemaIndexingStrategy.new(
|
|
15
|
+
ActiveFedora::Indexers::GlobalIndexer.new(
|
|
16
|
+
[:stored_searchable, :facetable, :symbol]
|
|
17
|
+
)
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
# Attributes and methods for vector metadata files
|
|
3
|
+
module ExternalMetadataFileBehavior
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
include ::GeoConcerns::Extractors::Iso19139Helper
|
|
6
|
+
include ::GeoConcerns::Extractors::FgdcHelper
|
|
7
|
+
include ::GeoConcerns::Extractors::ModsHelper
|
|
8
|
+
|
|
9
|
+
# Extracts properties from the constitutent external metadata file
|
|
10
|
+
# @example
|
|
11
|
+
# extract_iso19139_metadata
|
|
12
|
+
# extract_fgdc_metadata
|
|
13
|
+
# extract_mods_metadata
|
|
14
|
+
# @return [Hash]
|
|
15
|
+
def extract_metadata
|
|
16
|
+
raise ArgumentError, "MIME type unspecified or not configured" if schema.blank?
|
|
17
|
+
fn = "extract_#{schema.downcase}_metadata"
|
|
18
|
+
raise ArgumentError, "Unsupported metadata standard: #{schema}" unless respond_to?(fn.to_sym)
|
|
19
|
+
send(fn, metadata_xml)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Retrives data from PCDM::File
|
|
23
|
+
def metadata_xml
|
|
24
|
+
Nokogiri::XML(original_file.content)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def schema
|
|
28
|
+
(MetadataFormatService.label(mime_type) || '').parameterize('_')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
module GeoConcerns
|
|
2
|
+
module Extractors
|
|
3
|
+
class FgdcMetadataExtractor
|
|
4
|
+
attr_reader :doc
|
|
5
|
+
def initialize(doc)
|
|
6
|
+
@doc = doc
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def to_hash
|
|
10
|
+
metadata_required.merge(metadata_optional)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def metadata_required
|
|
14
|
+
{
|
|
15
|
+
coverage: coverage,
|
|
16
|
+
creator: creators,
|
|
17
|
+
description: [doc.at_xpath('//idinfo/descript/abstract').text],
|
|
18
|
+
title: [doc.at_xpath('//idinfo/citation/citeinfo/title').text]
|
|
19
|
+
}.compact
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def metadata_optional
|
|
23
|
+
{
|
|
24
|
+
issued: issued,
|
|
25
|
+
publisher: publishers,
|
|
26
|
+
spatial: placenames,
|
|
27
|
+
subject: keywords,
|
|
28
|
+
temporal: timeperiods
|
|
29
|
+
}.compact
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def coverage
|
|
33
|
+
doc.at_xpath('//idinfo/spdom/bounding').tap do |node|
|
|
34
|
+
return GeoConcerns::Coverage.new(
|
|
35
|
+
coverage_coordinate(node, 'north'),
|
|
36
|
+
coverage_coordinate(node, 'east'),
|
|
37
|
+
coverage_coordinate(node, 'south'),
|
|
38
|
+
coverage_coordinate(node, 'west')
|
|
39
|
+
).to_s
|
|
40
|
+
end
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def coverage_coordinate(node, direction)
|
|
45
|
+
node.at_xpath("#{direction}bc").text.to_f
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def issued
|
|
49
|
+
doc.at_xpath('//idinfo/citation/citeinfo/pubdate').tap do |node|
|
|
50
|
+
return node.text[0..3].to_i unless node.nil? # extract year only
|
|
51
|
+
end
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def timeperiods
|
|
56
|
+
::GeoConcerns::TimePeriod.new(
|
|
57
|
+
extract_multivalued('//idinfo/keywords/temporal/tempkey'), doc
|
|
58
|
+
).value
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def publishers
|
|
62
|
+
extract_multivalued('//idinfo/citation/citeinfo/pubinfo/publish')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def creators
|
|
66
|
+
extract_multivalued('//idinfo/citation/citeinfo/origin')
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def placenames
|
|
70
|
+
extract_multivalued('//idinfo/keywords/place/placekey')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def keywords
|
|
74
|
+
keywords = extract_multivalued('//idinfo/keywords/theme/themekey')
|
|
75
|
+
keywords.map! { |k| TOPIC_CATEGORIES[k.to_sym].present? ? TOPIC_CATEGORIES[k.to_sym] : k }
|
|
76
|
+
keywords.uniq!
|
|
77
|
+
keywords.present? ? keywords : nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# ISO 19115 Topic Category
|
|
81
|
+
TOPIC_CATEGORIES = {
|
|
82
|
+
farming: 'Farming',
|
|
83
|
+
biota: 'Biology and Ecology',
|
|
84
|
+
climatologyMeteorologyAtmosphere: 'Climatology, Meteorology and Atmosphere',
|
|
85
|
+
boundaries: 'Boundaries',
|
|
86
|
+
elevation: 'Elevation',
|
|
87
|
+
environment: 'Environment',
|
|
88
|
+
geoscientificinformation: 'Geoscientific Information',
|
|
89
|
+
health: 'Health',
|
|
90
|
+
imageryBaseMapsEarthCover: 'Imagery and Base Maps',
|
|
91
|
+
intelligenceMilitary: 'Military',
|
|
92
|
+
inlandWaters: 'Inland Waters',
|
|
93
|
+
location: 'Location',
|
|
94
|
+
oceans: 'Oceans',
|
|
95
|
+
planningCadastre: 'Planning and Cadastral',
|
|
96
|
+
structure: 'Structures',
|
|
97
|
+
transportation: 'Transportation',
|
|
98
|
+
utilitiesCommunication: 'Utilities and Communication',
|
|
99
|
+
society: 'Society'
|
|
100
|
+
}.freeze
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
def extract_multivalued(xpath)
|
|
105
|
+
values = []
|
|
106
|
+
doc.xpath(xpath).each do |node|
|
|
107
|
+
values << node.text.strip
|
|
108
|
+
end
|
|
109
|
+
values.uniq!
|
|
110
|
+
values.present? ? values : nil
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|