ursjoss / scipamato

Scientific Paper Management Tool
BSD 3-Clause "New" or "Revised" License
14 stars 1 forks source link
jooq ludok pubmed scientific-journals spring-boot swisstph wicket-framework

image:https://img.shields.io/github/license/ursjoss/scipamato.svg[LICENSE, link=https://github.com/ursjoss/scipamato/blob/main/LICENSE.adoc] image:https://github.com/ursjoss/scipamato/workflows/Check/badge.svg?branch=main[Build Status, link=https://github.com/ursjoss/scipamato/actions] image:https://sonarcloud.io/api/project_badges/measure?project=ursjoss_scipamato&metric=alert_status[Quality Gate, link=https://sonarcloud.io/dashboard?id=ursjoss_scipamato] image:https://sonarcloud.io/api/project_badges/measure?project=ursjoss_scipamato&metric=coverage[Coverage, link=https://sonarcloud.io/dashboard?id=ursjoss_scipamato] image:https://github.com/ursjoss/scipamato/actions/workflows/codeql.yml/badge.svg?branch=main&event=push[CodeQL, link=https://github.com/ursjoss/scipamato/actions/workflows/codeql.yml]

[[scipamato]] == SciPaMaTo

SciPaMaTo (Scientific Paper Management Tool) is a database centric application that was developed for and with the LUDOK team of the Swiss Tropical and Public Health Institute (https://www.swisstph.ch/[Swiss TPH]) located in Basel, Switzerland.

https://www.swisstph.ch/en/projects/ludok/[LUDOK] (in German: "Dokumentationsstelle Luftverschmutzung und Gesundheit") is a documentation office that has been collecting and cataloguing scientific literature regarding the effects of air pollution on human health for over 30 years. This is a service LUDOK provides on behalf of the Swiss Federal Office for the Environment (https://www.bafu.admin.ch/bafu/en/home.html[FOEN]).

SciPaMaTo was developed under the BSD-3 license to replace the former Filemaker Database that has been serving its purpose for many years.

SciPaMaTo consists of two main components:

SciPaMaTo is a Spring Boot web-application using Apache Wicket as front-end and stores the data in PostgreSQL-Databases. It offers simplified ways of importing relevant items of information from Pubmed. SciPaMaTo offers quite extensive search facilities that allow scrutinizing the database. Parts of the data managed within ScipMaTo-Core can be synchronized into SciPaMaTo-Public, which is accessible for the interested public over the internet.

=== C4-Diagrams

==== Context Diagram

flowchart TD
  PM["PubMed<br/>[Software System]<br/><br/>National Library of Medicine"]
  click PM href "https://pubmed.ncbi.nlm.nih.gov" _blank
  PublicViewer["Public Viewer<br/>[Person]<br/><br/>Anonymous Reader<br/>on the Internet"]
  subgraph dmz[DMZ]
    SP["SciPaMaTo Public<br/>[Software System]<br/><br/>Public System,<br/>reachable anonymously<br/>from public internet"]
    click SP href "https://www.swisstph.ch/en/projects/ludok/datenbanksuche" _blank
    SPDB("fas:fa-database Public Database<br/>[System DB]")
  end
  subgraph internal[Internal Network]
    Editor["Editor<br/>[Person]<br/><br/>Maintaining<br/>data in Core"]
    Viewer["Read only user<br/>[Person]<br/><br/>Read only viewer<br/>in SciPaMaTo-Core"]
    Admin["Admin user<br/>[Person]<br/><br/>User maintaining<br/>user accounts"]
    SC["SciPaMaTo Core<br/>[Software System]<br/><br/>Core System,<br/>only reachable inside<br/>the private network"]
    SCDB("fas:fa-database Core Database<br/>[System DB]")
  end
  Editor<==>|"Enters and<br/>maintains data"|SC
  Viewer<-->|"Views Data"|SC
  Admin<-->|"Maintains user<br/>accounts in"|SC
  SC<--->|"imports from"|PM
  SC<-.->|"read/write"|SCDB
  SC-.->|"synchronizes"|SPDB
  SP-.-|"read only"|SPDB

  PublicViewer-->|"searches database,<br/>views newsletters"|SP

  classDef focusSystem fill:#1168bd,stroke:#0b4884,color:#ffffff
  classDef supportingSystem fill:#666,stroke:#0b4884,color:#ffffff
  classDef person fill:#08427b,stroke:#052e56,color:#ffffff
  classDef boundary fill:none,stroke:#CCC,stroke-width:2px,stroke-dasharray: 5 5

  class Editor,Viewer,Admin,PublicViewer person
  class SC,SP focusSystem
  class PM supportingSystem
  class dmz,internal boundary

==== Container Diagram SciPaMaTo-Core

flowchart TD
  PM["PubMed<br/>[Software System]<br/><br/>National Library of Medicine"]
  subgraph dmz[DMZ]
    subgraph dbserver2[DB Server]
      SPDB("fas:fa-database Public Database<br/>[PostgreSQL]")
    end
  end
  subgraph internal[Internal Network]
    Editor["Editor<br/>[Person]<br/><br/>Maintaining<br/>data in Core"]
    Viewer["Read only user<br/>[Person]<br/><br/>Read only viewer<br/>in SciPaMaTo-Core"]
    Admin["Admin user<br/>[Person]<br/><br/>User maintaining<br/>user accounts"]
    subgraph webserver[Web Server]
      RP["Reverse Proxy<br/>[Apache HTTPD]"]
      SC["Web Application<br/>[Spring Boot Application]"]
    end
    subgraph dbserver1[DB Server]
      SCDB("fas:fa-database Core Database<br/>[PostgreSQL]")
    end

    Editor<==>|"enters and<br/>maintains data<br/>[HTTPS]"|RP
    Editor<-->|"triggers<br/>sync to public<br/>[HTTPS]"|RP
    Editor<-->|"triggers<br/>import from PubMed<br/>[HTTPS]"|RP
    Viewer<-->|"Views Data<br/>[HTTPS]"|RP
    Admin<-->|"Maintains user<br/>accounts in<br/>[HTTPS]"|RP
  end

  RP<-->|"relays<br/>[HTTP]"|SC
  SC-.-|"reads/writes<br/>[JDBC]"|SCDB
  SC-.->|"synchronizes<br/>[JDBC]"|SPDB
  SC<--->|"imports<br/>from<br/>[HTTPS]"|PM

  classDef container fill:#1168bd,stroke:#0b4884,color:#ffffff
  classDef supportingSystem fill:#666,stroke:#0b4884,color:#ffffff
  classDef person fill:#08427b,stroke:#052e56,color:#ffffff

  class Editor,Viewer,Admin person
  class SC,RP,SCDB container
  class PM,SPDB supportingSystem

  classDef boundary fill:none,stroke:#CCC,stroke-width:2px,stroke-dasharray: 5 5
  class dmz,internal boundary

  classDef server fill:none,stroke:#CCC,stroke-width:2px,stroke-dasharray: 5 5
  class dbserver1,dbserver2,webserver server

==== Container Diagram SciPaMaTo-Public

flowchart TD
  Searcher["Database Searcher<br/>[Person]<br/><br/>Anonymous Reader<br/>on the Internet"]
  Viewer["Newsletter Viewer<br/>[Person]<br/><br/>Anonymous Reader<br/>on the Internet"]
  subgraph dmz[DMZ]
    subgraph webserverp[Web Server]
      RP["Reverse Proxy<br/>[Apache HTTPD]"]
      SP["Web Application<br/>[Spring Boot Application]"]
      click SP href "https://www.swisstph.ch/en/projects/ludok/datenbanksuche" _blank
    end
    subgraph dbserverp[DB Server]
      SPDB("fas:fa-database Public Database<br/>[PostgreSQL]")
    end
  end

  subgraph internal[Internal Network]
    subgraph webserverc[Web Server]
      SC["Web Application<br/>[Spring Boot Application]"]
    end
    subgraph dbserverc[DB Server]
      SCDB("fas:fa-database Core Database<br/>[PostgreSQL]")
    end
    SC<-.->|"[JDBC]"|SCDB
  end

  Searcher<-->|"searches database<br/>[HTTPS]"|RP
  Viewer<-->|"views newsletters<br/>[HTTPS]"|RP

  RP<-->|"relays<br/>[HTTP]"|SP
  SP-.-|"read only<br/>[JDBC]"|SPDB
  SC-.->|"synchronizes<br/>[JDBC]"|SPDB

  classDef container fill:#1168bd,stroke:#0b4884,color:#ffffff
  classDef supportingSystem fill:#666,stroke:#0b4884,color:#ffffff
  classDef person fill:#08427b,stroke:#052e56,color:#ffffff

  class Searcher,Viewer,CoreUser person
  class SP,RP,SPDB container
  class SC,SCDB supportingSystem

  classDef boundary fill:none,stroke:#CCC,stroke-width:2px,stroke-dasharray: 5 5
  class dmz,internal boundary

  classDef server fill:none,stroke:#CCC,stroke-width:2px,stroke-dasharray: 5 5
  class dbserverp,dbserverc,webserverp,webserverc server

[[technology-stack]] == Technology Stack

[[architecture-documentation]] == Architecture Documentation

I started using https://structure101.com/[Structure101] to assess and track the architecture of SciPaMaTo. Many thanks to the friendly people of Structure101 to provide a free license for SciPaMaTo as an open source project!

image:https://structure101.com/images/s101_170.png[Structure101]

[[user-documentation]] == User Documentation

[[user-docu-scipamato-core]] === SciPaMaTo-Core Documentation

[[user-docu-scipamato-public]] === SciPaMaTo-Public Documentation

[[information-for-developers]] == Information for Developers

Refer to the https://github.com/ursjoss/scipamato/wiki/QuickStart[Quick-Start Guide] to get the project up and running as quickly as possible.

See https://github.com/ursjoss/scipamato/wiki/Developer-Information[Developer Wiki]

[[information-for-operations]] == Information for Operations

See https://github.com/ursjoss/scipamato/wiki/Operations[Operations Wiki]