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,40 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class BasicGeoMetadataOptional < ActiveTriples::Schema
|
|
3
|
+
#
|
|
4
|
+
# The following properties are inherited from Curation Concerns' metadata
|
|
5
|
+
#
|
|
6
|
+
# @see https://github.com/projecthydra/hyrax/blob/v1.6.0/app/models/concerns/hyrax/basic_metadata.rb
|
|
7
|
+
# Optional:
|
|
8
|
+
# :contributor
|
|
9
|
+
# :creator
|
|
10
|
+
# :date_created (DC.created)
|
|
11
|
+
# :description
|
|
12
|
+
# :identifier
|
|
13
|
+
# :language
|
|
14
|
+
# :part_of
|
|
15
|
+
# :publisher
|
|
16
|
+
# :resource_type (DC.type)
|
|
17
|
+
# :rights (license)
|
|
18
|
+
# :rights
|
|
19
|
+
# :source
|
|
20
|
+
# :subject
|
|
21
|
+
# :tag (DC11.relation)
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
# Defines the placenames related to the layer
|
|
25
|
+
# @example
|
|
26
|
+
# image.spatial = [ 'France', 'Spain' ]
|
|
27
|
+
property :spatial, predicate: ::RDF::Vocab::DC.spatial
|
|
28
|
+
|
|
29
|
+
# Defines the temporal coverage of the layer
|
|
30
|
+
# @example
|
|
31
|
+
# vector.temporal = [ '1998-2006', 'circa 2000' ]
|
|
32
|
+
property :temporal, predicate: ::RDF::Vocab::DC.temporal
|
|
33
|
+
|
|
34
|
+
# Defines the issued date for the layer, using XML Schema dateTime format
|
|
35
|
+
# (YYYY-MM-DDThh:mm:ssZ).
|
|
36
|
+
# @example
|
|
37
|
+
# vector.issued = '2001-01-01T00:00:00Z'
|
|
38
|
+
property :issued, predicate: ::RDF::Vocab::DC.issued, multiple: false
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
class BasicGeoMetadataRequired < ActiveTriples::Schema
|
|
3
|
+
#
|
|
4
|
+
# The following properties are inherited from Curation Concerns' metadata
|
|
5
|
+
#
|
|
6
|
+
# @see https://github.com/projecthydra/hyrax/blob/v1.6.0/app/models/concerns/hyrax/required_metadata.rb
|
|
7
|
+
# Required:
|
|
8
|
+
# :title
|
|
9
|
+
# :date_uploaded (DC.dateSubmitted)
|
|
10
|
+
# :date_modified (DC.modified)
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
# Defines the bounding box for the layer.
|
|
14
|
+
# We always assert units of decimal degrees and EPSG:4326 projection.
|
|
15
|
+
# @see http://dublincore.org/documents/dcmi-box/
|
|
16
|
+
# @example
|
|
17
|
+
# vector.coverage = 'northlimit=43.039; eastlimit=-69.856; southlimit=42.943; westlimit=-71.032; units=degrees; projection=EPSG:4326'
|
|
18
|
+
property :coverage, predicate: ::RDF::Vocab::DC11.coverage, multiple: false
|
|
19
|
+
|
|
20
|
+
# Defines the institution which holds the layer
|
|
21
|
+
# @example
|
|
22
|
+
# raster.provenance = 'Stanford University'
|
|
23
|
+
property :provenance, predicate: ::RDF::Vocab::DC.provenance, multiple: false
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
module AuthorityService
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
mattr_accessor :authority
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class_methods do
|
|
10
|
+
def select_options
|
|
11
|
+
authority.all.map do |element|
|
|
12
|
+
[element[:label], element[:id]]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def label(id)
|
|
17
|
+
(authority.find(id) || {}).fetch('term', nil)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def code(id)
|
|
21
|
+
(authority.find(id) || {}).fetch('code', nil)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def include?(id)
|
|
25
|
+
!authority.find(id).nil? && !authority.find(id).empty?
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
|
2
|
+
require 'rgeoserver'
|
|
3
|
+
require 'yaml'
|
|
4
|
+
require 'erb'
|
|
5
|
+
|
|
6
|
+
module GeoWorks
|
|
7
|
+
module Delivery
|
|
8
|
+
class Geoserver
|
|
9
|
+
attr_reader :config, :workspace_name, :file_set, :file_path
|
|
10
|
+
|
|
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[:workspace]
|
|
16
|
+
validate!
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def catalog
|
|
20
|
+
@catalog ||= RGeoServer.catalog(config)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def publish
|
|
24
|
+
case type
|
|
25
|
+
when :vector
|
|
26
|
+
publish_vector
|
|
27
|
+
when :raster
|
|
28
|
+
publish_raster
|
|
29
|
+
end
|
|
30
|
+
rescue StandardError => e
|
|
31
|
+
Rails.logger.error("GeoServer delivery job failed with: #{e}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def fetch_config
|
|
37
|
+
raise ArgumentError, "FileSet visibility must be open or authenticated" unless visibility
|
|
38
|
+
GeoWorks::GeoServer.config[visibility]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def visibility
|
|
42
|
+
return file_set.visibility if file_set.visibility == 'open'
|
|
43
|
+
return file_set.visibility if file_set.visibility == 'authenticated'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def validate!
|
|
47
|
+
%w(url user password).map(&:to_sym).each do |k|
|
|
48
|
+
raise ArgumentError, "Missing #{k} in configuration" unless config[k].present?
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def type
|
|
53
|
+
return :vector if file_path =~ /\.zip$/
|
|
54
|
+
return :raster if file_path =~ /\.tif$/
|
|
55
|
+
raise ArgumentError, "Not a ZIPed Shapefile or GeoTIFF: #{file_path}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def workspace
|
|
59
|
+
workspace = RGeoServer::Workspace.new catalog, name: workspace_name
|
|
60
|
+
workspace.save if workspace.new?
|
|
61
|
+
workspace
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def datastore
|
|
65
|
+
@datastore ||= RGeoServer::DataStore.new catalog, workspace: workspace,
|
|
66
|
+
name: file_set.id
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def coveragestore
|
|
70
|
+
@coveragestore ||= RGeoServer::CoverageStore.new catalog, workspace: workspace,
|
|
71
|
+
name: file_set.id
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def base_path(path)
|
|
75
|
+
path.gsub(Hyrax.config.derivatives_path.to_s, '')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def shapefile_dir
|
|
79
|
+
"#{File.dirname(file_path)}/#{File.basename(file_path, '.zip')}"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def persist_coveragestore
|
|
83
|
+
url = "file:///#{@config[:derivatives_path]}#{base_path(file_path)}"
|
|
84
|
+
coveragestore.url = url
|
|
85
|
+
coveragestore.enabled = 'true'
|
|
86
|
+
coveragestore.data_type = 'GeoTIFF'
|
|
87
|
+
coveragestore.save
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def persist_coverage
|
|
91
|
+
coverage = RGeoServer::Coverage.new catalog, workspace: workspace,
|
|
92
|
+
coverage_store: coveragestore,
|
|
93
|
+
name: coveragestore.name
|
|
94
|
+
coverage.title = coveragestore.name
|
|
95
|
+
coverage.metadata_links = []
|
|
96
|
+
coverage.save
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def publish_vector
|
|
100
|
+
# Delete existing shapefile
|
|
101
|
+
FileUtils.rm_rf(shapefile_dir)
|
|
102
|
+
|
|
103
|
+
# Unzip derivative shapefiles
|
|
104
|
+
system "unzip -o #{file_path} -d #{shapefile_dir}"
|
|
105
|
+
|
|
106
|
+
shape_path = Dir.glob("#{shapefile_dir}/*.shp").first
|
|
107
|
+
raise Errno::ENOENT, 'Shapefile not found' unless shape_path
|
|
108
|
+
url = "file:///#{@config[:derivatives_path]}#{base_path(shape_path)}"
|
|
109
|
+
datastore.upload_external url, publish: true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def publish_raster
|
|
113
|
+
persist_coveragestore
|
|
114
|
+
persist_coverage
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
module Discovery
|
|
3
|
+
class AbstractDocument
|
|
4
|
+
attr_accessor :identifier, :provenance, :creator, :subject, :spatial, :temporal,
|
|
5
|
+
:title, :description, :access_rights, :language, :issued,
|
|
6
|
+
:publisher, :slug, :solr_coverage, :layer_year,
|
|
7
|
+
:layer_modified, :geom_type, :format, :resource_type, :wxs_identifier,
|
|
8
|
+
:dct_references, :fgdc, :iso19139, :mods, :download, :url, :thumbnail,
|
|
9
|
+
:wxs_identifier, :wms_path, :wfs_path
|
|
10
|
+
|
|
11
|
+
# Cleans the document hash by removing unused fields.
|
|
12
|
+
# @param [Hash] document hash
|
|
13
|
+
# @return [Hash] cleaned document hash
|
|
14
|
+
def clean_document(hash)
|
|
15
|
+
hash.delete_if do |_k, v|
|
|
16
|
+
begin
|
|
17
|
+
v.nil? || v.empty?
|
|
18
|
+
rescue
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def to_hash(_arg)
|
|
25
|
+
raise 'this method should be overriden and return the document as a hash'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def to_json(_arg)
|
|
29
|
+
raise 'this method should be overriden and return the document as json'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def to_xml(_arg)
|
|
33
|
+
raise 'this method should be overriden and return the document as xml'
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
module Discovery
|
|
3
|
+
class DocumentBuilder
|
|
4
|
+
class_attribute :services, :root_path_class
|
|
5
|
+
|
|
6
|
+
# Array of document builder services.
|
|
7
|
+
# - BasicMetadataBuilder: builds fields such as id, subject, and publisher.
|
|
8
|
+
# - SpatialBuilder: builds spatial fields such as bounding box and solr geometry.
|
|
9
|
+
# - DateBuilder: builds date fields such as layer year and modified date.
|
|
10
|
+
# - ReferencesBuilder: builds service reference fields such as thumbnail and download url.
|
|
11
|
+
# - LayerInfoBuilder: builds fields about the geospatial file such as geometry and format.
|
|
12
|
+
# - SlugBuilder: builds the Geoblacklight slug field.
|
|
13
|
+
self.services = [
|
|
14
|
+
BasicMetadataBuilder,
|
|
15
|
+
SpatialBuilder,
|
|
16
|
+
DateBuilder,
|
|
17
|
+
ReferencesBuilder,
|
|
18
|
+
LayerInfoBuilder,
|
|
19
|
+
SlugBuilder
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
# Class used to generate urls for links in the document.
|
|
23
|
+
self.root_path_class = DocumentPath
|
|
24
|
+
|
|
25
|
+
def initialize(geo_concern, document)
|
|
26
|
+
@geo_concern = geo_concern
|
|
27
|
+
@document = document
|
|
28
|
+
builders.build(document)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
attr_reader :geo_concern, :document
|
|
32
|
+
delegate :to_json, :to_xml, :to_hash, to: :document
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# Instantiates a CompositeBuilder object with an array of
|
|
37
|
+
# builder instances that are used to create the document.
|
|
38
|
+
# @return [CompositeBuilder] composite builder for document
|
|
39
|
+
def builders
|
|
40
|
+
@builders ||= CompositeBuilder.new(
|
|
41
|
+
services.map { |service| service.new(geo_concern) }
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
##
|
|
2
|
+
# Workaround for setting the identifier in the geoblacklight document
|
|
3
|
+
# Remove once
|
|
4
|
+
module GeoWorks
|
|
5
|
+
module Discovery
|
|
6
|
+
class DocumentBuilder
|
|
7
|
+
class BasicMetadataBuilder
|
|
8
|
+
attr_reader :geo_concern
|
|
9
|
+
|
|
10
|
+
def initialize(geo_concern)
|
|
11
|
+
@geo_concern = geo_concern
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Builds fields such as id, subject, and publisher.
|
|
15
|
+
# @param [AbstractDocument] discovery document
|
|
16
|
+
def build(document)
|
|
17
|
+
build_simple_attributes(document)
|
|
18
|
+
build_complex_attributes(document)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
# Returns an array of attributes to add to document.
|
|
24
|
+
# @return [Array] attributes
|
|
25
|
+
def simple_attributes
|
|
26
|
+
[:creator, :subject, :spatial, :temporal,
|
|
27
|
+
:title, :provenance, :language, :publisher]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Builds simple metadata attributes.
|
|
31
|
+
# @param [AbstractDocument] discovery document
|
|
32
|
+
def build_simple_attributes(document)
|
|
33
|
+
simple_attributes.each do |a|
|
|
34
|
+
document.send("#{a}=", geo_concern.send(a.to_s))
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Builds more complex metadata attributes.
|
|
39
|
+
# @param [AbstractDocument] discovery document
|
|
40
|
+
def build_complex_attributes(document)
|
|
41
|
+
document.identifier = identifier
|
|
42
|
+
document.description = description
|
|
43
|
+
document.access_rights = geo_concern.solr_document.visibility
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Returns the work indentifier. This is (usually) different from the hydra/fedora work id.
|
|
47
|
+
# The identifier might be an ARK, DOI, PURL, etc.
|
|
48
|
+
# If identifier is not set, the work id is used.
|
|
49
|
+
# @return [String] identifier
|
|
50
|
+
def identifier
|
|
51
|
+
identifiers = geo_concern.identifier
|
|
52
|
+
if identifiers.nil? || identifiers.empty?
|
|
53
|
+
geo_concern.id
|
|
54
|
+
elsif identifiers.is_a?(String)
|
|
55
|
+
identifiers
|
|
56
|
+
else
|
|
57
|
+
identifiers.first
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns the work description. If none is available,
|
|
62
|
+
# a basic description is created.
|
|
63
|
+
# @return [String] description
|
|
64
|
+
def description
|
|
65
|
+
return geo_concern.description.first if geo_concern.description.first
|
|
66
|
+
"A #{geo_concern.human_readable_type.downcase} object."
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module GeoWorks
|
|
2
|
+
module Discovery
|
|
3
|
+
class DocumentBuilder
|
|
4
|
+
class CompositeBuilder
|
|
5
|
+
attr_reader :services
|
|
6
|
+
|
|
7
|
+
def initialize(services)
|
|
8
|
+
@services = services
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Runs each builder service to build a discovery document.
|
|
12
|
+
# @param [AbstractDocument] discovery document
|
|
13
|
+
def build(document)
|
|
14
|
+
services.each do |service|
|
|
15
|
+
service.build(document)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|