geo_works 0.1.0
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/.codeclimate.yml +34 -0
- data/.csslintrc +2 -0
- data/.engine_cart.yml +1 -0
- data/.eslintignore +1 -0
- data/.eslintrc +8 -0
- data/.fcrepo_wrapper +3 -0
- data/.gitignore +14 -0
- data/.rubocop.yml +105 -0
- data/.solr_wrapper +7 -0
- data/.travis.yml +33 -0
- data/CONTRIBUTING.md +159 -0
- data/Gemfile +48 -0
- data/LICENSE +202 -0
- data/README.md +143 -0
- data/Rakefile +25 -0
- data/app/assets/images/geo_works/.keep +0 -0
- data/app/assets/images/geo_works/images/geocoder.png +0 -0
- data/app/assets/images/geo_works/images/move-handle.png +0 -0
- data/app/assets/images/geo_works/images/resize-handle.png +0 -0
- data/app/assets/images/geo_works/images/throbber.gif +0 -0
- data/app/assets/javascripts/geo_works/Control.Geocoder.js +1056 -0
- data/app/assets/javascripts/geo_works/application.js +4 -0
- data/app/assets/javascripts/geo_works/bounding_box_selector.js +107 -0
- data/app/assets/javascripts/geo_works/es6-modules.js +7 -0
- data/app/assets/javascripts/geo_works/geo_works_boot.es6 +8 -0
- data/app/assets/javascripts/geo_works/leaflet-boundingbox.js +467 -0
- data/app/assets/javascripts/geo_works/relationships.js +3 -0
- data/app/assets/javascripts/geo_works/relationships/child_works.es6 +20 -0
- data/app/assets/javascripts/geo_works/relationships/parent_works.es6 +20 -0
- data/app/assets/javascripts/geo_works/relationships/related_works.es6 +187 -0
- data/app/assets/stylesheets/geo_works/Control.Geocoder.scss +104 -0
- data/app/assets/stylesheets/geo_works/application.css +18 -0
- data/app/assets/stylesheets/geo_works/bounding_box.scss +15 -0
- data/app/assets/stylesheets/geo_works/leaflet-boundingbox.scss +17 -0
- data/app/assets/stylesheets/geo_works/related_works.scss +29 -0
- data/app/assets/stylesheets/geo_works/thumbnails.scss +13 -0
- data/app/controllers/concerns/geo_works/events_behavior.rb +29 -0
- data/app/controllers/concerns/geo_works/file_sets_controller_behavior.rb +31 -0
- data/app/controllers/concerns/geo_works/geoblacklight_controller_behavior.rb +29 -0
- data/app/controllers/concerns/geo_works/image_works_controller_behavior.rb +9 -0
- data/app/controllers/concerns/geo_works/raster_works_controller_behavior.rb +9 -0
- data/app/controllers/concerns/geo_works/vector_works_controller_behavior.rb +9 -0
- data/app/forms/geo_works/basic_geo_metadata_form.rb +9 -0
- data/app/forms/geo_works/external_metadata_file_form.rb +8 -0
- data/app/forms/geo_works/georeferenced_form.rb +9 -0
- data/app/forms/hyrax/image_work_form.rb +7 -0
- data/app/forms/hyrax/raster_work_form.rb +8 -0
- data/app/forms/hyrax/vector_work_form.rb +8 -0
- data/app/helpers/geo_works/application_helper.rb +4 -0
- data/app/helpers/geo_works/bounding_box_helper.rb +73 -0
- data/app/helpers/geo_works/file_set_actions_helper.rb +31 -0
- data/app/helpers/geo_works/geo_works_helper.rb +22 -0
- data/app/helpers/geo_works/populate_metadata_helper.rb +7 -0
- data/app/jobs/geoblacklight_job.rb +10 -0
- data/app/jobs/geoserver_delivery_job.rb +36 -0
- data/app/models/concerns/geo_works/ability.rb +12 -0
- data/app/models/concerns/geo_works/basic_geo_metadata.rb +21 -0
- data/app/models/concerns/geo_works/external_metadata_file_behavior.rb +31 -0
- data/app/models/concerns/geo_works/extractors/fgdc_helper.rb +9 -0
- data/app/models/concerns/geo_works/extractors/fgdc_metadata_extractor.rb +114 -0
- data/app/models/concerns/geo_works/extractors/iso19139_helper.rb +50 -0
- data/app/models/concerns/geo_works/extractors/mods_helper.rb +15 -0
- data/app/models/concerns/geo_works/file_set_metadata.rb +15 -0
- data/app/models/concerns/geo_works/file_set_presenter_behavior.rb +7 -0
- data/app/models/concerns/geo_works/geo_file_format_behavior.rb +37 -0
- data/app/models/concerns/geo_works/geo_file_set_behavior.rb +11 -0
- data/app/models/concerns/geo_works/georeferenced_behavior.rb +18 -0
- data/app/models/concerns/geo_works/image_file_behavior.rb +14 -0
- data/app/models/concerns/geo_works/image_work_behavior.rb +69 -0
- data/app/models/concerns/geo_works/metadata_extraction_helper.rb +27 -0
- data/app/models/concerns/geo_works/raster_file_behavior.rb +14 -0
- data/app/models/concerns/geo_works/raster_work_behavior.rb +82 -0
- data/app/models/concerns/geo_works/solr_document_behavior.rb +46 -0
- data/app/models/concerns/geo_works/vector_file_behavior.rb +14 -0
- data/app/models/concerns/geo_works/vector_work_behavior.rb +78 -0
- data/app/presenters/geo_works/geo_works_show_presenter.rb +48 -0
- data/app/presenters/geo_works/image_work_show_presenter.rb +5 -0
- data/app/presenters/geo_works/raster_work_show_presenter.rb +5 -0
- data/app/presenters/geo_works/vector_work_show_presenter.rb +5 -0
- data/app/processors/geo_works/geoblacklight_event_processor.rb +29 -0
- data/app/processors/geo_works/geoblacklight_event_processor/delete_processor.rb +13 -0
- data/app/processors/geo_works/geoblacklight_event_processor/processor.rb +28 -0
- data/app/processors/geo_works/geoblacklight_event_processor/unknown_event.rb +15 -0
- data/app/processors/geo_works/geoblacklight_event_processor/update_processor.rb +15 -0
- data/app/processors/geo_works/processors/base_geo_processor.rb +81 -0
- data/app/processors/geo_works/processors/gdal.rb +49 -0
- data/app/processors/geo_works/processors/image.rb +66 -0
- data/app/processors/geo_works/processors/ogr.rb +19 -0
- data/app/processors/geo_works/processors/raster.rb +26 -0
- data/app/processors/geo_works/processors/raster/aig.rb +40 -0
- data/app/processors/geo_works/processors/raster/base.rb +41 -0
- data/app/processors/geo_works/processors/raster/dem.rb +29 -0
- data/app/processors/geo_works/processors/raster/info.rb +52 -0
- data/app/processors/geo_works/processors/rendering.rb +79 -0
- data/app/processors/geo_works/processors/vector.rb +24 -0
- data/app/processors/geo_works/processors/vector/base.rb +44 -0
- data/app/processors/geo_works/processors/vector/info.rb +84 -0
- data/app/processors/geo_works/processors/vector/shapefile.rb +20 -0
- data/app/processors/geo_works/processors/zip.rb +29 -0
- data/app/renderers/geo_works/coverage_renderer.rb +39 -0
- data/app/runners/geo_works/runners/raster_derivatives.rb +9 -0
- data/app/runners/geo_works/runners/vector_derivatives.rb +9 -0
- data/app/schemas/geo_works/basic_geo_metadata_optional.rb +40 -0
- data/app/schemas/geo_works/basic_geo_metadata_required.rb +25 -0
- data/app/schemas/geo_works/file_set_metadata_required.rb +5 -0
- data/app/services/geo_works/authority_service.rb +29 -0
- data/app/services/geo_works/delivery/geoserver.rb +118 -0
- data/app/services/geo_works/delivery_service.rb +11 -0
- data/app/services/geo_works/discovery.rb +4 -0
- data/app/services/geo_works/discovery/abstract_document.rb +37 -0
- data/app/services/geo_works/discovery/document_builder.rb +46 -0
- data/app/services/geo_works/discovery/document_builder/basic_metadata_builder.rb +71 -0
- data/app/services/geo_works/discovery/document_builder/composite_builder.rb +21 -0
- data/app/services/geo_works/discovery/document_builder/date_builder.rb +53 -0
- data/app/services/geo_works/discovery/document_builder/document_helper.rb +10 -0
- data/app/services/geo_works/discovery/document_builder/document_path.rb +91 -0
- data/app/services/geo_works/discovery/document_builder/layer_info_builder.rb +65 -0
- data/app/services/geo_works/discovery/document_builder/references_builder.rb +101 -0
- data/app/services/geo_works/discovery/document_builder/slug_builder.rb +24 -0
- data/app/services/geo_works/discovery/document_builder/spatial_builder.rb +37 -0
- data/app/services/geo_works/discovery/document_builder/wxs.rb +76 -0
- data/app/services/geo_works/discovery/geoblacklight_document.rb +152 -0
- data/app/services/geo_works/events_generator.rb +24 -0
- data/app/services/geo_works/events_generator/composite_generator.rb +18 -0
- data/app/services/geo_works/events_generator/geoblacklight_event_generator.rb +53 -0
- data/app/services/geo_works/events_generator/geoserver_event_generator.rb +33 -0
- data/app/services/geo_works/file_set_derivatives_service.rb +67 -0
- data/app/services/geo_works/image_format_service.rb +6 -0
- data/app/services/geo_works/metadata_format_service.rb +6 -0
- data/app/services/geo_works/raster_format_service.rb +6 -0
- data/app/services/geo_works/vector_format_service.rb +6 -0
- data/app/services/hyrax/curation_concern.rb +18 -0
- data/app/values/geo_works/coverage.rb +36 -0
- data/app/values/geo_works/time_period.rb +30 -0
- data/app/views/geo_works/_attribute_rows.html.erb +4 -0
- data/app/views/geo_works/_form_progress.html.erb +50 -0
- data/app/views/geo_works/_guts4form.html.erb +47 -0
- data/app/views/geo_works/_member.html.erb +11 -0
- data/app/views/geo_works/_metadata.html.erb +13 -0
- data/app/views/geo_works/_relationships.html.erb +12 -0
- data/app/views/geo_works/_representative_media.html.erb +5 -0
- data/app/views/geo_works/file_sets/_form.html.erb +48 -0
- data/app/views/geo_works/file_sets/actions/_default_actions.html.erb +16 -0
- data/app/views/geo_works/file_sets/actions/_image_actions.html.erb +22 -0
- data/app/views/geo_works/file_sets/actions/_metadata_actions.html.erb +16 -0
- data/app/views/geo_works/file_sets/actions/_raster_actions.html.erb +25 -0
- data/app/views/geo_works/file_sets/actions/_vector_actions.html.erb +25 -0
- data/app/views/geo_works/file_sets/media_display/_geo.html.erb +16 -0
- data/app/views/geo_works/file_sets/new.html.erb +12 -0
- data/app/views/geo_works/related/_child_member.html.erb +13 -0
- data/app/views/geo_works/related/_child_works.html.erb +24 -0
- data/app/views/geo_works/related/_external_metadata_file_member.html.erb +11 -0
- data/app/views/geo_works/related/_external_metadata_files.html.erb +24 -0
- data/app/views/geo_works/related/_geo_files.html.erb +24 -0
- data/app/views/geo_works/related/_new_child_member.html.erb +22 -0
- data/app/views/geo_works/related/_new_parent_member.html.erb +13 -0
- data/app/views/geo_works/related/_parent_member.html.erb +13 -0
- data/app/views/geo_works/related/_parent_works.html.erb +22 -0
- data/app/views/hyrax/image_works/_file_actions.html.erb +8 -0
- data/app/views/hyrax/image_works/_form.html.erb +16 -0
- data/app/views/hyrax/image_works/_image_actions.html.erb +11 -0
- data/app/views/hyrax/image_works/_image_work.html.erb +2 -0
- data/app/views/hyrax/image_works/_show_actions.html.erb +22 -0
- data/app/views/hyrax/image_works/show.html.erb +31 -0
- data/app/views/hyrax/raster_works/_file_actions.html.erb +8 -0
- data/app/views/hyrax/raster_works/_form.html.erb +16 -0
- data/app/views/hyrax/raster_works/_raster_actions.html.erb +11 -0
- data/app/views/hyrax/raster_works/_raster_work.html.erb +2 -0
- data/app/views/hyrax/raster_works/_show_actions.html.erb +22 -0
- data/app/views/hyrax/raster_works/show.html.erb +31 -0
- data/app/views/hyrax/vector_works/_file_actions.html.erb +8 -0
- data/app/views/hyrax/vector_works/_form.html.erb +16 -0
- data/app/views/hyrax/vector_works/_show_actions.html.erb +22 -0
- data/app/views/hyrax/vector_works/_vector_actions.html.erb +11 -0
- data/app/views/hyrax/vector_works/_vector_work.html.erb +2 -0
- data/app/views/hyrax/vector_works/show.html.erb +31 -0
- data/app/views/records/edit_fields/_coverage.html.erb +3 -0
- data/app/views/records/edit_fields/_should_populate_metadata.html.erb +10 -0
- data/app/vocabs/geo_works/geo_terms.rb +12 -0
- data/config/discovery/geoblacklight-schema.json +214 -0
- data/config/fcrepo_wrapper_test.yml +3 -0
- data/config/geoblacklight.yml +12 -0
- data/config/geoserver.yml +27 -0
- data/config/initializers/geo_server.rb +17 -0
- data/config/initializers/geoblacklight_config.rb +18 -0
- data/config/initializers/simpler_tiles.rb +65 -0
- data/config/locales/image_work.en.yml +8 -0
- data/config/locales/raster_work.en.yml +8 -0
- data/config/locales/vector_work.en.yml +8 -0
- data/config/routes.rb +24 -0
- data/config/simpler_tiles.yml +24 -0
- data/config/solr_wrapper_test.yml +7 -0
- data/docker-compose-full.yml +30 -0
- data/docker-compose.yml +9 -0
- data/geo_works.gemspec +44 -0
- data/lib/generators/geo_works/install_generator.rb +152 -0
- data/lib/generators/geo_works/templates/actors/hyrax/actors/image_work_actor.rb +6 -0
- data/lib/generators/geo_works/templates/actors/hyrax/actors/raster_work_actor.rb +6 -0
- data/lib/generators/geo_works/templates/actors/hyrax/actors/vector_work_actor.rb +6 -0
- data/lib/generators/geo_works/templates/config/authorities/image_formats.yml +7 -0
- data/lib/generators/geo_works/templates/config/authorities/metadata_formats.yml +7 -0
- data/lib/generators/geo_works/templates/config/authorities/raster_formats.yml +13 -0
- data/lib/generators/geo_works/templates/config/authorities/vector_formats.yml +7 -0
- data/lib/generators/geo_works/templates/config/initializers/hyrax_derivative_path_monkey_patch.rb +18 -0
- data/lib/generators/geo_works/templates/controllers/hyrax/file_sets_controller.rb +7 -0
- data/lib/generators/geo_works/templates/controllers/hyrax/image_works_controller.rb +7 -0
- data/lib/generators/geo_works/templates/controllers/hyrax/raster_works_controller.rb +8 -0
- data/lib/generators/geo_works/templates/controllers/hyrax/vector_works_controller.rb +8 -0
- data/lib/generators/geo_works/templates/geo_works.js +1 -0
- data/lib/generators/geo_works/templates/geo_works.scss +3 -0
- data/lib/generators/geo_works/templates/models/file_set.rb +4 -0
- data/lib/generators/geo_works/templates/models/image_work.rb +7 -0
- data/lib/generators/geo_works/templates/models/raster_work.rb +8 -0
- data/lib/generators/geo_works/templates/models/vector_work.rb +8 -0
- data/lib/generators/geo_works/templates/presenters/file_set_presenter.rb +3 -0
- data/lib/generators/geo_works/templates/spec/actor_spec.rb.erb +9 -0
- data/lib/generators/geo_works/templates/spec/controller_spec.rb.erb +9 -0
- data/lib/generators/geo_works/templates/spec/model_spec.rb.erb +9 -0
- data/lib/geo_works.rb +9 -0
- data/lib/geo_works/engine.rb +4 -0
- data/lib/geo_works/version.rb +3 -0
- data/lib/tasks/geo_works_tasks.rake +4 -0
- data/run-docker.sh +16 -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 +321 -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/controllers/file_sets_controller_spec.rb +70 -0
- data/spec/controllers/image_works_controller_spec.rb +40 -0
- data/spec/controllers/raster_works_controller_spec.rb +36 -0
- data/spec/controllers/vector_works_controller_spec.rb +69 -0
- data/spec/factories/collections.rb +17 -0
- data/spec/factories/external_metadata_files.rb +20 -0
- data/spec/factories/image_files.rb +32 -0
- data/spec/factories/image_works.rb +69 -0
- data/spec/factories/permission_templates.rb +41 -0
- data/spec/factories/raster_files.rb +35 -0
- data/spec/factories/raster_works.rb +88 -0
- data/spec/factories/sipity_entities.rb +7 -0
- data/spec/factories/users.rb +26 -0
- data/spec/factories/vector_files.rb +31 -0
- data/spec/factories/vector_works.rb +84 -0
- data/spec/factories/workflow_states.rb +6 -0
- data/spec/factories/workflows.rb +6 -0
- data/spec/features/create_image_work_spec.rb +34 -0
- data/spec/features/create_raster_work_spec.rb +35 -0
- data/spec/features/create_vector_work_spec.rb +34 -0
- data/spec/features/image_work_show_spec.rb +62 -0
- data/spec/features/raster_work_show_spec.rb +62 -0
- data/spec/features/vector_work_show_spec.rb +61 -0
- data/spec/forms/geo_works/basic_geo_metadata_form_spec.rb +31 -0
- data/spec/forms/geo_works/external_metadata_file_form_spec.rb +30 -0
- data/spec/forms/geo_works/georeferenced_form_spec.rb +33 -0
- data/spec/forms/hyrax/image_work_form_spec.rb +11 -0
- data/spec/forms/hyrax/raster_work_form_spec.rb +17 -0
- data/spec/forms/hyrax/vector_work_form_spec.rb +17 -0
- data/spec/helpers/bounding_box_helper_spec.rb +39 -0
- data/spec/helpers/geo_works/file_set_actions_helper_spec.rb +70 -0
- data/spec/helpers/geo_works/populate_metadata_helper_spec.rb +31 -0
- data/spec/helpers/geo_works_helper_spec.rb +30 -0
- data/spec/jobs/geoblacklight_job_spec.rb +18 -0
- data/spec/jobs/geoserver_delivery_job_spec.rb +45 -0
- data/spec/models/concerns/basic_geo_metadata_spec.rb +21 -0
- data/spec/models/concerns/geo_works/file_set/derivatives_spec.rb +102 -0
- data/spec/models/concerns/geo_works/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 +41 -0
- data/spec/models/vector_file_spec.rb +48 -0
- data/spec/models/vector_work_spec.rb +109 -0
- data/spec/presenters/file_set_presenter_spec.rb +13 -0
- data/spec/presenters/geo_works_show_presenter_spec.rb +46 -0
- data/spec/presenters/image_work_show_presenter_spec.rb +51 -0
- data/spec/presenters/raster_work_show_presenter_spec.rb +74 -0
- data/spec/presenters/vector_work_show_presenter_spec.rb +41 -0
- data/spec/processors/geo_works/geoblacklight_event_processor_spec.rb +80 -0
- data/spec/processors/geo_works/processors/base_geo_processor_spec.rb +115 -0
- data/spec/processors/geo_works/processors/gdal_spec.rb +59 -0
- data/spec/processors/geo_works/processors/image_spec.rb +64 -0
- data/spec/processors/geo_works/processors/ogr_spec.rb +36 -0
- data/spec/processors/geo_works/processors/raster/aig_spec.rb +35 -0
- data/spec/processors/geo_works/processors/raster/base_spec.rb +54 -0
- data/spec/processors/geo_works/processors/raster/dem_spec.rb +30 -0
- data/spec/processors/geo_works/processors/raster/info_spec.rb +35 -0
- data/spec/processors/geo_works/processors/raster/processor_spec.rb +39 -0
- data/spec/processors/geo_works/processors/rendering_spec.rb +64 -0
- data/spec/processors/geo_works/processors/vector/base_spec.rb +54 -0
- data/spec/processors/geo_works/processors/vector/info_spec.rb +50 -0
- data/spec/processors/geo_works/processors/vector/processor_spec.rb +28 -0
- data/spec/processors/geo_works/processors/vector/shapefile_spec.rb +17 -0
- data/spec/processors/geo_works/processors/zip_spec.rb +39 -0
- data/spec/renderers/geo_works/coverage_renderer_spec.rb +21 -0
- data/spec/services/geo_works/delivery/geoserver_spec.rb +117 -0
- data/spec/services/geo_works/delivery_service_spec.rb +24 -0
- data/spec/services/geo_works/discovery/abstract_document_spec.rb +23 -0
- data/spec/services/geo_works/discovery/document_builder/basic_metadata_builder_spec.rb +35 -0
- data/spec/services/geo_works/discovery/document_builder/wxs_spec.rb +71 -0
- data/spec/services/geo_works/discovery/document_builder_spec.rb +220 -0
- data/spec/services/geo_works/discovery/geoblacklight_document_spec.rb +20 -0
- data/spec/services/geo_works/event_generator_spec.rb +18 -0
- data/spec/services/geo_works/events_generator/geoblacklight_event_generator_spec.rb +84 -0
- data/spec/services/geo_works/events_generator/geoserver_event_generator_spec.rb +22 -0
- data/spec/services/geo_works/raster_format_service_spec.rb +13 -0
- data/spec/services/hyrax/derivative_path_spec.rb +26 -0
- data/spec/spec_helper.rb +77 -0
- data/spec/support/backport_test.rb +14 -0
- data/spec/support/controllers/engine_helpers.rb +7 -0
- data/spec/support/database_cleaner.rb +18 -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/support/helpers/controller_level_helpers.rb +27 -0
- data/spec/support/views/test_view_helpers.rb +10 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +24 -0
- data/spec/values/coverage_spec.rb +40 -0
- data/tasks/geo_works.rake +39 -0
- data/template.rb +10 -0
- metadata +789 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
require 'json-schema'
|
|
2
|
+
require 'open-uri'
|
|
3
|
+
|
|
4
|
+
module GeoWorks
|
|
5
|
+
module Discovery
|
|
6
|
+
# For details on the schema,
|
|
7
|
+
# @see 'https://github.com/geoblacklight/geoblacklight/wiki/Schema'
|
|
8
|
+
class GeoblacklightDocument < AbstractDocument
|
|
9
|
+
# Implements the to_hash method on the abstract document.
|
|
10
|
+
# @param _args [Array<Object>] arguments needed for the renderer, unused here
|
|
11
|
+
# @return [Hash] geoblacklight document as a hash
|
|
12
|
+
def to_hash(_args = nil)
|
|
13
|
+
return {} unless rights
|
|
14
|
+
document
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Implements the to_json method on the abstract document.
|
|
18
|
+
# @param _args [Array<Object>] arguments needed for the json renderer, unused here
|
|
19
|
+
# @return [String] geoblacklight document as a json string
|
|
20
|
+
def to_json(_args = nil)
|
|
21
|
+
return '{}' unless rights
|
|
22
|
+
document.to_json
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
# Builds the geoblacklight document hash.
|
|
28
|
+
# @return [Hash] geoblacklight document as a hash
|
|
29
|
+
def document_hash
|
|
30
|
+
document_hash_required.merge(document_hash_optional)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def document_hash_required
|
|
34
|
+
{
|
|
35
|
+
geoblacklight_version: '1.0',
|
|
36
|
+
dc_identifier_s: identifier,
|
|
37
|
+
layer_slug_s: slug,
|
|
38
|
+
uuid: slug,
|
|
39
|
+
dc_title_s: title.first,
|
|
40
|
+
solr_geom: solr_coverage,
|
|
41
|
+
dct_provenance_s: provenance,
|
|
42
|
+
dc_rights_s: rights
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
47
|
+
def document_hash_optional
|
|
48
|
+
{
|
|
49
|
+
dc_description_s: description,
|
|
50
|
+
dc_creator_sm: creator,
|
|
51
|
+
dc_language_s: language.try(:first),
|
|
52
|
+
dc_publisher_s: publisher.try(:first),
|
|
53
|
+
dc_subject_sm: subject,
|
|
54
|
+
dct_spatial_sm: spatial,
|
|
55
|
+
dct_temporal_sm: temporal,
|
|
56
|
+
solr_year_i: layer_year,
|
|
57
|
+
layer_modified_dt: layer_modified,
|
|
58
|
+
layer_id_s: layer_id,
|
|
59
|
+
dct_references_s: clean_document(references).to_json.to_s,
|
|
60
|
+
layer_geom_type_s: geom_type,
|
|
61
|
+
dc_format_s: process_format_codes(format),
|
|
62
|
+
dct_issued_dt: issued
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
# rubocop:enable Metrics/LineLength, Metrics/AbcSize
|
|
66
|
+
|
|
67
|
+
# Builds the dct_references hash.
|
|
68
|
+
# @return [Hash] geoblacklight references as a hash
|
|
69
|
+
def references
|
|
70
|
+
{
|
|
71
|
+
'http://schema.org/url' => url,
|
|
72
|
+
'http://www.opengis.net/cat/csw/csdgm' => fgdc,
|
|
73
|
+
'http://www.isotc211.org/schemas/2005/gmd/' => iso19139,
|
|
74
|
+
'http://www.loc.gov/mods/v3' => mods,
|
|
75
|
+
'http://schema.org/downloadUrl' => download,
|
|
76
|
+
'http://schema.org/thumbnailUrl' => thumbnail,
|
|
77
|
+
'http://www.opengis.net/def/serviceType/ogc/wms' => wms_path,
|
|
78
|
+
'http://www.opengis.net/def/serviceType/ogc/wfs' => wfs_path
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Returns the geoblacklight rights field based on work visibility.
|
|
83
|
+
# @return [String] geoblacklight access rights
|
|
84
|
+
def rights
|
|
85
|
+
case access_rights
|
|
86
|
+
when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
|
|
87
|
+
'Public'
|
|
88
|
+
when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
|
|
89
|
+
'Restricted'
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Transforms shapfile, tiff, and arc grid format codes into geoblacklight format codes.
|
|
94
|
+
# @return [String] geoblacklight format codes
|
|
95
|
+
def process_format_codes(format)
|
|
96
|
+
case format
|
|
97
|
+
when 'ESRI Shapefile'
|
|
98
|
+
'Shapefile'
|
|
99
|
+
when 'GTiff'
|
|
100
|
+
'GeoTIFF'
|
|
101
|
+
when 'AIG'
|
|
102
|
+
'ArcGRID'
|
|
103
|
+
else
|
|
104
|
+
format
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Returns the content of geoblacklight JSON-Schema document.
|
|
109
|
+
# @return [Hash] geoblacklight json schema
|
|
110
|
+
def schema
|
|
111
|
+
JSON.parse(File.read(schema_path))
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Returns a path to the geoblackligh schema document
|
|
115
|
+
# @return [String]
|
|
116
|
+
def schema_path
|
|
117
|
+
File.join(GeoWorks.root, 'config', 'discovery', 'geoblacklight-schema.json')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Validates the geoblacklight document against the json schema.
|
|
121
|
+
# @return [Boolean] is the document valid?
|
|
122
|
+
def valid?(doc)
|
|
123
|
+
JSON::Validator.validate(schema, doc, fragment: '#/definitions/layer')
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Returns a hash of errors from json schema validation.
|
|
127
|
+
# @return [Hash] json schema validation errors
|
|
128
|
+
def schema_errors(doc)
|
|
129
|
+
{ error: JSON::Validator.fully_validate(schema, doc, fragment: '#/definitions/layer') }
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Cleans the geoblacklight document hash by removing unused fields,
|
|
133
|
+
# then validates it again a json schema. If there are errors, an
|
|
134
|
+
# error hash is returned, otherwise, the cleaned doc is returned.
|
|
135
|
+
# @return [Hash] geoblacklight document hash or error hash
|
|
136
|
+
def document
|
|
137
|
+
clean = clean_document(document_hash)
|
|
138
|
+
if valid?(clean)
|
|
139
|
+
clean
|
|
140
|
+
else
|
|
141
|
+
schema_errors(clean)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Use identifier as layer_id id when there is no wxs_identifier.
|
|
146
|
+
# Causes errors in Geoblacklight views.
|
|
147
|
+
def layer_id
|
|
148
|
+
wxs_identifier || identifier
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class EventsGenerator
|
|
3
|
+
class_attribute :services
|
|
4
|
+
|
|
5
|
+
# Array of event generator services.
|
|
6
|
+
# - GeoblacklightEventGenerator: synchronizes with geoblacklight instance.
|
|
7
|
+
# - GeoserverEventGenerator: synchronizes with geoserver instance.
|
|
8
|
+
self.services = [
|
|
9
|
+
GeoblacklightEventGenerator,
|
|
10
|
+
GeoserverEventGenerator
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
delegate :record_created, to: :generators
|
|
14
|
+
delegate :record_deleted, to: :generators
|
|
15
|
+
delegate :record_updated, to: :generators
|
|
16
|
+
delegate :derivatives_created, to: :generators
|
|
17
|
+
|
|
18
|
+
def generators
|
|
19
|
+
@generators ||= CompositeGenerator.new(
|
|
20
|
+
services.map(&:new)
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class EventsGenerator
|
|
3
|
+
class CompositeGenerator
|
|
4
|
+
attr_reader :generators
|
|
5
|
+
|
|
6
|
+
def initialize(generators)
|
|
7
|
+
@generators = generators
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def method_missing(m, *args)
|
|
11
|
+
generators.each do |generator|
|
|
12
|
+
next unless generator.respond_to? m
|
|
13
|
+
generator.send(m, args.first)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class EventsGenerator
|
|
3
|
+
class GeoblacklightEventGenerator
|
|
4
|
+
def record_created(record)
|
|
5
|
+
publish_message(
|
|
6
|
+
message("CREATED", record)
|
|
7
|
+
)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def record_deleted(record)
|
|
11
|
+
publish_message(
|
|
12
|
+
delete_message("DELETED", record)
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def record_updated(record)
|
|
17
|
+
publish_message(
|
|
18
|
+
message("UPDATED", record)
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def publish_message(message)
|
|
25
|
+
GeoblacklightJob.perform_later(message)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def message(type, record)
|
|
29
|
+
base_message(type, record).merge("doc" => generate_document(record).to_hash)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def delete_message(type, record)
|
|
33
|
+
base_message(type, record).merge("id" => slug(record))
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def base_message(type, record)
|
|
37
|
+
{
|
|
38
|
+
"id" => record.id,
|
|
39
|
+
"event" => type
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def generate_document(record)
|
|
44
|
+
Discovery::DocumentBuilder.new(record, Discovery::GeoblacklightDocument.new)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def slug(record)
|
|
48
|
+
return record.id unless record.respond_to?(:provenance)
|
|
49
|
+
"#{record.provenance.parameterize}-#{record.id}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class EventsGenerator
|
|
3
|
+
class GeoserverEventGenerator
|
|
4
|
+
def derivatives_created(record)
|
|
5
|
+
return unless geo_file_set?(record)
|
|
6
|
+
publish_message(
|
|
7
|
+
message("CREATED", record)
|
|
8
|
+
)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def publish_message(message)
|
|
14
|
+
GeoserverDeliveryJob.perform_later(message)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def message(type, record)
|
|
18
|
+
base_message(type, record)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def base_message(type, record)
|
|
22
|
+
{
|
|
23
|
+
"id" => record.id,
|
|
24
|
+
"event" => type
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def geo_file_set?(record)
|
|
29
|
+
record.respond_to?(:geo_file_format?) && record.geo_file_format?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class FileSetDerivativesService < Hyrax::FileSetDerivativesService
|
|
3
|
+
attr_reader :file_set
|
|
4
|
+
delegate :id, :geo_mime_type, to: :file_set
|
|
5
|
+
|
|
6
|
+
def initialize(file_set)
|
|
7
|
+
@file_set = file_set
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def valid?
|
|
11
|
+
supported_geo_mime_types.include?(geo_mime_type)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create_derivatives(filename)
|
|
15
|
+
case geo_mime_type
|
|
16
|
+
when *GeoWorks::RasterFormatService.select_options.map(&:last)
|
|
17
|
+
create_raster_derivatives(filename)
|
|
18
|
+
when *GeoWorks::VectorFormatService.select_options.map(&:last)
|
|
19
|
+
create_vector_derivatives(filename)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Once all the derivatives are created, send a created message
|
|
23
|
+
geo_works_events_generator.derivatives_created(file_set)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def create_raster_derivatives(filename)
|
|
29
|
+
GeoWorks::Runners::RasterDerivatives
|
|
30
|
+
.create(filename, outputs: [{ input_format: geo_mime_type,
|
|
31
|
+
label: :display_raster,
|
|
32
|
+
id: id,
|
|
33
|
+
format: 'tif',
|
|
34
|
+
url: derivative_url('display_raster') },
|
|
35
|
+
{ input_format: geo_mime_type,
|
|
36
|
+
label: :thumbnail,
|
|
37
|
+
id: id,
|
|
38
|
+
format: 'png',
|
|
39
|
+
size: '200x150',
|
|
40
|
+
url: derivative_url('thumbnail') }])
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def create_vector_derivatives(filename)
|
|
44
|
+
GeoWorks::Runners::VectorDerivatives
|
|
45
|
+
.create(filename, outputs: [{ input_format: geo_mime_type,
|
|
46
|
+
label: :display_vector,
|
|
47
|
+
id: id,
|
|
48
|
+
format: 'zip',
|
|
49
|
+
url: derivative_url('display_vector') },
|
|
50
|
+
{ input_format: geo_mime_type,
|
|
51
|
+
label: :thumbnail,
|
|
52
|
+
id: id,
|
|
53
|
+
format: 'png',
|
|
54
|
+
size: '200x150',
|
|
55
|
+
url: derivative_url('thumbnail') }])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def supported_geo_mime_types
|
|
59
|
+
GeoWorks::RasterFormatService.select_options.map(&:last) +
|
|
60
|
+
GeoWorks::VectorFormatService.select_options.map(&:last)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def geo_works_events_generator
|
|
64
|
+
@geo_works_events_generator ||= GeoWorks::EventsGenerator.new
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Hyrax
|
|
2
|
+
class CurationConcern
|
|
3
|
+
# This attribute is set by Hyrax::Engine
|
|
4
|
+
class_attribute :actor_factory
|
|
5
|
+
|
|
6
|
+
self.actor_factory = Hyrax::ActorFactory
|
|
7
|
+
|
|
8
|
+
# A consumer of this method can inject a different factory
|
|
9
|
+
# into this class in order to change the behavior of this method.
|
|
10
|
+
# @param [ActiveFedora::Base] curation_concern a work to be updated
|
|
11
|
+
# @param [Ability] current_ability the permission object for depositing this
|
|
12
|
+
# work.
|
|
13
|
+
# @return [#create, #update] an actor that can create and update the work
|
|
14
|
+
def self.actor(curation_concern, current_ability)
|
|
15
|
+
actor_factory.build(curation_concern, current_ability)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class Coverage
|
|
3
|
+
class ParseError < StandardError; end
|
|
4
|
+
class InvalidGeometryError < StandardError; end
|
|
5
|
+
|
|
6
|
+
attr_reader :n, :e, :s, :w
|
|
7
|
+
|
|
8
|
+
def self.parse(str)
|
|
9
|
+
n = parse_coordinate(str, /northlimit=([\.\d\-]+);/)
|
|
10
|
+
e = parse_coordinate(str, /eastlimit=([\.\d\-]+);/)
|
|
11
|
+
s = parse_coordinate(str, /southlimit=([\.\d\-]+);/)
|
|
12
|
+
w = parse_coordinate(str, /westlimit=([\.\d\-]+);/)
|
|
13
|
+
raise ParseError, str if n.nil? || e.nil? || s.nil? || w.nil?
|
|
14
|
+
new(n, e, s, w)
|
|
15
|
+
rescue
|
|
16
|
+
nil
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.parse_coordinate(str, regex)
|
|
20
|
+
Regexp.last_match(1).to_f if str =~ regex
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize(n, e, s, w)
|
|
24
|
+
raise InvalidGeometryError, "n=#{n} < s=#{s}" if n.to_f < s.to_f
|
|
25
|
+
raise InvalidGeometryError, "e=#{e} < w=#{w}" if e.to_f < w.to_f
|
|
26
|
+
@n = n
|
|
27
|
+
@e = e
|
|
28
|
+
@s = s
|
|
29
|
+
@w = w
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def to_s
|
|
33
|
+
"northlimit=#{n}; eastlimit=#{e}; southlimit=#{s}; westlimit=#{w}; units=degrees; projection=EPSG:4326"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class TimePeriod
|
|
3
|
+
attr_accessor :doc, :initial_value
|
|
4
|
+
def initialize(initial_value, doc)
|
|
5
|
+
@initial_value = initial_value || []
|
|
6
|
+
@doc = doc
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def value
|
|
10
|
+
append_caldate
|
|
11
|
+
append_begdate
|
|
12
|
+
initial_value.uniq!
|
|
13
|
+
initial_value
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def append_caldate
|
|
19
|
+
doc.at_xpath('//idinfo/timeperd/timeinfo/mdattim/sngdate/caldate | //idinfo/timeperd/timeinfo/sngdate/caldate').tap do |node|
|
|
20
|
+
initial_value << node.text[0..3] unless node.nil? # extract year only
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def append_begdate
|
|
25
|
+
doc.at_xpath('//idinfo/timeperd/timeinfo/rngdates/begdate').tap do |node|
|
|
26
|
+
initial_value << node.text[0..3] unless node.nil? # extract year only
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|