mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-15 10:18:45 +00:00
Merge branch 'master' into bug5912
This commit is contained in:
+12
@@ -101,7 +101,19 @@ public class SecuredDomainType extends HasPermissionsImpl {
|
||||
"SWISS_TIMING_ARCHIVE_ACCOUNT");
|
||||
public static final HasPermissions TRACTRAC_ACCOUNT = new SecuredDomainType("TRACTRAC_ACCOUNT");
|
||||
public static final HasPermissions YELLOWBRICK_ACCOUNT = new SecuredDomainType("YELLOWBRICK_ACCOUNT");
|
||||
|
||||
/**
|
||||
* The type-relative object identifier is expected to name the "SERVER" object to which the request to read
|
||||
* or update the wind estimation models is sent.
|
||||
*/
|
||||
public static final HasPermissions WIND_ESTIMATION_MODELS = new SecuredDomainType("WIND_ESTIMATION_MODELS");
|
||||
|
||||
/**
|
||||
* The type-relative object identifier is expected to name the "SERVER" object to which the request to read
|
||||
* the polar data is sent.
|
||||
*/
|
||||
public static final HasPermissions POLAR_DATA = new SecuredDomainType("POLAR_DATA");
|
||||
|
||||
public static final HasPermissions MARK_PROPERTIES = new SecuredDomainType("MARK_PROPERTIES");
|
||||
public static final HasPermissions MARK_TEMPLATE = new SecuredDomainType("MARK_TEMPLATE");
|
||||
public static final HasPermissions COURSE_TEMPLATE = new SecuredDomainType("COURSE_TEMPLATE");
|
||||
|
||||
+2
-1
@@ -4,6 +4,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
@@ -16,7 +17,7 @@ public class PolarDataClientMock extends PolarDataClient {
|
||||
private final File file;
|
||||
|
||||
public PolarDataClientMock(File file, ReplicablePolarService polarService, DomainFactory domainFactory) {
|
||||
super(null, polarService);
|
||||
super(null, polarService, Optional.empty());
|
||||
polarService.registerDomainFactory(domainFactory);
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@@ -29,13 +29,15 @@ Require-Bundle:
|
||||
com.sap.sse.operationaltransformation,
|
||||
com.sap.sse.security,
|
||||
com.sun.jersey,
|
||||
org.apache.geronimo.specs.geronimo-jta_1.1_spec; bundle-version="1.1.1",
|
||||
org.apache.geronimo.specs.geronimo-jta_1.1_spec;bundle-version="1.1.1",
|
||||
org.eclipse.jetty.osgi-servlet-api;bundle-version="3.1.0",
|
||||
org.apache.shiro.core;bundle-version="1.2.2",
|
||||
org.apache.shiro.web;bundle-version="1.2.2",
|
||||
org.apache.shiro.ehcache;bundle-version="1.2.3",
|
||||
com.sun.xml.bind.jaxb-impl;bundle-version="2.3.0",
|
||||
com.sap.sse.replication.interfaces;bundle-version="1.0.0"
|
||||
com.sap.sse.replication.interfaces;bundle-version="1.0.0",
|
||||
org.apache.httpcomponents.httpcore;bundle-version="4.4.9",
|
||||
com.sap.sailing.shared.server
|
||||
Import-Package:
|
||||
com.sap.sailing.util,
|
||||
javax.ws.rs;version="1.1.1",
|
||||
|
||||
@@ -64,11 +64,14 @@ authc.successUrl = /api/restsecurity/hello
|
||||
# authentication with POST parameters "username" and "password".
|
||||
bearerToken = com.sap.sse.security.BearerTokenOrBasicOrFormAuthenticationFilter
|
||||
|
||||
# The same as bearerToken, but with additional fallback to anonymous authentication.
|
||||
# In this case sufficient permission checks have to be done on the application side.
|
||||
bearerTokenOrAnonymous = com.sap.sailing.shared.server.security.BearerTokenOrBasicOrFormOrAnonymousAuthenticationFilterSAPSailing
|
||||
|
||||
# Specifying filter chains for URL patterns
|
||||
|
||||
[urls]
|
||||
# Uncomment the following to require the permission "event:view" in order to use /api/v1/events:
|
||||
#/api/v1/events = bearerToken
|
||||
/api/** = bearerTokenOrAnonymous
|
||||
|
||||
# Example: Secure access to leaderboard race column factor updates; read access should require no permissions
|
||||
#/api/v1/leaderboards/*/racecolumnfactors/** = bearerToken
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.sap.sailing.polars.impl;
|
||||
import java.util.Dictionary;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -26,6 +27,7 @@ import com.sap.sse.util.ClearStateTestSupport;
|
||||
public class Activator implements BundleActivator {
|
||||
|
||||
private static final String POLAR_DATA_SOURCE_URL_PROPERTY_NAME = "polardata.source.url";
|
||||
private static final String POLAR_DATA_SOURCE_BEARER_TOKEN_PROPERTY_NAME = "polardata.source.bearertoken";
|
||||
|
||||
private static final Logger logger = Logger.getLogger(Activator.class.getName());
|
||||
|
||||
@@ -42,8 +44,10 @@ public class Activator implements BundleActivator {
|
||||
registrations.add(context.registerService(Replicable.class, service, replicableServiceProperties));
|
||||
registrations.add(context.registerService(ClearStateTestSupport.class.getName(), service, null));
|
||||
final String polarDataSourceURL = System.getProperty(POLAR_DATA_SOURCE_URL_PROPERTY_NAME);
|
||||
final String polarDataBearerToken = System.getProperty(POLAR_DATA_SOURCE_BEARER_TOKEN_PROPERTY_NAME);
|
||||
if (polarDataSourceURL != null && !polarDataSourceURL.isEmpty()) {
|
||||
waitForRacingEventServiceToObtainDomainFactory(polarDataSourceURL, service, context, polarDataServiceRegistration);
|
||||
waitForRacingEventServiceToObtainDomainFactory(polarDataSourceURL,
|
||||
Optional.ofNullable(polarDataBearerToken), service, context, polarDataServiceRegistration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +56,6 @@ public class Activator implements BundleActivator {
|
||||
* unregisters the service from the OSGi registry because it will temporarily become unusable, runs the polar data
|
||||
* import from the given URL and registers the service again, adding the service registration object to the set of
|
||||
* {@link #registrations}. The domain factory is required to resolve boat classes during de-serialization.
|
||||
*
|
||||
* @param polarDataServiceRegistration
|
||||
* used to remove the service registration temporarily while updating the service by a remote import
|
||||
* @param registerPolarServiceCallback
|
||||
@@ -60,15 +63,15 @@ public class Activator implements BundleActivator {
|
||||
* {@link Replicable} and as the {@link PolarDataService} with the OSGi registry
|
||||
*/
|
||||
private void waitForRacingEventServiceToObtainDomainFactory(final String polarDataSourceURL,
|
||||
final ReplicablePolarService polarService, final BundleContext context,
|
||||
ServiceRegistration<PolarDataService> polarDataServiceRegistration) {
|
||||
Optional<String> polarDataBearerToken, final ReplicablePolarService polarService,
|
||||
final BundleContext context, ServiceRegistration<PolarDataService> polarDataServiceRegistration) {
|
||||
final Thread t = new Thread(() -> {
|
||||
try {
|
||||
Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); // ensure that classpath:... Shiro ini files are resolved properly
|
||||
logger.info("Waiting for domain factory to be registered with PolarService...");
|
||||
// Note: although the domainFactory parameter isn't used, using runWithDomainFactory ensures that the domain factory is there
|
||||
polarService.runWithDomainFactory(domainFactory -> {
|
||||
PolarDataClient polarDataClient = new PolarDataClient(polarDataSourceURL, polarService);
|
||||
PolarDataClient polarDataClient = new PolarDataClient(polarDataSourceURL, polarService, polarDataBearerToken);
|
||||
try {
|
||||
polarDataServiceRegistration.unregister();
|
||||
polarDataClient.updatePolarDataRegressions();
|
||||
|
||||
+14
@@ -2,6 +2,7 @@ package com.sap.sailing.polars.jaxrs.api;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
@@ -10,13 +11,26 @@ import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.polars.jaxrs.AbstractPolarResource;
|
||||
import com.sap.sse.ServerInfo;
|
||||
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
|
||||
import com.sap.sse.security.shared.TypeRelativeObjectIdentifier;
|
||||
|
||||
@Path("/polar_data")
|
||||
public class PolarDataResource extends AbstractPolarResource {
|
||||
private static final Logger logger = Logger.getLogger(PolarDataResource.class.getName());
|
||||
|
||||
@GET
|
||||
@Produces("application/octet-stream;charset=UTF-8")
|
||||
public Response getRegressions() throws IOException {
|
||||
final Subject subject = SecurityUtils.getSubject();
|
||||
logger.info("Polar Data requested by "+ (subject.getPrincipal() == null ? "anonymous user" : subject.getPrincipal().toString()));
|
||||
subject.checkPermission(SecuredDomainType.POLAR_DATA.getStringPermissionForTypeRelativeIdentifier(DefaultActions.READ,
|
||||
new TypeRelativeObjectIdentifier(ServerInfo.getName())));
|
||||
return Response.ok(new StreamingOutput() {
|
||||
@Override
|
||||
public void write(OutputStream output) throws IOException, WebApplicationException {
|
||||
|
||||
+20
-4
@@ -2,6 +2,7 @@ package com.sap.sailing.polars.jaxrs.client;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -11,9 +12,11 @@ import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.polars.ReplicablePolarService;
|
||||
import com.sap.sailing.polars.impl.PolarDataServiceImpl;
|
||||
import com.sap.sailing.polars.mining.PolarDataMiner;
|
||||
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
|
||||
import com.sap.sse.util.LaxRedirectStrategyForAllRedirectResponseCodes;
|
||||
|
||||
/**
|
||||
@@ -32,17 +35,25 @@ public class PolarDataClient {
|
||||
|
||||
private final ReplicablePolarService polarDataService;
|
||||
private final String polarDataSourceURL;
|
||||
private final Optional<String> polarDataBearerToken;
|
||||
|
||||
/**
|
||||
* Default constructor is missing because we need {@link PolarDataServiceImpl} to reach regressions
|
||||
*
|
||||
* @param polarDataSourceURL
|
||||
* archive server URL string
|
||||
* @param polarDataService
|
||||
* {@link PolarDataServiceImpl} service to work with
|
||||
* @param polarDataBearerToken
|
||||
* if present, this will be used in a <tt>Authorization: Bearer ...</tt> HTTP header to authenticate the
|
||||
* request that fetches the polar data. The token must authenticate a subject with permission
|
||||
* {@link SecuredDomainType#POLAR_DATA}.{@link DefaultActions#READ READ} on the "SERVER" object from
|
||||
* where polar data is request as per the {@code polarDataSourceURL}.
|
||||
*/
|
||||
public PolarDataClient(String polarDataSourceURL, ReplicablePolarService polarDataService) {
|
||||
public PolarDataClient(String polarDataSourceURL, ReplicablePolarService polarDataService, Optional<String> polarDataBearerToken) {
|
||||
this.polarDataService = polarDataService;
|
||||
this.polarDataSourceURL = polarDataSourceURL;
|
||||
this.polarDataBearerToken = polarDataBearerToken;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,9 +81,14 @@ public class PolarDataClient {
|
||||
}
|
||||
|
||||
protected InputStream getContentFromResponse() throws IOException, ParseException {
|
||||
HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategyForAllRedirectResponseCodes()).build();
|
||||
HttpGet getProcessor = new HttpGet(getAPIString());
|
||||
HttpResponse processorResponse = client.execute(getProcessor);
|
||||
final HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategyForAllRedirectResponseCodes()).build();
|
||||
final HttpGet getProcessor = new HttpGet(getAPIString());
|
||||
polarDataBearerToken.ifPresent(bearerToken -> getProcessor.setHeader("Authorization", "Bearer " + bearerToken));
|
||||
final HttpResponse processorResponse = client.execute(getProcessor);
|
||||
if (processorResponse.getStatusLine().getStatusCode() >= 300) {
|
||||
throw new IOException("Error trying to load polar data from "+getAPIString()+": "
|
||||
+processorResponse.getStatusLine().getReasonPhrase()+" ("+processorResponse.getStatusLine().getStatusCode()+")");
|
||||
}
|
||||
return processorResponse.getEntity().getContent();
|
||||
}
|
||||
|
||||
|
||||
+284
-288
@@ -28,295 +28,291 @@
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<setAttribute key="selected_target_bundles">
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.poi.source@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source@default:default"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.eclipse.osgi.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source@default:default"/>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source@default:default"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.google.gson.source@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.google.gson.source"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.source"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:false"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:default"/>
|
||||
</setAttribute>
|
||||
<setAttribute key="selected_workspace_bundles">
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:false"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
</setAttribute>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
|
||||
+2
-1
@@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
@@ -26,7 +27,7 @@ public class WindEstimationDataClientMock extends WindEstimationDataClient {
|
||||
|
||||
public WindEstimationDataClientMock(ModelStore modelStore,
|
||||
ReplicableWindEstimationFactoryService windEstimationFactoryService) {
|
||||
super(null, windEstimationFactoryService);
|
||||
super(null, windEstimationFactoryService, /* windEstimationModelBearerToken */ Optional.empty());
|
||||
this.modelStore = modelStore;
|
||||
}
|
||||
|
||||
|
||||
+20
-4
@@ -3,6 +3,7 @@ package com.sap.sailing.windestimation.integration;
|
||||
import java.util.Dictionary;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -52,6 +53,14 @@ public class Activator implements BundleActivator {
|
||||
* file system that contains serialized model files to load.
|
||||
*/
|
||||
private static final String WIND_ESTIMATION_MODEL_DATA_SOURCE_FOLDER_PROPERTY_NAME = "windestimation.source.folder";
|
||||
|
||||
/**
|
||||
* If a system property with this name is provided, the property value will be used as a bearer token in an HTTP
|
||||
* header <tt>Authorization: Bearer ...</tt> to authenticate the request fetching the wind estimation data from the
|
||||
* URL specified in either the {@link #WIND_ESTIMATION_MODEL_DATA_SOURCE_URL_PROPERTY_NAME} or the
|
||||
* {@link #WIND_ESTIMATION_MODEL_DATA_SOURCE_ALWAYS_URL_PROPERTY_NAME} property.
|
||||
*/
|
||||
private static final String WIND_ESTIMATION_MODEL_BEARER_TOKEN_PROPERTY_NAME = "windestimation.source.bearertoken";
|
||||
|
||||
private final Set<ServiceRegistration<?>> registrations = new HashSet<>();
|
||||
|
||||
@@ -72,6 +81,8 @@ public class Activator implements BundleActivator {
|
||||
.getProperty(WIND_ESTIMATION_MODEL_DATA_SOURCE_ALWAYS_URL_PROPERTY_NAME);
|
||||
final String windEstimationModelDataSourceFolder = System
|
||||
.getProperty(WIND_ESTIMATION_MODEL_DATA_SOURCE_FOLDER_PROPERTY_NAME);
|
||||
final String windEstimationModelBearerToken = System
|
||||
.getProperty(WIND_ESTIMATION_MODEL_BEARER_TOKEN_PROPERTY_NAME);
|
||||
int loadFromCount = (windEstimationModelDataSourceURL != null ? 1 : 0) +
|
||||
(windEstimationModelDataSourceAlwaysURL != null ? 1 : 0) +
|
||||
(windEstimationModelDataSourceFolder != null ? 1 : 0);
|
||||
@@ -82,9 +93,9 @@ public class Activator implements BundleActivator {
|
||||
+ WIND_ESTIMATION_MODEL_DATA_SOURCE_FOLDER_PROPERTY_NAME + "\"");
|
||||
}
|
||||
if (windEstimationModelDataSourceURL != null && !service.isReady()) {
|
||||
importWindEstimationModelsFromUrl(windEstimationModelDataSourceURL);
|
||||
importWindEstimationModelsFromUrl(windEstimationModelDataSourceURL, Optional.ofNullable(windEstimationModelBearerToken));
|
||||
} else if (windEstimationModelDataSourceAlwaysURL != null) {
|
||||
importWindEstimationModelsFromUrl(windEstimationModelDataSourceAlwaysURL);
|
||||
importWindEstimationModelsFromUrl(windEstimationModelDataSourceAlwaysURL, Optional.ofNullable(windEstimationModelBearerToken));
|
||||
} else if (windEstimationModelDataSourceFolder != null) {
|
||||
importWindEstimationModelsFromFolder(windEstimationModelDataSourceFolder);
|
||||
}
|
||||
@@ -117,10 +128,15 @@ public class Activator implements BundleActivator {
|
||||
}
|
||||
}
|
||||
|
||||
private void importWindEstimationModelsFromUrl(String windEstimationModelDataSourceURL) {
|
||||
/**
|
||||
* @param windEstimationModelBearerToken
|
||||
* if present, this bearer token will be used to authenticate the request for the wind estimation model
|
||||
* data
|
||||
*/
|
||||
private void importWindEstimationModelsFromUrl(String windEstimationModelDataSourceURL, Optional<String> windEstimationModelBearerToken) {
|
||||
logger.info("Importing wind estimation data from URL: " + windEstimationModelDataSourceURL);
|
||||
WindEstimationDataClient windEstimationDataClient = new WindEstimationDataClient(
|
||||
windEstimationModelDataSourceURL, service);
|
||||
windEstimationModelDataSourceURL, service, windEstimationModelBearerToken);
|
||||
try {
|
||||
windEstimationDataClient.updateWindEstimationModels();
|
||||
} catch (Exception e) {
|
||||
|
||||
+2
@@ -43,6 +43,8 @@ public class WindEstimationDataResource extends AbstractWindEstimationDataResour
|
||||
logger.info("Wind Estimation Model Data requested by "+
|
||||
(subject.getPrincipal() == null ? "anonymous user" :
|
||||
subject.getPrincipal().toString()));
|
||||
subject.checkPermission(SecuredDomainType.WIND_ESTIMATION_MODELS.getStringPermissionForTypeRelativeIdentifier(
|
||||
DefaultActions.READ, new TypeRelativeObjectIdentifier(ServerInfo.getName())));
|
||||
return Response.ok(new StreamingOutput() {
|
||||
@Override
|
||||
public void write(OutputStream output) throws IOException, WebApplicationException {
|
||||
|
||||
+12
-4
@@ -2,6 +2,7 @@ package com.sap.sailing.windestimation.jaxrs.client;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -29,11 +30,13 @@ public class WindEstimationDataClient {
|
||||
|
||||
private final ReplicableWindEstimationFactoryService windEstimationFactoryService;
|
||||
private final String windEstimationDataSourceURL;
|
||||
private final Optional<String> windEstimationModelBearerToken;
|
||||
|
||||
public WindEstimationDataClient(String windEstimationDataSourceURL,
|
||||
ReplicableWindEstimationFactoryService windEstimationFactoryService) {
|
||||
ReplicableWindEstimationFactoryService windEstimationFactoryService, Optional<String> windEstimationModelBearerToken) {
|
||||
this.windEstimationFactoryService = windEstimationFactoryService;
|
||||
this.windEstimationDataSourceURL = windEstimationDataSourceURL;
|
||||
this.windEstimationModelBearerToken = windEstimationModelBearerToken;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,9 +65,14 @@ public class WindEstimationDataClient {
|
||||
}
|
||||
|
||||
protected InputStream getContentFromResponse() throws IOException, ParseException {
|
||||
HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategyForAllRedirectResponseCodes()).build();
|
||||
HttpGet getProcessor = new HttpGet(getAPIString());
|
||||
HttpResponse processorResponse = client.execute(getProcessor);
|
||||
final HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategyForAllRedirectResponseCodes()).build();
|
||||
final HttpGet getProcessor = new HttpGet(getAPIString());
|
||||
windEstimationModelBearerToken.ifPresent(bearerToken -> getProcessor.setHeader("Authorization", "Bearer " + bearerToken));
|
||||
final HttpResponse processorResponse = client.execute(getProcessor);
|
||||
if (processorResponse.getStatusLine().getStatusCode() >= 300) {
|
||||
throw new IOException("Error trying to load wind estimation data from "+getAPIString()+": "
|
||||
+processorResponse.getStatusLine().getReasonPhrase()+" ("+processorResponse.getStatusLine().getStatusCode()+")");
|
||||
}
|
||||
return processorResponse.getEntity().getContent();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,25 @@
|
||||
<div class="mainContent">
|
||||
<h2 class="releaseHeadline">Release Notes - Administration Console</h2>
|
||||
<div class="innerContent">
|
||||
<h2 class="articleSubheadline">May 2024</h2>
|
||||
<ul class="bulletList">
|
||||
<li>Reading the wind estimation data from a server during start-up, using the
|
||||
<tt>windestimation.source.url</tt> system property, now requires authentication.
|
||||
The <tt>java/target/start</tt> script now reads the <tt>WINDESTIMATION_BEARER_TOKEN</tt>
|
||||
variable and passes it as the <tt>windestimation.source.bearertoken</tt> system property
|
||||
to the application. The user authenticated by that token must have the
|
||||
<tt>WIND_ESTIMATION_MODELS:READ</tt> permission for the server identified by the
|
||||
URL provided in the <tt>windestimation.source.url</tt> property, for example
|
||||
<tt>WIND_ESTIMATION_MODELS:READ:ARCHIVE</tt> if the URL is <tt>https://sapsailing.com</tt></li>
|
||||
<li>Reading the polar data from a server during start-up, using the
|
||||
<tt>polardata.source.url</tt> system property, now requires authentication.
|
||||
The <tt>java/target/start</tt> script now reads the <tt>POLAR_DATA_BEARER_TOKEN</tt>
|
||||
variable and passes it as the <tt>polardata.source.bearertoken</tt> system property
|
||||
to the application. The user authenticated by that token must have the
|
||||
<tt>POLAR_DATA:READ</tt> permission for the server identified by the
|
||||
URL provided in the <tt>polardata.source.url</tt> property, for example
|
||||
<tt>POLAR_DATA:READ:ARCHIVE</tt> if the URL is <tt>https://sapsailing.com</tt></li>
|
||||
</ul>
|
||||
<h2 class="articleSubheadline">April 2024</h2>
|
||||
<ul class="bulletList">
|
||||
<li>The TracTrac connector now pools and re-uses event subscriber threads for live connections
|
||||
|
||||
@@ -125,3 +125,9 @@ fi
|
||||
if [ -n ${GOOGLE_MAPS_AUTHENTICATION_PARAMS} ]; then
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dgoogle.maps.authenticationparams=${GOOGLE_MAPS_AUTHENTICATION_PARAMS}"
|
||||
fi
|
||||
if [ -n ${WINDESTIMATION_BEARER_TOKEN} ]; then
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dwindestimation.source.bearertoken=${WINDESTIMATION_BEARER_TOKEN}"
|
||||
fi
|
||||
if [ -n ${POLAR_DATA_BEARER_TOKEN} ]; then
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dpolardata.source.bearertoken=${POLAR_DATA_BEARER_TOKEN}"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user