Giter Club home page Giter Club logo

arctic-sea's Introduction

Arctic Sea

Build Status Maven Central Join the chat at https://gitter.im/52North/arctic-sea CodeAQL analysis Open Source

Description

52°North's backbone for OGC services, Clients and Middleware

A framework for developing OGC services, clients and middleware sharing concepts for encoding and decoding of different formats and encodings, workflows and configuration.

Arctic Sea is a stack of projects that eases the development of OGC related services such as the 52°North implementation of the OGC SOS and WPS, as well as clients and middleware. It compromises the following modules.

Overview

Iceland Maven Central

Iceland is a service framework that enables the development of OGC RPC (remote procedure call) based services. It features bindings for KVP, POX, SOAP, as well as JSON-based bindings. Iceland facilitates the rapid development of modular services that use Faroe for easy configuration and Svalbard for request parsing and response generation.

Svalbard Maven Central

Svalbard consists of various decoders and encoders for OGC models (e.g. SensorML, O&M and SWE Common, service interfaces (like SOS and WPS) and a framework for developing these. This enables the creation of decoupled and reusable encoders and decoders for various encodings (e.g. XML, JSON or NetCDF). The object models used are found in 52°North Shetland and are shared across 52°North components.

Faroe Maven Central

Faroe is a configuration API currently featuring a JSON and a SQLite backend. It enables the injection and automatic configuration of settings of various types in classes, including a Spring BeanPostprocessor.

Shetland Maven Central

Shetland consists of classes for OGC models like SensorML, O&M and SWE Common and various service requests and responses. These are shared across different service implementations.

Jan Mayen Maven Central

Jan Mayen contains various utility classes shared throughout Arctic Sea.

Bjørnøya (Bjornoya) Maven Central

Bjørnøya contains various classes for [Quartz] scheduling shared across Arctic Sea. These include configurations to define the execution of jobs.

Key Technologies

  • OGC Web Services
  • OGC Web Processing Service (WPS)
  • OGC Sensor Observation Service (SOS)
  • OGC SWE Common
  • OGC SensorML
  • OGC Observation and Measurement (O&M)
  • Spring
  • Java
  • XML

Benefits

  • The middleware component provides a robust layer to easily create web services compliant to OGC standards.
  • The configuration API enables harmonized management of service properties.
  • Centralized XML encoding and decoding reduces increases stability.

License

All components are licensed under the Apache License 2.0.

Changelog

... can be found on the release page.

Quick Start

All projects are available on Maven Central.

<properties>
  <version.arctic-sea>10.1.0</version.arctic-sea>
</properties>
<dependencies>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>bjornoya</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>faroe</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>faroe-annotations</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>faroe-json</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>faroe-utils</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland-statistics</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland-statistics-generator</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland-statistics-geolocation</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland-statistics-kibana</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>janmayen</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>shetland</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>shetland-rdf</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>shetland-arcgis</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-exi</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-json</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-json-common</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-odata</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-xmlbeans</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
  <dependency>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>svalbard-xmlstream</artifactId>
    <version>${version.arctic-sea}</version>
  </dependency>
</dependencies>

For convenience the 52°North Maven parent can be used:

<parent>
    <groupId>org.n52</groupId>
    <artifactId>parent</artifactId>
    <version>27</version>
</parent>

Development versions can be optained from the Sonatype OSS snapshot repository:

<repositories>
  <repository>
    <id>sonatype-nexus-snapshots</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>
<properties>
  <version.arctic-sea>8.2.0-SNAPSHOT</version.arctic-sea>
</properties>

For details on how to use the components, consult their respective documentation.

Contact

If you encounter any issues with the software or if you would like to see certain functionality added, let us know:

Support

You can get support in the community mailing list.

Contribute

Are you interested in contributing to the 52°North Arctic Sea and you would like to pull your changes to the 52N repository to have them available to all?

In that case we need your official permission and for this purpose we have a so-called contributors license agreement (CLA) in place. With this agreement you grant us the rights to use and publish your code under an open source license.

A link to the contributors license agreement and further explanations are available here.

References

The development of the 52°North Arctic Sea implementation was supported by several organizations and projects. Among other we would like to thank the following organizations and project

Project/Logo Description
Cos4Cloud The development of this version of 52°North Arctic Sea was supported by the Horizon 2020 research project Cos4Cloud (co-funded by the European Commission under the grant agreement no. 863463)
BMBFTaMIS The development of this version 52°North Arctic Sea was supported by the German Federal Ministry of Education and Research research project TaMIS (co-funded by the German Federal Ministry of Education and Research, programme Geotechnologien, under grant agreement no. 03G0854)
JERICO-S3 The development of this version of 52°North Arctic Sea was supported by the Horizon 2020 research project JERICO-S3 (co-funded by the European Commission under the grant agreement no. 871153)
NeXOS The development of this version of 52°North Arctic Sea was supported by the European FP7 research project NeXOS (co-funded by the European Commission under the grant agreement no. 614102)
BMBFCOLABIS The development of this version 52°North Arctic Sea was supported by the German Federal Ministry of Education and Research research project COLABIS (co-funded by the German Federal Ministry of Education and Research, programme Geotechnologien, under grant agreement no. 03G0852A)
SeaDataCloud The development of this version of 52°North Arctic Sea was supported by the Horizon 2020 research project SeaDataCloud (co-funded by the European Commission under the grant agreement no. 730960)
ODIP II The development of this version of 52°North Arctic Sea was supported by the Horizon 2020 research project ODIP II (co-funded by the European Commission under the grant agreement no. 654310)
ConnectinGEO The development of this version of 52°North Arctic Sea was supported by the Horizon 2020 research project ConnectinGEO (co-funded by the European Commission under the grant agreement no. 641538)
GeoViQua The development of this version of 52°North Arctic Sea was supported by the European FP7 research project GeoViQua (co-funded by the European Commission under the grant agreement no. 265178)
BMVImFundWaCoDis The development of this version of 52°North Arctic Sea was supported by the German Federal Ministry of of Transport and Digital Infrastructure research project WaCoDis (co-funded by the German Federal Ministry of Transport and Digital Infrastructure, programme mFund)
BMBFfonaMuDak-WRM The development of this version of 52°North Arctic Sea was supported by the German Federal Ministry of Education and Research research project MuDak-WRM (co-funded by the German Federal Ministry of Education and Research, programme fona)
BRIDGES The development of this version of the 52°North Arctic Sea was supported by the Horizon 2020 research project BRIDGES (co-funded by the European Commission under the grant agreement no. 635359)

arctic-sea's People

Contributors

ahitch avatar autermann avatar bpross-52n avatar dependabot-preview[bot] avatar dependabot[bot] avatar ehj-52n avatar janschulte avatar lestarcdog avatar martinkiesow avatar matthesrieke avatar mojioms avatar ridoo avatar speckij avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arctic-sea's Issues

Settings API - Custom action button

Would it be possible to have a custom button on the admin settings page?
When the user clicks on the button it should validate only a sub-group of settings fields.

Is it possible to implement this feature?

See 52North/iceland#18.

Update schema location of DeleteObservation operation?!

Shouldn't we point to another source for the schema of the delete observation operation because it will be removed someday?

The link used in the source code:

    String NS_SOSDO_1_0_SCHEMA_LOCATION =
            "https://raw.githubusercontent.com/52North/SOS/master/extensions/do/xml/src/main/xsd/sosdo.xsd";

What about using http://52north.org/schema/sosdo/1.0|2.0/sosdo.xsd?

See 52North/shetland#1.

Move all components to this repository

Proposal

Move all Arctic Sea components (Jan Mayen, Faroe, Shetland, Svalbard, Iceland) to this repository, give them a common groupId (org.n52.arctic-sea) and a common version number (maybe starting at 3.0.0). Due to dependency convergence we'll currently have to rerelease all components with updated dependencies anyway if e.g. Jan Mayen gets a new release.

Benefits

  • Easier release workflow
  • Easier changes across projects
  • Easier handling of dependencies
  • Easier usage (i.e. common versioning scheme)

Todo

  • Migrate all open issues from Jan Mayen

  • Migrate all open issues from Faroe

  • Migrate all open issues from Shetland

  • Migrate all open issues from Svalbard

  • Migrate all open issues from Iceland

  • Move source code of Jan Mayen in subdirectory called janmayen

  • Move source code of Faroe in subdirectory called faroe

  • Move source code of Shetland in subdirectory called shetland

  • Move source code of Svalbard in subdirectory called svalbard

  • Move source code of Iceland in subdirectory called iceland

  • Create a parent pom.xml using the component's pom.xml

    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>arctic-sea</artifactId>
    <version>3.0.0-SNAPSHOT</version>
  • Update the component's pom.xml to use the new parent, change the groupId to org.n52.arcticsea, e.g.:

    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>iceland</artifactId>
    <version>3.0.0-SNAPSHOT</version>
    <groupId>org.n52.arctic-sea</groupId>
    <artifactId>faroe-annotations</artifactId>
    <version>3.0.0-SNAPSHOT</version>
  • Clear Jan Mayen and create a simple README referencing this repository

  • Clear Faroe and create a simple README referencing this repository

  • Clear Shetland and create a simple README referencing this repository

  • Clear Svalbard and create a simple README referencing this repository

  • Clear Iceland and create a simple README referencing this repository

  • Make sure Travis CI is working

  • Make sure the Website integration is fine

  • Create the initial release

Questions/To Discuss/To Check

Documentation of information flow

The SOS documentation has a nice figure on how the different classes are related to each other and how the information flows through it. This should be adjusted for Iceland and added to the documentation (could be stored as attachment in the wiki)

SOS architecture

See 52North/iceland#9.

java.lang.ClassNotFoundException: org.n52.svalbard.encode.TestAbstractSensorMLEncoder

I am using the latest release and the svalbard-xmlbeans-context.xml contains a bean definition for an abstract class:

cnc_1         | Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.n52.svalbard.encode.TestAbstractSensorMLEncoder] for bean with name 'org.n52.svalbard.encode.TestAbstractSensorMLEncoder#0' defined in URL [jar:file:/tmp/service.jar!/BOOT-INF/lib/core-0.0.1-SNAPSHOT.jar!/svalbard-xmlbeans-context.xml]; nested exception is java.lang.ClassNotFoundException: org.n52.svalbard.encode.TestAbstractSensorMLEncoder
cnc_1         |         at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1380) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:670) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:637) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1489) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:420) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:390) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:222) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1276) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         ... 26 common frames omitted
cnc_1         | Caused by: java.lang.ClassNotFoundException: org.n52.svalbard.encode.TestAbstractSensorMLEncoder
cnc_1         |         at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_151]
cnc_1         |         at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_151]
cnc_1         |         at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93) ~[service.jar:0.0.1-SNAPSHOT]
cnc_1         |         at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_151]
cnc_1         |         at org.springframework.util.ClassUtils.forName(ClassUtils.java:264) ~[spring-core-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:437) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1428) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1372) ~[spring-beans-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
cnc_1         |         ... 37 common frames omitted

@autermann could you please fix this and create 5.0.1, too?

IPv6 of the IPv4 address format exception

I'd like to make a query against the new SOS 5.x deployment and in the logs the following message appears.

2015-07-06 07:32:18,193 WARN [http-nio-127.0.0.1-8080-exec-31] [ProxyChain.java:133] Ignoring invalid IP address in X-Forwared-For header: ::ffff:217.173.34.182 java.lang.IllegalArgumentException: '' is not an IP string literal. at com.google.common.net.InetAddresses.forString(InetAddresses.java:153) ~[InetAddresses.class:na] at org.n52.iceland.util.net.IPAddress.parse(IPAddress.java:125) ~[IPAddress.class:na] at org.n52.iceland.util.net.IPAddress.<init>(IPAddress.java:59) ~[IPAddress.class:na] at org.n52.iceland.util.net.ProxyChain.getIPAddress(ProxyChain.java:141) ~[ProxyChain.class:na] at org.n52.iceland.util.net.ProxyChain.fromForwardedForHeader(ProxyChain.java:128)

full stacktrace: https://gist.github.com/lestarcdog/897d32d8198b29622e79

See 52North/iceland#20.

Support for JDK 9, 10 and 11

Todo:

  • Find a solution for additional dependencies to be declared depending on the runtime JRE
  • Fix the maven-notice-plugin to read the license mappings with the right namespace. Right now, the plugin requires under JDK 8 that the namespace is present and JDK 9+ requires that there is none. The JDK 9+ profile injects a duplicate of the license mapping...
  • JavaDoc generation currently fails:
    [INFO] --- maven-javadoc-plugin:3.0.1:jar (default) @ shetland ---
    [ERROR] Error fetching link: /home/autermann/Source/arctic-sea/janmayen/target/apidocs/package-list. Ignored it.
    
    The JDK 10 javadoc tool only generates the element-list files but no package-list but seems to expect the old one...

Broken Links in Documentation

I just noticed that any Link to a Java resource is broken due to the fact, that there is no src folder on top-level of the repository. Instead there are two folders core and util, which contain the src folders.

So, each link has to be changed in order to contain the missing .../core/... or .../util/... part.

See 52North/iceland#71.

Add documentation

See 52North/iceland#10.

Agreement about documentation location: Markdown files within the repository. Advantage: versioned, close to the code, text-based. Also suitable because iceland is for developers only.

Documentation tasks

Add random setting

Add a new setting type that generates a random string (or number?) at every time the service starts. Can be used for security tokens etc.

See 52North/iceland#32

Refactor ComparisonFilter.java

The class ComparisonFilter.java must be refactored since it currently provides to many constructors and setters to be easily manageable. This has considerable impact on the decoders which currently take advantage of the loose available methods.

See discussion at 52North/iceland#36 (comment)

Better approaches on the table so far:

  • static factory methods and a single private constructor
  • new fluent API

See 52North/iceland#37.

Dependency convergence error with jts-core in v7.1.0

I get an dependency convergence error when using the latest version (v7.1.0):

    Dependency convergence error for org.locationtech.jts:jts-core:1.16.1
    paths to dependency are:
    +-org.n52.wps:engine:1.4.0-SNAPSHOT
      +-org.n52.arctic-sea:shetland:7.1.0
        +-org.locationtech.jts:jts-core:1.16.1
    and
    +-org.n52.wps:engine:1.4.0-SNAPSHOT
      +-org.n52.arctic-sea:shetland:7.1.0
        +-org.geolatte:geolatte-geom:1.4.0
          +-org.locationtech.jts:jts-core:1.16.0
    and
    +-org.n52.wps:engine:1.4.0-SNAPSHOT
      +-org.n52.arctic-sea:iceland:7.1.0
        +-org.n52.arctic-sea:svalbard:7.1.0
          +-org.locationtech.jts:jts-core:1.16.1

Fixed in a29d82c .

Response Event

There is an ongoing enhancement entry under the SOS issues regarding the ResponseEvent. Issue 216

Would it be possible to have also an appropriate ResponseContext implemented in the Iceland project to store additional meta-data (e.g. execution time of the process)?

See 52North/iceland#6.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.