mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-20 04:35:32 +00:00
bug5628: persistence for YB connectivity params and configurations
This commit is contained in:
+1
@@ -87,6 +87,7 @@ public class SecuredDomainType extends HasPermissionsImpl {
|
||||
public static final HasPermissions SWISS_TIMING_ARCHIVE_ACCOUNT = new SecuredDomainType(
|
||||
"SWISS_TIMING_ARCHIVE_ACCOUNT");
|
||||
public static final HasPermissions TRACTRAC_ACCOUNT = new SecuredDomainType("TRACTRAC_ACCOUNT");
|
||||
public static final HasPermissions YELLOWBRICK_ACCOUNT = new SecuredDomainType("YELLOWBRICK_ACCOUNT");
|
||||
public static final HasPermissions WIND_ESTIMATION_MODELS = new SecuredDomainType("WIND_ESTIMATION_MODELS");
|
||||
public static final HasPermissions MARK_PROPERTIES = new SecuredDomainType("MARK_PROPERTIES");
|
||||
public static final HasPermissions MARK_TEMPLATE = new SecuredDomainType("MARK_TEMPLATE");
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ public interface TracTracConfiguration extends WithQualifiedObjectIdentifier {
|
||||
return getTypeRelativeObjectIdentifier(getJSONURL(), getCreatorName());
|
||||
}
|
||||
|
||||
public static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(String jsonUrl, String username) {
|
||||
static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(String jsonUrl, String username) {
|
||||
return username == null ? new TypeRelativeObjectIdentifier(jsonUrl)
|
||||
: new TypeRelativeObjectIdentifier(jsonUrl, username);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>com.sap.sailing.domain.yellowbrickadapter.persistence</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.pde.PluginNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
eclipse.preferences.version=1
|
||||
pluginProject.extensions=false
|
||||
resolve.requirebundle=false
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Persistence
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.yellowbrickadapter.persistence
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Activator: com.sap.sailing.domain.yellowbrickadapter.persistence.impl.Activator
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Automatic-Module-Name: com.sap.sailing.domain.yellowbrickadapter.persistence
|
||||
Import-Package: org.osgi.framework;version="1.3.0",
|
||||
org.osgi.util.tracker;version="1.5.2"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: org.mongodb.driver-sync;bundle-version="4.3.1",
|
||||
org.mongodb.bson;bundle-version="4.3.1",
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.yellowbrickadapter,
|
||||
org.mongodb.driver-core;bundle-version="4.3.1",
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.mongodb,
|
||||
com.sap.sse,
|
||||
com.sap.sse.replication.interfaces,
|
||||
com.sap.sse.security,
|
||||
com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.domain.common
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>root</artifactId>
|
||||
<groupId>com.sap.sailing</groupId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>com.sap.sailing.domain.yellowbrickadapter.persistence</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
</project>
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence;
|
||||
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
|
||||
/**
|
||||
* Offers methods to load domain objects from a Mongo DB
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public interface DomainObjectFactory {
|
||||
Iterable<YellowBrickConfiguration> getYellowBrickConfigurations();
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence;
|
||||
|
||||
|
||||
import com.mongodb.DBObject;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.impl.MongoObjectFactoryImpl;
|
||||
import com.sap.sse.mongodb.MongoDBService;
|
||||
|
||||
/**
|
||||
* Offers methods to construct {@link DBObject MongoDB objects} from domain objects.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public interface MongoObjectFactory {
|
||||
MongoObjectFactory INSTANCE = new MongoObjectFactoryImpl(MongoDBService.INSTANCE.getDB());
|
||||
|
||||
/**
|
||||
* Inserts/updates based on the {@link YellowBrickConfiguration#getCreatorName() creator name} and the
|
||||
* {@link YellowBrickConfiguration#getRaceUrl() race URL}. Any config previously contained in the DB with equal
|
||||
* creator name and race URL will be replaced / updated. Afterwards,
|
||||
* {@link DomainObjectFactory#getYellowBrickConfigurations()} called for the same <code>database</code> will return
|
||||
* an equal <code>tracTracConfiguration</code> in its results.
|
||||
*/
|
||||
void createYellowBrickConfiguration(YellowBrickConfiguration tracTracConfiguration);
|
||||
|
||||
void updateYellowBrickConfiguration(YellowBrickConfiguration tracTracConfiguration);
|
||||
|
||||
void deleteYellowBrickConfiguration(String creatorName, String raceUrl);
|
||||
|
||||
void clear();
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence;
|
||||
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.impl.PersistenceFactoryImpl;
|
||||
|
||||
public interface PersistenceFactory {
|
||||
PersistenceFactory INSTANCE = new PersistenceFactoryImpl();
|
||||
|
||||
DomainObjectFactory createDomainObjectFactory(MongoDatabase db);
|
||||
|
||||
MongoObjectFactory createMongoObjectFactory(MongoDatabase db);
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
import java.util.Dictionary;
|
||||
import java.util.Hashtable;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoRegattaLogStoreFactory;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParametersHandler;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickRaceTrackingConnectivityParams;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.PersistenceFactory;
|
||||
import com.sap.sse.common.TypeBasedServiceFinder;
|
||||
import com.sap.sse.mongodb.MongoDBService;
|
||||
import com.sap.sse.replication.FullyInitializedReplicableTracker;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.util.ClearStateTestSupport;
|
||||
import com.sap.sse.util.ServiceTrackerFactory;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private static final Logger logger = Logger.getLogger(Activator.class.getName());
|
||||
private static BundleContext context;
|
||||
|
||||
static BundleContext getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
public void start(BundleContext bundleContext) throws Exception {
|
||||
Activator.context = bundleContext;
|
||||
for (CollectionNames name : CollectionNames.values()) {
|
||||
MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name());
|
||||
}
|
||||
new Thread(() -> {
|
||||
final ServiceTracker<MongoObjectFactory, MongoObjectFactory> mongoObjectFactoryServiceTracker = ServiceTrackerFactory
|
||||
.createAndOpen(context, MongoObjectFactory.class);
|
||||
final ServiceTracker<DomainObjectFactory, DomainObjectFactory> domainObjectFactoryServiceTracker = ServiceTrackerFactory
|
||||
.createAndOpen(context, DomainObjectFactory.class);
|
||||
final FullyInitializedReplicableTracker<SecurityService> securityServiceServiceTracker = FullyInitializedReplicableTracker.createAndOpen(context, SecurityService.class);
|
||||
try {
|
||||
final MongoObjectFactory mongoObjectFactory = mongoObjectFactoryServiceTracker.waitForService(0);
|
||||
final DomainObjectFactory domainObjectFactory = domainObjectFactoryServiceTracker.waitForService(0);
|
||||
final SecurityService securityService = securityServiceServiceTracker.getInitializedService(0);
|
||||
final DomainFactory baseDomainFactory = domainObjectFactory.getBaseDomainFactory();
|
||||
final Dictionary<String, Object> properties = new Hashtable<String, Object>();
|
||||
final com.sap.sailing.domain.yellowbrickadapter.persistence.DomainObjectFactory yellowBrickDomainObjectFactory = PersistenceFactory.INSTANCE
|
||||
.createDomainObjectFactory(mongoObjectFactory.getDatabase());
|
||||
com.sap.sailing.domain.yellowbrickadapter.persistence.MongoObjectFactory yellowBrickMongoObjectFactory = com.sap.sailing.domain.yellowbrickadapter.persistence.PersistenceFactory.INSTANCE
|
||||
.createMongoObjectFactory(mongoObjectFactory.getDatabase());
|
||||
final YellowBrickConnectivityParamsHandler paramsHandler = new YellowBrickConnectivityParamsHandler(
|
||||
MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory),
|
||||
MongoRegattaLogStoreFactory.INSTANCE.getMongoRegattaLogStore(mongoObjectFactory,
|
||||
domainObjectFactory),
|
||||
baseDomainFactory, yellowBrickMongoObjectFactory, securityService);
|
||||
for (YellowBrickConfiguration yellowBrickConfig : yellowBrickDomainObjectFactory.getYellowBrickConfigurations()) {
|
||||
securityService.migrateOwnership(yellowBrickConfig);
|
||||
}
|
||||
// we do not necessarily have TracTrac configurations, so ensure that migration is marked as done
|
||||
securityService.assumeOwnershipMigrated(SecuredDomainType.YELLOWBRICK_ACCOUNT.getName());
|
||||
properties.put(TypeBasedServiceFinder.TYPE, YellowBrickRaceTrackingConnectivityParams.TYPE);
|
||||
context.registerService(RaceTrackingConnectivityParametersHandler.class, paramsHandler, properties);
|
||||
context.registerService(ClearStateTestSupport.class.getName(), new ClearStateTestSupport() {
|
||||
@Override
|
||||
public void clearState() throws Exception {
|
||||
yellowBrickMongoObjectFactory.clear();
|
||||
}
|
||||
}, null);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE,
|
||||
"Exception trying to register TracTrac RaceTrackingConnectivityParametersHandler implementation",
|
||||
e);
|
||||
}
|
||||
}, getClass().getName() + " registering connectivity handler").start();
|
||||
}
|
||||
|
||||
public void stop(BundleContext bundleContext) throws Exception {
|
||||
Activator.context = null;
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
public enum CollectionNames {
|
||||
YELLOWBRICK_CONFIGURATIONS
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bson.Document;
|
||||
|
||||
import com.mongodb.client.MongoCollection;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.impl.YellowBrickConfigurationImpl;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.DomainObjectFactory;
|
||||
|
||||
public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
private static final Logger logger = Logger.getLogger(DomainObjectFactoryImpl.class.getName());
|
||||
|
||||
private final MongoDatabase database;
|
||||
|
||||
public DomainObjectFactoryImpl(MongoDatabase db) {
|
||||
super();
|
||||
this.database = db;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<YellowBrickConfiguration> getYellowBrickConfigurations() {
|
||||
final List<YellowBrickConfiguration> result = new ArrayList<YellowBrickConfiguration>();
|
||||
try {
|
||||
MongoCollection<org.bson.Document> ybConfigs = database.getCollection(CollectionNames.YELLOWBRICK_CONFIGURATIONS.name());
|
||||
for (Document o : ybConfigs.find()) {
|
||||
YellowBrickConfiguration ybConfig = loadYellowBrickConfiguration(o);
|
||||
result.add(ybConfig);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// something went wrong during DB access; report, then use empty new wind track
|
||||
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load recorded YellowBrick configurations. Check MongoDB settings.", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private YellowBrickConfiguration loadYellowBrickConfiguration(Document object) {
|
||||
Object usernameObject = object.get(FieldNames.YB_CONFIG_USERNAME.name());
|
||||
Object passwordObject = object.get(FieldNames.YB_CONFIG_PASSWORD.name());
|
||||
String username = usernameObject == null ? "" : (String) usernameObject;
|
||||
String password = passwordObject == null ? "" : (String) passwordObject;
|
||||
String creatorName = (String) object.get(FieldNames.YB_CONFIG_CREATOR_NAME.name());
|
||||
String raceURL = (String) object.get(FieldNames.YB_CONFIG_RACE_URL.name());
|
||||
final boolean needsUpdate = (creatorName == null);
|
||||
if (needsUpdate) {
|
||||
// No creator is set yet -> existing configurations are assumed to belong to the admin
|
||||
creatorName = "admin";
|
||||
}
|
||||
final YellowBrickConfiguration loadedYellowBrickConfiguration = new YellowBrickConfigurationImpl(creatorName, raceURL, username, password, creatorName);
|
||||
if (needsUpdate) {
|
||||
// recreating the config on the DB because the composite key changed
|
||||
new MongoObjectFactoryImpl(database).deleteYellowBrickConfiguration(null, raceURL);
|
||||
new MongoObjectFactoryImpl(database).createYellowBrickConfiguration(loadedYellowBrickConfiguration);
|
||||
}
|
||||
return loadedYellowBrickConfiguration;
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
public enum FieldNames {
|
||||
// YellowBrick configuration parameters:
|
||||
YB_CONFIG_CREATOR_NAME, YB_CONFIG_NAME, YB_CONFIG_RACE_URL, YB_CONFIG_USERNAME, YB_CONFIG_PASSWORD
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
import org.bson.Document;
|
||||
|
||||
import com.mongodb.WriteConcern;
|
||||
import com.mongodb.client.MongoCollection;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.mongodb.client.model.ReplaceOptions;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.MongoObjectFactory;
|
||||
|
||||
public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
private final MongoDatabase database;
|
||||
|
||||
public MongoObjectFactoryImpl(MongoDatabase database) {
|
||||
super();
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
database.getCollection(CollectionNames.YELLOWBRICK_CONFIGURATIONS.name())
|
||||
.withWriteConcern(WriteConcern.ACKNOWLEDGED).drop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createYellowBrickConfiguration(YellowBrickConfiguration yellowBrickConfiguration) {
|
||||
MongoCollection<Document> ttConfigCollection = database.getCollection(CollectionNames.YELLOWBRICK_CONFIGURATIONS.name());
|
||||
final Document result = storeYellowBrickConfiguration(yellowBrickConfiguration);
|
||||
ttConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).insertOne(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateYellowBrickConfiguration(YellowBrickConfiguration yellowBrickConfiguration) {
|
||||
MongoCollection<Document> ttConfigCollection = database
|
||||
.getCollection(CollectionNames.YELLOWBRICK_CONFIGURATIONS.name());
|
||||
final Document result = storeYellowBrickConfiguration(yellowBrickConfiguration);
|
||||
// Object with given name is updated or created if it does not exist yet
|
||||
final Document updateQuery = new Document(FieldNames.YB_CONFIG_RACE_URL.name(), yellowBrickConfiguration.getRaceUrl());
|
||||
updateQuery.put(FieldNames.YB_CONFIG_CREATOR_NAME.name(), yellowBrickConfiguration.getCreatorName());
|
||||
ttConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).replaceOne(updateQuery, result, new ReplaceOptions().upsert(true));
|
||||
}
|
||||
|
||||
private Document storeYellowBrickConfiguration(YellowBrickConfiguration yellowBrickConfiguration) {
|
||||
final Document result = new Document();
|
||||
result.put(FieldNames.YB_CONFIG_CREATOR_NAME.name(), yellowBrickConfiguration.getCreatorName());
|
||||
result.put(FieldNames.YB_CONFIG_NAME.name(), yellowBrickConfiguration.getName());
|
||||
result.put(FieldNames.YB_CONFIG_RACE_URL.name(), yellowBrickConfiguration.getRaceUrl());
|
||||
result.put(FieldNames.YB_CONFIG_USERNAME.name(), yellowBrickConfiguration.getUsername());
|
||||
result.put(FieldNames.YB_CONFIG_PASSWORD.name(), yellowBrickConfiguration.getPassword());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteYellowBrickConfiguration(String creatorName, String raceUrl) {
|
||||
MongoCollection<Document> ybConfigCollection = database.getCollection(CollectionNames.YELLOWBRICK_CONFIGURATIONS.name());
|
||||
final Document deleteQuery = new Document(FieldNames.YB_CONFIG_RACE_URL.name(), raceUrl);
|
||||
deleteQuery.put(FieldNames.YB_CONFIG_CREATOR_NAME.name(), creatorName);
|
||||
ybConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).deleteOne(deleteQuery);
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.PersistenceFactory;
|
||||
|
||||
public class PersistenceFactoryImpl implements PersistenceFactory {
|
||||
@Override
|
||||
public DomainObjectFactory createDomainObjectFactory(MongoDatabase db) {
|
||||
return new DomainObjectFactoryImpl(db);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoObjectFactory createMongoObjectFactory(MongoDatabase db) {
|
||||
return new MongoObjectFactoryImpl(db);
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.persistence.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.ParseException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
||||
import com.sap.sailing.domain.regattalog.RegattaLogStore;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||
import com.sap.sailing.domain.tracking.impl.AbstractRaceTrackingConnectivityParametersHandler;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickRaceTrackingConnectivityParams;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.impl.YellowBrickConfigurationImpl;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.persistence.MongoObjectFactory;
|
||||
import com.sap.sse.common.TypeBasedServiceFinder;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.SessionUtils;
|
||||
|
||||
/**
|
||||
* Handles mapping YellowBrick connectivity parameters from and to a map with {@link String} keys. The "race URL" is
|
||||
* considered the {@link #getKey(RaceTrackingConnectivityParameters) key} for these objects.
|
||||
* <p>
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class YellowBrickConnectivityParamsHandler extends AbstractRaceTrackingConnectivityParametersHandler {
|
||||
private static final String YELLOW_BRICK_USERNAME = "yellowBrickUsername";
|
||||
private static final String YELLOW_BRICK_PASSWORD = "yellowBrickPassword";
|
||||
private static final String RACE_URL = "raceURL";
|
||||
private final RaceLogStore raceLogStore;
|
||||
private final RegattaLogStore regattaLogStore;
|
||||
private final DomainFactory baseDomainFactory;
|
||||
private final MongoObjectFactory yellowBrickMongoObjectFactory;
|
||||
private final SecurityService securityService;
|
||||
|
||||
public YellowBrickConnectivityParamsHandler(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore,
|
||||
DomainFactory baseDomainFactory, MongoObjectFactory yellowBrickMongoObjectFactory,
|
||||
SecurityService securityService) {
|
||||
super();
|
||||
this.raceLogStore = raceLogStore;
|
||||
this.regattaLogStore = regattaLogStore;
|
||||
this.baseDomainFactory = baseDomainFactory;
|
||||
this.yellowBrickMongoObjectFactory = yellowBrickMongoObjectFactory;
|
||||
this.securityService = securityService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> mapFrom(RaceTrackingConnectivityParameters params) throws MalformedURLException {
|
||||
assert params instanceof YellowBrickRaceTrackingConnectivityParams;
|
||||
final YellowBrickRaceTrackingConnectivityParams ybParams = (YellowBrickRaceTrackingConnectivityParams) params;
|
||||
final Map<String, Object> result = getKey(params);
|
||||
result.put(RACE_URL, ybParams.getRaceUrl()==null?null:ybParams.getRaceUrl().toString());
|
||||
result.put(YELLOW_BRICK_USERNAME, ybParams.getUsername());
|
||||
result.put(YELLOW_BRICK_PASSWORD, ybParams.getPassword());
|
||||
addWindTrackingParameters(ybParams, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceTrackingConnectivityParameters mapTo(Map<String, Object> map) throws Exception {
|
||||
return new YellowBrickRaceTrackingConnectivityParams(map.get(RACE_URL).toString(),
|
||||
map.get(YELLOW_BRICK_USERNAME) == null ? null : map.get(YELLOW_BRICK_USERNAME).toString(),
|
||||
map.get(YELLOW_BRICK_PASSWORD) == null ? null : map.get(YELLOW_BRICK_PASSWORD).toString(),
|
||||
isTrackWind(map), isCorrectWindDirectionByMagneticDeclination(map), raceLogStore, regattaLogStore,
|
||||
baseDomainFactory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getKey(RaceTrackingConnectivityParameters params) throws MalformedURLException {
|
||||
assert params instanceof YellowBrickRaceTrackingConnectivityParams;
|
||||
final YellowBrickRaceTrackingConnectivityParams ybParams = (YellowBrickRaceTrackingConnectivityParams) params;
|
||||
final Map<String, Object> result = new HashMap<>();
|
||||
result.put(TypeBasedServiceFinder.TYPE, params.getTypeIdentifier());
|
||||
result.put(RACE_URL, ybParams.getRaceUrl());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceTrackingConnectivityParameters resolve(RaceTrackingConnectivityParameters params) throws Exception {
|
||||
assert params instanceof YellowBrickRaceTrackingConnectivityParams;
|
||||
final YellowBrickRaceTrackingConnectivityParams ybParams = (YellowBrickRaceTrackingConnectivityParams) params;
|
||||
YellowBrickRaceTrackingConnectivityParams result = new YellowBrickRaceTrackingConnectivityParams(
|
||||
ybParams.getRaceUrl(), ybParams.getUsername(), ybParams.getPassword(), ybParams.isTrackWind(),
|
||||
ybParams.isCorrectWindDirectionByMagneticDeclination(), raceLogStore, regattaLogStore,
|
||||
baseDomainFactory);
|
||||
updatePersistentYellowBrickConfiguration(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void updatePersistentYellowBrickConfiguration(YellowBrickRaceTrackingConnectivityParams params)
|
||||
throws MalformedURLException, IOException, ParseException, URISyntaxException {
|
||||
final String creatorName = SessionUtils.getPrincipal().toString();
|
||||
final YellowBrickConfigurationImpl tracTracConfiguration = new YellowBrickConfigurationImpl(params.getRaceUrl(),
|
||||
params.getRaceUrl(), params.getUsername(), params.getPassword(), creatorName);
|
||||
yellowBrickMongoObjectFactory.updateYellowBrickConfiguration(tracTracConfiguration);
|
||||
securityService.setDefaultOwnershipIfNotSet(tracTracConfiguration.getIdentifier());
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Yellowbrickadapter
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.yellowbrickadapter
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Activator: com.sap.sailing.domain.yellowbrickadapter.Activator
|
||||
Bundle-Activator: com.sap.sailing.domain.yellowbrickadapter.impl.Activator
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Automatic-Module-Name: com.sap.sailing.domain.yellowbrickadapter
|
||||
@@ -15,5 +15,8 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sse.common,
|
||||
com.sap.sailing.server.trackfiles,
|
||||
com.sap.sailing.server.interface,
|
||||
com.sap.sse.replication
|
||||
Export-Package: com.sap.sailing.domain.yellowbrickadapter
|
||||
com.sap.sse.replication,
|
||||
com.sap.sse,
|
||||
com.sap.sse.security.common
|
||||
Export-Package: com.sap.sailing.domain.yellowbrickadapter,
|
||||
com.sap.sailing.domain.yellowbrickadapter.impl;x-friends:="com.sap.sailing.domain.yellowbrickadapter.persistence"
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter;
|
||||
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.security.shared.HasPermissions;
|
||||
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
|
||||
import com.sap.sse.security.shared.TypeRelativeObjectIdentifier;
|
||||
import com.sap.sse.security.shared.WithQualifiedObjectIdentifier;
|
||||
|
||||
/**
|
||||
* Configuration parameters that can be used to connect to a YellowBrick event / race.
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
*/
|
||||
public interface YellowBrickConfiguration extends Named, WithQualifiedObjectIdentifier {
|
||||
String getRaceUrl();
|
||||
String getUsername();
|
||||
String getPassword();
|
||||
String getCreatorName();
|
||||
@Override
|
||||
default QualifiedObjectIdentifier getIdentifier() {
|
||||
return getPermissionType().getQualifiedObjectIdentifier(getTypeRelativeObjectIdentifier());
|
||||
}
|
||||
|
||||
@Override
|
||||
default HasPermissions getPermissionType() {
|
||||
return SecuredDomainType.YELLOWBRICK_ACCOUNT;
|
||||
}
|
||||
|
||||
default TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier() {
|
||||
return getTypeRelativeObjectIdentifier(getRaceUrl(), getCreatorName());
|
||||
}
|
||||
|
||||
static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(String raceUrl, String creatorName) {
|
||||
return creatorName == null ? new TypeRelativeObjectIdentifier(raceUrl)
|
||||
: new TypeRelativeObjectIdentifier(raceUrl, creatorName);
|
||||
}
|
||||
}
|
||||
+45
-11
@@ -1,28 +1,43 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroupResolver;
|
||||
import com.sap.sailing.domain.racelog.RaceLogAndTrackedRaceResolver;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
||||
import com.sap.sailing.domain.regattalog.RegattaLogStore;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.AbstractRaceTrackingConnectivityParameters;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.impl.YellowBrickRaceTrackerImpl;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
public class YellowBrickRaceTrackingConnectivityParams extends AbstractRaceTrackingConnectivityParameters {
|
||||
private static final long serialVersionUID = -81948107186932864L;
|
||||
|
||||
public static final String TYPE = "YELLOW_BRICK";
|
||||
private static final Duration DEFAULT_DELAY_TO_LIVE = Duration.ONE_MINUTE;
|
||||
|
||||
private final String raceUrl;
|
||||
private final String username;
|
||||
private final String password;
|
||||
private final String trackerId;
|
||||
private final transient RaceLogStore raceLogStore;
|
||||
private final transient RegattaLogStore regattaLogStore;
|
||||
private final transient DomainFactory baseDomainFactory;
|
||||
|
||||
public YellowBrickRaceTrackingConnectivityParams(String raceUrl, String username, String password,
|
||||
boolean trackWind, boolean correctWindDirectionByMagneticDeclination) {
|
||||
boolean trackWind, boolean correctWindDirectionByMagneticDeclination, RaceLogStore raceLogStore,
|
||||
RegattaLogStore regattaLogStore, DomainFactory baseDomainFactory) {
|
||||
super(trackWind, correctWindDirectionByMagneticDeclination);
|
||||
this.raceUrl = raceUrl;
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
this.trackerId = TYPE+"-"+raceUrl;
|
||||
this.raceLogStore = raceLogStore;
|
||||
this.regattaLogStore = regattaLogStore;
|
||||
this.baseDomainFactory = baseDomainFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,26 +52,45 @@ public class YellowBrickRaceTrackingConnectivityParams extends AbstractRaceTrack
|
||||
WindStore windStore, RaceLogAndTrackedRaceResolver raceLogResolver,
|
||||
LeaderboardGroupResolver leaderboardGroupResolver, long timeoutInMilliseconds,
|
||||
RaceTrackingHandler raceTrackingHandler) throws Exception {
|
||||
// TODO Implement YellowBrickRaceTrackingConnectivityParams.createRaceTracker(...)
|
||||
return null;
|
||||
return new YellowBrickRaceTrackerImpl(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTrackerID() {
|
||||
// TODO Implement YellowBrickRaceTrackingConnectivityParams.getTrackerID(...)
|
||||
return null;
|
||||
public String getTrackerID() {
|
||||
return trackerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDelayToLiveInMillis() {
|
||||
// TODO Implement YellowBrickRaceTrackingConnectivityParams.getDelayToLiveInMillis(...)
|
||||
return 0;
|
||||
return DEFAULT_DELAY_TO_LIVE.asMillis();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTypeIdentifier() {
|
||||
// TODO Implement YellowBrickRaceTrackingConnectivityParams.getTypeIdentifier(...)
|
||||
return null;
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public String getRaceUrl() {
|
||||
return raceUrl;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public RaceLogStore getRaceLogStore() {
|
||||
return raceLogStore;
|
||||
}
|
||||
|
||||
public RegattaLogStore getRegattaLogStore() {
|
||||
return regattaLogStore;
|
||||
}
|
||||
|
||||
public DomainFactory getBaseDomainFactory() {
|
||||
return baseDomainFactory;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,5 +3,5 @@ package com.sap.sailing.domain.yellowbrickadapter;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
|
||||
public interface YellowBrickTrackingAdapterFactory {
|
||||
YellowBrickTrackingAdapter getYellowBrickTrackingAdapter(DomainFactory domainFactory);
|
||||
YellowBrickTrackingAdapter getYellowBrickTrackingAdapter(DomainFactory baseDomainFactory);
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,11 +1,11 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter;
|
||||
package com.sap.sailing.domain.yellowbrickadapter.impl;
|
||||
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
import com.sap.sailing.domain.yellowbrickadapter.impl.YellowBrickGPSFixImporter;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.impl.YellowBrickTrackingAdapterFactoryImpl;
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickTrackingAdapterFactory;
|
||||
import com.sap.sailing.server.trackfiles.common.GPSFixImporterRegistration;
|
||||
import com.sap.sse.MasterDataImportClassLoaderService;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private static BundleContext context;
|
||||
@@ -18,6 +18,7 @@ public class Activator implements BundleActivator {
|
||||
Activator.context = bundleContext;
|
||||
GPSFixImporterRegistration.register(new YellowBrickGPSFixImporter(), context);
|
||||
bundleContext.registerService(YellowBrickTrackingAdapterFactory.class, new YellowBrickTrackingAdapterFactoryImpl(), /* properties */ null);
|
||||
bundleContext.registerService(MasterDataImportClassLoaderService.class, new MasterDataImportClassLoaderServiceImpl(), /* properties */ null);
|
||||
}
|
||||
|
||||
public void stop(BundleContext bundleContext) throws Exception {
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.impl;
|
||||
|
||||
import com.sap.sse.MasterDataImportClassLoaderService;
|
||||
|
||||
public class MasterDataImportClassLoaderServiceImpl implements MasterDataImportClassLoaderService {
|
||||
@Override
|
||||
public ClassLoader getClassLoader() {
|
||||
return this.getClass().getClassLoader();
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.sap.sailing.domain.yellowbrickadapter.impl;
|
||||
|
||||
import com.sap.sailing.domain.yellowbrickadapter.YellowBrickConfiguration;
|
||||
import com.sap.sse.common.impl.NamedImpl;
|
||||
|
||||
public class YellowBrickConfigurationImpl extends NamedImpl implements YellowBrickConfiguration {
|
||||
private static final long serialVersionUID = -2858994298835323825L;
|
||||
private final String raceUrl;
|
||||
private final String username;
|
||||
private final String password;
|
||||
private final String creatorName;
|
||||
|
||||
public YellowBrickConfigurationImpl(String name, String raceUrl, String username, String password, String creatorName) {
|
||||
super(name);
|
||||
this.raceUrl = raceUrl;
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
this.creatorName = creatorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRaceUrl() {
|
||||
return raceUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreatorName() {
|
||||
return creatorName;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -6,7 +6,7 @@ import com.sap.sailing.domain.yellowbrickadapter.YellowBrickTrackingAdapterFacto
|
||||
|
||||
public class YellowBrickTrackingAdapterFactoryImpl implements YellowBrickTrackingAdapterFactory {
|
||||
@Override
|
||||
public YellowBrickTrackingAdapter getYellowBrickTrackingAdapter(DomainFactory domainFactory) {
|
||||
return new YellowBrickTrackingAdapterImpl(domainFactory);
|
||||
public YellowBrickTrackingAdapter getYellowBrickTrackingAdapter(DomainFactory baseDomainFactory) {
|
||||
return new YellowBrickTrackingAdapterImpl(baseDomainFactory);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -24,7 +24,8 @@ public class YellowBrickTrackingAdapterImpl implements YellowBrickTrackingAdapte
|
||||
throws Exception {
|
||||
service.addRace(regattaToAddTo,
|
||||
new YellowBrickRaceTrackingConnectivityParams(yellowBrickRaceUrl, yellowBrickUsername,
|
||||
yellowBrickPassword, trackWind, correctWindByDeclination),
|
||||
yellowBrickPassword, trackWind, correctWindByDeclination, raceLogStore, regattaLogStore,
|
||||
baseDomainFactory),
|
||||
/* timeout */ TIMEOUT_FOR_RACE_LOADING.asMillis());
|
||||
}
|
||||
}
|
||||
|
||||
-2
@@ -51,8 +51,6 @@ public interface RaceTrackingConnectivityParametersHandler {
|
||||
/**
|
||||
* Produces a {@link RaceTrackingConnectivityParameters} object from a de-serialized stump. This is needed because
|
||||
* some of the fields in {@link RaceTrackingConnectivityParameters} are transient and need to be filled.
|
||||
*
|
||||
* TODO: bug5245 add ConnectionParameters to Connectors persistent and in-memory representation.
|
||||
*/
|
||||
RaceTrackingConnectivityParameters resolve(RaceTrackingConnectivityParameters params) throws Exception;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
<plugin id="com.sap.sailing.domain.igtimiadapter.gateway" autoStart="true" startLevel="5" />
|
||||
<plugin id="com.sap.sailing.domain.oceanraceadapter" autoStart="true" startLevel="5" />
|
||||
<plugin id="com.sap.sailing.domain.yellowbrickadapter" autoStart="true" startLevel="5" />
|
||||
<plugin id="com.sap.sailing.domain.yellowbrickadapter.persistence" autoStart="true" startLevel="4" />
|
||||
<plugin id="com.sap.sailing.domain.racelogtrackingadapter" autoStart="true" startLevel="4" />
|
||||
<plugin id="com.sap.sailing.domain.swisstimingadapter" autoStart="true" startLevel="5" />
|
||||
<plugin id="com.sap.sailing.domain.swisstimingadapter.persistence" autoStart="true" startLevel="4" />
|
||||
|
||||
@@ -290,6 +290,13 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.yellowbrickadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xrr.structureimport"
|
||||
download-size="0"
|
||||
|
||||
@@ -239,6 +239,11 @@
|
||||
<level>5</level>
|
||||
<autoStart>true</autoStart>
|
||||
</bundle>
|
||||
<bundle>
|
||||
<id>com.sap.sailing.domain.yellowbrickadapter.persistence</id>
|
||||
<level>4</level>
|
||||
<autoStart>true</autoStart>
|
||||
</bundle>
|
||||
<bundle>
|
||||
<id>com.sap.sailing.dashboards.gwt</id>
|
||||
<level>6</level>
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -200,6 +200,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
<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"/>
|
||||
|
||||
+1
@@ -200,6 +200,7 @@
|
||||
<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"/>
|
||||
|
||||
+1
@@ -198,6 +198,7 @@
|
||||
<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"/>
|
||||
|
||||
+1
@@ -200,6 +200,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
<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"/>
|
||||
|
||||
+1
@@ -198,6 +198,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -200,6 +200,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -200,6 +200,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -205,6 +205,7 @@
|
||||
<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"/>
|
||||
|
||||
+1
@@ -198,6 +198,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
<module>com.sap.sailing.domain.deckmanadapter</module>
|
||||
<module>com.sap.sailing.domain.oceanraceadapter</module>
|
||||
<module>com.sap.sailing.domain.yellowbrickadapter</module>
|
||||
<module>com.sap.sailing.domain.yellowbrickadapter.persistence</module>
|
||||
<module>com.sap.sailing.domain.bravoadapter</module>
|
||||
<module>com.sap.sailing.domain.expeditionadapter</module>
|
||||
<module>com.sap.sailing.domain.tractracadapter</module>
|
||||
|
||||
Reference in New Issue
Block a user