├── .dockerignore ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── ci.yml │ ├── docker.yml │ └── swagger.yml ├── .gitignore ├── .zenodo.json ├── CHANGELOG.md ├── CLA.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CONTRIBUTORS.md ├── Dockerfile ├── INSTALL.md ├── LICENSE ├── README.md ├── TESTING.md ├── app ├── Binders.scala ├── Global.scala ├── Iterators │ ├── BagItIterator.scala │ ├── CollectionIterator.scala │ ├── DatasetIterator.scala │ ├── DatasetsInCollectionIterator.scala │ ├── FileIterator.scala │ ├── RootCollectionIterator.scala │ └── SelectedIterator.scala ├── api │ ├── Admin.scala │ ├── ApiController.scala │ ├── ApiHelp.scala │ ├── Collections.scala │ ├── Comments.scala │ ├── ContextLD.scala │ ├── CurationObjects.scala │ ├── Datasets.scala │ ├── Events.scala │ ├── Extractions.scala │ ├── Files.scala │ ├── Folders.scala │ ├── Geometry.scala │ ├── Geostreams.scala │ ├── Indexes.scala │ ├── Institutions.scala │ ├── Logos.scala │ ├── Metadata.scala │ ├── Permissions.scala │ ├── Previews.scala │ ├── Projects.scala │ ├── Proxy.scala │ ├── Relations.scala │ ├── Reporting.scala │ ├── Search.scala │ ├── Sections.scala │ ├── Selected.scala │ ├── Sensors.scala │ ├── Spaces.scala │ ├── Status.scala │ ├── ThreeDTexture.scala │ ├── Thumbnail.scala │ ├── Tree.scala │ ├── Users.scala │ ├── Vocabularies.scala │ ├── VocabularyTerms.scala │ └── ZoomIt.scala ├── assets │ ├── javascripts │ │ ├── select-bulk.js │ │ └── select.js │ └── stylesheets │ │ └── bootstrap │ │ ├── alerts.less │ │ ├── badges.less │ │ ├── bootstrap.less │ │ ├── breadcrumbs.less │ │ ├── button-groups.less │ │ ├── buttons.less │ │ ├── carousel.less │ │ ├── close.less │ │ ├── code.less │ │ ├── component-animations.less │ │ ├── dropdowns.less │ │ ├── forms.less │ │ ├── glyphicons.less │ │ ├── grid.less │ │ ├── input-groups.less │ │ ├── jumbotron.less │ │ ├── labels.less │ │ ├── list-group.less │ │ ├── media.less │ │ ├── mixins.less │ │ ├── mixins │ │ ├── alerts.less │ │ ├── background-variant.less │ │ ├── border-radius.less │ │ ├── buttons.less │ │ ├── center-block.less │ │ ├── clearfix.less │ │ ├── forms.less │ │ ├── gradients.less │ │ ├── grid-framework.less │ │ ├── grid.less │ │ ├── hide-text.less │ │ ├── image.less │ │ ├── labels.less │ │ ├── list-group.less │ │ ├── nav-divider.less │ │ ├── nav-vertical-align.less │ │ ├── opacity.less │ │ ├── pagination.less │ │ ├── panels.less │ │ ├── progress-bar.less │ │ ├── reset-filter.less │ │ ├── reset-text.less │ │ ├── resize.less │ │ ├── responsive-visibility.less │ │ ├── size.less │ │ ├── tab-focus.less │ │ ├── table-row.less │ │ ├── text-emphasis.less │ │ ├── text-overflow.less │ │ └── vendor-prefixes.less │ │ ├── modals.less │ │ ├── navbar.less │ │ ├── navs.less │ │ ├── normalize.less │ │ ├── pager.less │ │ ├── pagination.less │ │ ├── panels.less │ │ ├── popovers.less │ │ ├── print.less │ │ ├── progress-bars.less │ │ ├── responsive-embed.less │ │ ├── responsive-utilities.less │ │ ├── scaffolding.less │ │ ├── tables.less │ │ ├── theme.less │ │ ├── thumbnails.less │ │ ├── tooltip.less │ │ ├── type.less │ │ ├── utilities.less │ │ ├── variables.less │ │ └── wells.less ├── controllers │ ├── Admin.scala │ ├── Application.scala │ ├── Collections.scala │ ├── CurationObjects.scala │ ├── Datasets.scala │ ├── Error.scala │ ├── Events.scala │ ├── ExtractionInfo.scala │ ├── Extractors.scala │ ├── FileLinks.scala │ ├── Files.scala │ ├── Folders.scala │ ├── Geostreams.scala │ ├── Login.scala │ ├── Metadata.scala │ ├── Previewers.scala │ ├── Profile.scala │ ├── RSS.scala │ ├── Registration.scala │ ├── Search.scala │ ├── SecuredController.scala │ ├── Selected.scala │ ├── Spaces.scala │ ├── Tags.scala │ ├── ToolManager.scala │ ├── Users.scala │ └── Utils.scala ├── fileutils │ └── FilesUtils.java ├── filters │ └── CORSFilter.scala ├── jsonutils │ └── JsonUtil.java ├── models │ ├── Collection.scala │ ├── Comment.scala │ ├── ContextLD.scala │ ├── Credentials.scala │ ├── CurationObject.scala │ ├── DBCounts.scala │ ├── Dataset.scala │ ├── DatasetXMLMetadata.scala │ ├── ElasticSearchObject.scala │ ├── Event.scala │ ├── Extraction.scala │ ├── ExtractionInfoSetUp.scala │ ├── ExtractionRequests.scala │ ├── ExtractorsForInstance.scala │ ├── ExtractorsForSpace.scala │ ├── File.scala │ ├── FileLink.scala │ ├── FileMD.scala │ ├── FileOP.scala │ ├── Folder.scala │ ├── Geometry.scala │ ├── IncrementCounter.scala │ ├── Institution.scala │ ├── JobsScheduler.scala │ ├── LicenseData.scala │ ├── Logo.scala │ ├── Metadata.scala │ ├── MetadataDefinition.scala │ ├── MiniEntity.scala │ ├── MultimediaFeatures.scala │ ├── Pager.scala │ ├── Preview.scala │ ├── PreviewFilesSearchResult.scala │ ├── Previewer.scala │ ├── Project.scala │ ├── QueuedAction.scala │ ├── Relation.scala │ ├── RequestResource.scala │ ├── ResourceRef.scala │ ├── ResourceType.scala │ ├── Role.scala │ ├── SearchResults.scala │ ├── Section.scala │ ├── SectionIndexInfo.scala │ ├── Selected.scala │ ├── ServerStartTime.scala │ ├── Space.scala │ ├── StandardVocab.scala │ ├── Statistic.scala │ ├── Stream.scala │ ├── Tag.scala │ ├── TempFile.scala │ ├── ThreeDAnnotation.scala │ ├── ThreeDTexture.scala │ ├── Thumbnail.scala │ ├── Tile.scala │ ├── TimerJob.scala │ ├── TypedID.scala │ ├── UUID.scala │ ├── User.scala │ ├── UserSpaceAndRole.scala │ ├── VersusExtraction.scala │ ├── VersusIndex.scala │ ├── VersusIndexTypeName.scala │ ├── VersusSimilarityResult.scala │ ├── Vocabulary.scala │ ├── VocabularyTerm.scala │ └── WebPageResource.scala ├── services │ ├── AdminsNotifierPlugin.scala │ ├── AppConfigurationService.scala │ ├── ByteStorageService.scala │ ├── CILogonProvider.scala │ ├── CollectionService.scala │ ├── CommentService.scala │ ├── ContextLDService.scala │ ├── CrowdProvider.scala │ ├── CurationService.scala │ ├── DI.scala │ ├── DatasetService.scala │ ├── DatasetsAutodumpService.scala │ ├── DatasetsMetadataAutodumpService.scala │ ├── ElasticsearchPlugin.scala │ ├── EventService.scala │ ├── EventSinkService.scala │ ├── ExtractionRequestsService.scala │ ├── ExtractionService.scala │ ├── ExtractorRoutingService.scala │ ├── ExtractorService.scala │ ├── FileDumpService.scala │ ├── FileLinkService.scala │ ├── FileMetadataAutodumpService.scala │ ├── FileService.scala │ ├── FolderService.scala │ ├── GraylogService.scala │ ├── InstitutionService.scala │ ├── KeycloakProvider.scala │ ├── LdapProvider.scala │ ├── LogService.scala │ ├── LogoService.scala │ ├── MailerPlugin.scala │ ├── MessageService.scala │ ├── MetadataService.scala │ ├── MultimediaQueryService.scala │ ├── ORCIDProvider.scala │ ├── PolyglotPlugin.scala │ ├── PostgresPlugin.scala │ ├── PreviewService.scala │ ├── ProjectService.scala │ ├── RDFExportService.scala │ ├── RDFExporterPlugin.scala │ ├── RDFUpdateService.scala │ ├── RdfSPARQLService.scala │ ├── RelationService.scala │ ├── SchedulerService.scala │ ├── SectionIndexInfoService.scala │ ├── SectionService.scala │ ├── SecureSocialEventListener.scala │ ├── SecureSocialTemplatesPlugin.scala │ ├── SelectionService.scala │ ├── SpaceCopyPlugin.scala │ ├── SpaceService.scala │ ├── SpaceSharingPlugin.scala │ ├── StagingAreaPlugin.scala │ ├── StandardVocabularyService.scala │ ├── TagService.scala │ ├── TempFileService.scala │ ├── TempFilesPlugin.scala │ ├── ThreeDService.scala │ ├── ThumbnailService.scala │ ├── TileService.scala │ ├── ToolManagerPlugin.scala │ ├── TreeService.scala │ ├── UserService.scala │ ├── VersusPlugin.scala │ ├── VocabularyService.scala │ ├── VocabularyTermService.scala │ ├── filesystem │ │ └── DiskByteStorageService.scala │ ├── fourstore │ │ └── FourStoreRdfSPARQLService.scala │ ├── irods │ │ ├── IRODSByteStorageService.scala │ │ └── IRODSPlugin.scala │ ├── mongodb │ │ ├── ElasticsearchQueue.scala │ │ ├── MongoContext.scala │ │ ├── MongoDBAppConfigurationService.scala │ │ ├── MongoDBAuthenticatorStore.scala │ │ ├── MongoDBByteStorage.scala │ │ ├── MongoDBCollectionService.scala │ │ ├── MongoDBCommentService.scala │ │ ├── MongoDBContextLDService.scala │ │ ├── MongoDBCurationService.scala │ │ ├── MongoDBDatasetService.scala │ │ ├── MongoDBEventService.scala │ │ ├── MongoDBExtractionRequestsService.scala │ │ ├── MongoDBExtractionService.scala │ │ ├── MongoDBExtractorService.scala │ │ ├── MongoDBFileLinkService.scala │ │ ├── MongoDBFileService.scala │ │ ├── MongoDBFolderService.scala │ │ ├── MongoDBInstitutionService.scala │ │ ├── MongoDBLogoService.scala │ │ ├── MongoDBMetadataService.scala │ │ ├── MongoDBMultimediaQueryService.scala │ │ ├── MongoDBPreviewService.scala │ │ ├── MongoDBProjectService.scala │ │ ├── MongoDBQueueService.scala │ │ ├── MongoDBRelationService.scala │ │ ├── MongoDBSchedulerService.scala │ │ ├── MongoDBSectionIndexInfoService.scala │ │ ├── MongoDBSectionService.scala │ │ ├── MongoDBSelectionService.scala │ │ ├── MongoDBSpaceService.scala │ │ ├── MongoDBStandardVocabularyService.scala │ │ ├── MongoDBTagService.scala │ │ ├── MongoDBTempFileService.scala │ │ ├── MongoDBThreeDService.scala │ │ ├── MongoDBThumbnailService.scala │ │ ├── MongoDBTileService.scala │ │ ├── MongoDBUserService.scala │ │ ├── MongoDBVocabularyService.scala │ │ ├── MongoDBVocabularyTermService.scala │ │ ├── MongoSalatPlugin.scala │ │ ├── MongoUserService.scala │ │ ├── SocialUserDAO.scala │ │ └── TypedIdDAO.scala │ ├── rabbitmq │ │ └── RabbitMQMessageService.scala │ └── s3 │ │ └── S3ByteStorageService.scala ├── util │ ├── Direction.scala │ ├── DistancePriorityQueue.scala │ ├── FileUtils.scala │ ├── Formatters.scala │ ├── GravatarUtils.scala │ ├── JSONLD.scala │ ├── License.scala │ ├── Mail.scala │ ├── MultimediaIndex.scala │ ├── Parsers.scala │ ├── PeekIterator.scala │ ├── Publications.scala │ ├── RequestUtils.scala │ ├── RequiredFieldsConfig.scala │ ├── ResourceLister.scala │ ├── SearchUtils.scala │ ├── SortingUtils.scala │ ├── SpaceConfig.scala │ ├── StreamGobbler.java │ ├── StreamGobblerReturnsNotUploaded.java │ └── UploadFileWorker.java └── views │ ├── JSConsole.scala.html │ ├── admin │ ├── customize.scala.html │ ├── tos.scala.html │ └── users.scala.html │ ├── adminIndex.scala.html │ ├── advancedsearch.scala.html │ ├── authorizationMessage.scala.html │ ├── bookmarklet.scala.html │ ├── bootstrap3 │ └── checkboxes.scala.html │ ├── carousel.scala.html │ ├── collectionList.scala.html │ ├── collectionPreviews.scala.html │ ├── collectionofdatasets.scala.html │ ├── collections │ ├── childCollections.scala.html │ ├── datasetsInCollection.scala.html │ ├── listchildcollection.scala.html │ ├── listitem.scala.html │ ├── miniList.scala.html │ ├── parentAllocation.scala.html │ ├── tile.scala.html │ └── users.scala.html │ ├── comment.scala.html │ ├── commentform.scala.html │ ├── curationObjectList.scala.html │ ├── curations │ ├── filesAndFolders.scala.html │ ├── listFolder.scala.html │ ├── listitem.scala.html │ ├── newCuration.scala.html │ ├── publishedData.scala.html │ ├── publishedGrid.scala.html │ └── tile.scala.html │ ├── dataset.scala.html │ ├── datasetInfo.scala.html │ ├── datasetList.scala.html │ ├── datasets │ ├── addFiles.scala.html │ ├── collections.scala.html │ ├── create.scala.html │ ├── createStep2.scala.html │ ├── deleteButton.scala.html │ ├── download.scala.html │ ├── editInfo.scala.html │ ├── editLicense.scala.html │ ├── filesAndFolders.scala.html │ ├── follow.scala.html │ ├── listCurationObjects.scala.html │ ├── listitem.scala.html │ ├── miniList.scala.html │ ├── previews.scala.html │ ├── restoreButton.scala.html │ ├── tags.scala.html │ ├── tile.scala.html │ ├── tools.scala.html │ ├── uploadFiles.scala.html │ ├── userLink.scala.html │ └── users.scala.html │ ├── datasetsContainingFile.scala.html │ ├── dtsExtension.scala.html │ ├── dtsbookmarklet.scala.html │ ├── editProfile.scala.html │ ├── emailAdmin.scala.html │ ├── emailEvents.scala.html │ ├── emails │ ├── footer.scala.html │ ├── userChanged.scala.html │ └── userSignup.scala.html │ ├── error │ └── accountNotActive.scala.html │ ├── errorPage.scala.html │ ├── eventsList.scala.html │ ├── extract.scala.html │ ├── extractionRequests.scala.html │ ├── extractions │ ├── extractionsHistorySingle.scala.html │ ├── extractionsList.scala.html │ ├── submitDatasetExtraction.scala.html │ ├── submitFileExtraction.scala.html │ └── submitSelectedExtraction.scala.html │ ├── extractorDetails.scala.html │ ├── extractorJobHistory.scala.html │ ├── extractorLabels.scala.html │ ├── extractorLog.scala.html │ ├── extractorMetrics.scala.html │ ├── extractors.scala.html │ ├── extractorsInputTypes.scala.html │ ├── extractorsServersIP.scala.html │ ├── file.scala.html │ ├── fileGeneralMetadataSearch.scala.html │ ├── fileMetadataSearch.scala.html │ ├── files │ ├── grid.scala.html │ ├── linkDownload.scala.html │ ├── listitem.scala.html │ ├── share.scala.html │ └── tile.scala.html │ ├── filesList.scala.html │ ├── fileusermetadata.scala.html │ ├── folders │ └── listitem.scala.html │ ├── generalMetadataSearch.scala.html │ ├── geostreams │ ├── create.scala.html │ ├── edit.scala.html │ ├── list.scala.html │ ├── map.scala.html │ └── sensor.scala.html │ ├── home.scala.html │ ├── imageSearchpage.scala.html │ ├── index.scala.html │ ├── inviteThroughEmail.scala.html │ ├── licenseform.scala.html │ ├── listAllExtractions.scala.html │ ├── logoSelect.scala.html │ ├── main.scala.html │ ├── manageMetadataDefinitions.scala.html │ ├── metadata.scala.html │ ├── metadataSearch.scala.html │ ├── metadatald │ ├── addMetadata.scala.html │ ├── newCard.scala.html │ ├── newTableRow.scala.html │ ├── printContent.scala.html │ ├── search.scala.html │ ├── view.scala.html │ ├── viewDataset.scala.html │ └── viewFile.scala.html │ ├── multimediaIndexResults.scala.html │ ├── multimediaSearchResults.scala.html │ ├── multimediaSearchResultsCombined.scala.html │ ├── multimediasearch.scala.html │ ├── newCollection.scala.html │ ├── newCollectionWithParent.scala.html │ ├── newsFeedCardEmail.scala.html │ ├── newsfeedCard.scala.html │ ├── noPermissions.scala.html │ ├── notAuthorized.scala.html │ ├── notFound.scala.html │ ├── playMode.scala.html │ ├── pluginNotEnabled.scala.html │ ├── previewers.scala.html │ ├── profile.scala.html │ ├── relations │ └── list.scala.html │ ├── roles │ ├── createRole.scala.html │ ├── editRole.scala.html │ └── listRoles.scala.html │ ├── search │ ├── searchResultCollection.scala.html │ ├── searchResultDataset.scala.html │ └── searchResultFile.scala.html │ ├── searchImgResults.scala.html │ ├── searchMultimediaIndex.scala.html │ ├── searchResults.scala.html │ ├── searchTextResults.scala.html │ ├── selectDataset.scala.html │ ├── selected.scala.html │ ├── sensors │ ├── admin.scala.html │ └── relatedSensors.scala.html │ ├── spaces │ ├── access.scala.html │ ├── collectionsBySpace.scala.html │ ├── collectionsGrid.scala.html │ ├── collectionsTable.scala.html │ ├── createButton.scala.html │ ├── curationDetailReport.scala.html │ ├── curationObject.scala.html │ ├── curationObjectsBySpace.scala.html │ ├── curationObjectsGrid.scala.html │ ├── curationSubmitted.scala.html │ ├── curationSummary.scala.html │ ├── datasetsBySpace.scala.html │ ├── datasetsGrid.scala.html │ ├── datasetsTable.scala.html │ ├── editSpace.scala.html │ ├── editUsers.scala.html │ ├── externalLinks.scala.html │ ├── follow.scala.html │ ├── invite.scala.html │ ├── inviteNotificationEmail.scala.html │ ├── listItem.scala.html │ ├── listSpaces.scala.html │ ├── matchmakerResult.scala.html │ ├── miniList.scala.html │ ├── newEditTemplate.scala.html │ ├── newSpace.scala.html │ ├── otherActions.scala.html │ ├── outstandingRequests.scala.html │ ├── requestAuthorization.scala.html │ ├── requestemail.scala.html │ ├── requestresponseemail.scala.html │ ├── space.scala.html │ ├── spaceAllocation.scala.html │ ├── spaceConfiguration.scala.html │ ├── spaceSelect.scala.html │ ├── stagingarea.scala.html │ ├── statistics.scala.html │ ├── submittedCurationObject.scala.html │ ├── tile.scala.html │ ├── updateButton.scala.html │ ├── updateExtractors.scala.html │ ├── users.scala.html │ └── verifySpaceEmail.scala.html │ ├── ss │ ├── Registration │ │ ├── resetPasswordPage.scala.html │ │ ├── signUp.scala.html │ │ ├── startResetPassword.scala.html │ │ └── startSignUp.scala.html │ ├── inputFieldConstructor.scala.html │ ├── ldap.scala.html │ ├── login.scala.html │ ├── mails │ │ ├── alreadyRegisteredEmail.scala.html │ │ ├── passwordChangedNotice.scala.html │ │ ├── passwordResetEmail.scala.html │ │ ├── signUpEmail.scala.html │ │ ├── unknownEmailNotice.scala.html │ │ ├── welcomeEmail.scala.html │ │ └── welcomeEmailPendingVerification.scala.html │ └── provider.scala.html │ ├── tagList.scala.html │ ├── tagListChar.scala.html │ ├── toolManager.scala.html │ ├── tos.scala.html │ ├── twitterBootstrapInput.scala.html │ ├── updateExtractors.scala.html │ ├── upload.scala.html │ ├── uploadExtract.scala.html │ ├── users │ ├── followers.scala.html │ ├── followingCollections.scala.html │ ├── followingDatasets.scala.html │ ├── followingFiles.scala.html │ ├── followingSpaces.scala.html │ ├── followingUsers.scala.html │ ├── listUsers.scala.html │ └── tile.scala.html │ ├── util │ ├── masonry.scala.html │ ├── masonryTabbed.scala.html │ └── multimasonry.scala.html │ └── viewDumpers.scala.html ├── bootstrap.sh ├── citation.cff ├── conf ├── .gitignore ├── application.conf ├── datasetRdfRootNodes.txt ├── datasetUserMetadataRDFMapping.xml ├── fileUserMetadataRDFMapping.xml ├── logger.xml ├── messages ├── mimetypes.conf ├── play.plugins ├── rdfRootNodes.txt ├── routes └── securesocial.conf ├── doc └── src │ └── sphinx │ ├── .gitignore │ ├── Makefile │ ├── Pipfile │ ├── Pipfile.lock │ ├── _static │ ├── GettingStarted_AddJDK.png │ ├── GettingStarted_Play2Config.png │ ├── GettingStarted_addConfig.png │ ├── IntelliJ_JDK_Download.png │ ├── architecture.jpg │ ├── architecture.png │ ├── css │ │ └── custom.css │ ├── data-model.jpg │ ├── data-model.png │ ├── datamodel.jpg │ ├── dataset.png │ ├── extraction.jpg │ ├── geostreaming.jpg │ ├── logo.png │ ├── logo_full.png │ ├── logos_ncsa.png │ ├── ug-homepage-1.png │ ├── ug-signingup-1.png │ ├── ug-signingup-10.png │ ├── ug-signingup-11.png │ ├── ug-signingup-2.png │ ├── ug-signingup-3.png │ ├── ug-signingup-4.png │ ├── ug-signingup-5.png │ ├── ug-signingup-6.png │ ├── ug-signingup-7.png │ ├── ug-signingup-8.png │ ├── ug-signingup-9.png │ ├── ug_collections-1.png │ ├── ug_collections-10.png │ ├── ug_collections-11.png │ ├── ug_collections-12.png │ ├── ug_collections-13.png │ ├── ug_collections-14.png │ ├── ug_collections-15.png │ ├── ug_collections-16.png │ ├── ug_collections-17.png │ ├── ug_collections-18.png │ ├── ug_collections-19.png │ ├── ug_collections-2.png │ ├── ug_collections-20.png │ ├── ug_collections-21.png │ ├── ug_collections-3.png │ ├── ug_collections-4.png │ ├── ug_collections-5.png │ ├── ug_collections-6.png │ ├── ug_collections-7.png │ ├── ug_collections-8.png │ ├── ug_collections-9.png │ ├── ug_datasets-1.png │ ├── ug_datasets-10.png │ ├── ug_datasets-11.png │ ├── ug_datasets-12.png │ ├── ug_datasets-13.png │ ├── ug_datasets-14.png │ ├── ug_datasets-15.png │ ├── ug_datasets-16.png │ ├── ug_datasets-17.png │ ├── ug_datasets-18.png │ ├── ug_datasets-19.png │ ├── ug_datasets-2.png │ ├── ug_datasets-20.png │ ├── ug_datasets-21.png │ ├── ug_datasets-22.png │ ├── ug_datasets-23.png │ ├── ug_datasets-24.png │ ├── ug_datasets-25.png │ ├── ug_datasets-26.png │ ├── ug_datasets-3.png │ ├── ug_datasets-4.png │ ├── ug_datasets-5.png │ ├── ug_datasets-6.png │ ├── ug_datasets-7.png │ ├── ug_datasets-8.png │ ├── ug_datasets-9.png │ ├── ug_extractors-1.png │ ├── ug_extractors-2.png │ ├── ug_extractors-3.png │ ├── ug_extractors-4.png │ ├── ug_following-1.png │ ├── ug_following-2.png │ ├── ug_following-3.png │ ├── ug_following-4.png │ ├── ug_following-5.png │ ├── ug_following-6.png │ ├── ug_search-1.png │ ├── ug_search-2.png │ ├── ug_search-3.png │ ├── ug_spaces-1.png │ ├── ug_spaces-10.png │ ├── ug_spaces-11.png │ ├── ug_spaces-12.png │ ├── ug_spaces-13.png │ ├── ug_spaces-14.png │ ├── ug_spaces-15.png │ ├── ug_spaces-2.png │ ├── ug_spaces-3.png │ ├── ug_spaces-4.png │ ├── ug_spaces-5.png │ ├── ug_spaces-6.png │ ├── ug_spaces-7.png │ ├── ug_spaces-8.png │ ├── ug_spaces-9.png │ ├── ug_staging-1.png │ ├── ug_staging-2.png │ ├── ug_staging-3.png │ ├── ug_staging-4.png │ ├── ug_staging-5.png │ └── ug_staging-6.png │ ├── admin │ ├── customizing.rst │ └── upgrading.rst │ ├── api.rst │ ├── changelog.md │ ├── changelog_md_to_rst.rst │ ├── conf.py │ ├── develop │ ├── architecture.rst │ ├── contribute_docs.rst │ ├── extractors.rst │ └── previewers.rst │ ├── index.rst │ ├── license.rst │ ├── make.bat │ ├── overview.rst │ ├── publishing_data.rst │ ├── requirements.txt │ ├── thankyou.rst │ └── userguide │ ├── installing_clowder.rst │ ├── ug_collections.rst │ ├── ug_datasets.rst │ ├── ug_following.rst │ ├── ug_homepage.rst │ ├── ug_index.rst │ ├── ug_search.rst │ ├── ug_signingup.rst │ └── ug_spaces.rst ├── docker-compose.extractors.yml ├── docker-compose.geoserver.yml ├── docker-compose.override.example.yml ├── docker-compose.yml ├── docker.sh ├── docker ├── clowder.sh ├── custom.conf ├── healthcheck.sh └── play.plugins ├── env.example ├── geostream.sql ├── lib ├── LidoToCidoc.jar ├── URIpolicies.jar ├── lsva-features.jar └── swkmmodel2.jar ├── project ├── Build.scala ├── build.properties ├── medici-play-build.iml └── plugins.sbt ├── public ├── datasetsUserMetadataModel │ ├── user_metadata_model_allowedNodes.txt │ └── user_metadata_model_allowedRelationships.txt ├── filesUserMetadataModel │ ├── user_metadata_model_allowedNodes.txt │ └── user_metadata_model_allowedRelationships.txt ├── fonts │ ├── filtrify │ │ ├── filtrify-webfont.eot │ │ ├── filtrify-webfont.svg │ │ ├── filtrify-webfont.ttf │ │ └── filtrify-webfont.woff │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── images │ ├── cc-by-nc-nd.png │ ├── cc-by-nc-sa.png │ ├── cc-by-nc.png │ ├── cc-by-nd.png │ ├── cc-by-sa.png │ ├── cc-by.png │ ├── cc-pd.png │ ├── chosen-sprite.png │ ├── chosen-sprite@2x.png │ ├── favicon.png │ ├── glyphicons-halflings-white.png │ ├── glyphicons-halflings.png │ ├── json-ld.png │ ├── logo_60.png │ ├── logo_sm.png │ └── texture_metal.jpg ├── javascripts │ ├── DTSbookmarklet │ │ ├── browndog-large-transparent.png │ │ ├── browndog-small-transparent.gif │ │ ├── browndog-small.png │ │ ├── css │ │ │ ├── bootstrap-theme.bd.css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap.bd.css │ │ │ ├── bootstrap.css │ │ │ └── bootstrap.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ │ ├── jquery-1.7.2.js │ │ ├── js │ │ │ ├── bootstrap.min.js │ │ │ ├── lunr.js │ │ │ └── lunr.min.js │ │ ├── lunr.min.js │ │ ├── modal.handlebars │ │ ├── poweredby-transparent.gif │ │ └── row.handlebars │ ├── adminIndex.js │ ├── bootstrap.min.js │ ├── chosen.jquery.js │ ├── clipboard.js │ ├── collection-create.js │ ├── collectionChildCollectionsList.js │ ├── collectionDatasetsList.js │ ├── collectionListProcess.js │ ├── collectionModify.js │ ├── combobox.js │ ├── comment-delete.js │ ├── comment-edit.js │ ├── creators.js │ ├── curation-create.js │ ├── curationProcess.js │ ├── d3js │ │ ├── d3.legend.js │ │ └── d3.v3.min.js │ ├── dataset-attach-fileuploader.js │ ├── datasetListProcess.js │ ├── datasets │ │ └── collections.js │ ├── deflate.js │ ├── deleteUtils.js │ ├── descriptionSummary.js │ ├── displayPanels.js │ ├── errorRedirect.js │ ├── extractors │ │ └── extractors.js │ ├── file-browser │ │ ├── app.js │ │ ├── fileBrowser.js │ │ └── views │ │ │ ├── app.js │ │ │ └── dragdrop.js │ ├── file-uploader │ │ ├── app.js │ │ ├── canvas-to-blob.min.js │ │ ├── cors │ │ │ ├── jquery.postmessage-transport.js │ │ │ └── jquery.xdr-transport.js │ │ ├── jquery.blueimp-gallery.min.js │ │ ├── jquery.fileupload-angular.js │ │ ├── jquery.fileupload-audio.js │ │ ├── jquery.fileupload-clowder-auth.js │ │ ├── jquery.fileupload-image.js │ │ ├── jquery.fileupload-jquery-ui.js │ │ ├── jquery.fileupload-process.js │ │ ├── jquery.fileupload-single-ui.js │ │ ├── jquery.fileupload-ui.js │ │ ├── jquery.fileupload-validate.js │ │ ├── jquery.fileupload-video.js │ │ ├── jquery.fileupload.js │ │ ├── jquery.iframe-transport.js │ │ ├── load-image.all.min.js │ │ ├── main.js │ │ └── tmpl.min.js │ ├── fileListProcess.js │ ├── files │ │ ├── datasets.js │ │ └── main.js │ ├── filtrify.js │ ├── folderListProcess.js │ ├── follow-button.js │ ├── galleria-1.2.9.js │ ├── galleria-classic │ │ ├── classic-loader.gif │ │ ├── classic-map.png │ │ ├── galleria.classic.css │ │ ├── galleria.classic.js │ │ └── galleria.classic.min.js │ ├── geostreams │ │ ├── sensorCreate.js │ │ ├── sensorEdit.js │ │ ├── sensorStreamEdit.js │ │ └── updateMap.js │ ├── handlebars-loader.js │ ├── handlebars-v1.3.0.js │ ├── htmlEncodeDecode.js │ ├── images │ │ ├── animated-overlay.gif │ │ ├── layers-2x.png │ │ ├── layers.png │ │ ├── marker-icon-2x.png │ │ ├── marker-icon.png │ │ ├── marker-shadow.png │ │ ├── ui-bg_flat_45_0088CC_40x100.png │ │ ├── ui-bg_flat_55_999999_40x100.png │ │ ├── ui-bg_flat_75_aaaaaa_40x100.png │ │ ├── ui-bg_glass_55_f8da4e_1x400.png │ │ ├── ui-bg_gloss-wave_45_e14f1c_500x100.png │ │ ├── ui-bg_gloss-wave_75_0088CC_500x100.png │ │ ├── ui-bg_gloss-wave_75_2191c0_500x100.png │ │ ├── ui-bg_inset-hard_100_fcfdfd_1x100.png │ │ ├── ui-icons_0078ae_256x240.png │ │ ├── ui-icons_d8e7f3_256x240.png │ │ ├── ui-icons_f7a50d_256x240.png │ │ ├── ui-icons_fcd113_256x240.png │ │ └── ui-icons_ffffff_256x240.png │ ├── inflate.js │ ├── jquery-1.10.2.js │ ├── jquery-1.8.2.js │ ├── jquery-1.8.2.min.js │ ├── jquery-ui-1.10.3.custom.min.css │ ├── jquery-ui-1.10.3.custom.min.js │ ├── jquery-ui-timepicker-addon.js │ ├── jquery.cookie.js │ ├── jquery.tablesorter.js │ ├── jquery.validate.js │ ├── jstree │ │ ├── jstree.js │ │ ├── jstree.min.js │ │ └── themes │ │ │ ├── default-dark │ │ │ ├── 32px.png │ │ │ ├── 40px.png │ │ │ ├── style.css │ │ │ ├── style.min.css │ │ │ └── throbber.gif │ │ │ └── default │ │ │ ├── 32px.png │ │ │ ├── 40px.png │ │ │ ├── style.css │ │ │ ├── style.min.css │ │ │ └── throbber.gif │ ├── leaflet-src.js │ ├── leaflet.js │ ├── lib │ │ ├── backbone-0.9.2.js │ │ ├── backbone-0.9.2.min.js │ │ ├── handlebars-v4.0.5.js │ │ ├── handlebars-v4.0.5.min.js │ │ ├── imagesloaded.pkgd.min.js │ │ ├── jquery.serializejson.min.js │ │ ├── json2.js │ │ ├── masonry.pkgd.min.js │ │ ├── underscore-1.4.3.js │ │ └── underscore-1.4.3.min.js │ ├── loader.gif │ ├── main.js │ ├── manageAdmins.js │ ├── manageRoles.js │ ├── maxlength.min.js │ ├── mention │ │ ├── jquery.elastic.js │ │ ├── jquery.mentionsInput.css │ │ └── jquery.mentionsInput.js │ ├── metadata │ │ ├── addMetadata.js │ │ ├── definitionDropdowns.js │ │ └── manageDefinitions.js │ ├── noty │ │ ├── jquery.noty.js │ │ ├── layouts │ │ │ ├── bottom.js │ │ │ ├── bottomCenter.js │ │ │ ├── bottomLeft.js │ │ │ ├── bottomRight.js │ │ │ ├── center.js │ │ │ ├── centerLeft.js │ │ │ ├── centerRight.js │ │ │ ├── inline.js │ │ │ ├── top.js │ │ │ ├── topCenter.js │ │ │ ├── topLeft.js │ │ │ └── topRight.js │ │ ├── packaged │ │ │ ├── jquery.noty.packaged.js │ │ │ └── jquery.noty.packaged.min.js │ │ ├── promise.js │ │ └── themes │ │ │ ├── bootstrap.js │ │ │ ├── default.js │ │ │ └── relax.js │ ├── openlayers │ │ ├── ol.css │ │ └── ol.js │ ├── people.js │ ├── popcorn-complete.min.js │ ├── previewers │ │ ├── 3DObj │ │ │ ├── Detector.js │ │ │ ├── RequestAnimationFrame.js │ │ │ ├── Three.js │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── 3DWebGL │ │ │ ├── lazyload-min.js │ │ │ ├── package.json │ │ │ ├── some-library.js │ │ │ └── webGL.js │ │ ├── Book │ │ │ ├── book.css │ │ │ ├── book.js │ │ │ ├── hammer.js │ │ │ ├── jquery.hammer.js │ │ │ ├── package.json │ │ │ ├── seadragon-min.js │ │ │ ├── seadragon.overlay.js │ │ │ ├── seadragon.touch.js │ │ │ ├── some-library.js │ │ │ └── turn.js │ │ ├── PTM │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── Quicktime │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── RDF │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── audio │ │ │ ├── audio.js │ │ │ └── package.json │ │ ├── dataset-image │ │ │ ├── dataset-image.css │ │ │ ├── dataset-image.js │ │ │ └── package.json │ │ ├── dataset-mime-distribution │ │ │ ├── main.css │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── dataset-path │ │ │ ├── main.css │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── geospatial-collection │ │ │ ├── geospatial-collection.js │ │ │ └── package.json │ │ ├── geospatial-dataset │ │ │ ├── geospatial-dataset.js │ │ │ └── package.json │ │ ├── geospatial-geojson │ │ │ ├── geospatial-geojson.js │ │ │ └── package.json │ │ ├── geospatial │ │ │ ├── geospatial.js │ │ │ └── package.json │ │ ├── html │ │ │ ├── html-iframe.js │ │ │ └── package.json │ │ ├── ifc_previewer │ │ │ ├── bundle.js │ │ │ ├── ifc │ │ │ │ └── web-ifc.wasm │ │ │ ├── ifc_viewer.js │ │ │ ├── main.css │ │ │ └── package.json │ │ ├── iframe │ │ │ ├── images │ │ │ │ └── iframe_error.jpg │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── iip │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── main.js │ │ ├── mri-papaya │ │ │ ├── README.md │ │ │ ├── clowder-mri-papaya-screenshot.png │ │ │ ├── mri-papaya.js │ │ │ ├── package.json │ │ │ ├── papaya.css │ │ │ └── papaya.js │ │ ├── oni │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── pdf │ │ │ ├── package.json │ │ │ ├── pdf.js │ │ │ └── some-library.js │ │ ├── pdf3d │ │ │ ├── package.json │ │ │ ├── pdfobject.js │ │ │ └── some-library.js │ │ ├── person-tracking │ │ │ ├── jquery.flot.axislabels.js │ │ │ ├── jquery.flot.crosshair.js │ │ │ ├── jquery.flot.js │ │ │ ├── jquery.flot.navigate.js │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── plain_text │ │ │ ├── package.json │ │ │ └── plain_text.js │ │ ├── presentation │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── sectionRubberband.js │ │ ├── test1 │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── test2 │ │ │ ├── package.json │ │ │ └── some-other-library.js │ │ ├── three_js │ │ │ ├── draco │ │ │ │ ├── README.md │ │ │ │ ├── draco_decoder.js │ │ │ │ ├── draco_decoder.wasm │ │ │ │ ├── draco_encoder.js │ │ │ │ ├── draco_wasm_wrapper.js │ │ │ │ └── gltf │ │ │ │ │ ├── draco_decoder.js │ │ │ │ │ ├── draco_decoder.wasm │ │ │ │ │ ├── draco_encoder.js │ │ │ │ │ └── draco_wasm_wrapper.js │ │ │ ├── js │ │ │ │ ├── DRACOLoader.js │ │ │ │ ├── FBXLoader.js │ │ │ │ ├── GLTFLoader.js │ │ │ │ ├── OrbitControls.js │ │ │ │ ├── fflate.min.js │ │ │ │ ├── stats.min.js │ │ │ │ └── three.min.js │ │ │ ├── package.json │ │ │ ├── style.css │ │ │ └── viewer_three.js │ │ ├── thumbnail │ │ │ ├── package.json │ │ │ └── thumbnail-previewer.js │ │ ├── vega5 │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── vega5.js │ │ ├── video │ │ │ ├── package.json │ │ │ └── video.js │ │ ├── viewer_hop │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── viewer_hop.js │ │ ├── x3dom │ │ │ ├── package.json │ │ │ └── some-library.js │ │ ├── zipfile │ │ │ ├── package.json │ │ │ └── zipfile.js │ │ └── zoomable │ │ │ ├── package.json │ │ │ ├── some-library.js │ │ │ └── zoomit.js │ ├── previews.js │ ├── recommendation.js │ ├── repositories.js │ ├── searchUserMetadata.js │ ├── sectionsListProcess.js │ ├── select2.min.js │ ├── sensors │ │ ├── assign.js │ │ └── removeRelation.js │ ├── spaceListProcess.js │ ├── spaceModify.js │ ├── spaceconfiguration.js │ ├── spin.min.js │ ├── stickytabs │ │ ├── LICENSE │ │ └── jquery.stickytabs.js │ ├── tabsInURL.js │ ├── terraformer │ │ ├── LICENSE.txt │ │ ├── terraformer-1.0.5.min.js │ │ └── terraformer-wkt-parser-1.1.0.min.js │ ├── textUtils.js │ ├── updateLicenseInfo.js │ ├── userMetadata.js │ ├── x3dom.js │ ├── z-worker.js │ └── zip.js ├── jsonld │ └── contexts │ │ ├── extractors.jsonld │ │ └── metadata.jsonld ├── plugins │ ├── IIPZoom.swf │ ├── envlib.jar │ └── expressInstall.swf ├── securesocial │ └── images │ │ └── providers │ │ ├── cilogon.png │ │ ├── crowd.png │ │ ├── keycloak.png │ │ ├── ldap.png │ │ └── orcid.png ├── stylesheets │ ├── chosen.css │ ├── dragdrop.css │ ├── dtsstylediv.css │ ├── extractions.css │ ├── file-uploader │ │ ├── blueimp-gallery.min.css │ │ ├── demo-ie8.css │ │ ├── demo.css │ │ ├── jquery.fileupload-noscript.css │ │ ├── jquery.fileupload-ui-noscript.css │ │ ├── jquery.fileupload-ui.css │ │ ├── jquery.fileupload.css │ │ └── style.css │ ├── filtrify.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── glyphicon-animations.css │ ├── jquery-ui-timepicker-addon.css │ ├── leaflet.css │ ├── leaflet.ie.css │ ├── main.css │ ├── pdf.css │ ├── select2-bootstrap.min.css │ ├── select2.min.css │ ├── tableborder.css │ ├── themes │ │ ├── bootstrap.min.css │ │ ├── cerulean.min.css │ │ ├── cosmo.min.css │ │ ├── cyborg.min.css │ │ ├── darkly.min.css │ │ ├── flatly.min.css │ │ ├── journal.min.css │ │ ├── lumen.min.css │ │ ├── paper.min.css │ │ ├── readable.min.css │ │ ├── sandstone.min.css │ │ ├── sead.min.css │ │ ├── simplex.min.css │ │ ├── slate.min.css │ │ ├── spacelab.min.css │ │ ├── superhero.min.css │ │ ├── united.min.css │ │ └── yeti.min.css │ └── x3dom.css ├── swagger.yml ├── templates │ ├── metadata │ │ ├── add_metadata.handlebars │ │ ├── add_metadata_annotation.handlebars │ │ ├── add_metadata_datetime.handlebars │ │ ├── add_metadata_list.handlebars │ │ ├── add_metadata_listjquery.handlebars │ │ ├── add_metadata_scientific_variable.handlebars │ │ ├── add_metadata_string.handlebars │ │ ├── add_metadata_wktlocation.handlebars │ │ ├── footer.handlebars │ │ ├── search_collection_result.handlebars │ │ ├── search_dataset_result.handlebars │ │ └── search_file_result.handlebars │ ├── sensors │ │ ├── assign.handlebars │ │ ├── parameters-form.handlebars │ │ ├── sensor-form.handlebars │ │ └── stream-form.handlebars │ └── spaces │ │ ├── assign.handlebars │ │ └── mmrepository.handlebars └── tos.txt ├── release.sh ├── sbt ├── sbt-launch-lib.bash ├── sbt-launch.jar ├── sbt.bat ├── scripts ├── README.md ├── clean-extractors-tmpfiles │ ├── Dockerfile │ ├── clean.sh │ └── list.txt ├── create-account.sh ├── crowd │ └── clowder.php ├── elasticsearch │ └── Dockerfile ├── exinfo.py ├── extract.py ├── geostream.py ├── jmeter │ ├── README.md │ └── jmeter-clowder.jmx ├── jupyter-notebook │ ├── collections.ipynb │ ├── dataset_files.ipynb │ └── spaces.ipynb ├── migrates-aws-s3 │ ├── Dockerfile │ ├── README.md │ ├── main.py │ ├── requirements.txt │ └── s3.py ├── mongo-exec.sh ├── mongo-init │ ├── Dockerfile │ ├── README │ ├── mongo-init.py │ └── requirements.txt ├── mongodb │ ├── assign_datasets.js │ ├── check_uploads.py │ └── migrate_users.py ├── monitor │ ├── Dockerfile │ ├── bootstrap-table.min.css │ ├── bootstrap-table.min.js │ ├── bootstrap.min.css │ ├── bootstrap.min.js │ ├── extractors.json │ ├── fa-solid-900.woff2 │ ├── favicon.png │ ├── fontawesome.min.css │ ├── index.html │ ├── jquery-3.3.1.min.js │ ├── monitor.py │ ├── popper.min.js │ ├── requirements.txt │ └── solid.min.css ├── reports │ └── SummarizeExtractionsByUser.js ├── rmq-error-shovel │ ├── Dockerfile │ ├── README.md │ ├── check_rabbitmq.py │ └── requirements.txt ├── test-tags.sh ├── tester │ ├── Dockerfile │ └── tester.sh ├── toollaunchservice │ ├── Dockerfile │ ├── FILES.toolserver │ │ └── usr │ │ │ └── local │ │ │ ├── bin │ │ │ ├── clowder-xfer │ │ │ ├── toolserver │ │ │ └── usage │ │ │ └── data │ │ │ └── toolconfig.json │ ├── Makefile │ └── toolserver.service ├── ubuntu │ ├── README.md │ ├── clowder.conf │ └── update-clowder.sh ├── updates │ ├── README.md │ ├── UpdateUserId.js │ ├── fix-counts.js │ └── update-avatar-url-to-https.js ├── upload.py └── web │ ├── README.md │ ├── extract.php │ ├── info.php │ ├── plots │ ├── README.md │ ├── days.gnuplot │ ├── hours.gnuplot │ ├── minutes.gnuplot │ ├── plot.php │ └── publish.sh │ ├── publish.sh │ └── tests │ ├── README.md │ ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── bootstrap.min.css │ ├── failure_watchers.txt │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff │ ├── js │ ├── bootstrap.js │ └── bootstrap.min.js │ ├── pass_watchers.txt │ ├── plot.gnuplot │ ├── plot.php │ ├── publish.sh │ ├── test.php │ ├── tests.php │ ├── tests.py │ └── tests.txt ├── test ├── data │ ├── collections │ │ ├── data-test-collection-1.json │ │ ├── data-test-collection.json │ │ ├── dataset-image-1.zip │ │ └── dataset-image.zip │ ├── contextld │ │ ├── data-test-contextld-2.json │ │ ├── data-test-contextld-inline.json │ │ ├── data-test-contextld-person.json │ │ └── data-test-contextld.json │ ├── datasets │ │ ├── dataset-image.zip │ │ ├── dataset-search-general.json │ │ ├── dataset-search-user.json │ │ ├── dataset-test-general.json │ │ ├── dataset-test-tags-remove-one.json │ │ ├── dataset-test-tags-remove-round-two.json │ │ ├── dataset-test-tags-remove.json │ │ ├── dataset-test-tags-round-two.json │ │ ├── dataset-test-tags.json │ │ ├── dataset-test-user.json │ │ ├── morrowplots.jpg │ │ └── zip-file-thumbnail.jpg │ ├── extractions │ │ ├── morrowplots-thumb.jpg │ │ └── morrowplots.jpg │ ├── files │ │ ├── data-search-general.json │ │ ├── data-search-user.json │ │ ├── data-test-general.json │ │ ├── data-test-user.json │ │ ├── morrowplots-thumb-1.jpg │ │ ├── morrowplots-thumb.jpg │ │ └── morrowplots.jpg │ ├── previews │ │ ├── data-test-general.json │ │ ├── data-test-preview.json │ │ ├── morrowplots-preview-1.jpg │ │ ├── morrowplots-preview-meta.jpg │ │ ├── morrowplots-preview.jpg │ │ └── morrowplots.jpg │ └── spaces │ │ ├── data-test-collections.json │ │ └── data-test-spaces.json ├── integration │ ├── APITestSuite.scala │ ├── app-server │ │ ├── AppFixture.scala │ │ ├── AppFunctionalTest.scala │ │ ├── ApplicationSpec.scala │ │ ├── ApplicationTestSuite.scala │ │ ├── IntegrationSpec.scala │ │ └── ServerFixture.scala │ ├── collections │ │ ├── APICollectionsTestSuite.scala │ │ └── CollectionsAPIAppSpec.scala │ ├── contextld │ │ ├── APIContextLDTestSuite.scala │ │ ├── ContextLDAPIAppSpec.scala │ │ └── MongoDBContextLDSpec.scala │ ├── datasets │ │ ├── APIDatasetsTestSuite.scala │ │ └── DatasetsAPIAppSpec.scala │ ├── dts │ │ ├── APIDTSExtractionsTestSuite.scala │ │ └── DTSExtractionsAPIAppSpec.scala │ ├── extractions │ │ ├── APIExtractionsTestSuite.scala │ │ └── ExtractionsAPIAppSpec.scala │ ├── files │ │ ├── APIFilesTestSuite.scala │ │ └── FilesAPIAppSpec.scala │ ├── metadata │ │ └── MetadataMongoDBSpec.scala │ ├── previews │ │ ├── APIPreviewsTestSuite.scala │ │ └── PreviewsAPIAppSpec.scala │ ├── spaces │ │ ├── APISpacesTestSuite.scala │ │ ├── SpaceMongoDBSpec.scala │ │ └── SpacesAPIAppSpec.scala │ └── utilities │ │ └── MultiFileUpload.scala ├── testing-coverage.csv └── unit │ ├── RelationSpec.scala │ ├── app-server │ ├── FileSpec.scala │ ├── MongoDBSpec.scala │ ├── MongoFileSpec.scala │ ├── TestData.scala │ └── UnitSpec.scala │ ├── contextld │ └── ContextLDSpec.scala │ ├── extractions │ └── ExtractionHTMLControllerSpec.scala │ ├── metadata │ ├── MetadataSpec.scala │ └── metadataTestData.scala │ └── spaces │ └── SpaceSpec.scala └── version.sh /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | target 3 | logs 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # add some explicit text file types 2 | *.scala text diff=scala 3 | *.js text diff=javascript 4 | *.html text diff=html 5 | *.xml text diff=xml 6 | *.less text diff=less 7 | *.json text diff=json 8 | *.css text diff=css 9 | *.java text diff=java 10 | *.txt text diff=txt 11 | *.conf text diff=property 12 | *.properties text diff=property 13 | *.plugins text diff=txt 14 | *.bat text diff=bat eol=crlf 15 | *.sh text diff=bat eol=lf 16 | routes text diff=txt 17 | 18 | 19 | # add some explicit binary file types 20 | *.png binary 21 | *.gif binary 22 | *.jpg binary 23 | *.jar binary 24 | *.dll binary 25 | *.so binary 26 | 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/swagger.yml: -------------------------------------------------------------------------------- 1 | name: swagger 2 | 3 | # This will run when: 4 | # - when new code is pushed to master/develop to make sure the 5 | # code does compile. 6 | # - when a pull request is created and updated to make sure the 7 | # code does compile. 8 | on: 9 | push: 10 | branches: 11 | - master 12 | - develop 13 | 14 | pull_request: 15 | 16 | # Check to make sure swagger document is valid 17 | jobs: 18 | 19 | # downloads all the dependencies and compiles the scala code 20 | lint: 21 | runs-on: ubuntu-latest 22 | steps: 23 | - uses: actions/checkout@v3 24 | 25 | - name: openapi-lint 26 | uses: mbowman100/swagger-validator-action@master 27 | with: 28 | files: public/swagger.yml 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore customizations to clowder 2 | docker-compose.override.yml 3 | .env 4 | custom 5 | 6 | # ignore build folders 7 | project/project 8 | project/target 9 | target 10 | 11 | logs 12 | docker/files 13 | tmp 14 | bin 15 | /*.sublime-workspace 16 | .history 17 | .cache 18 | .target 19 | dist 20 | /.idea 21 | /*.iml 22 | /out 23 | /.idea_modules 24 | /.classpath 25 | /.project 26 | /.settings 27 | /RUNNING_PID 28 | doc/src/sphinx/_build 29 | /conf/custom.conf 30 | .DS_Store 31 | /doc/src/sphinx/_build 32 | **/.c9/* 33 | *~ 34 | -------------------------------------------------------------------------------- /app/api/Institutions.scala: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | import services.mongodb.MongoDBInstitutionService 4 | import javax.inject.Inject 5 | import play.api.libs.json.Json.toJson 6 | 7 | // TODO CATS-66 remove MongoDBInstitutionService, make part of UserService? 8 | class Institutions @Inject() (institutions: MongoDBInstitutionService) extends ApiController { 9 | 10 | /* 11 | * Add a new institution to the database 12 | */ 13 | def addinstitution(institution: String) = PermissionAction(Permission.EditUser) { implicit request => 14 | institutions.addNewInstitution(institution) 15 | Ok(toJson("added institution")) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/api/Projects.scala: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | import javax.inject.Inject 4 | 5 | import play.api.libs.json.Json.toJson 6 | import services.mongodb.MongoDBProjectService 7 | 8 | // TODO CATS-66 convert this to non mongo classs 9 | class Projects @Inject()(projects: MongoDBProjectService) extends ApiController { 10 | /* 11 | * Add a new project to the database 12 | */ 13 | def addproject(project: String) = PermissionAction(Permission.EditUser) { implicit request => 14 | projects.addNewProject(project) 15 | Ok(toJson("added project")) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/api/Tree.scala: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | import javax.inject.{Inject, Singleton} 4 | import play.api.libs.json.Json.toJson 5 | import services._ 6 | 7 | @Singleton 8 | class Tree @Inject() ( 9 | treeService: TreeService) extends ApiController { 10 | 11 | def getChildrenOfNode(nodeType: String, nodeId: Option[String], mine: Boolean) = PrivateServerAction { implicit request => 12 | request.user match { 13 | case Some(user) => { 14 | var result = treeService.getChildrenOfNode(nodeType,nodeId,mine,user) 15 | Ok(toJson(result)) 16 | } 17 | case None => BadRequest("No user supplied") 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (has been removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a&, 9 | button& { 10 | color: @color; 11 | 12 | .list-group-item-heading { 13 | color: inherit; 14 | } 15 | 16 | &:hover, 17 | &:focus { 18 | color: @color; 19 | background-color: darken(@background, 5%); 20 | } 21 | &.active, 22 | &.active:hover, 23 | &.active:focus { 24 | color: #fff; 25 | background-color: @color; 26 | border-color: @color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | line-height: @line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | .border-left-radius(@border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | .border-right-radius(@border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/reset-text.less: -------------------------------------------------------------------------------- 1 | .reset-text() { 2 | font-family: @font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: @line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table !important; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /app/assets/stylesheets/bootstrap/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /app/controllers/Selected.scala: -------------------------------------------------------------------------------- 1 | package controllers 2 | 3 | import javax.inject.Inject 4 | 5 | import play.api.Logger 6 | import play.api.mvc.Controller 7 | import services.{FileService, SelectionService} 8 | 9 | /** 10 | * Show selected datasets. 11 | */ 12 | class Selected @Inject()(selections: SelectionService, files: FileService) extends Controller with SecuredController { 13 | 14 | def get() = AuthenticatedAction { implicit request => 15 | request.user match { 16 | case Some(identity) => { 17 | implicit val user = request.user 18 | val datasets = selections.get(request.user.get.email.get) // TODO handle edge cases 19 | Ok(views.html.selected(datasets.to[scala.collection.mutable.ListBuffer])) 20 | } 21 | case None => Logger.error("Error get user from request"); InternalServerError 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/models/Comment.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | import com.novus.salat.annotations.raw.Ignore 5 | 6 | /** 7 | * Comment 8 | * 9 | * Based on http://docs.mongodb.org/manual/use-cases/storing-comments/ 10 | * 11 | * 12 | */ 13 | case class Comment( 14 | author: MiniUser, 15 | text: String, 16 | comment_id: Option[UUID] = None, 17 | dataset_id: Option[UUID] = None, 18 | file_id: Option[UUID] = None, 19 | section_id: Option[UUID] = None, 20 | posted: Date = new Date(), 21 | id: UUID = UUID.generate, 22 | @Ignore replies: List[Comment] = List.empty) 23 | -------------------------------------------------------------------------------- /app/models/ContextLD.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import play.api.libs.json.JsValue 4 | import play.api.libs.json.Json 5 | import play.api.libs.json.JsString 6 | 7 | 8 | /** 9 | * Model for Context in Json-ld 10 | */ 11 | 12 | case class ContextLD( 13 | id: UUID = UUID.generate, 14 | contextName: JsString, //e.g. ncsa.cv.face.jsonld or some user id .jsonld 15 | context: JsValue) 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/models/Credentials.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * User credentials. Used for login form. 5 | * 6 | */ 7 | case class Credentials( 8 | email: String, 9 | password: String) 10 | -------------------------------------------------------------------------------- /app/models/DBCounts.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** Small class that contains a set of Long counts for various types of data in the database **/ 4 | case class DBCounts(numDatasets: Long=0, numFiles: Long=0, numBytes: Long=0, numCollections: Long=0, 5 | numSpaces: Long=0, numUsers: Long=0) { 6 | 7 | def getMap(): Map[String, Long] = { 8 | Map( 9 | "datasets"->numDatasets, 10 | "files"->numFiles, 11 | "bytes"->numBytes, 12 | "collections"->numCollections, 13 | "spaces"->numSpaces, 14 | "users"->numUsers 15 | ) 16 | } 17 | } -------------------------------------------------------------------------------- /app/models/DatasetXMLMetadata.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Dataset XML metadata. 5 | * 6 | */ 7 | case class DatasetXMLMetadata( 8 | xmlMetadata: Map[String, Any] = Map.empty, 9 | fileId: String) 10 | 11 | -------------------------------------------------------------------------------- /app/models/ExtractionRequests.scala: -------------------------------------------------------------------------------- 1 | package models 2 | import java.util.Date 3 | 4 | /** 5 | * DTS Requests information 6 | * 7 | */ 8 | 9 | case class ExtractionRequests( 10 | serverIP:String, 11 | clientIP:String, 12 | fileId:UUID, 13 | fileName:String, 14 | fileType:String, 15 | fileSize:Long, 16 | uploadDate:Date, 17 | extractors:Option[List[String]], 18 | startTime:Option[Date], 19 | endTime:Option[Date] 20 | ) 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/models/ExtractorsForInstance.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Information about extractors enabled globally across an instance. 5 | */ 6 | case class ExtractorsForInstance( 7 | extractors: List[String] 8 | ) 9 | -------------------------------------------------------------------------------- /app/models/ExtractorsForSpace.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Information about extractors assigned to a space. This only represents extractors that were customized for a specific 5 | * space. For example enabled/disabled. By default we currently show all global extractors on each space and let users 6 | * enable/disable them if they so wish. 7 | * 8 | * TODO: If we wanted to have default parameters for an extractor defined by space, this could be one place to store them. 9 | */ 10 | case class ExtractorsForSpace( 11 | spaceId:String, 12 | enabled: List[String] = List.empty[String], 13 | disabled: List[String] = List.empty[String] 14 | ) 15 | -------------------------------------------------------------------------------- /app/models/FileLink.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | /** 6 | * Shareable link to access file without an account. Anyone with the link can access the file. 7 | */ 8 | case class FileLink ( 9 | id: UUID = UUID.generate, 10 | fileId: UUID, 11 | author: MiniUser, 12 | expire: Date) 13 | 14 | 15 | object FileLink { 16 | def create(fileId: UUID, author: MiniUser, expireDays: Int): FileLink = { 17 | import java.util.Calendar 18 | val calendar = Calendar.getInstance 19 | calendar.add(Calendar.DAY_OF_YEAR, expireDays) 20 | val expireDate = calendar.getTime 21 | create(fileId, author, expireDate) 22 | } 23 | 24 | def create(fileId: UUID, author: MiniUser, expire: Date): FileLink = { 25 | new FileLink(fileId = fileId, author = author, expire = expire) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/models/FileMD.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Used for uploading of files. 5 | * 6 | */ 7 | case class FileMD(userid: String) 8 | -------------------------------------------------------------------------------- /app/models/Folder.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | /** 6 | * A folder 7 | */ 8 | case class Folder ( 9 | id: UUID = UUID.generate, 10 | created: Date, 11 | author: MiniUser, 12 | name: String = "N/A", 13 | displayName: String = "N/A", 14 | files: List[UUID] = List.empty, 15 | folders: List[UUID] = List.empty, 16 | parentId: UUID, 17 | parentType: String, 18 | parentDatasetId: UUID) 19 | 20 | -------------------------------------------------------------------------------- /app/models/Geometry.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * 3D binary geometry files for x3dom. 5 | * 6 | * 7 | */ 8 | case class ThreeDGeometry( 9 | id: UUID = UUID.generate(), 10 | loader_id: String = "", 11 | loader: String = "", 12 | file_id: Option[String] = None, 13 | filename: Option[String] = None, 14 | contentType: String, 15 | level: Option[String], 16 | length: Long) 17 | 18 | -------------------------------------------------------------------------------- /app/models/IncrementCounter.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | class IncrementCounter { 4 | var count = 0 5 | } -------------------------------------------------------------------------------- /app/models/Institution.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Institution string for profile attributes 5 | */ 6 | case class Institution( 7 | name: String) 8 | -------------------------------------------------------------------------------- /app/models/MiniEntity.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import play.api.libs.json._ 4 | 5 | /** 6 | * Class to contain a subset of Entity data for fast loading. 7 | * 8 | */ 9 | case class MiniEntity( 10 | id: UUID, 11 | name: String, 12 | objectType: String) 13 | 14 | object MiniEntity { 15 | implicit val miniEntityFormat = Json.format[MiniEntity] 16 | } 17 | -------------------------------------------------------------------------------- /app/models/MultimediaFeatures.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Feature vectors used for multimedia indexing. 5 | * 6 | */ 7 | case class MultimediaFeatures( 8 | id: UUID = UUID.generate, 9 | file_id: Option[UUID] = None, 10 | section_id: Option[UUID] = None, 11 | features: List[Feature]) 12 | 13 | case class Feature( 14 | representation: String, 15 | descriptor: List[Double]) 16 | 17 | case class MultimediaDistance( 18 | source_section: UUID, 19 | target_section: UUID, 20 | representation: String, 21 | distance: Double, 22 | target_spaces: List[UUID]) 23 | 24 | -------------------------------------------------------------------------------- /app/models/Pager.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * A simple structure to assist in handling paging through a list of resources. 5 | * `prev` and `next` contain the ID of the previous and next resources (respectively). 6 | * 7 | * Currently this class is used for paging through files in a dataset, but could 8 | * be used to handle paging for any list of arbitrary UUIDs / resources in other contexts. 9 | * 10 | * See: 11 | * {@link views.files}, 12 | * {@link controllers.Files#file} 13 | * 14 | * @param prev UUID of the previous resource in the list 15 | * @param next UUID of the next resource in the list 16 | * 17 | * @author lambert8 18 | */ 19 | case class Pager( 20 | prev: Option[models.UUID], 21 | next: Option[models.UUID] 22 | ) 23 | -------------------------------------------------------------------------------- /app/models/PreviewFilesSearchResult.scala: -------------------------------------------------------------------------------- 1 | /** 2 | * Previewers and Files Search Resutls. 3 | * Used by multimedia search to pass information 4 | * between controller and viewer. 5 | * 6 | * Specifically, used by VersusPlugin, Search, ContentBasedSearchResultsVideo3 7 | * 8 | * Searching through files (born as still images) and video previews 9 | * (first shot of each frame of the video) 10 | * 11 | * 12 | */ 13 | 14 | package models 15 | 16 | case class PreviewFilesSearchResult( 17 | fileOrPreview:String, 18 | searchResultFile: SearchResultFile, 19 | searchResultPreview: SearchResultPreview 20 | ) 21 | 22 | -------------------------------------------------------------------------------- /app/models/Previewer.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Previewers are javascripts library to visualize information on the web interface. 5 | * 6 | */ 7 | case class Previewer( 8 | id: String, 9 | path: String, 10 | main: String, 11 | contentType: List[String], 12 | supportedPreviews: List[String], 13 | file: Boolean = false, 14 | preview: Boolean = false, 15 | dataset: Boolean = false, 16 | collection: Boolean = false) 17 | 18 | -------------------------------------------------------------------------------- /app/models/Project.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Project string for profile attributes 5 | */ 6 | case class Project( 7 | name: String) 8 | 9 | -------------------------------------------------------------------------------- /app/models/Relation.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.net.URL 4 | 5 | /** 6 | * Track relations between two arbitrary resources. 7 | */ 8 | case class Relation ( 9 | id: UUID = UUID.generate, 10 | source: Node, 11 | target: Node, 12 | rdfType: Option[String] = None // rdfType: Option[URI] 13 | ) 14 | 15 | /** 16 | * Source or sink node of a relationship. 17 | * 18 | * @param id a string so that it could be both a local UIUD as well as an external URL 19 | * @param resourceType internal resource type (dataset, file, etc.) 20 | */ 21 | case class Node ( 22 | id: String, 23 | resourceType: ResourceType.Value 24 | ) 25 | 26 | case class NodeDataset(dataset: Dataset, rdfType: Option[String]) 27 | 28 | case class NodeFile(file: File, rdfType: Option[String]) 29 | 30 | case class NodeURL(url: URL, rdfType: Option[String]) 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/models/RequestResource.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Contains information about an authorization request 5 | * 6 | */ 7 | 8 | case class RequestResource( 9 | id: UUID, 10 | name: String = "N/A", 11 | comment: String = "N/A"){ 12 | override def equals(o: Any) = o match { 13 | case that: RequestResource => that.id.equals(this.id) 14 | case _ => false 15 | } 16 | } -------------------------------------------------------------------------------- /app/models/SectionIndexInfo.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Information about index containing sections. Index can have a name and a type. 5 | * 6 | * 7 | */ 8 | case class SectionIndexInfo( 9 | indexId:String, 10 | indexName:Option[String] = None, 11 | indexType: Option[String] = None 12 | ) -------------------------------------------------------------------------------- /app/models/Selected.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import org.bson.types.ObjectId 4 | import com.novus.salat.dao.{ModelCompanion, SalatDAO} 5 | import services.mongodb.MongoContext.context 6 | import play.api.Play.current 7 | import play.api.Logger 8 | import com.mongodb.casbah.commons.MongoDBObject 9 | import com.mongodb.casbah.WriteConcern 10 | import com.mongodb.casbah.Imports._ 11 | import services.mongodb.MongoSalatPlugin 12 | 13 | 14 | /** 15 | * Selected items. 16 | */ 17 | case class Selected ( 18 | id: ObjectId = new ObjectId, 19 | user: String, 20 | datasets: List[String] = List.empty 21 | ) 22 | 23 | -------------------------------------------------------------------------------- /app/models/ServerStartTime.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | 6 | /** 7 | * Keeps track of server start time 8 | * Used in Global Object 9 | * 10 | */ 11 | object ServerStartTime { 12 | var startTime: Date=null 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/models/Statistic.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | import play.api.libs.json.Json._ 5 | import play.api.libs.json._ 6 | 7 | 8 | case class Statistics ( 9 | views: Int = 0, 10 | downloads: Int = 0, 11 | last_viewed: Option[Date] = None, 12 | last_downloaded: Option[Date] = None 13 | ) { 14 | def to_jsonld() : JsValue = { 15 | return Json.toJson(views) 16 | } 17 | } 18 | 19 | 20 | case class StatisticUser ( 21 | user_id: UUID, 22 | resource_id: UUID, 23 | resource_type: String, 24 | views: Int = 0, 25 | downloads: Int = 0, 26 | last_viewed: Date = new Date(), 27 | last_downloaded: Date = new Date() 28 | ) 29 | -------------------------------------------------------------------------------- /app/models/Tag.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | import play.api.libs.json._ 6 | 7 | 8 | /** 9 | * Add and remove tags 10 | * 11 | */ 12 | case class Tag( 13 | id: UUID = UUID.generate, 14 | name: String, 15 | userId: Option[String], 16 | extractor_id: Option[String], 17 | created: Date) { 18 | def to_json() : JsValue = { 19 | return Json.toJson(name) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/models/TempFile.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | import play.api.libs.json.Json 6 | 7 | /** 8 | * Temporary files used when uploading query images for image based searches. 9 | * 10 | * TODO change name of collection to be more generic so it can be reused in other places? 11 | */ 12 | case class TempFile( 13 | id: UUID = UUID.generate, 14 | path: Option[String] = None, 15 | filename: String, 16 | uploadDate: Date, 17 | contentType: String, 18 | length: Long = 0, 19 | thumbnail_id: Option[UUID] = None 20 | ) -------------------------------------------------------------------------------- /app/models/ThreeDAnnotation.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * 3D textures for x3dom generated from obj models. 5 | * 6 | */ 7 | case class ThreeDAnnotation( 8 | x_coord: String, 9 | y_coord: String, 10 | z_coord: String, 11 | description: String = "", 12 | id: UUID = UUID.generate) 13 | -------------------------------------------------------------------------------- /app/models/ThreeDTexture.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * 3D textures for x3dom generated from obj models. 5 | * 6 | */ 7 | case class ThreeDTexture( 8 | id: UUID = UUID.generate(), 9 | loader_id: String = "", 10 | loader: String = "", 11 | file_id: Option[String] = None, 12 | filename: Option[String] = None, 13 | contentType: String, 14 | length: Long) 15 | 16 | -------------------------------------------------------------------------------- /app/models/Thumbnail.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import java.util.Date 4 | 5 | /** 6 | * Thumbnails for datasets and files. 7 | */ 8 | case class Thumbnail( 9 | id: UUID = UUID.generate(), 10 | loader_id: String = "", 11 | loader: String = "", 12 | length: Long, 13 | filename: Option[String] = None, 14 | contentType: String, 15 | uploadDate: Date 16 | ) 17 | -------------------------------------------------------------------------------- /app/models/Tile.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Pyramid tiles of images for Seadragon. 5 | * 6 | * 7 | */ 8 | case class Tile( 9 | id: UUID = UUID.generate, 10 | loader_id: String = "", 11 | loader: String = "", 12 | preview_id: Option[String] = None, 13 | filename: Option[String] = None, 14 | contentType: String, 15 | level: Option[String], 16 | length: Long) 17 | -------------------------------------------------------------------------------- /app/models/TimerJob.scala: -------------------------------------------------------------------------------- 1 | package models 2 | import java.util.Date 3 | 4 | 5 | 6 | /** 7 | * Job to be put into scheduler 8 | * 9 | */ 10 | case class TimerJob( 11 | name: String, 12 | minute: Option[Integer] = None, 13 | hour: Option[Integer] = None, 14 | day_of_month: Option[Integer] = None, 15 | day_of_week: Option[Integer] = None, 16 | function: Option[String] = None, 17 | parameters: Option[UUID] = None, 18 | frequency: Option[String] = None, 19 | lastJobTime: Option[Date] = None 20 | ) 21 | -------------------------------------------------------------------------------- /app/models/TypedID.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import play.api.libs.json._ 4 | 5 | /** 6 | * Gives access to the type of a particular UUID 7 | * 8 | */ 9 | case class TypedID( 10 | id: UUID, 11 | objectType: String 12 | ) 13 | 14 | object TypedID { 15 | implicit val typedIDFormat = Json.format[TypedID] 16 | } 17 | -------------------------------------------------------------------------------- /app/models/UserSpaceAndRole.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Elements here are initialized to null since they should always be defined, and if they are not, 5 | * then it is an exception case. 6 | */ 7 | case class UserSpaceAndRole ( 8 | spaceId: UUID = null, 9 | role: Role = null // TODO replace with UUID 10 | ) -------------------------------------------------------------------------------- /app/models/VersusSimilarityResult.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import play.api.libs.json.JsValue 4 | import play.api.libs.json.Reads 5 | import play.api.libs.json.JsSuccess 6 | 7 | /** 8 | * Multimedia search result. 9 | */ 10 | object VersusSimilarityResult { 11 | 12 | case class VersusSimilarityResult( 13 | val docID: String, 14 | val proximity: Double, 15 | val maxProximity: Double) 16 | 17 | implicit object VersusSimilarityResult extends Reads[VersusSimilarityResult] { 18 | def reads(json: JsValue) = { 19 | val maybedocID: String = (json \ "docID").as[String] 20 | val maybeProx: Double = (json \ "proximity").as[Double] 21 | val maybeMaxProx: Double = (json \ "maxProximity").as[Double] 22 | 23 | JsSuccess(VersusSimilarityResult(maybedocID, maybeProx, maybeMaxProx)) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/models/WebPageResource.scala: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | /** 4 | * Web page URL and (file URLs in that specific web page, UUIDs for those file saved in database) 5 | * This is used for DTS service 6 | * 7 | * 8 | */ 9 | case class WebPageResource( 10 | id: UUID, 11 | webPageURL:String, 12 | URLs: Map[String,String] 13 | ) -------------------------------------------------------------------------------- /app/services/ContextLDService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.UUID 4 | import models.ContextLD 5 | import play.api.libs.json.JsValue 6 | import play.api.libs.json.JsString 7 | 8 | /** 9 | * Context service for add, query and delete Json-ld contexts 10 | * 11 | */ 12 | 13 | trait ContextLDService { 14 | 15 | /** Add context for metadata **/ 16 | def addContext(contextName: JsString, contextld: JsValue): UUID 17 | 18 | /** Get context **/ 19 | def getContextById(id: UUID): Option[JsValue] 20 | 21 | /** Get context by name **/ 22 | def getContextByName(contextName: String): Option[JsValue] 23 | 24 | /** Remove context **/ 25 | def removeContext(id: UUID) 26 | 27 | /** Update context **/ 28 | def updateContext(context: ContextLD) 29 | 30 | } -------------------------------------------------------------------------------- /app/services/ExtractionRequestsService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | import java.util.Date 3 | import models._ 4 | /** 5 | * Tracks extractions requests 6 | * 7 | */ 8 | trait ExtractionRequestsService { 9 | 10 | def insertRequest(serverIP:String,clientIP:String,filename:String,fileid:UUID,fileType:String,filesize:Long, uploadDate:Date) 11 | 12 | def updateRequest(file_id:UUID,extractor_id:String) 13 | 14 | def getDTSRequests():List[ExtractionRequests] 15 | } -------------------------------------------------------------------------------- /app/services/FileLinkService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{FileLink, MiniUser, UUID} 4 | 5 | trait FileLinkService { 6 | 7 | def createLink(fileId: UUID, author: MiniUser, expireDays: Int): FileLink 8 | 9 | def getLinkByFileId(fileId: UUID): List[FileLink] 10 | 11 | def deleteLink(linkId: UUID) 12 | 13 | def getLinkByLinkId(linkId: UUID): Option[FileLink] 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/services/InstitutionService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | /** 4 | * Service definition to interact with institutions database. 5 | * 6 | */ 7 | trait InstitutionService { 8 | 9 | /** 10 | * List all institutions in the system. 11 | */ 12 | def getAllInstitutions: List[String] 13 | 14 | def addNewInstitution(institution: String) 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/services/LogService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | /** 3 | * Service to get extraction logs. 4 | */ 5 | trait LogService { 6 | def getLog(extractorName: String, submissionID: Option[String]): List[String] 7 | } 8 | -------------------------------------------------------------------------------- /app/services/ProjectService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | /** 4 | * Service definition to interact with projects database. 5 | * 6 | */ 7 | trait ProjectService { 8 | 9 | /** 10 | * List all projects in the system. 11 | */ 12 | def getAllProjects: List[String] 13 | 14 | def addNewProject(project: String) 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/services/RelationService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{ResourceType, UUID, Relation} 4 | 5 | /** 6 | * Track relations between resources. 7 | */ 8 | trait RelationService { 9 | 10 | def list(): List[Relation] 11 | 12 | def get(id: UUID): Option[Relation] 13 | 14 | def add(relation: Relation): Option[UUID] 15 | 16 | def delete(id: UUID) 17 | 18 | def findTargets(sourceId: String, sourceType: ResourceType.Value, targetType: ResourceType.Value): List[String] 19 | 20 | def findRelationships(sourceId: String, sourceType: ResourceType.Value, targetType: ResourceType.Value): List[Relation] 21 | } 22 | -------------------------------------------------------------------------------- /app/services/SelectionService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{UUID, Dataset} 4 | 5 | /** 6 | * Service for adding & removing user selections, as well as downloading/deleting selected datasets. 7 | */ 8 | trait SelectionService { 9 | 10 | def add(dataset: UUID, user: String) 11 | 12 | def remove(dataset: UUID, user: String) 13 | 14 | def get(user: String): List[Dataset] 15 | 16 | def deleteAll(user: String) 17 | 18 | def downloadAll(user: String) 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/services/SpaceCopyPlugin.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import play.api.{Application, Logger, Plugin} 4 | 5 | /** 6 | * Plugin to enable copying datasets between spaces. 7 | */ 8 | class SpaceCopyPlugin(application: Application) extends Plugin { 9 | 10 | override def onStart() { 11 | Logger.info("Space Copy Plugin started") 12 | } 13 | 14 | 15 | override def onStop() { 16 | Logger.info("Space Copy Plugin has stopped") 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/services/SpaceSharingPlugin.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import play.api.{Application, Logger, Plugin} 4 | /** 5 | * Plugin to enable sharing datasets and collections between Project Spaces 6 | */ 7 | class SpaceSharingPlugin(application: Application) extends Plugin { 8 | 9 | override def onStart() { 10 | Logger.info("Space Sharing Plugin started") 11 | } 12 | 13 | override def onStop() { 14 | Logger.info("Space Sharing Plugin has stopped") 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/services/StagingAreaPlugin.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import play.api.{Plugin, Logger, Application} 4 | /** 5 | * Staging Area Plugin. 6 | */ 7 | class StagingAreaPlugin(application: Application) extends Plugin{ 8 | 9 | override def onStart() { 10 | Logger.info("Staging Area Plugin started") 11 | } 12 | 13 | override def onStop() { 14 | Logger.info("Staging Area Plugin has stopped") 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/services/StandardVocabularyService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import com.mongodb.WriteResult 4 | import models.{StandardVocab, UUID} 5 | import org.bson.types.ObjectId 6 | 7 | trait StandardVocabularyService { 8 | 9 | def create(terms: List[String]): StandardVocab 10 | 11 | def retrieve() : List[StandardVocab] 12 | 13 | def retrieve(id: UUID) : Option[StandardVocab] 14 | 15 | def update(id: UUID, terms : List[String]): Option[StandardVocab] 16 | 17 | def delete(id: UUID) : WriteResult 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/services/TagService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import api.UserRequest 4 | import play.api.libs.json.JsValue 5 | import models.{Tag, UUID} 6 | 7 | /** 8 | * Service to manipulate tags 9 | */ 10 | abstract class TagService { 11 | def addTagsHelper(obj_type: TagCheckObjType, id: UUID, request: UserRequest[JsValue]): (Boolean, String, List[Tag]) 12 | def removeTagsHelper(obj_type: TagCheckObjType, id: UUID, request: UserRequest[JsValue]): (Boolean, String) 13 | } 14 | 15 | // Used in checking error conditions for tags, the checkErrorsForTag(...) method below 16 | abstract class TagCheckObjType 17 | case object TagCheck_File extends TagCheckObjType 18 | case object TagCheck_Dataset extends TagCheckObjType 19 | case object TagCheck_Section extends TagCheckObjType 20 | -------------------------------------------------------------------------------- /app/services/TempFileService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{UUID, TempFile} 4 | 5 | /** 6 | * Service to manipulate tempfiles. 7 | */ 8 | trait TempFileService { 9 | 10 | def get(query_id: UUID): Option[TempFile] 11 | 12 | /** 13 | * Update thumbnail used to represent this query file. 14 | */ 15 | def updateThumbnail(queryId: UUID, thumbnailId: UUID) 16 | } 17 | -------------------------------------------------------------------------------- /app/services/TileService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{UUID, Tile} 4 | import java.io.InputStream 5 | import play.api.libs.json.JsValue 6 | 7 | /** 8 | * Service to manipulate tiles. 9 | */ 10 | trait TileService { 11 | 12 | def get(tileId: UUID): Option[Tile] 13 | 14 | def updateMetadata(tileId: UUID, previewId: UUID, level: String, json: JsValue) 15 | 16 | def findTile(previewId: UUID, filename: String, level: String): Option[Tile] 17 | 18 | def findByPreviewId(previewId: UUID): List[Tile] 19 | 20 | def save(inputStream: InputStream, filename: String, contentLength: Long, contentType: Option[String]): String 21 | 22 | def getBlob(id: UUID): Option[(InputStream, String, String, Long)] 23 | 24 | def remove(id: UUID) 25 | } 26 | -------------------------------------------------------------------------------- /app/services/VocabularyTermService.scala: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import models.{VocabularyTerm, UUID} 4 | 5 | import scala.util.Try 6 | 7 | 8 | trait VocabularyTermService { 9 | 10 | def count(): Long 11 | 12 | def insert(vocabularyTerm : VocabularyTerm) : Option[String] 13 | 14 | def get(id : UUID) : Option[VocabularyTerm] 15 | 16 | def delete(id: UUID) : Try[Unit] 17 | 18 | def listAll() : List[VocabularyTerm] 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/services/mongodb/SocialUserDAO.scala: -------------------------------------------------------------------------------- 1 | package services.mongodb 2 | 3 | import org.bson.types.ObjectId 4 | import com.novus.salat.dao.{ModelCompanion, SalatDAO} 5 | import MongoContext.context 6 | import play.api.Play.current 7 | import securesocial.core.Identity 8 | 9 | /** 10 | * Used to store securesocial users in MongoDB. 11 | * 12 | */ 13 | object SocialUserDAO extends ModelCompanion[Identity, ObjectId] { 14 | val dao = current.plugin[MongoSalatPlugin] match { 15 | case None => throw new RuntimeException("No MongoSalatPlugin"); 16 | case Some(x) => new SalatDAO[Identity, ObjectId](collection = x.collection("social.users")) {} 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/services/mongodb/TypedIdDAO.scala: -------------------------------------------------------------------------------- 1 | package services.mongodb 2 | 3 | import org.bson.types.ObjectId 4 | import com.novus.salat.dao.{ModelCompanion, SalatDAO} 5 | import MongoContext.context 6 | import play.api.Play.current 7 | import models.TypedID 8 | 9 | /** 10 | * Used to store Typed ID in MongoDB. 11 | * 12 | */ 13 | object TypedIDDAO extends ModelCompanion[TypedID, ObjectId] { 14 | val dao = current.plugin[MongoSalatPlugin] match { 15 | case None => throw new RuntimeException("No MongoSalatPlugin"); 16 | case Some(x) => new SalatDAO[TypedID, ObjectId](collection = x.collection("TypedID")) {} 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/util/Direction.scala: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | /** 4 | * Enumeration for Direction 5 | */ 6 | object Direction extends Enumeration { 7 | type Direction = Value 8 | val ASC, DESC = Value 9 | } 10 | -------------------------------------------------------------------------------- /app/util/DistancePriorityQueue.scala: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | */ 4 | package util 5 | 6 | import org.apache.lucene.util.PriorityQueue 7 | import play.api.libs.json._ 8 | 9 | /** 10 | * Distance fixed sized priority queue. 11 | * 12 | * 13 | */ 14 | case class SearchResult(section_id: String, distance: Double, preview_id: Option[String] = None) 15 | 16 | object SearchResult { 17 | implicit val SearchResultFormat = Json.format[SearchResult] 18 | } 19 | 20 | class DistancePriorityQueue(maxSize: Int) extends PriorityQueue[SearchResult](maxSize: Int) { 21 | 22 | override def lessThan(a: SearchResult, b: SearchResult): Boolean = { 23 | if (a.distance > b.distance) { 24 | return true; 25 | } else { 26 | return false; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /app/util/PeekIterator.scala: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | /** 4 | * Iterator that allows to look at the next 5 | */ 6 | class PeekIterator[T](parent: Iterator[T]) extends Iterator[T] { 7 | var nextElement: Option[T] = None 8 | 9 | def hasNext(): Boolean = nextElement.isDefined || parent.hasNext 10 | 11 | def next(): T = { 12 | nextElement match { 13 | case Some(x) => { 14 | nextElement = None 15 | x 16 | } 17 | case None => parent.next 18 | } 19 | } 20 | 21 | def peek(): Option[T] = { 22 | nextElement match { 23 | case Some(x) => Some(x) 24 | case None => { 25 | if (parent.hasNext) { 26 | nextElement = Some(parent.next) 27 | nextElement 28 | } else { 29 | None 30 | } 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/views/JSConsole.scala.html: -------------------------------------------------------------------------------- 1 | @play.api.Play.maybeApplication.map(_.mode) match { 2 | case Some(play.api.Mode.Prod) => { 3 | 8 | } 9 | case _ => {} 10 | } -------------------------------------------------------------------------------- /app/views/authorizationMessage.scala.html: -------------------------------------------------------------------------------- 1 | @(msg: String, space: models.ProjectSpace)(implicit user: Option[models.User]) 2 | 3 | @main("Authorization Request") { 4 | 5 |
6 |
7 |

8 | @if(msg != null){ 9 | @msg 10 | }else{ 11 | You are not authorized to proceed with your request 12 | } 13 |

14 | @space.name 15 |
16 |
17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/views/bootstrap3/checkboxes.scala.html: -------------------------------------------------------------------------------- 1 | @(field: Field, label: String = "Checkbox field", checkboxMap: Map[String, Boolean], help:String = "") 2 |
3 | 4 |
5 | @for((checkboxName, isChecked) <- checkboxMap) { 6 | 15 | } 16 | @help 17 | @{field.error.map { error => error.message }} 18 |
19 |
20 | -------------------------------------------------------------------------------- /app/views/curations/publishedData.scala.html: -------------------------------------------------------------------------------- 1 | @(publishedData: List[play.api.libs.json.JsValue], servicesUrl: String)(implicit user: Option[models.User]) 2 | @import play.api.libs.json._ 3 | 4 | @main("Published Data") { 5 |
6 |
7 |

@Html("Published Data")

8 |
9 |
10 |
11 | @curations.publishedGrid(publishedData, servicesUrl, None) 12 |
13 | 14 | } -------------------------------------------------------------------------------- /app/views/datasets/deleteButton.scala.html: -------------------------------------------------------------------------------- 1 | @(dataset: Dataset)(implicit user: Option[models.User]) 2 | 3 | @import api.Permission 4 | 5 | @if(user.isDefined) { 6 | 7 | @if(Permission.checkPermission(Permission.DeleteDataset, ResourceRef(ResourceRef.dataset, dataset.id))) { 8 | Delete 10 | } else { 11 | Delete 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/views/datasets/download.scala.html: -------------------------------------------------------------------------------- 1 | @(dataset: Dataset)(implicit user: Option[models.User]) 2 | 3 | @if(user.isDefined) { 4 | @if(dataset.files.length > 0){ 5 |
6 | 11 |
12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/views/datasets/restoreButton.scala.html: -------------------------------------------------------------------------------- 1 | @(dataset: Dataset)(implicit user: Option[models.User]) 2 | 3 | @import api.Permission 4 | 5 | @if(user.isDefined) { 6 | 7 | @if(Permission.checkPermission(Permission.DeleteDataset, ResourceRef(ResourceRef.dataset, dataset.id))) { 8 | Restore 10 | } else { 11 | Restore 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/views/datasets/userLink.scala.html: -------------------------------------------------------------------------------- 1 | @(dataset: Dataset)(implicit flash: play.api.mvc.Flash, user: Option[models.User]) 2 | 3 | 4 | Collaborators 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/views/dtsExtension.scala.html: -------------------------------------------------------------------------------- 1 | @(baseUrl: String, hostname: String, extensionHostUrl: String) 2 | @import helper._ 3 | @import collection.JavaConverters._ 4 | @implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.f) } 5 | @main("Extension") { 6 |
7 |

Data Tilling Service (DTS)

8 |

Download and Drag & Drop the extension to Chrome->Extension Settings

9 | 10 | DTS 11 | 12 |
13 | } 14 | -------------------------------------------------------------------------------- /app/views/emails/userChanged.scala.html: -------------------------------------------------------------------------------- 1 | @(user: User, status: String, ssl: Boolean = true)(implicit request: RequestHeader) 2 | 3 | @import services.AppConfiguration 4 | 5 | 6 | 7 | @user.fullName,
8 |
9 |

10 | Your account on @AppConfiguration.getDisplayName 11 | has been made @status. 12 |

13 | @footer() 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/views/error/accountNotActive.scala.html: -------------------------------------------------------------------------------- 1 | @()(implicit user: Option[models.User]) 2 | @main("Account not active") { 3 |
4 |
5 |

Account not active

6 |
7 |
8 |
9 |
10 | Your account has not been enabled. If you feel this in error please use the 11 | contact admin 12 | form to ask the server admins about your account. 13 |
14 |
15 | } 16 | -------------------------------------------------------------------------------- /app/views/extractorJobHistory.scala.html: -------------------------------------------------------------------------------- 1 | @(extractor: ExtractorInfo, group: ExtractionGroup)(implicit user: Option[models.User]) 2 | 3 | @main("Extractor Job History") { 4 | 5 | 6 | 7 | 8 | 9 | 10 | @views.html.extractions.extractionsHistorySingle(group, "file") 11 | } -------------------------------------------------------------------------------- /app/views/files/grid.scala.html: -------------------------------------------------------------------------------- 1 | @(filesList: List[File], fileComments: Map[UUID, Int], dsId: UUID, space: Option[String], parent: ResourceRef, showMove: Boolean)(implicit user: Option[models.User]) 2 | 3 | @util.masonry() 4 | 5 |
6 |
7 | @filesList.map { file => 8 | @if(parent.resourceType == ResourceRef.folder) { 9 | @files.listitem(file, (routes.Datasets.dataset(dsId)), Some(dsId.stringify), space, Some(parent.id.stringify), showMove) 10 | } else { 11 | @files.listitem(file, (routes.Datasets.dataset(dsId)), Some(dsId.stringify), space, None,showMove) 12 | } 13 | } 14 |
15 |
16 | -------------------------------------------------------------------------------- /app/views/files/linkDownload.scala.html: -------------------------------------------------------------------------------- 1 | @(file: File, links: FileLink) 2 | 3 | @main("Download File") { 4 |
5 |
6 |

@Html(file.filename)

7 |
8 |
9 |
10 |
11 |

Download File

12 | 13 |
14 |
15 | } -------------------------------------------------------------------------------- /app/views/inviteThroughEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(token: String, spaceName: String, inviter: String, message: Option[String])(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 | 6 |

Hello,

7 | 8 |

You have been invited to space @spaceName by @inviter at @services.AppConfiguration.getDisplayName. Please follow this 9 | link to accept this invitation. 10 |

11 |

@message

12 | 13 | -------------------------------------------------------------------------------- /app/views/noPermissions.scala.html: -------------------------------------------------------------------------------- 1 | @(msg: String)(implicit user: Option[models.User]) 2 | 3 | @main("No Permissions") { 4 | 7 |
8 |
9 | @if(msg != null){ 10 | @msg 11 | }else{ 12 | You do not have the required permissions to view that page. 13 | } 14 |
15 |
16 | } 17 | -------------------------------------------------------------------------------- /app/views/notAuthorized.scala.html: -------------------------------------------------------------------------------- 1 | @(msg: String, id: String, resourceType: String)(implicit user: Option[models.User]) 2 | @main("Not authorized") { 3 |
4 |
5 |

6 | @if(msg != null){ 7 | @msg 8 | }else{ 9 | You are not authorized to proceed with your request 10 | } 11 |

12 |
13 |
14 | } -------------------------------------------------------------------------------- /app/views/notFound.scala.html: -------------------------------------------------------------------------------- 1 | @(msg: String)(implicit user: Option[models.User]) 2 | @main("Not Found") { 3 |
4 |
5 |

6 | @if(msg != null){ 7 | @msg 8 | }else{ 9 | The resource does not exist. 10 | } 11 |

12 |
13 |
14 | } -------------------------------------------------------------------------------- /app/views/playMode.scala.html: -------------------------------------------------------------------------------- 1 | @play.api.Play.maybeApplication.map(_.mode) match { 2 | case Some(play.api.Mode.Dev) => {Development} 3 | case Some(play.api.Mode.Prod) => {Production} 4 | case Some(play.api.Mode.Test) => {Test} 5 | case _ => {Unknown} 6 | } 7 | -------------------------------------------------------------------------------- /app/views/pluginNotEnabled.scala.html: -------------------------------------------------------------------------------- 1 | @(plugin: String) 2 | 3 | @main("Plugin Not Enabled") { 4 | 7 |
8 |
9 | The required plugin @plugin is not enabled. Please contact an administrator for further questions. 10 |
11 |
12 | } -------------------------------------------------------------------------------- /app/views/relations/list.scala.html: -------------------------------------------------------------------------------- 1 | @(relatedDatasets: List[NodeDataset]) 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | @for(rd <- relatedDatasets) { 10 | 11 | 12 | 13 | } 14 | 15 |
Relationship TypeTarget Dataset
@rd.rdfType.getOrElse("Generic relation")@rd.dataset.name
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/views/searchTextResults.scala.html: -------------------------------------------------------------------------------- 1 | @(query: String,size: Integer,results: Array[(String,String,Double,String)]) 2 | @main("Search Results") { 3 | 6 | @if(size == 0) { 7 |
8 |
9 | No results found. Sorry! 10 |
11 |
12 | } 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | @results.map{ re=> 26 | 27 | 28 | 29 | 30 | } 31 | 32 |
IDProximity
@re._4@re._3
33 | 34 | 35 | } -------------------------------------------------------------------------------- /app/views/spaces/createButton.scala.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /app/views/spaces/curationObjectsBySpace.scala.html: -------------------------------------------------------------------------------- 1 | @(curationObjects: List[models.CurationObject], space: ProjectSpace, isPublic: Option[Boolean])(implicit user: Option[models.User]) 2 | @import play.api.i18n.Messages 3 | @import api.Permission 4 |

Published Datasets

5 | @if(curationObjects.size == 0) { 6 |

There are no published datasets associated with this @Messages("space.title").

7 | } else { 8 | @spaces.curationObjectsGrid(curationObjects, space, isPublic) 9 | } -------------------------------------------------------------------------------- /app/views/spaces/editSpace.scala.html: -------------------------------------------------------------------------------- 1 | @(myForm: Form[controllers.spaceFormData], spaceId: Option[UUID], spaceName: Option[String])(implicit flash: play.api.mvc.Flash, user: Option[models.User]) 2 | @import play.api.i18n.Messages 3 | @newEditTemplate(myForm, title = "Edit " + Messages("space.title"), submitButton = updateButton(), spaceId, spaceName) -------------------------------------------------------------------------------- /app/views/spaces/inviteNotificationEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(spaceid: String, spaceName: String, inviter: models.MiniUser, newmember: String, role: String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | @import play.api.i18n.Messages 4 | 5 | 6 | 7 |

Hello @newmember,

8 | 9 |

You have been added by @inviter.fullName 10 | to @Messages("space.title") @spaceName 11 | on @services.AppConfiguration.getDisplayName as @role. 12 |

13 | 14 | -------------------------------------------------------------------------------- /app/views/spaces/newSpace.scala.html: -------------------------------------------------------------------------------- 1 | @(myForm: Form[controllers.spaceFormData])(implicit flash: play.api.mvc.Flash, user: Option[models.User]) 2 | @import play.api.i18n.Messages 3 | @newEditTemplate(myForm, title = Messages("create.header", Messages("space.title")), submitButton = createButton(), None, None) -------------------------------------------------------------------------------- /app/views/spaces/requestAuthorization.scala.html: -------------------------------------------------------------------------------- 1 | @(id: UUID)(implicit user: Option[models.User]) 2 | 3 | @*icon is not added and have tried to use button but failed *@ 4 |
5 | 6 |
-------------------------------------------------------------------------------- /app/views/spaces/requestemail.scala.html: -------------------------------------------------------------------------------- 1 | @(user:models.User, spaceid: String, spacename:String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | @import play.api.i18n.Messages 4 | 5 | 6 |

Hello,

7 | 8 |

9 | @user.fullName submitted an authorization request to your @Messages("space.title") "@spacename" 10 | at @services.AppConfiguration.getDisplayName. 11 |

12 | 13 | -------------------------------------------------------------------------------- /app/views/spaces/requestresponseemail.scala.html: -------------------------------------------------------------------------------- 1 | @(user:models.User, spaceid: String, spacename:String, requestmessage: String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | @import play.api.i18n.Messages 4 | 5 | 6 |

Hello,

7 | 8 |

9 | @user.fullName @{requestmessage} @Messages("space.title") @spacename 10 | at @services.AppConfiguration.getDisplayName. 11 |

12 | @if(requestmessage.contains("accept")) { 13 |

You can log in to view it.

14 | } 15 | 16 | -------------------------------------------------------------------------------- /app/views/spaces/updateButton.scala.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | Cancel 4 |
-------------------------------------------------------------------------------- /app/views/spaces/verifySpaceEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(spaceid: String, spaceName: String, member: String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | @import play.api.i18n.Messages 4 | 5 | 6 | 7 |

Hello @member,

8 | 9 |

Congratulations, your @services.AppConfiguration.getDisplayName @Messages("space.title") @spaceName has been verified! 10 | @play.api.i18n.Messages("verify.email.content") 11 |

12 | 13 | 14 |

Please contact @services.AppConfiguration.getDisplayName if you have questions or feedback.

15 | @emails.footer() 16 | 17 | -------------------------------------------------------------------------------- /app/views/ss/inputFieldConstructor.scala.html: -------------------------------------------------------------------------------- 1 | @(elements: views.html.helper.FieldElements) 2 | 3 | @import play.api.i18n._ 4 | @import views.html.helper._ 5 | 6 |
7 | 8 |
9 | @elements.input 10 | @if( elements.hasErrors ) { 11 | @elements.errors(elements.lang).mkString(", ") 12 | } else { 13 | @elements.infos(elements.lang).mkString(", ") 14 | } 15 |
16 |
-------------------------------------------------------------------------------- /app/views/ss/mails/alreadyRegisteredEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(user: securesocial.core.Identity)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 | 6 |

Hello @user.firstName,

7 | 8 |

You tried to sign up but you already have an account with us at @services.AppConfiguration.getDisplayName. 9 | If you don't remember your password please go here to reset it.

10 | @emails.footer() 11 | 12 | -------------------------------------------------------------------------------- /app/views/ss/mails/passwordChangedNotice.scala.html: -------------------------------------------------------------------------------- 1 | @(user: securesocial.core.Identity)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 | 6 |

Hello @user.firstName,

7 | 8 |

Your password was updated at @services.AppConfiguration.getDisplayName. 9 | Please log in using your new password by clicking here

10 | @emails.footer() 11 | 12 | -------------------------------------------------------------------------------- /app/views/ss/mails/passwordResetEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(user: securesocial.core.Identity, token: String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 |

Hello @user.firstName,

6 | 7 |

Please follow this 8 | 9 | link to reset your password on @services.AppConfiguration.getDisplayName. 10 |

11 | @emails.footer() 12 | 13 | -------------------------------------------------------------------------------- /app/views/ss/mails/signUpEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(token: String)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 |

Hello,

6 | 7 |

Please follow this 8 | link to complete your registration 9 | at @services.AppConfiguration.getDisplayName. 10 |

11 | @emails.footer() 12 | 13 | -------------------------------------------------------------------------------- /app/views/ss/mails/unknownEmailNotice.scala.html: -------------------------------------------------------------------------------- 1 | @(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 |

Hello,

6 | 7 |

We received a request to reset a password in our system at @services.AppConfiguration.getDisplayName. The attempt has failed because we do not have 8 | a registered account with this email address. It could be that you logged in using an external account such as Twitter 9 | or Facebook.

10 | 11 |

12 | If you never created an account with us ignore this email, otherwise if you think you have an account with us contact 13 | tech support for further assistance. 14 |

15 | @emails.footer() 16 | 17 | -------------------------------------------------------------------------------- /app/views/ss/mails/welcomeEmail.scala.html: -------------------------------------------------------------------------------- 1 | @(user: securesocial.core.Identity)(implicit request: RequestHeader) 2 | @import securesocial.core.IdentityProvider 3 | 4 | 5 | 6 | 7 |

Welcome @user.firstName,

8 | 9 |

10 | Your new account is ready at 11 | @services.AppConfiguration.getDisplayName. 12 | Click here 13 | to log in 14 |

15 | 16 | @emails.footer() 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/views/ss/mails/welcomeEmailPendingVerification.scala.html: -------------------------------------------------------------------------------- 1 | @(user: securesocial.core.Identity)(implicit request: RequestHeader) 2 | 3 | 4 | 5 | 6 |

Welcome @user.firstName,

7 | 8 |

9 | Thank you for providing your information. 10 | You will receive an email to log in once your account is enabled. 11 |

12 | 13 | @emails.footer() 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/views/tagList.scala.html: -------------------------------------------------------------------------------- 1 | @(weightedTags: List[(String, Double)])(implicit user: Option[models.User]) 2 | 3 | @main("Tag list") { 4 |
5 |
6 |

Tags

7 |
8 |
9 |
10 |
11 | @if(weightedTags.isEmpty) { 12 | No tags found. 13 | } else { 14 | @for(weightedTag <- weightedTags.sorted) { 15 | 16 | @weightedTag._1 17 | 18 | } 19 | } 20 |
21 |
22 | } 23 | -------------------------------------------------------------------------------- /app/views/twitterBootstrapInput.scala.html: -------------------------------------------------------------------------------- 1 | @(elements: helper.FieldElements) 2 | 3 |
4 | 5 |
6 | @elements.input 7 | @if(elements.hasErrors) { 8 | @elements.errors.mkString(", ") 9 | } 10 |
11 |
-------------------------------------------------------------------------------- /conf/.gitignore: -------------------------------------------------------------------------------- 1 | /play.plugins 2 | -------------------------------------------------------------------------------- /conf/datasetRdfRootNodes.txt: -------------------------------------------------------------------------------- 1 | crm:E19_Physical_Object -------------------------------------------------------------------------------- /conf/rdfRootNodes.txt: -------------------------------------------------------------------------------- 1 | crm:E19_Physical_Object -------------------------------------------------------------------------------- /doc/src/sphinx/.gitignore: -------------------------------------------------------------------------------- 1 | _build/ -------------------------------------------------------------------------------- /doc/src/sphinx/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | 8 | [packages] 9 | sphinx = "*" 10 | recommonmark = "*" 11 | sphinx-rtd-theme = "*" 12 | 13 | [requires] 14 | python_version = "3.7" 15 | -------------------------------------------------------------------------------- /doc/src/sphinx/_static/GettingStarted_AddJDK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/GettingStarted_AddJDK.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/GettingStarted_Play2Config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/GettingStarted_Play2Config.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/GettingStarted_addConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/GettingStarted_addConfig.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/IntelliJ_JDK_Download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/IntelliJ_JDK_Download.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/architecture.jpg -------------------------------------------------------------------------------- /doc/src/sphinx/_static/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/architecture.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/css/custom.css: -------------------------------------------------------------------------------- 1 | div.imagepadding { 2 | padding: 50px 0px; 3 | } -------------------------------------------------------------------------------- /doc/src/sphinx/_static/data-model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/data-model.jpg -------------------------------------------------------------------------------- /doc/src/sphinx/_static/data-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/data-model.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/datamodel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/datamodel.jpg -------------------------------------------------------------------------------- /doc/src/sphinx/_static/dataset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/dataset.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/extraction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/extraction.jpg -------------------------------------------------------------------------------- /doc/src/sphinx/_static/geostreaming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/geostreaming.jpg -------------------------------------------------------------------------------- /doc/src/sphinx/_static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/logo.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/logo_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/logo_full.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/logos_ncsa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/logos_ncsa.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-homepage-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-homepage-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-10.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-11.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-7.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-8.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug-signingup-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug-signingup-9.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-10.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-11.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-12.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-13.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-14.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-15.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-16.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-17.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-18.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-19.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-20.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-21.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-7.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-8.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_collections-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_collections-9.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-10.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-11.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-12.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-13.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-14.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-15.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-16.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-17.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-18.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-19.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-20.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-21.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-22.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-23.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-24.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-25.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-26.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-7.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-8.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_datasets-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_datasets-9.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_extractors-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_extractors-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_extractors-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_extractors-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_extractors-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_extractors-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_extractors-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_extractors-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_following-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_following-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_search-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_search-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_search-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_search-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_search-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_search-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-10.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-11.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-12.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-13.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-14.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-15.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-7.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-8.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_spaces-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_spaces-9.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-1.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-2.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-3.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-4.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-5.png -------------------------------------------------------------------------------- /doc/src/sphinx/_static/ug_staging-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/doc/src/sphinx/_static/ug_staging-6.png -------------------------------------------------------------------------------- /doc/src/sphinx/changelog.md: -------------------------------------------------------------------------------- 1 | ../../../CHANGELOG.md -------------------------------------------------------------------------------- /doc/src/sphinx/changelog_md_to_rst.rst: -------------------------------------------------------------------------------- 1 | Changelog 2 | *********** 3 | 4 | .. To read our changelog.md file, this plugin converts markdown to .rst formatting (`pip install m2r2`) 5 | 6 | .. mdinclude:: changelog.md -------------------------------------------------------------------------------- /doc/src/sphinx/develop/previewers.rst: -------------------------------------------------------------------------------- 1 | .. index:: Previewers 2 | 3 | Previewers 4 | ========== 5 | 6 | Previewers are custom Javascript code to visualize information about datasets and files (collection support is 7 | experimental). Usually those are used to provide a preview of a file, when the file is big, but they can be used to 8 | visualize more interesting aspects of a resource. For example, the GIS previewers enable overlaying geospatial data 9 | on a interactive map in the browser. 10 | 11 | Previewer can work together with extractors and external services. 12 | 13 | 14 | Here is a list of previewer embedded with the core 15 | `source `_. 16 | -------------------------------------------------------------------------------- /doc/src/sphinx/license.rst: -------------------------------------------------------------------------------- 1 | .. index:: License 2 | 3 | ======= 4 | License 5 | ======= 6 | 7 | Clowder is licensed under the `NCSA license `_. 8 | Please see below for the full text (:ref:`clowder-license`). 9 | Please do not modify the conditions and make the license available in any derivative work. 10 | You must not use the names of the authors to promote derivatives of the software without written consent. 11 | 12 | Contributors 13 | ------------ 14 | 15 | .. include:: ../../../CONTRIBUTORS.md 16 | 17 | .. _clowder-license: 18 | 19 | Clowder License 20 | --------------- 21 | 22 | .. include:: ../../../LICENSE -------------------------------------------------------------------------------- /doc/src/sphinx/requirements.txt: -------------------------------------------------------------------------------- 1 | -i https://pypi.org/simple/ 2 | sphinx-rtd-theme==0.5.0 3 | sphinx_design==0.0.13 4 | alabaster==0.7.12 5 | babel==2.9.1 6 | certifi==2022.12.7 7 | chardet==4.0.0 8 | commonmark==0.9.1 9 | docutils==0.16 10 | idna==2.10 11 | imagesize==1.2.0 12 | jinja2==3.0.1 13 | markupsafe==2.0.1 14 | packaging==20.9 15 | pygments==2.9.0 16 | pyparsing==2.4.7 17 | pytz==2021.1 18 | recommonmark==0.6.0 19 | requests==2.25.1 20 | snowballstemmer==2.1.0 21 | sphinx==3.1.2 22 | sphinxcontrib-applehelp==1.0.2 23 | sphinxcontrib-devhelp==1.0.2 24 | sphinxcontrib-htmlhelp==2.0.0 25 | sphinxcontrib-jsmath==1.0.1 26 | sphinxcontrib-qthelp==1.0.3 27 | sphinxcontrib-serializinghtml==1.1.5 28 | urllib3==1.26.5 29 | m2r2==0.3.2 30 | -------------------------------------------------------------------------------- /doc/src/sphinx/thankyou.rst: -------------------------------------------------------------------------------- 1 | Thank You 2 | ------------ 3 | 4 | `Atlassian `_ for kindly providing an open source license to their software development 5 | products that make our `daily efforts `_ so much easier. 6 | 7 | `Balsamiq Mockups `_ for kindly providing an open source license for their rapid wireframing 8 | tool that makes iterating over designs so much faster and enjoyable -------------------------------------------------------------------------------- /doc/src/sphinx/userguide/ug_index.rst: -------------------------------------------------------------------------------- 1 | 2 | User Guide 3 | =========================================== 4 | 5 | This user guide is intended for first time users. It covers some basic initial interactions with the system through the user 6 | interface. 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | :caption: User Guide 11 | 12 | ug_signingup 13 | ug_homepage 14 | ug_datasets 15 | ug_collections 16 | ug_spaces 17 | ug_search 18 | ug_following -------------------------------------------------------------------------------- /docker/clowder.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -f /home/clowder/RUNNING_PID 4 | exec /home/clowder/bin/clowder -DMONGOUPDATE=1 -DPOSTGRESUPDATE=1 -Dpidfile.path=/dev/null $* 5 | -------------------------------------------------------------------------------- /docker/healthcheck.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### Add trailing backslash if not in context 4 | [[ "${CLOWDER_CONTEXT}" != */ ]] && CLOWDER_CONTEXT="${CLOWDER_CONTEXT}/" 5 | 6 | curl -s --fail http://localhost:9000${CLOWDER_CONTEXT:-/}healthz || exit 1 7 | -------------------------------------------------------------------------------- /docker/play.plugins: -------------------------------------------------------------------------------- 1 | 10002:services.ElasticsearchPlugin 2 | -------------------------------------------------------------------------------- /lib/LidoToCidoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/lib/LidoToCidoc.jar -------------------------------------------------------------------------------- /lib/URIpolicies.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/lib/URIpolicies.jar -------------------------------------------------------------------------------- /lib/lsva-features.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/lib/lsva-features.jar -------------------------------------------------------------------------------- /lib/swkmmodel2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/lib/swkmmodel2.jar -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=0.13.6 2 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | // Comment to get more information during initialization 2 | logLevel := Level.Warn 3 | 4 | // The Typesafe repository 5 | resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" 6 | 7 | // Use the Play sbt plugin for Play projects 8 | addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.6") 9 | 10 | // Create dependency graphs 11 | addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4") 12 | 13 | // Native packager 14 | addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.8.0-RC2") 15 | 16 | // Show all licenses 17 | //addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.0.0") 18 | 19 | -------------------------------------------------------------------------------- /public/datasetsUserMetadataModel/user_metadata_model_allowedNodes.txt: -------------------------------------------------------------------------------- 1 | Abstract,String 2 | Alternative title,String 3 | Audience,String 4 | Bibliographic citation,String 5 | Contact,Node 6 | Name,String 7 | Email,String 8 | Creator,String 9 | Description,String 10 | Spatial Reference,Node 11 | Latitude,String 12 | Longitude,String 13 | Altitude,String -------------------------------------------------------------------------------- /public/datasetsUserMetadataModel/user_metadata_model_allowedRelationships.txt: -------------------------------------------------------------------------------- 1 | !root!,Abstract,0,1 2 | !root!,Alternative title,0,1 3 | !root!,Audience,0,1 4 | !root!,Bibliographic citation,0,1 5 | !root!,Contact,0,1 6 | Contact,Name,1,1 7 | Contact,Email,1,1 8 | !root!,Creator,0,1 9 | !root!,Description,0,1 10 | !root!,Spatial Reference,0,1 11 | Spatial Reference,Latitude,1,1 12 | Spatial Reference,Longitude,1,1 13 | Spatial Reference,Altitude,1,1 -------------------------------------------------------------------------------- /public/filesUserMetadataModel/user_metadata_model_allowedRelationships.txt: -------------------------------------------------------------------------------- 1 | !root!,Abstract,0,1 2 | !root!,Alternative title,0,1 3 | !root!,Audience,0,1 4 | !root!,Bibliographic citation,0,1 5 | !root!,Contact,0,1 6 | Contact,Name,1,1 7 | Contact,Email,1,1 8 | !root!,Creator,0,1 9 | !root!,Description,0,1 10 | !root!,Spatial Reference,0,1 11 | Spatial Reference,Latitude,1,1 12 | Spatial Reference,Longitude,1,1 13 | Spatial Reference,Altitude,1,1 -------------------------------------------------------------------------------- /public/fonts/filtrify/filtrify-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/filtrify/filtrify-webfont.eot -------------------------------------------------------------------------------- /public/fonts/filtrify/filtrify-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/filtrify/filtrify-webfont.ttf -------------------------------------------------------------------------------- /public/fonts/filtrify/filtrify-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/filtrify/filtrify-webfont.woff -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/images/cc-by-nc-nd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by-nc-nd.png -------------------------------------------------------------------------------- /public/images/cc-by-nc-sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by-nc-sa.png -------------------------------------------------------------------------------- /public/images/cc-by-nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by-nc.png -------------------------------------------------------------------------------- /public/images/cc-by-nd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by-nd.png -------------------------------------------------------------------------------- /public/images/cc-by-sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by-sa.png -------------------------------------------------------------------------------- /public/images/cc-by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-by.png -------------------------------------------------------------------------------- /public/images/cc-pd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/cc-pd.png -------------------------------------------------------------------------------- /public/images/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/chosen-sprite.png -------------------------------------------------------------------------------- /public/images/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/chosen-sprite@2x.png -------------------------------------------------------------------------------- /public/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/favicon.png -------------------------------------------------------------------------------- /public/images/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /public/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /public/images/json-ld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/json-ld.png -------------------------------------------------------------------------------- /public/images/logo_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/logo_60.png -------------------------------------------------------------------------------- /public/images/logo_sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/logo_sm.png -------------------------------------------------------------------------------- /public/images/texture_metal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/images/texture_metal.jpg -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/browndog-large-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/browndog-large-transparent.png -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/browndog-small-transparent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/browndog-small-transparent.gif -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/browndog-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/browndog-small.png -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/poweredby-transparent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/DTSbookmarklet/poweredby-transparent.gif -------------------------------------------------------------------------------- /public/javascripts/DTSbookmarklet/row.handlebars: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
Image size
8 |
{{width}} x {{height}}
9 |
Description
10 |
{{description}}
11 | {{#if linkback}} 12 |
More info
13 |
DTS
14 | {{/if}} 15 |
16 | 17 | -------------------------------------------------------------------------------- /public/javascripts/file-browser/app.js: -------------------------------------------------------------------------------- 1 | var app = app || {}; 2 | 3 | $(function() { 4 | new app.AppView(); 5 | }); -------------------------------------------------------------------------------- /public/javascripts/file-browser/fileBrowser.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/file-browser/fileBrowser.js -------------------------------------------------------------------------------- /public/javascripts/file-browser/views/app.js: -------------------------------------------------------------------------------- 1 | var app = app || {}; 2 | 3 | $(function( $ ) { 4 | app.AppView = Backbone.View.extend({ 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /public/javascripts/galleria-classic/classic-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/galleria-classic/classic-loader.gif -------------------------------------------------------------------------------- /public/javascripts/galleria-classic/classic-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/galleria-classic/classic-map.png -------------------------------------------------------------------------------- /public/javascripts/handlebars-loader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Source: http://berzniz.com/post/24743062344/handling-handlebars-js-like-a-pro 3 | */ 4 | Handlebars.getTemplate = function(path) { 5 | if (Handlebars.templates === undefined || Handlebars.templates[path] === undefined) { 6 | jQuery.ajax({ 7 | url : path + '.handlebars', 8 | crossDomain: true, 9 | success : function(data) { 10 | if (Handlebars.templates === undefined) { 11 | Handlebars.templates = {}; 12 | } 13 | Handlebars.templates[path] = Handlebars.compile(data); 14 | }, 15 | async : false 16 | }); 17 | } 18 | return Handlebars.templates[path]; 19 | }; -------------------------------------------------------------------------------- /public/javascripts/htmlEncodeDecode.js: -------------------------------------------------------------------------------- 1 | //// 2 | // 3 | // JavaScript file to contain elements that are related to encoding and decoding of HTML to and from regular text. 4 | // 5 | // 6 | //// 7 | 8 | function htmlEncode(value){ 9 | return $('
').text(value).html(); 10 | } 11 | 12 | function htmlDecode(value){ 13 | return $('
').html(value).text(); 14 | } -------------------------------------------------------------------------------- /public/javascripts/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/animated-overlay.gif -------------------------------------------------------------------------------- /public/javascripts/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/layers-2x.png -------------------------------------------------------------------------------- /public/javascripts/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/layers.png -------------------------------------------------------------------------------- /public/javascripts/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/marker-icon-2x.png -------------------------------------------------------------------------------- /public/javascripts/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/marker-icon.png -------------------------------------------------------------------------------- /public/javascripts/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/marker-shadow.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_flat_45_0088CC_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_flat_45_0088CC_40x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_flat_55_999999_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_flat_55_999999_40x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_flat_75_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_flat_75_aaaaaa_40x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_glass_55_f8da4e_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_glass_55_f8da4e_1x400.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_gloss-wave_45_e14f1c_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_gloss-wave_45_e14f1c_500x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_gloss-wave_75_0088CC_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_gloss-wave_75_0088CC_500x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_gloss-wave_75_2191c0_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_gloss-wave_75_2191c0_500x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-bg_inset-hard_100_fcfdfd_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-bg_inset-hard_100_fcfdfd_1x100.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-icons_0078ae_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-icons_0078ae_256x240.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-icons_d8e7f3_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-icons_d8e7f3_256x240.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-icons_f7a50d_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-icons_f7a50d_256x240.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-icons_fcd113_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-icons_fcd113_256x240.png -------------------------------------------------------------------------------- /public/javascripts/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default-dark/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default-dark/32px.png -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default-dark/40px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default-dark/40px.png -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default-dark/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default-dark/throbber.gif -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default/32px.png -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default/40px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default/40px.png -------------------------------------------------------------------------------- /public/javascripts/jstree/themes/default/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/jstree/themes/default/throbber.gif -------------------------------------------------------------------------------- /public/javascripts/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/loader.gif -------------------------------------------------------------------------------- /public/javascripts/noty/layouts/inline.js: -------------------------------------------------------------------------------- 1 | $.noty.layouts.inline = { 2 | name : 'inline', 3 | options : {}, 4 | container: { 5 | object : '
    ', 6 | selector: 'ul.noty_inline_layout_container', 7 | style : function() { 8 | $(this).css({ 9 | width : '100%', 10 | height : 'auto', 11 | margin : 0, 12 | padding : 0, 13 | listStyleType: 'none', 14 | zIndex : 9999999 15 | }); 16 | } 17 | }, 18 | parent : { 19 | object : '
  • ', 20 | selector: 'li', 21 | css : {} 22 | }, 23 | css : { 24 | display: 'none' 25 | }, 26 | addClass : '' 27 | }; -------------------------------------------------------------------------------- /public/javascripts/previewers/3DObj/RequestAnimationFrame.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides requestAnimationFrame in a cross browser way. 3 | * http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 4 | */ 5 | 6 | if ( !window.requestAnimationFrame ) { 7 | 8 | window.requestAnimationFrame = ( function() { 9 | 10 | return window.webkitRequestAnimationFrame || 11 | window.mozRequestAnimationFrame || 12 | window.oRequestAnimationFrame || 13 | window.msRequestAnimationFrame || 14 | function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) { 15 | 16 | window.setTimeout( callback, 1000 / 60 ); 17 | 18 | }; 19 | 20 | } )(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /public/javascripts/previewers/3DObj/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "3DObj", 2 | "main" : "some-library.js", 3 | "preview": true, 4 | "contentType" : ["none"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/3DWebGL/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "3DWebGL", 2 | "main" : "some-library.js", 3 | "file": true, 4 | "contentType" : ["model/obj"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/Book/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "Book", 2 | "main" : "some-library.js", 3 | "contentType" : [""] 4 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/PTM/package.json: -------------------------------------------------------------------------------- 1 | { "name": "PTM", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["application/x-ptm"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/Quicktime/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Quicktime", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["x-world/x-qtvr"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/RDF/package.json: -------------------------------------------------------------------------------- 1 | { "name": "RDF", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["application/rdf+xml"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/RDF/some-library.js: -------------------------------------------------------------------------------- 1 | function NavigateToSite(prNum){ 2 | var ddl = document.getElementById("ddlMyList"); 3 | var selectedVal = ddl.options[ddl.selectedIndex].value; 4 | 5 | window.open(selectedVal) 6 | } 7 | 8 | (function ($, Configuration) { 9 | console.log("RDF download interface for " + Configuration.id); 10 | 11 | console.log("Updating tab " + Configuration.tab); 12 | 13 | var prNum = Configuration.tab.replace("#previewer",""); 14 | window["download"+prNum] 15 | 16 | $(Configuration.tab).append("Download XML metadata as RDF"); 17 | 18 | }(jQuery, Configuration)); -------------------------------------------------------------------------------- /public/javascripts/previewers/audio/audio.js: -------------------------------------------------------------------------------- 1 | (function ($, Configuration) { 2 | var useTab = Configuration.tab; 3 | var referenceUrl = Configuration.url; 4 | 5 | $(useTab).append( 6 | "" 7 | ); 8 | 9 | }(jQuery, Configuration)); 10 | -------------------------------------------------------------------------------- /public/javascripts/previewers/audio/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Audio", 2 | "main": "audio.js", 3 | "preview": true, 4 | "contentType": ["audio/mp3", "audio/mpeg", "audio/mpeg3"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-image/dataset-image.css: -------------------------------------------------------------------------------- 1 | .ds-image { 2 | margin: 0; 3 | padding: 0; 4 | border: 1px solid black; 5 | max-width: 500px; 6 | max-height: 500px; 7 | } 8 | -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-image/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "dataset-image", 2 | "main" : "dataset-image.js", 3 | "contentType" : [], 4 | "dataset" : false, 5 | "supported_previews" : [] 6 | } 7 | -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-mime-distribution/main.css: -------------------------------------------------------------------------------- 1 | .legend { 2 | outline: thin solid lightGrey; 3 | outline-offset: 3px; 4 | } 5 | 6 | .arc path { 7 | stroke: white; 8 | } 9 | -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-mime-distribution/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "dataset-mime-distribution", 2 | "main" : "main.js", 3 | "contentType" : [], 4 | "dataset" : true, 5 | "supported_previews" : [] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-path/main.css: -------------------------------------------------------------------------------- 1 | #ds-path-map-canvas { 2 | height: 100%; 3 | margin: 0; 4 | padding: 0; 5 | border: 1px solid black; 6 | height: 500px; 7 | } 8 | 9 | .ds-path-img-tmb { 10 | max-height: 90px; 11 | max-width: 90px; 12 | margin-bottom: 5px; 13 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/dataset-path/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "dataset-path", 2 | "main" : "main.js", 3 | "contentType" : [], 4 | "dataset" : true, 5 | "supported_previews" : [] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/geospatial-collection/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "geospatial-collection", 2 | "main" : "geospatial-collection.js", 3 | "contentType" : [], 4 | "collection" : true, 5 | "supported_previews" : ["geo.layers.collection"] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/geospatial-dataset/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "geospatial-dataset", 2 | "main" : "geospatial-dataset.js", 3 | "contentType" : [], 4 | "dataset" : true, 5 | "supported_previews" : [] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/geospatial-geojson/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "geospatial-geojson", 2 | "main" : "geospatial-geojson.js", 3 | "contentType" : [], 4 | "dataset" : true, 5 | "supported_previews" : [] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/geospatial/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "GeospatialViewer", 2 | "main" : "geospatial.js", 3 | "file": true, 4 | "contentType" : ["application/zip","application/x-zip","application/x-7z-compressed", "multi/files-zipped", "image/tif", "image/tiff"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/html/html-iframe.js: -------------------------------------------------------------------------------- 1 | (function ($, Configuration) { 2 | // var url = '/api'+Configuration.url+'.html'; 3 | var url = Configuration.url; 4 | var id = Configuration.tab.substring(1) + "_html_previewer"; 5 | $(Configuration.tab).append("
    "); 6 | $.ajax({ 7 | url: url, 8 | success: function (data) { 9 | $('#'+id).append(data); 10 | }}); 11 | }(jQuery, Configuration)); -------------------------------------------------------------------------------- /public/javascripts/previewers/html/package.json: -------------------------------------------------------------------------------- 1 | { "name": "HTML", 2 | "main": "html-iframe.js", 3 | "file": true, 4 | "contentType": ["text/html"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/ifc_previewer/ifc/web-ifc.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/previewers/ifc_previewer/ifc/web-ifc.wasm -------------------------------------------------------------------------------- /public/javascripts/previewers/ifc_previewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IFC-Viewer", 3 | "main": "ifc_viewer.js", 4 | "file": true, 5 | "contentType": ["model/ifc", "model/IFC"] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/iframe/images/iframe_error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/previewers/iframe/images/iframe_error.jpg -------------------------------------------------------------------------------- /public/javascripts/previewers/iframe/package.json: -------------------------------------------------------------------------------- 1 | { "name": "External resource", 2 | "main": "some-library.js", 3 | "file": true, 4 | "contentType": ["text/iframe"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/iip/package.json: -------------------------------------------------------------------------------- 1 | { "name": "IIP", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["image/previewUrl"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/mri-papaya/clowder-mri-papaya-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/previewers/mri-papaya/clowder-mri-papaya-screenshot.png -------------------------------------------------------------------------------- /public/javascripts/previewers/mri-papaya/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "interactive_mri_viewer_for_nii_files", 3 | "main": "mri-papaya.js", 4 | "file": true, 5 | "contentType": ["image/nii", "application/x-gzip"] 6 | } 7 | -------------------------------------------------------------------------------- /public/javascripts/previewers/oni/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Oni", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["text/oni-view"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/pdf/package.json: -------------------------------------------------------------------------------- 1 | { "name": "PDF", 2 | "main": "some-library.js", 3 | "file": true, 4 | "contentType": ["application/pdf"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/pdf3d/package.json: -------------------------------------------------------------------------------- 1 | { "name": "3D PDF", 2 | "main": "some-library.js", 3 | "file": true, 4 | "contentType": [] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/person-tracking/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Person Tracking", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["application/vnd.clowder+persontracking+xml"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/plain_text/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Text", 2 | "main": "plain_text.js", 3 | "preview": true, 4 | "contentType": ["application/cnv","text/plain","text/csv"] 5 | } 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/presentation/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Video presentation", 2 | "main": "some-library.js", 3 | "preview": true, 4 | "contentType": ["video/presentation"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/test1/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "test-1", 2 | "main" : "some-library.js", 3 | "contentType" : [] 4 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/test1/some-library.js: -------------------------------------------------------------------------------- 1 | (function ($, Configuration) { 2 | console.log("Some library is running on " + Configuration.id); 3 | }(jQuery, Configuration)); -------------------------------------------------------------------------------- /public/javascripts/previewers/test2/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "test-2", 2 | "main" : "some-other-library.js", 3 | "contentType" : [] 4 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/test2/some-other-library.js: -------------------------------------------------------------------------------- 1 | (function ($, Configuration) { 2 | console.log("Some other library is running on " + Configuration.bytes); 3 | Preview.Lifecycle.onStart(); 4 | // var object = {}; 5 | // _.extend(object, Preview.Lifecycle); 6 | // object.onStart(function(){alert("Extended");}); 7 | }(jQuery, Configuration)); -------------------------------------------------------------------------------- /public/javascripts/previewers/three_js/draco/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/previewers/three_js/draco/draco_decoder.wasm -------------------------------------------------------------------------------- /public/javascripts/previewers/three_js/draco/gltf/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/javascripts/previewers/three_js/draco/gltf/draco_decoder.wasm -------------------------------------------------------------------------------- /public/javascripts/previewers/three_js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "3D Viewer", 3 | "main": "viewer_three.js", 4 | "file": true, 5 | "contentType": [ "model/fbx", "model/FBX","model/gltf","model/GLTF", "model/glb","model/GLB"] 6 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/thumbnail/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "Thumbnail", 2 | "main" : "thumbnail-previewer.js", 3 | "contentType" : ["image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp"], 4 | "preview": true 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/vega5/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Vega 5", 3 | "main": "vega5.js", 4 | "file": true, 5 | "contentType": ["application/json", "text/csv"] 6 | } 7 | -------------------------------------------------------------------------------- /public/javascripts/previewers/video/package.json: -------------------------------------------------------------------------------- 1 | { "name": "Video", 2 | "main": "video.js", 3 | "preview": true, 4 | "contentType": ["video/webm", "video/mp4", "video/videoalternativeslist", "video/quicktime", "ambiguous/mov"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/viewer_hop/README.md: -------------------------------------------------------------------------------- 1 | # viewer_hop 2 | 3 | viewer_hop is a previewer for *.ply and *.nxz 3D object files uploaded to a clowder repository. 4 | 5 | To preview the files we use the 3DHOP JavaScript library. 6 | -------------------------------------------------------------------------------- /public/javascripts/previewers/viewer_hop/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "VHOP", 3 | "main": "viewer_hop.js", 4 | "file": true, 5 | "contentType": ["model/ply", "model/nxz"] 6 | } 7 | -------------------------------------------------------------------------------- /public/javascripts/previewers/x3dom/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "X3d", 2 | "main" : "some-library.js", 3 | "preview": true, 4 | "contentType" : ["deprecated"] 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/zipfile/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "Zip Content List", 2 | "main" : "zipfile.js", 3 | "contentType" : ["application/zip","application/x-zip","application/x-7z-compressed", "multi/files-zipped"], 4 | "file": true 5 | } -------------------------------------------------------------------------------- /public/javascripts/previewers/zoomable/package.json: -------------------------------------------------------------------------------- 1 | { "name" : "Zoomable", 2 | "main" : "some-library.js", 3 | "contentType" : ["application/dzi"] 4 | } -------------------------------------------------------------------------------- /public/javascripts/previews.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var root = this; 3 | Preview = root.Preview = {}; 4 | var Lifecycle = Preview.Lifecycle = { 5 | onStart: function(callback) { 6 | console.log("Started plugin"); 7 | callback; 8 | } 9 | } 10 | }()); -------------------------------------------------------------------------------- /public/javascripts/sensors/removeRelation.js: -------------------------------------------------------------------------------- 1 | function removeRelation(relation_id) { 2 | 3 | var url = jsRoutes.api.Relations['delete'](relation_id).url; 4 | var request = $.ajax({ 5 | url: url, 6 | type: 'DELETE' 7 | }); 8 | 9 | request.done(function (response, textStatus, jqXHR){ 10 | console.log('successfully deleted relation'); 11 | window.location.reload(); 12 | }); 13 | 14 | request.fail(function (jqXHR, textStatus, errorThrown){ 15 | console.error("The following error occurred: " + textStatus, errorThrown); 16 | if (errorThrown == 'Unauthorized') { 17 | window.alert("You are not authorized to remove the relationship."); 18 | } 19 | }); 20 | 21 | return false; 22 | } 23 | 24 | window['removeRelation'] = removeRelation; -------------------------------------------------------------------------------- /public/javascripts/tabsInURL.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by lmarini on 3/24/15. 3 | */ 4 | $(function(){ 5 | var hash = window.location.hash; 6 | hash && $('ul.nav a[href="' + hash + '"]').tab('show'); 7 | $('.nav-tabs a').click(function (e) { 8 | $(this).tab('show'); 9 | var scrollmem = $('body').scrollTop(); 10 | window.location.hash = this.hash; 11 | $('html,body').scrollTop(scrollmem); 12 | }); 13 | }); -------------------------------------------------------------------------------- /public/plugins/IIPZoom.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/plugins/IIPZoom.swf -------------------------------------------------------------------------------- /public/plugins/envlib.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/plugins/envlib.jar -------------------------------------------------------------------------------- /public/securesocial/images/providers/cilogon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/securesocial/images/providers/cilogon.png -------------------------------------------------------------------------------- /public/securesocial/images/providers/crowd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/securesocial/images/providers/crowd.png -------------------------------------------------------------------------------- /public/securesocial/images/providers/keycloak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/securesocial/images/providers/keycloak.png -------------------------------------------------------------------------------- /public/securesocial/images/providers/ldap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/securesocial/images/providers/ldap.png -------------------------------------------------------------------------------- /public/securesocial/images/providers/orcid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/securesocial/images/providers/orcid.png -------------------------------------------------------------------------------- /public/stylesheets/dragdrop.css: -------------------------------------------------------------------------------- 1 | #filedrag 2 | { 3 | 4 | display: none; 5 | font-weight: bold; 6 | text-align: center; 7 | height:100px; 8 | weight:100px; 9 | padding: 10px; 10 | margin: 1em 0; 11 | color: #555; 12 | border: 5px solid grey; 13 | border-radius: 7px; 14 | cursor: default; 15 | } 16 | 17 | #filedrag.hover 18 | { 19 | color: #f00; 20 | border-color: #f00; 21 | border-style: solid; 22 | box-shadow: inset 0 3px 4px #888; 23 | } 24 | -------------------------------------------------------------------------------- /public/stylesheets/file-uploader/demo-ie8.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Demo CSS Fixes for IE<9 1.0.0 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .navigation { 14 | list-style: none; 15 | padding: 0; 16 | margin: 1em 0; 17 | } 18 | .navigation li { 19 | display: inline; 20 | margin-right: 10px; 21 | } 22 | -------------------------------------------------------------------------------- /public/stylesheets/file-uploader/jquery.fileupload-noscript.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Plugin NoScript CSS 1.2.0 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .fileinput-button input { 14 | position: static; 15 | opacity: 1; 16 | filter: none; 17 | font-size: inherit; 18 | direction: inherit; 19 | } 20 | .fileinput-button span { 21 | display: none; 22 | } 23 | -------------------------------------------------------------------------------- /public/stylesheets/file-uploader/jquery.fileupload-ui-noscript.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload UI Plugin NoScript CSS 8.8.5 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2012, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .fileinput-button i, 14 | .fileupload-buttonbar .delete, 15 | .fileupload-buttonbar .toggle { 16 | display: none; 17 | } 18 | -------------------------------------------------------------------------------- /public/stylesheets/file-uploader/style.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Plugin CSS Example 8.8.2 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | body { 14 | padding-top: 60px; 15 | } 16 | -------------------------------------------------------------------------------- /public/stylesheets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/stylesheets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/stylesheets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/stylesheets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/stylesheets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/stylesheets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/stylesheets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/public/stylesheets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/stylesheets/pdf.css: -------------------------------------------------------------------------------- 1 | .pdfview p { 2 | padding: 1em; 3 | } 4 | 5 | .pdfview object { 6 | display: block; 7 | border: solid 1px #666; 8 | } 9 | 10 | .pdfview { 11 | width:750px; 12 | height:550px; 13 | } -------------------------------------------------------------------------------- /public/stylesheets/tableborder.css: -------------------------------------------------------------------------------- 1 | @CHARSET "US-ASCII"; 2 | 3 | 4 | td.right 5 | { 6 | border-style:solid ; 7 | border-right:thick double grey; 8 | } 9 | td.left 10 | { 11 | border-style:solid ; 12 | border-left:thick double grey; 13 | } 14 | th.right 15 | { 16 | border-style:solid ; 17 | border-right:thick double grey; 18 | } 19 | th.left 20 | { 21 | border-style:solid ; 22 | border-left:thick double grey; 23 | } 24 | th.both 25 | { 26 | border-style:solid ; 27 | border-left:thick double grey; 28 | border-right:thick double grey; 29 | } -------------------------------------------------------------------------------- /public/templates/metadata/footer.handlebars: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Space: {{space_name}} 4 |
    5 |
    6 | Uri: {{uri}} 7 |
    8 |
    9 | 10 |
    11 |
    12 |
    13 |
    14 |
    15 | -------------------------------------------------------------------------------- /sbt: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | java -Xms1024M -Xmx2048M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=1024M -XX:ReservedCodeCacheSize=128M -jar `dirname $0`/sbt-launch.jar "$@" 4 | -------------------------------------------------------------------------------- /sbt-launch.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/sbt-launch.jar -------------------------------------------------------------------------------- /sbt.bat: -------------------------------------------------------------------------------- 1 | set SCRIPT_DIR=%~dp0 2 | java -Dfile.separator=\/ -Xms1024M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=1024M -jar "%SCRIPT_DIR%sbt-launch.jar" %* 3 | -------------------------------------------------------------------------------- /scripts/clean-extractors-tmpfiles/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine 2 | 3 | COPY clean.sh list.txt / 4 | 5 | CMD ["sh", "/clean.sh"] 6 | -------------------------------------------------------------------------------- /scripts/clean-extractors-tmpfiles/clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIST=list.txt 4 | 5 | while IFS=, read -r path days; 6 | do 7 | case "$path" in \#*) continue ;; esac 8 | echo "path: $path", "days: $days" 9 | deleted=$(/usr/bin/find $path -maxdepth 1 -mindepth 1 -mtime +$days) 10 | echo $deleted 11 | rm -rf $deleted 12 | echo "deletion done" 13 | done < "$LIST" 14 | 15 | -------------------------------------------------------------------------------- /scripts/clean-extractors-tmpfiles/list.txt: -------------------------------------------------------------------------------- 1 | #path,days 2 | -------------------------------------------------------------------------------- /scripts/elasticsearch/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM elasticsearch:2 2 | 3 | RUN apt-get update && apt-get install -y zip && rm -rf /var/lib/apt/lists/* && \ 4 | for x in $(find /usr/share/elasticsearch -name \*.jar); do \ 5 | zip -d $x org/apache/log4j/net/JMSAppender.class org/apache/log4j/net/SocketServer.class | grep 'deleting:' && echo "fixed $x"; \ 6 | done; \ 7 | echo "removed JMSAppender and SocketServer" 8 | -------------------------------------------------------------------------------- /scripts/geostream.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import argparse 3 | import urllib2 4 | import json 5 | import os 6 | import requests 7 | from urlparse import urljoin 8 | 9 | host = 'http://localhost:9000' 10 | key = 'r1ek3rs' 11 | headers={'Content-Type': 'application/json'} 12 | 13 | def main(): 14 | """Search geostreams""" 15 | search() 16 | 17 | def search(): 18 | """ Upload one file at a time """ 19 | url= urljoin(host, 'api/geostreams/search?key=' + key) 20 | print url 21 | r = requests.get(url,headers=headers) 22 | r.raise_for_status() 23 | print r.json()[0]['start_time'] 24 | return r.json() 25 | 26 | if __name__ == '__main__': 27 | main() -------------------------------------------------------------------------------- /scripts/migrates-aws-s3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 2 | 3 | LABEL maintainer="Bing Zhang " 4 | 5 | ENV SERVICE_ENDPOINT='http://localhost:8000' \ 6 | BUCKET='localbucket' \ 7 | AWS_ACCESS_KEY_ID="" \ 8 | AWS_SECRET_ACCESS_KEY="" \ 9 | REGION="us-east-1"\ 10 | DBURL="mongodb://localhost:27017" \ 11 | DBNAME="clowder" \ 12 | OUTPUTFOLDER="/output" 13 | 14 | 15 | COPY requirements.txt / 16 | RUN pip install -r /requirements.txt 17 | 18 | # Copy files 19 | COPY main.py s3.py / 20 | CMD python /main.py --dburl $DBURL --dbname $DBNAME 21 | -------------------------------------------------------------------------------- /scripts/migrates-aws-s3/requirements.txt: -------------------------------------------------------------------------------- 1 | pymongo==3.7.2 2 | boto3==1.9.188 3 | s3transfer==0.2.1 4 | -------------------------------------------------------------------------------- /scripts/mongo-exec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Either make sure mongo is in your $PATH, 4 | # or edit the following line to contain the full pathname of 5 | # the "mongo" executable. 6 | echo "mongo --quiet --norc testbr < /tmp/mongo-tmp.sh \ 7 | && sh /tmp/mongo-tmp.sh 8 | -------------------------------------------------------------------------------- /scripts/mongo-init/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8-slim 2 | MAINTAINER Bing Zhang 3 | 4 | # environemnt variables 5 | ARG BRANCH="unknown" 6 | ARG VERSION="unknown" 7 | ARG BUILDNUMBER="unknown" 8 | ARG GITSHA1="unknown" 9 | ENV BRANCH=${BRANCH} \ 10 | VERSION=${VERSION} \ 11 | BUILDNUMBER=${BUILDNUMBER} \ 12 | GITSHA1=${GITSHA1} \ 13 | USERNAME="" \ 14 | EMAIL_ADDRESS="" \ 15 | FIRST_NAME="" \ 16 | LAST_NAME="" \ 17 | PASSWORD="" \ 18 | ADMIN="" \ 19 | MONGO_URI="mongodb://mongo:27017/clowder" 20 | 21 | COPY requirements.txt / 22 | RUN pip install -r /requirements.txt 23 | 24 | # Copy files 25 | COPY mongo-init.py / 26 | CMD python /mongo-init.py 27 | -------------------------------------------------------------------------------- /scripts/mongo-init/requirements.txt: -------------------------------------------------------------------------------- 1 | bcrypt==3.1.6 2 | passlib==1.7.1 3 | pymongo==3.8.0 4 | -------------------------------------------------------------------------------- /scripts/monitor/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8-slim 2 | 3 | EXPOSE 9999 4 | 5 | # environemnt variables 6 | ARG BRANCH="unknown" 7 | ARG VERSION="unknown" 8 | ARG BUILDNUMBER="unknown" 9 | ARG GITSHA1="unknown" 10 | ENV BRANCH=${BRANCH} \ 11 | VERSION=${VERSION} \ 12 | BUILDNUMBER=${BUILDNUMBER} \ 13 | GITSHA1=${GITSHA1} \ 14 | RABBITMQ_URI="amqp://guest:guest@rabbitmq/%2F" \ 15 | RABBITMQ_MGMT_PORT=15672 \ 16 | RABBITMQ_MGMT_PATH="/" \ 17 | RABBITMQ_MGMT_URL="" 18 | 19 | WORKDIR /src 20 | 21 | COPY requirements.txt /src/ 22 | RUN pip3 install -r /src/requirements.txt 23 | 24 | COPY . /src/ 25 | 26 | CMD python monitor.py 27 | -------------------------------------------------------------------------------- /scripts/monitor/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/scripts/monitor/fa-solid-900.woff2 -------------------------------------------------------------------------------- /scripts/monitor/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/scripts/monitor/favicon.png -------------------------------------------------------------------------------- /scripts/monitor/requirements.txt: -------------------------------------------------------------------------------- 1 | pika==1.0.0 2 | requests==2.31.0 3 | python-dateutil==2.8.0 4 | -------------------------------------------------------------------------------- /scripts/monitor/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff2) format("woff2"),url(fa-solid-900.woff) format("woff"),url(fa-solid-900.ttf) format("truetype"),url(fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} 6 | -------------------------------------------------------------------------------- /scripts/rmq-error-shovel/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.5 2 | 3 | # EXAMPLE USAGE: 4 | # docker run --rm --net=host \ 5 | # -e EXTRACTOR_QUEUE=ncsa.wordcount \ 6 | # -e CLOWDER_HOST=http://host.docker.internal:9000 -e CLOWDER_KEY=r1ek3rs \ 7 | # -e RABBITMQ_URI="amqp://guest:guest@host.docker.internal:5672/%2f" \ 8 | # clowder/rmq-error-shovel 9 | 10 | # environemnt variables 11 | ENV EXTRACTOR_QUEUE="ncsa.image.preview" \ 12 | CLOWDER_HOST="" \ 13 | CLOWDER_KEY="" \ 14 | RABBITMQ_URI="amqp://guest:guest@rabbitmq/%2F" \ 15 | RABBITMQ_MGMT_PORT=15672 \ 16 | RABBITMQ_MGMT_PATH="/" \ 17 | RABBITMQ_MGMT_URL="" 18 | 19 | WORKDIR /src 20 | 21 | COPY requirements.txt /src/ 22 | RUN pip3 install -r /src/requirements.txt 23 | 24 | COPY . /src/ 25 | 26 | CMD python check_rabbitmq.py 27 | -------------------------------------------------------------------------------- /scripts/rmq-error-shovel/requirements.txt: -------------------------------------------------------------------------------- 1 | pika==1.0.0 2 | requests==2.31.0 -------------------------------------------------------------------------------- /scripts/tester/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | 4 | # environemnt variables 5 | ENV CLOWDER_URL=${CLOWDER_URL} \ 6 | CLOWDER_KEY=${CLOWDER_KEY} \ 7 | TARGET_FILE=${TARGET_FILE} \ 8 | SLACK_TOKEN=${SLACK_TOKEN} \ 9 | SLACK_CHANNEL=${SLACK_CHANNEL} \ 10 | SLACK_USER=${SLACK_USER} 11 | 12 | 13 | RUN apt-get update && apt-get install -y curl jq && apt-get clean && rm -rf /var/lib/apt/lists 14 | 15 | COPY tester.sh / 16 | 17 | CMD ["sh", "/tester.sh"] 18 | -------------------------------------------------------------------------------- /scripts/toollaunchservice/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | # environemnt variables 4 | ARG BRANCH="unknown" 5 | ARG VERSION="unknown" 6 | ARG BUILDNUMBER="unknown" 7 | ARG GITSHA1="unknown" 8 | ENV BRANCH=${BRANCH} \ 9 | VERSION=${VERSION} \ 10 | BUILDNUMBER=${BUILDNUMBER} \ 11 | GITSHA1=${GITSHA1} 12 | 13 | RUN apt-get -y update \ 14 | && apt-get -y install curl unzip docker.io python python-dev python-pip \ 15 | && pip install flask-restful \ 16 | && pip install arrow \ 17 | && apt-get clean all \ 18 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ 19 | ; 20 | COPY FILES.toolserver / 21 | ENV TOOLSERVER_PORT 8082 22 | CMD /usr/local/bin/usage 23 | 24 | -------------------------------------------------------------------------------- /scripts/toollaunchservice/FILES.toolserver/usr/local/bin/clowder-xfer: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo $* 4 | 5 | # $1 dataset download URL 6 | # $2 dataset ID 7 | # $3 clowder access key 8 | # $4 destination directory path 9 | 10 | echo curl --connect-timeout 10 -o $4/data/dataset.zip -L $1?key=$3 11 | curl --connect-timeout 10 -o $4/data/dataset.zip -L $1?key=$3 > $4/data/transfer-log_$2 2>&1 12 | chmod -R 777 $4 13 | mkdir $4/data/$2 14 | unzip -o $4/data/dataset.zip -d $4/data/$2 15 | rm $4/data/dataset.zip 16 | -------------------------------------------------------------------------------- /scripts/toollaunchservice/FILES.toolserver/usr/local/bin/usage: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | usage-docker() { 4 | echo -n 'docker run -d -p 8080:8080 --name toolserver -v /var/run/docker.sock:/var/run/docker.sock toolserver ncsa/clowder-toolserver' 5 | } 6 | 7 | usage() { 8 | echo "This image generates the command to run itself using the following commands:" 9 | echo ' docker run --rm -t toolserver usage docker' 10 | echo ' To deploy in this environment:' 11 | echo ' eval $(docker run --rm -it toolserver usage docker)' 12 | 13 | } 14 | 15 | case $1 in 16 | "docker" ) 17 | usage-docker 18 | ;; 19 | *) 20 | usage 21 | ;; 22 | esac 23 | -------------------------------------------------------------------------------- /scripts/toollaunchservice/FILES.toolserver/usr/local/data/toolconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "ipython": { 3 | "toolName": "Jupyter", 4 | "description": "Basic Jupyter notebook environment", 5 | "dockerSrc": "jupyter/scipy-notebook", 6 | "dataPath": "/home/jovyan/work", 7 | "mappedPort": "8888/tcp" 8 | }, 9 | "rstudio": { 10 | "toolName": "RStudio", 11 | "description": "RStudio analysis environment", 12 | "dockerSrc": "rocker/ropensci", 13 | "dataPath": "/home/rstudio", 14 | "mappedPort": "8787/tcp" 15 | } 16 | } -------------------------------------------------------------------------------- /scripts/toollaunchservice/Makefile: -------------------------------------------------------------------------------- 1 | IMAGES = toolserver 2 | VERSION = 1.0 3 | 4 | 5 | testsrv: 6 | eval $(docker run --rm -it toolserver usage docker) 7 | 8 | testcli: 9 | curl -H "Content-Type: application/json" -X POST -d '{"host":"http://localhost","dataset":"http://141.142.209.122/clowder/api/datasets/56a2c166e4b01a6c14f3040d/download","user":"USERNAME","pw":"PASSWORD"}' localhost:8080/tools/docker/ipython 10 | 11 | testxfer: 12 | FILES.toolserver/usr/local/bin/clowder-xfer 'http://141.142.209.122/clowder/api/datasets/56a2c166e4b01a6c14f3040d/download' 'USERNAME' 'PASSWORD' /tmp/xfer.zip 13 | 14 | testlog: 15 | curl -H "Content-Type: application/json" -X GET localhost:8080/logs 16 | -------------------------------------------------------------------------------- /scripts/toollaunchservice/toolserver.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=TERRA Tool Launcher 3 | After=docker.service 4 | Requires=docker.service 5 | 6 | [Service] 7 | TimeoutSec=60 8 | RestartSec=60 9 | Restart=always 10 | ExecStartPre=-/usr/bin/docker kill clowder-toolserver 11 | ExecStartPre=-/usr/bin/docker rm clowder-toolserver 12 | ExecStartPre=/usr/bin/docker pull ncsa/clowder-toolserver:latest 13 | ExecStart=/usr/bin/docker run -p 8080:8080 --name clowder-toolserver -v /var/run/docker.sock:/var/run/docker.sock ncsa/clowder-toolserver toolserver 14 | 15 | [Install] 16 | WantedBy=multi-user.target 17 | 18 | -------------------------------------------------------------------------------- /scripts/updates/README.md: -------------------------------------------------------------------------------- 1 | OFFLINE VERSION OF UPDATES: 2 | 3 | Following are scripts that can be run to update the database. Some of these updates can 4 | take a long time, these scripts can be run beforehand as well as afterwards to apply 5 | the updaates. These scripts will first set the flag to indicate the update has been 6 | applied, preventing clowder from running the update during a migration. These scripts 7 | are named with the actual name of the update .js 8 | 9 | - update-avatar-url-to-https.js 10 | 11 | 12 | MISCELLANEOUS SCRIPTS: 13 | 14 | - fix-counts.js: script to redo the counts in clowder 15 | 16 | - UpdateUserId.js: Adds user_id to documents in extractions collection in clowder mongo db. Uses author id in uploads.files if exists, else it takes the author id from datasets collection. Usage: mongo clowder UpdateUserId.js 17 | -------------------------------------------------------------------------------- /scripts/web/README.md: -------------------------------------------------------------------------------- 1 | Web Based Interface and Helper Scripts for Clowder 2 | ================================================= 3 | 4 | info.php 5 | -------- 6 | 7 | Retrieve clowder status info stored in local mongo instance. Prints returned info to screen. 8 | 9 | Usage: 10 | 11 | > wget http://localhost/info.php?servers=true&extractors=true&inputs=true&requests=true&headings=false 12 | 13 | extract.php 14 | ----------- 15 | 16 | Pass a file to the clowder extraction bus for metadata extraction. Prints returned JSON to the screen. 17 | 18 | Usage: 19 | 20 | > wget http://localhost/extract.php?url=http://foo.com/bar.jpg 21 | -------------------------------------------------------------------------------- /scripts/web/plots/README.md: -------------------------------------------------------------------------------- 1 | plot.php 2 | -------- 3 | 4 | Generate a plot of Clowder extraction service usage. Returns number of tasks per given specified time frame and refreshes plot image 5 | located in: tmp/[minutes|hours|dats].png. 6 | 7 | Usage: 8 | 9 | > wget http://localhost/plot.php?bins=[minutes|hours|days] 10 | -------------------------------------------------------------------------------- /scripts/web/plots/days.gnuplot: -------------------------------------------------------------------------------- 1 | set terminal png size 640,480 2 | set output "tmp/days.png" 3 | set ylabel "Tasks" 4 | set xlabel "Time (Days)" 5 | plot 'tmp/days.txt' using 3:4:xticlabels(2) with lines title "Tasks per Day" lc rgb "blue" 6 | -------------------------------------------------------------------------------- /scripts/web/plots/hours.gnuplot: -------------------------------------------------------------------------------- 1 | set terminal png size 640,480 2 | set output "tmp/hours.png" 3 | set ylabel "Tasks" 4 | set xlabel "Time (Hours)" 5 | plot 'tmp/hours.txt' using 3:4:xticlabels(2) with lines title "Tasks per Hour" lc rgb "blue" 6 | -------------------------------------------------------------------------------- /scripts/web/plots/minutes.gnuplot: -------------------------------------------------------------------------------- 1 | set terminal png size 640,480 2 | set output "tmp/minutes.png" 3 | set ylabel "Tasks" 4 | set xlabel "Time (Minutes)" 5 | unset xtics 6 | plot 'tmp/minutes.txt' using 3:4 with lines title "Tasks per Minute" lc rgb "blue" 7 | -------------------------------------------------------------------------------- /scripts/web/plots/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p /var/www/dts/plots 4 | mkdir -p /var/www/dts/plots/tmp 5 | cp *.php /var/www/dts/plots 6 | cp *.gnuplot /var/www/dts/plots 7 | -------------------------------------------------------------------------------- /scripts/web/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p /var/www/dts 4 | cp info.php /var/www/dts 5 | cp extract.php /var/www/dts 6 | -------------------------------------------------------------------------------- /scripts/web/tests/README.md: -------------------------------------------------------------------------------- 1 | tests.php 2 | -------- 3 | 4 | Web application to test the functionality of the extraction service behind a specified Clowder instance. Note, test.php 5 | is a helper script for this script. 6 | 7 | Usage: 8 | 9 | Go to http://localhost/tests.php 10 | 11 | tests.py 12 | -------- 13 | 14 | Command line version of the above for use as a cron job. Places output in the same folder so that web application can 15 | view the previous run. 16 | 17 | Usage: 18 | 19 | > ./tests.py 20 | -------------------------------------------------------------------------------- /scripts/web/tests/failure_watchers.txt: -------------------------------------------------------------------------------- 1 | mchenry@illinois.edu 2 | -------------------------------------------------------------------------------- /scripts/web/tests/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/scripts/web/tests/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /scripts/web/tests/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/scripts/web/tests/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /scripts/web/tests/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/scripts/web/tests/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /scripts/web/tests/pass_watchers.txt: -------------------------------------------------------------------------------- 1 | mchenry@illinois.edu 2 | -------------------------------------------------------------------------------- /scripts/web/tests/plot.gnuplot: -------------------------------------------------------------------------------- 1 | set terminal png size 640,480 2 | set output "tmp/plot.png" 3 | set ylabel "Elapsed Time (s)" 4 | set xlabel "Date" 5 | set xtics format " " 6 | plot 'tmp/plot.txt' using 1:2 with lines title "" lc rgb "blue", \ 7 | 'tmp/plot_failures.txt' using 1:2 with points title "" lc rgb "red" pt 7 8 | -------------------------------------------------------------------------------- /scripts/web/tests/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p /var/www/dts/tests 4 | cp *.php /var/www/dts/tests 5 | cp *.py /var/www/dts/tests 6 | cp *.txt /var/www/dts/tests 7 | cp *.gnuplot /var/www/dts/tests 8 | cp -r css /var/www/dts/tests 9 | cp -r fonts /var/www/dts/tests 10 | cp -r js /var/www/dts/tests 11 | -------------------------------------------------------------------------------- /test/data/collections/data-test-collection-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "description" : "Collection 2 Tests Description", 3 | "name" : "Collection 2 Test Suite", 4 | "space" : "default" 5 | } 6 | -------------------------------------------------------------------------------- /test/data/collections/data-test-collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "description" : "Collection 1 Tests Description", 3 | "name" : "Collection 1 Test Suite", 4 | "space" : "default" 5 | } 6 | -------------------------------------------------------------------------------- /test/data/collections/dataset-image-1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/collections/dataset-image-1.zip -------------------------------------------------------------------------------- /test/data/collections/dataset-image.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/collections/dataset-image.zip -------------------------------------------------------------------------------- /test/data/contextld/data-test-contextld-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "context_name": "ClowderPerson", 3 | "@context": 4 | { 5 | "name": "http://schema.org/name", 6 | "image": { 7 | "@id": "http://schema.org/image", 8 | "@type": "@id" 9 | }, 10 | "homepage": { 11 | "@id": "http://schema.org/url", 12 | "@type": "@id" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /test/data/contextld/data-test-contextld-inline.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": 3 | { 4 | "name": "http://schema.org/name", 5 | "image": { 6 | "@id": "http://schema.org/image", 7 | "@type": "@id" 8 | }, 9 | "homepage": { 10 | "@id": "http://schema.org/url", 11 | "@type": "@id" 12 | } 13 | }, 14 | "name": "Clowder Context", 15 | "homepage": "http://clowder.ncsa.illinois.edu", 16 | "image": "http://isda.ncsa.illinois.edu/drupal/sites/all/themes/danland/images/slideshows/mHARP_banner1a.png" 17 | } -------------------------------------------------------------------------------- /test/data/contextld/data-test-contextld-person.json: -------------------------------------------------------------------------------- 1 | { 2 | "http://schema.org/name": "Clowder Context", 3 | "http://schema.org/url": { "@id": "http://isda.ncsa.illinois.edu/drupal/" }, 4 | "http://schema.org/image": { "@id": "http://isda.ncsa.illinois.edu/drupal/sites/all/themes/danland/images/slideshows/mHARP_banner1a.png" } 5 | } -------------------------------------------------------------------------------- /test/data/contextld/data-test-contextld.json: -------------------------------------------------------------------------------- 1 | { 2 | "context_name": "Person", 3 | "@context": 4 | { 5 | "name": "http://schema.org/name", 6 | "image": { 7 | "@id": "http://schema.org/image", 8 | "@type": "@id" 9 | }, 10 | "homepage": { 11 | "@id": "http://schema.org/url", 12 | "@type": "@id" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /test/data/datasets/dataset-image.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/datasets/dataset-image.zip -------------------------------------------------------------------------------- /test/data/datasets/dataset-search-general.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reason": ".*Suite.*" 3 | } -------------------------------------------------------------------------------- /test/data/datasets/dataset-search-user.json: -------------------------------------------------------------------------------- 1 | { 2 | "Other" : ".*Pretty Cool.*" 3 | } -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-general.json: -------------------------------------------------------------------------------- 1 | { 2 | "archive": { 3 | "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"] 4 | }, 5 | "Image": "fid", 6 | "Format": "JPEG(JointPhotographicExpertsGroupJFIFformat)", 7 | "Reason": "DataSet Test Suite" 8 | } -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-tags-remove-one.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags" : ["Dataset"] 3 | } 4 | -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-tags-remove-round-two.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags" : [ "Cool Stuff", "New Technology" ], 3 | "extractor_id" : "ncsa.cv.face" 4 | } 5 | -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-tags-remove.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags" : [ "Clowder", "Test Suite" ], 3 | "extractor_id" : "ncsa.cv.face" 4 | } 5 | -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-tags-round-two.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags" : [ "Test 2", "Cool Stuff", "New Technology" ], 3 | "extractor_id" : "ncsa.cv.face" 4 | } 5 | -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags" : [ "Dataset", "Test Suite", "Clowder" ], 3 | "extractor_id" : "ncsa.cv.face" 4 | } 5 | -------------------------------------------------------------------------------- /test/data/datasets/dataset-test-user.json: -------------------------------------------------------------------------------- 1 | { 2 | "Description" : "Dataset Zip file Json", 3 | "Items" : "Image files", 4 | "Other" : "Pretty Cool Huh?" 5 | } -------------------------------------------------------------------------------- /test/data/datasets/morrowplots.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/datasets/morrowplots.jpg -------------------------------------------------------------------------------- /test/data/datasets/zip-file-thumbnail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/datasets/zip-file-thumbnail.jpg -------------------------------------------------------------------------------- /test/data/extractions/morrowplots-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/extractions/morrowplots-thumb.jpg -------------------------------------------------------------------------------- /test/data/extractions/morrowplots.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/extractions/morrowplots.jpg -------------------------------------------------------------------------------- /test/data/files/data-search-general.json: -------------------------------------------------------------------------------- 1 | { 2 | "Image": "fid" 3 | } -------------------------------------------------------------------------------- /test/data/files/data-search-user.json: -------------------------------------------------------------------------------- 1 | { 2 | "Description" : ".*bronze sign.*" 3 | } -------------------------------------------------------------------------------- /test/data/files/data-test-user.json: -------------------------------------------------------------------------------- 1 | { 2 | "Description" : "Pretty picture of bronze sign", 3 | "Items" : "Sign, Bridge, Building", 4 | "Other" : "Sunny Day" 5 | } -------------------------------------------------------------------------------- /test/data/files/morrowplots-thumb-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/files/morrowplots-thumb-1.jpg -------------------------------------------------------------------------------- /test/data/files/morrowplots-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/files/morrowplots-thumb.jpg -------------------------------------------------------------------------------- /test/data/files/morrowplots.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/files/morrowplots.jpg -------------------------------------------------------------------------------- /test/data/previews/data-test-general.json: -------------------------------------------------------------------------------- 1 | { 2 | "Image": "fid", 3 | "extractor_id": "test-extractor" 4 | } -------------------------------------------------------------------------------- /test/data/previews/data-test-preview.json: -------------------------------------------------------------------------------- 1 | { 2 | "extractor_id": "test-extractor" 3 | } -------------------------------------------------------------------------------- /test/data/previews/morrowplots-preview-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/previews/morrowplots-preview-1.jpg -------------------------------------------------------------------------------- /test/data/previews/morrowplots-preview-meta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/previews/morrowplots-preview-meta.jpg -------------------------------------------------------------------------------- /test/data/previews/morrowplots-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/previews/morrowplots-preview.jpg -------------------------------------------------------------------------------- /test/data/previews/morrowplots.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clowder-framework/clowder/f28c203c56b2d4690d32ea0bce5364458de1ec79/test/data/previews/morrowplots.jpg -------------------------------------------------------------------------------- /test/data/spaces/data-test-collections.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Collection 1 Test Suite", 3 | "description" : "Collection 1 Tests Description" 4 | 5 | } -------------------------------------------------------------------------------- /test/data/spaces/data-test-spaces.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Spaces 1 Test", 3 | "description" : "API Spaces 1 Test Suite" 4 | } -------------------------------------------------------------------------------- /test/integration/APITestSuite.scala: -------------------------------------------------------------------------------- 1 | 2 | package integration 3 | 4 | import org.scalatest._ 5 | import org.scalatestplus.play.OneAppPerSuite 6 | import play.api.test.FakeApplication 7 | 8 | 9 | 10 | 11 | class APITestSuite extends Suites ( 12 | new ExtractionsAPIAppSpec , 13 | new FilesAPIAppSpec , 14 | new DatasetsAPIAppSpec , 15 | new CollectionsAPIAppSpec , 16 | new PreviewsAPIAppSpec, 17 | new ApplicationSpec 18 | ) with OneAppPerSuite 19 | { 20 | // Override app if you need a FakeApplication with other than non-default parameters. 21 | implicit override lazy val app: FakeApplication = 22 | FakeApplication(additionalConfiguration = Map("ehcacheplugin" -> "disabled", "withoutPlugins" -> List( 23 | "services.RabbitmqPlugin", 24 | "services.VersusPlugin"))) 25 | 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /test/integration/app-server/AppFixture.scala: -------------------------------------------------------------------------------- 1 | package integration 2 | 3 | import org.scalatest._ 4 | import play.api.test._ 5 | 6 | /** 7 | * Application fixture to setup a fake application for functional tests. 8 | * 9 | * @author Luigi Marini 10 | */ 11 | //@DoNotDiscover 12 | trait AppFixture extends SuiteMixin { this: Suite => 13 | 14 | val excludedPlugins = List( 15 | "services.RabbitmqPlugin" 16 | ) 17 | 18 | val includedPlugins = List( 19 | // "services.mongodb.MongoUserService" 20 | ) 21 | 22 | implicit val app: FakeApplication = FakeApplication(withoutPlugins=excludedPlugins,additionalPlugins = includedPlugins) 23 | 24 | abstract override def withFixture(test: NoArgTest) = Helpers.running(app) { 25 | super.withFixture(test) 26 | } 27 | } -------------------------------------------------------------------------------- /test/integration/app-server/ApplicationTestSuite.scala: -------------------------------------------------------------------------------- 1 | package integration 2 | 3 | import org.scalatest.Suites 4 | import org.scalatestplus.play.OneAppPerSuite 5 | import play.api.test.FakeApplication 6 | 7 | /** 8 | * Test basic application 9 | */ 10 | class ApplicationTestSuite extends Suites ( 11 | new ApplicationSpec 12 | ) with OneAppPerSuite 13 | { 14 | implicit override lazy val app: FakeApplication = 15 | FakeApplication(additionalConfiguration = Map("ehcacheplugin" -> "disabled", "withoutPlugins" -> List( 16 | "services.RabbitmqPlugin", 17 | "services.VersusPlugin"))) 18 | 19 | } 20 | -------------------------------------------------------------------------------- /test/integration/app-server/IntegrationSpec.scala: -------------------------------------------------------------------------------- 1 | package integration 2 | 3 | import org.scalatest._ 4 | import selenium.HtmlUnit 5 | 6 | /** 7 | * Base class for integration/functional tests. 8 | * 9 | * @author Luigi Marini 10 | */ 11 | abstract class IntegrationSpec extends FlatSpec with Matchers with OptionValues with HtmlUnit 12 | -------------------------------------------------------------------------------- /test/integration/app-server/ServerFixture.scala: -------------------------------------------------------------------------------- 1 | package integration 2 | 3 | import org.scalatest._ 4 | import play.api.test._ 5 | 6 | /** 7 | * Server fixture setting up a test server for functional tests. 8 | * 9 | * @author Luigi Marini 10 | */ 11 | //@DoNotDiscover 12 | trait ServerFixture extends SuiteMixin { this: Suite => 13 | 14 | implicit val server: TestServer = TestServer(3333) 15 | 16 | abstract override def withFixture(test: NoArgTest) = Helpers.running(server) { 17 | super.withFixture(test) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/integration/datasets/APIDatasetsTestSuite.scala: -------------------------------------------------------------------------------- 1 | package integration 2 | 3 | import play.api.test.FakeApplication 4 | import play.api.test.FakeRequest 5 | import play.api.test.Helpers._ 6 | import play.api.libs.concurrent.Execution.Implicits._ 7 | import play.api.libs.json.Json 8 | import play.api.Logger 9 | import org.scalatestplus.play.OneAppPerSuite 10 | import org.scalatestplus.play.PlaySpec 11 | import play.api.Play 12 | import org.scalatest._ 13 | 14 | 15 | 16 | 17 | class APIDatasetsTestSuite extends Suites ( 18 | new DatasetsAPIAppSpec 19 | ) with OneAppPerSuite 20 | { 21 | implicit override lazy val app: FakeApplication = 22 | FakeApplication(additionalConfiguration = Map("ehcacheplugin" -> "disabled", "withoutPlugins" -> List( 23 | "services.RabbitmqPlugin", 24 | "services.VersusPlugin"))) 25 | 26 | } 27 | -------------------------------------------------------------------------------- /test/unit/RelationSpec.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | import models.Relation 4 | import org.scalatest.mock.MockitoSugar._ 5 | 6 | /** 7 | * Created by lmarini on 3/11/15. 8 | */ 9 | class RelationSpec extends UnitSpec { 10 | 11 | // val mockRelation = mock[Relation] 12 | // 13 | // "A relation" should "should have a source node" in { 14 | // assert(mockRelation.source != null) 15 | // } 16 | } 17 | -------------------------------------------------------------------------------- /test/unit/app-server/FileSpec.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | import models.File 4 | import org.scalatest.mock.MockitoSugar._ 5 | 6 | /** 7 | * Test file models and controllers. 8 | * 9 | * @author Luigi Marini 10 | */ 11 | class FileSpec extends UnitSpec with TestData { 12 | 13 | val mockFile = mock[File] 14 | 15 | "A file" should "have an author" in { 16 | assert(testFile.author != null) 17 | } 18 | 19 | "2" should "not be equal to 3" in { 20 | val left = 2 21 | val right = 3 22 | assert(left != right) 23 | } 24 | 25 | "5 - 2" should "equal to 3" in { 26 | val a = 5 27 | val b = 2 28 | assertResult(3) { 29 | a - b 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /test/unit/app-server/MongoDBSpec.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | /** 4 | * Base class for testing MongoDB services. Doesn't do much yet. 5 | * 6 | * @author Luigi Marini 7 | */ 8 | class MongoDBSpec extends UnitSpec { 9 | 10 | case class Database() { 11 | def isAvalable() = true 12 | } 13 | 14 | val database = Database() 15 | } 16 | -------------------------------------------------------------------------------- /test/unit/app-server/MongoFileSpec.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | import javax.inject.Inject 4 | import org.scalatest.Assertions._ 5 | import services.FileService 6 | 7 | /** 8 | * Trying to properly use services for unit tests. 9 | * 10 | * @author Luigi Marini 11 | */ 12 | class MongoFileSpec @Inject()(files: FileService) extends UnitSpec { 13 | 14 | "A file" should "write to db" in { 15 | // assume(database.isAvailable) 16 | assert(1 == 1) 17 | } 18 | 19 | "An empty database" should "have no files" in { 20 | assert(files.listFiles().size == 0) 21 | } 22 | 23 | "After adding a file we" should "be able to find retrieve it" in { 24 | assert(true) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /test/unit/app-server/TestData.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | import java.util.Date 4 | import models.{Tag, UUID, File, Metadata, UserAgent} 5 | import securesocial.core.{AuthenticationMethod, IdentityId, SocialUser} 6 | import java.net.URL 7 | import play.api.libs.json.JsObject 8 | import models.MiniUser 9 | 10 | /** 11 | * Mixin of default data to use for testing. 12 | * 13 | */ 14 | trait TestData { 15 | var testUser = MiniUser( 16 | id = UUID("56d8afec7d840aec3068a334"), 17 | fullName = "John Doe", 18 | email = Some("john@doe.com"), 19 | avatarURL = "" 20 | ) 21 | 22 | var testFile = File(id = UUID.generate, filename = "foo.txt", author = testUser, uploadDate = new Date, contentType = "text/plain") 23 | 24 | var testTag = Tag(UUID.generate, "foo", None, None, new Date) 25 | 26 | } 27 | -------------------------------------------------------------------------------- /test/unit/app-server/UnitSpec.scala: -------------------------------------------------------------------------------- 1 | package unit 2 | 3 | import org.scalatest._ 4 | 5 | /** 6 | * Base class for unit tests. 7 | * 8 | * @author Luigi Marini 9 | */ 10 | abstract class UnitSpec extends FlatSpec with Matchers with OptionValues with Inside with Inspectors 11 | -------------------------------------------------------------------------------- /test/unit/metadata/metadataTestData.scala: -------------------------------------------------------------------------------- 1 | package unit.metadata 2 | 3 | import models._ 4 | import java.util.Date 5 | import play.api.libs.json.JsObject 6 | import java.net.URL 7 | 8 | 9 | trait metadataTestData { 10 | val id = UUID.generate 11 | val testCreator = UserAgent(id= UUID.generate, typeOfAgent="cat:user", MiniUser(id, "Test User", "", None), 12 | userId = Some(new URL("http://dts.ncsa.illinois.edu/user06"))) 13 | val testMetadata = Metadata( 14 | id = UUID.generate, 15 | attachedTo = ResourceRef(ResourceRef.file, UUID.generate), 16 | createdAt = new Date, 17 | creator = testCreator, 18 | content = new JsObject(Seq())) 19 | } -------------------------------------------------------------------------------- /test/unit/spaces/SpaceSpec.scala: -------------------------------------------------------------------------------- 1 | package unit.spaces 2 | 3 | import models.ProjectSpace 4 | import org.scalatest.mock.MockitoSugar._ 5 | import unit.UnitSpec 6 | import org.mockito.Mockito.when 7 | 8 | /** 9 | * Placeholder for spaces unit test. 10 | * 11 | * @author Luigi Marini 12 | * 13 | */ 14 | class SpaceSpec extends UnitSpec { 15 | 16 | val mockSpace = mock[ProjectSpace] 17 | 18 | when(mockSpace.name).thenReturn("N/A") 19 | 20 | "A space" should "have a name" in { 21 | assert(mockSpace.name != null) 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VERSION="1.22.1" 4 | 5 | sed -i~ "s#^ val version = \".*\"\$# val version = \"${VERSION}\"#" project/Build.scala 6 | sed -i~ "s#^version: .*\$#version: \"${VERSION}\"#" citation.cff 7 | sed -i~ "s#^ version: .*\$# version: ${VERSION}#" public/swagger.yml 8 | sed -i~ "s#^release = '.*'\$#release = '${VERSION}'#" doc/src/sphinx/conf.py 9 | sed -i~ "s/^##.*unreleased.*$/## ${VERSION} - $(date +'%Y-%m-%d')/i" CHANGELOG.md 10 | --------------------------------------------------------------------------------