{"action":"created","issue":{"url":"https://api.github.com/repos/IQSS/dataverse/issues/5525","repository_url":"https://api.github.com/repos/IQSS/dataverse","labels_url":"https://api.github.com/repos/IQSS/dataverse/issues/5525/labels{/name}","comments_url":"https://api.github.com/repos/IQSS/dataverse/issues/5525/comments","events_url":"https://api.github.com/repos/IQSS/dataverse/issues/5525/events","html_url":"https://github.com/IQSS/dataverse/issues/5525","id":408699540,"node_id":"MDU6SXNzdWU0MDg2OTk1NDA=","number":5525,"title":"Extending Dataverse functionalities","user":{"login":"pkiraly","id":218218,"node_id":"MDQ6VXNlcjIxODIxOA==","avatar_url":"https://avatars1.githubusercontent.com/u/218218?v=4","gravatar_id":"","url":"https://api.github.com/users/pkiraly","html_url":"https://github.com/pkiraly","followers_url":"https://api.github.com/users/pkiraly/followers","following_url":"https://api.github.com/users/pkiraly/following{/other_user}","gists_url":"https://api.github.com/users/pkiraly/gists{/gist_id}","starred_url":"https://api.github.com/users/pkiraly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pkiraly/subscriptions","organizations_url":"https://api.github.com/users/pkiraly/orgs","repos_url":"https://api.github.com/users/pkiraly/repos","events_url":"https://api.github.com/users/pkiraly/events{/privacy}","received_events_url":"https://api.github.com/users/pkiraly/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2019-02-11T09:44:01Z","updated_at":"2019-02-11T15:37:02Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"Is there a standard way to extend Dataverse functionalities?\r\n\r\nIn Göttingen we would like to implement the following workflow: for Humanities data the user would like to see a button on the dataset page (somewhere near the \"Publish\" button), which publish their data into another, domain specific repository (Dariah Repository -- https://repository.de.dariah.eu/publikator/). This would require a change in the UI, and some extra functionalities at the background, which use Dariah repository API, and Dataverse API.\r\n\r\nThis function would be specific to our use case, and could be implemented by manipulating the HTML with jQuery and setting up an individual service for the functionalities (running by Apache HTTP server or a Java servlet container). However that would not be integrated into Dataverse ecosystem, so the maintenance would be somewhat difficult.\r\n\r\nIn different content management systems (such as Drupal), there is a built in system for extensions, based on the observer design pattern. The idea is, that the core application (in this case Dataverse) makes some calls transparent, and let others to extend or modify the result of the call. It usually has two steps: 1) the extension subscribes to the core's service 2) when it is time to call the specific functionality the core notifies its subscribers and they could react to it. There are different models and subpatterns of this pattern.\r\n\r\nAt the end it works the following way: the extensions or modules would be deployed as individual jar or war files (I don't know what is the preferred way in Glassfish), and uponserver initialization phase or via an API they would subscribe to Dataverse.\r\n\r\nI am not sure if there are no existing sources for this question, but I haven't found it.\r\n"},"comment":{"url":"https://api.github.com/repos/IQSS/dataverse/issues/comments/462372650","html_url":"https://github.com/IQSS/dataverse/issues/5525#issuecomment-462372650","issue_url":"https://api.github.com/repos/IQSS/dataverse/issues/5525","id":462372650,"node_id":"MDEyOklzc3VlQ29tbWVudDQ2MjM3MjY1MA==","user":{"login":"michbarsinai","id":1938468,"node_id":"MDQ6VXNlcjE5Mzg0Njg=","avatar_url":"https://avatars2.githubusercontent.com/u/1938468?v=4","gravatar_id":"","url":"https://api.github.com/users/michbarsinai","html_url":"https://github.com/michbarsinai","followers_url":"https://api.github.com/users/michbarsinai/followers","following_url":"https://api.github.com/users/michbarsinai/following{/other_user}","gists_url":"https://api.github.com/users/michbarsinai/gists{/gist_id}","starred_url":"https://api.github.com/users/michbarsinai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michbarsinai/subscriptions","organizations_url":"https://api.github.com/users/michbarsinai/orgs","repos_url":"https://api.github.com/users/michbarsinai/repos","events_url":"https://api.github.com/users/michbarsinai/events{/privacy}","received_events_url":"https://api.github.com/users/michbarsinai/received_events","type":"User","site_admin":false},"created_at":"2019-02-11T15:37:02Z","updated_at":"2019-02-11T15:37:02Z","author_association":"MEMBER","body":"I've uploaded the presentation here:\nhttp://mbarsinai.com/homepage-files/OpenMonolith.pdf <http://mbarsinai.com/homepage-files/OpenMonolith.pdf>\n\nNot sure why the catalog of the old JavaOnes does not work anymore. If only they would have used a trustworthy repository and assigned a DOI or something....\n\nThe TL;DR is that we use the service providers system to dynamically load plugins for workflows. We also have a PoC of such plug-in that announces publications of datasets in Slack.\n\nPublication workflows do have a built-in REST API clients, so you can send REST requests and inspect their result both before and after the publication. The \"before\" workflow must complete successfully prior to the dataset version being published (e.g. moving files from internal server to a publicly available one). The \"after\" workflow happens after the version has been published (e.g. push new link to a message board/Twitter). The docs are here: http://guides.dataverse.org/en/latest/api/native-api.html#workflows\n\n> On 11 Feb 2019, at 17:17, Philip Durbin <notifications@github.com> wrote:\n> \n> @pkiraly <https://github.com/pkiraly> this is a great question! I would suggest talking to @qqmyers <https://github.com/qqmyers> about his pull request #5049 <https://github.com/IQSS/dataverse/pull/5049> about the \"DuraCloud/Chronopolis Integration\" he added. A high level description of the feature sounds somewhat similar to your goal: \"Dataverse can be configured to submit a copy of published Datasets, packaged as Research Data Alliance conformant zipped BagIt bags to the Chronopolis via DuraCloud.\"\n> \n> Documentation: https://github.com/QualitativeDataRepository/dataverse/blob/8d09fbf5e8a3139c1479ca07455c315165378a60/doc/sphinx-guides/source/installation/config.rst#duracloud-chronopolis-integration <https://github.com/QualitativeDataRepository/dataverse/blob/8d09fbf5e8a3139c1479ca07455c315165378a60/doc/sphinx-guides/source/installation/config.rst#duracloud-chronopolis-integration>\n> The \"archiver\" workflow he added: https://github.com/QualitativeDataRepository/dataverse/blob/8d09fbf5e8a3139c1479ca07455c315165378a60/doc/sphinx-guides/source/developers/workflows.rst#archiver <https://github.com/QualitativeDataRepository/dataverse/blob/8d09fbf5e8a3139c1479ca07455c315165378a60/doc/sphinx-guides/source/developers/workflows.rst#archiver>\n> Originally, he added a button to the Dataverse web interface but my understanding is that it was switched to an API call instead.\n> \n> We do have a concept of \"external tools\" where any arbitrary button can be added to a \"Explore\" or \"Configure\" drop down. See \"type\" at http://guides.dataverse.org/en/4.10.1/installation/external-tools.html <http://guides.dataverse.org/en/4.10.1/installation/external-tools.html> . However, these tools only work at the file level at the moment.\n> \n> I hear you on wanting modularity in general. @michbarsinai <https://github.com/michbarsinai> and @matthew-a-dunlap <https://github.com/matthew-a-dunlap> gave a talk at JavaOne 2017 about modularity (CON3449) but I can't seem to find the slides. If memory serves, there was talk of dropping jars into the app, like you're saying, perhaps using Service Provider Interface (SPI): https://docs.oracle.com/javase/tutorial/ext/basics/spi.html <https://docs.oracle.com/javase/tutorial/ext/basics/spi.html>\n> I hope this helps a little. This sounds like a great topic for a community call: https://dataverse.org/community-calls <https://dataverse.org/community-calls>\n> —\n> You are receiving this because you were mentioned.\n> Reply to this email directly, view it on GitHub <https://github.com/IQSS/dataverse/issues/5525#issuecomment-462365134>, or mute the thread <https://github.com/notifications/unsubscribe-auth/AB2UJBn0qdAHBz6vY4TjHbNKlp6k2KA3ks5vMYmlgaJpZM4az0a2>.\n> \n\n"}}
{"actor":{"display_login":"michbarsinai"}}