├── .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 |
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 |
8 |
9 | Download All Files
10 |
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 |
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 |
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 | Relationship Type
6 | Target Dataset
7 |
8 |
9 | @for(rd <- relatedDatasets) {
10 |
11 | @rd.rdfType.getOrElse("Generic relation")
12 | @rd.dataset.name
13 | }
14 |
15 |
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 | ID
20 | Proximity
21 |
22 |
23 |
24 |
25 | @results.map{ re=>
26 |
27 | @re._4
28 | @re._3
29 |
30 | }
31 |
32 |
33 |
34 |
35 | }
--------------------------------------------------------------------------------
/app/views/spaces/createButton.scala.html:
--------------------------------------------------------------------------------
1 |
2 | @Messages("create.title", "")
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
@elements.label(elements.lang)
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 |
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 |
@elements.label
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 |
5 |
6 | Uri: {{uri}}
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------