Skip to content

Commit b281d59

Browse files
author
Cedric Thiebault
committed
Use Magma supportVectorSource()
1 parent ab2d23a commit b281d59

19 files changed

Lines changed: 122 additions & 124 deletions

File tree

opal-core-api/src/main/java/org/obiba/opal/core/identifiers/IdentifiersMaps.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package org.obiba.opal.core.identifiers;
1111

1212
import java.util.Iterator;
13+
import java.util.NavigableSet;
1314
import java.util.TreeSet;
1415

1516
import javax.annotation.Nullable;
@@ -117,7 +118,7 @@ public Iterator<IdentifiersMap> iterator() {
117118
private final Iterator<Value> privateIdentifiers;
118119

119120
{
120-
TreeSet<VariableEntity> entities = new TreeSet<>(identifiersTable.getVariableEntities());
121+
NavigableSet<VariableEntity> entities = new TreeSet<>(identifiersTable.getVariableEntities());
121122

122123
privateIdentifiers = identifiersTable.hasVariable(idMapping)
123124
? identifiersTable.getVariableValueSource(idMapping).asVectorSource().getValues(entities).iterator()

opal-core-api/src/main/java/org/obiba/opal/core/magma/math/CategoricalVariableSummary.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.obiba.magma.ValueSource;
2222
import org.obiba.magma.ValueTable;
2323
import org.obiba.magma.Variable;
24-
import org.obiba.magma.VectorSource;
2524
import org.obiba.magma.type.BooleanType;
2625
import org.slf4j.Logger;
2726
import org.slf4j.LoggerFactory;
@@ -162,10 +161,8 @@ public Builder addTable(@NotNull ValueTable table, @NotNull ValueSource valueSou
162161
private void add(@NotNull ValueTable table, @NotNull ValueSource variableValueSource) {
163162
Assert.notNull(table, "ValueTable cannot be null");
164163
Assert.notNull(variableValueSource, "variableValueSource cannot be null");
165-
166-
VectorSource vectorSource = variableValueSource.asVectorSource();
167-
if(vectorSource == null) return;
168-
for(Value value : vectorSource.getValues(summary.getVariableEntities(table))) {
164+
if(!variableValueSource.supportVectorSource()) return;
165+
for(Value value : variableValueSource.asVectorSource().getValues(summary.getVariableEntities(table))) {
169166
add(value);
170167
}
171168
}

opal-core-api/src/main/java/org/obiba/opal/core/magma/math/ContinuousVariableSummary.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.obiba.magma.ValueSource;
2727
import org.obiba.magma.ValueTable;
2828
import org.obiba.magma.Variable;
29-
import org.obiba.magma.VectorSource;
3029
import org.obiba.magma.math.stat.IntervalFrequency;
3130
import org.obiba.magma.type.IntegerType;
3231
import org.slf4j.Logger;
@@ -215,14 +214,12 @@ private void add(@NotNull ValueTable table, @NotNull ValueSource variableValueSo
215214
Assert.notNull(variable, "ValueTable cannot be null");
216215
Assert.notNull(variableValueSource, "VariableValueSource cannot be null");
217216

218-
VectorSource vectorSource = variableValueSource.asVectorSource();
219-
if(vectorSource == null) return;
220-
for(Value value : vectorSource.getValues(summary.getVariableEntities(table))) {
217+
if(!variableValueSource.supportVectorSource()) return;
218+
for(Value value : variableValueSource.asVectorSource().getValues(summary.getVariableEntities(table))) {
221219
add(value);
222220
}
223221
}
224222

225-
@SuppressWarnings("ConstantConditions")
226223
private void add(@NotNull Value value) {
227224
Assert.notNull(variable, "Value cannot be null");
228225
if(!value.isNull() && !summary.missing.contains(value)) {

opal-core-api/src/main/java/org/obiba/opal/core/magma/math/DefaultVariableSummary.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.obiba.magma.ValueSource;
2121
import org.obiba.magma.ValueTable;
2222
import org.obiba.magma.Variable;
23-
import org.obiba.magma.VectorSource;
2423
import org.slf4j.Logger;
2524
import org.slf4j.LoggerFactory;
2625
import org.springframework.util.Assert;
@@ -143,9 +142,8 @@ private void add(@NotNull ValueTable table, @NotNull ValueSource variableValueSo
143142
Assert.notNull(table, "ValueTable cannot be null");
144143
Assert.notNull(variableValueSource, "variableValueSource cannot be null");
145144

146-
VectorSource vectorSource = variableValueSource.asVectorSource();
147-
if(vectorSource == null) return;
148-
for(Value value : vectorSource.getValues(summary.getVariableEntities(table))) {
145+
if(!variableValueSource.supportVectorSource()) return;
146+
for(Value value : variableValueSource.asVectorSource().getValues(summary.getVariableEntities(table))) {
149147
add(value);
150148
}
151149
}

opal-core-api/src/test/java/org/obiba/opal/core/magma/math/CategoricalVariableSummaryTest.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import java.util.SortedSet;
1313
import java.util.TreeSet;
1414

15-
import org.easymock.EasyMock;
1615
import org.junit.AfterClass;
1716
import org.junit.BeforeClass;
1817
import org.junit.Test;
18+
import org.mockito.Mockito;
1919
import org.obiba.magma.MagmaEngine;
2020
import org.obiba.magma.Value;
2121
import org.obiba.magma.ValueTable;
@@ -29,10 +29,9 @@
2929

3030
import com.google.common.collect.ImmutableList;
3131

32-
import static org.easymock.EasyMock.createMock;
33-
import static org.easymock.EasyMock.expect;
34-
import static org.easymock.EasyMock.replay;
3532
import static org.fest.assertions.api.Assertions.assertThat;
33+
import static org.mockito.Mockito.mock;
34+
import static org.mockito.Mockito.when;
3635

3736
/**
3837
*
@@ -96,18 +95,17 @@ public void test_withNullSequence() {
9695

9796
private CategoricalVariableSummary computeFromTable(Variable variable, Iterable<Value> values) {
9897

99-
VectorSource vectorSource = createMock(VectorSource.class);
100-
expect(vectorSource.getValues(EasyMock.<SortedSet<VariableEntity>>anyObject())).andReturn(values);
98+
VectorSource vectorSource = mock(VectorSource.class);
99+
when(vectorSource.getValues(Mockito.<SortedSet<VariableEntity>>any())).thenReturn(values);
101100

102-
VariableValueSource valueSource = createMock(VariableValueSource.class);
103-
expect(valueSource.asVectorSource()).andReturn(vectorSource);
101+
VariableValueSource valueSource = mock(VariableValueSource.class);
102+
when(valueSource.supportVectorSource()).thenReturn(true);
103+
when(valueSource.asVectorSource()).thenReturn(vectorSource);
104104

105-
ValueTable table = createMock(ValueTable.class);
106-
expect(table.getTimestamps()).andReturn(NullTimestamps.get());
107-
expect(table.getVariableEntities()).andReturn(new TreeSet<VariableEntity>());
108-
expect(table.getVariableValueSource(variable.getName())).andReturn(valueSource);
109-
110-
replay(table, vectorSource, valueSource);
105+
ValueTable table = mock(ValueTable.class);
106+
when(table.getTimestamps()).thenReturn(NullTimestamps.get());
107+
when(table.getVariableEntities()).thenReturn(new TreeSet<VariableEntity>());
108+
when(table.getVariableValueSource(variable.getName())).thenReturn(valueSource);
111109

112110
CategoricalVariableSummary summary = new CategoricalVariableSummary.Builder(variable)
113111
.addTable(table, table.getVariableValueSource(variable.getName())).build();

opal-core-api/src/test/java/org/obiba/opal/core/magma/math/ContinuousVariableSummaryTest.java

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import java.util.TreeSet;
1414

1515
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
16-
import org.easymock.EasyMock;
1716
import org.junit.AfterClass;
1817
import org.junit.BeforeClass;
1918
import org.junit.Test;
19+
import org.mockito.Mockito;
2020
import org.obiba.magma.MagmaEngine;
2121
import org.obiba.magma.Value;
2222
import org.obiba.magma.ValueTable;
@@ -27,11 +27,9 @@
2727
import org.obiba.magma.support.Values;
2828
import org.obiba.magma.type.IntegerType;
2929

30-
import static org.easymock.EasyMock.createMock;
31-
import static org.easymock.EasyMock.expect;
32-
import static org.easymock.EasyMock.replay;
33-
import static org.easymock.EasyMock.verify;
3430
import static org.fest.assertions.api.Assertions.assertThat;
31+
import static org.mockito.Mockito.mock;
32+
import static org.mockito.Mockito.when;
3533

3634
/**
3735
*
@@ -115,24 +113,18 @@ public void test_compute_withNullSequence() {
115113
*/
116114

117115
private ContinuousVariableSummary computeFromTable(Variable variable, Iterable<Value> values) {
118-
ValueTable table = createMock(ValueTable.class);
119-
VectorSource vectorSource = createMock(VectorSource.class);
120-
VariableValueSource valueSource = createMock(VariableValueSource.class);
121-
122-
expect(vectorSource.getValues(EasyMock.<SortedSet<VariableEntity>>anyObject())).andReturn(values);
123-
expect(valueSource.asVectorSource()).andReturn(vectorSource);
124-
expect(table.getVariableEntities()).andReturn(new TreeSet<VariableEntity>());
125-
expect(table.getVariableValueSource(variable.getName())).andReturn(valueSource);
126-
127-
replay(table, vectorSource, valueSource);
128-
129-
ContinuousVariableSummary summary = new ContinuousVariableSummary.Builder(variable,
130-
ContinuousVariableSummary.Distribution.normal).addTable(table, table.getVariableValueSource(variable.getName()))
131-
.build();
132-
133-
verify(table, vectorSource, valueSource);
134-
135-
return summary;
116+
ValueTable table = mock(ValueTable.class);
117+
VectorSource vectorSource = mock(VectorSource.class);
118+
VariableValueSource valueSource = mock(VariableValueSource.class);
119+
120+
when(vectorSource.getValues(Mockito.<SortedSet<VariableEntity>>any())).thenReturn(values);
121+
when(valueSource.supportVectorSource()).thenReturn(true);
122+
when(valueSource.asVectorSource()).thenReturn(vectorSource);
123+
when(table.getVariableEntities()).thenReturn(new TreeSet<VariableEntity>());
124+
when(table.getVariableValueSource(variable.getName())).thenReturn(valueSource);
125+
126+
return new ContinuousVariableSummary.Builder(variable, ContinuousVariableSummary.Distribution.normal)
127+
.addTable(table, table.getVariableValueSource(variable.getName())).build();
136128
}
137129

138130
}

opal-core-ws/src/main/java/org/obiba/opal/web/magma/ValueSetsResourceImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ private ValueSetsDto getValueSetsDto(final UriInfo uriInfo, Iterable<VariableEnt
114114
ValueSetsDto.Builder builder = ValueSetsDto.newBuilder().setEntityType(variable.getEntityType())
115115
.addVariables(variable.getName());
116116

117-
VectorSource vector = variableValueSource.asVectorSource();
118-
if(vector == null) {
117+
if(variableValueSource.supportVectorSource()) {
118+
addValueSetDtosFromVectorSource(uriInfo, variableEntities, variable, filterBinary,
119+
variableValueSource.asVectorSource(), builder);
120+
} else {
119121
builder.addAllValueSets(Iterables.transform(variableEntities, new Function<VariableEntity, ValueSetDto>() {
120122
@Override
121123
public ValueSetDto apply(VariableEntity fromEntity) {
@@ -124,8 +126,6 @@ public ValueSetDto apply(VariableEntity fromEntity) {
124126
return getValueSetDto(uriInfo, fromEntity, variable, filterBinary, value);
125127
}
126128
}));
127-
} else {
128-
addValueSetDtosFromVectorSource(uriInfo, variableEntities, variable, filterBinary, vector, builder);
129129
}
130130

131131
return builder.build();

opal-core-ws/src/main/java/org/obiba/opal/web/magma/support/DefaultPagingVectorSourceImpl.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.obiba.magma.ValueTable;
1919
import org.obiba.magma.VariableEntity;
2020
import org.obiba.magma.VariableValueSource;
21-
import org.obiba.magma.VectorSource;
2221

2322
public class DefaultPagingVectorSourceImpl implements PagingVectorSource {
2423

@@ -33,8 +32,7 @@ public DefaultPagingVectorSourceImpl(ValueTable vt, VariableValueSource vvs) {
3332

3433
@Override
3534
public Iterable<Value> getValues(int offset, int limit) {
36-
VectorSource vectorSource = vvs.asVectorSource();
37-
if(vectorSource == null) {
35+
if(!vvs.supportVectorSource()) {
3836
return Collections.emptyList();
3937
}
4038

@@ -44,7 +42,6 @@ public Iterable<Value> getValues(int offset, int limit) {
4442
TreeSet<VariableEntity> sortedEntities = new TreeSet<>(vt.getVariableEntities());
4543
int end = Math.min(offset + limit, sortedEntities.size());
4644
List<VariableEntity> entitySubList = new ArrayList<>(sortedEntities).subList(offset, end);
47-
48-
return vectorSource.getValues(new TreeSet<>(entitySubList));
45+
return vvs.asVectorSource().getValues(new TreeSet<>(entitySubList));
4946
}
5047
}

opal-core-ws/src/main/java/org/obiba/opal/web/system/database/DatabaseResource.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import javax.ws.rs.core.Response;
1414

1515
import org.obiba.magma.datasource.mongodb.MongoDBDatasourceFactory;
16+
import org.obiba.magma.datasource.mongodb.MongoDBFactory;
1617
import org.obiba.opal.core.domain.database.Database;
1718
import org.obiba.opal.core.domain.database.MongoDbSettings;
1819
import org.obiba.opal.core.service.database.DatabaseRegistry;
@@ -25,12 +26,12 @@
2526
import org.springframework.context.annotation.Scope;
2627
import org.springframework.dao.DataAccessException;
2728
import org.springframework.jdbc.core.ConnectionCallback;
29+
import org.springframework.jdbc.core.JdbcOperations;
2830
import org.springframework.jdbc.core.JdbcTemplate;
2931
import org.springframework.stereotype.Component;
3032
import org.springframework.transaction.annotation.Transactional;
3133

32-
import com.mongodb.DBCollection;
33-
import com.mongodb.MongoClient;
34+
import com.mongodb.DB;
3435

3536
import static javax.ws.rs.core.Response.Status.SERVICE_UNAVAILABLE;
3637
import static org.obiba.opal.web.model.Database.DatabaseDto;
@@ -102,7 +103,7 @@ private Database getDatabase() {
102103
private Response testSqlConnection() {
103104
Ws.ClientErrorDto error = ClientErrorDtos.getErrorMessage(SERVICE_UNAVAILABLE, "DatabaseConnectionFailed").build();
104105
try {
105-
JdbcTemplate jdbcTemplate = new JdbcTemplate(databaseRegistry.getDataSource(name, null));
106+
JdbcOperations jdbcTemplate = new JdbcTemplate(databaseRegistry.getDataSource(name, null));
106107
Boolean result = jdbcTemplate.execute(new ConnectionCallback<Boolean>() {
107108

108109
@Override
@@ -120,21 +121,24 @@ public Boolean doInConnection(Connection con) throws SQLException, DataAccessExc
120121
}
121122

122123
private Response testMongoConnection(MongoDbSettings mongoDbSettings) {
123-
Ws.ClientErrorDto error = null;
124+
124125
try {
125126
MongoDBDatasourceFactory datasourceFactory = mongoDbSettings.createMongoDBDatasourceFactory("_test");
126127
List<String> dbs = datasourceFactory.getMongoDBFactory().getMongoClient().getDatabaseNames();
127128
if(dbs.contains(datasourceFactory.getMongoDbDatabaseName())) {
128129
return Response.ok().build();
129-
} else {
130-
DBCollection collTest = datasourceFactory.getMongoDBFactory().getDB().getCollection("_coll_test");
131-
collTest.drop();
132-
return Response.ok().build();
133130
}
131+
return datasourceFactory.getMongoDBFactory().execute(new MongoDBFactory.MongoDBCallback<Response>() {
132+
@Override
133+
public Response doWithDB(DB db) {
134+
db.getCollection("_coll_test").drop();
135+
return Response.ok().build();
136+
}
137+
});
134138
} catch(RuntimeException e) {
135-
error = ClientErrorDtos.getErrorMessage(SERVICE_UNAVAILABLE, "DatabaseConnectionFailed", e);
139+
return Response.status(SERVICE_UNAVAILABLE)
140+
.entity(ClientErrorDtos.getErrorMessage(SERVICE_UNAVAILABLE, "DatabaseConnectionFailed", e)).build();
136141
}
137-
return Response.status(SERVICE_UNAVAILABLE).entity(error).build();
138142
}
139143

140144
}

opal-core/src/main/java/org/obiba/opal/core/service/OpalPrivateVariableEntityMap.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99
******************************************************************************/
1010
package org.obiba.opal.core.service;
1111

12-
import java.io.IOException;
1312
import java.util.Iterator;
1413
import java.util.SortedSet;
1514
import java.util.TreeSet;
1615

1716
import javax.validation.constraints.NotNull;
1817

19-
import org.obiba.magma.MagmaRuntimeException;
2018
import org.obiba.magma.Value;
2119
import org.obiba.magma.ValueSet;
2220
import org.obiba.magma.ValueSource;
@@ -104,13 +102,9 @@ public VariableEntity createPrivateEntity(@NotNull VariableEntity publicEntity)
104102
for(int i = 0; i < 100; i++) {
105103
VariableEntity privateEntity = entityFor(participantIdentifier.generateIdentifier());
106104
if(!publicToPrivate.inverse().containsKey(privateEntity)) {
107-
try {
108-
writeEntities(keysValueTable, publicEntity, privateEntity);
109-
log.debug("{} <--> ({}) added", publicEntity.getIdentifier(), privateEntity.getIdentifier());
110-
publicToPrivate.put(entityFor(publicEntity.getIdentifier()), privateEntity);
111-
} catch(IOException e) {
112-
throw new MagmaRuntimeException(e);
113-
}
105+
writeEntities(keysValueTable, publicEntity, privateEntity);
106+
log.debug("{} <--> ({}) added", publicEntity.getIdentifier(), privateEntity.getIdentifier());
107+
publicToPrivate.put(entityFor(publicEntity.getIdentifier()), privateEntity);
114108
return privateEntity;
115109
}
116110
}
@@ -125,12 +119,8 @@ public VariableEntity createPublicEntity(@NotNull VariableEntity privateEntity)
125119
for(int i = 0; i < 100; i++) {
126120
VariableEntity publicEntity = entityFor(participantIdentifier.generateIdentifier());
127121
if(!publicToPrivate.containsKey(publicEntity)) {
128-
try {
129-
writeEntities(keysValueTable, publicEntity, privateEntity);
130-
publicToPrivate.put(publicEntity, entityFor(privateEntity.getIdentifier()));
131-
} catch(IOException e) {
132-
throw new MagmaRuntimeException(e);
133-
}
122+
writeEntities(keysValueTable, publicEntity, privateEntity);
123+
publicToPrivate.put(publicEntity, entityFor(privateEntity.getIdentifier()));
134124
return publicEntity;
135125
}
136126
}
@@ -139,8 +129,7 @@ public VariableEntity createPublicEntity(@NotNull VariableEntity privateEntity)
139129
privateEntity.getIdentifier() + "]. One hundred attempts made.");
140130
}
141131

142-
private void writeEntities(ValueTable keyTable, VariableEntity publicEntity, VariableEntity privateEntity)
143-
throws IOException {
132+
private void writeEntities(ValueTable keyTable, VariableEntity publicEntity, VariableEntity privateEntity) {
144133
ValueTableWriter vtw = keyTable.getDatasource().createWriter(keyTable.getName(), keyTable.getEntityType());
145134
ValueSetWriter vsw = vtw.writeValueSet(publicEntity);
146135
vsw.writeValue(ownerVariable, TextType.get().valueOf(privateEntity.getIdentifier()));
@@ -157,10 +146,10 @@ private void constructCache() {
157146
log.info("Constructing participant identifier cache for keysValueTable: {}, ownerVariable: {}",
158147
keysValueTable.getName(), ownerVariable.getName());
159148
VariableValueSource ownerVariableSource = keysValueTable.getVariableValueSource(ownerVariable.getName());
160-
if(ownerVariableSource.asVectorSource() == null) {
161-
constructCacheFromTable(keysValueTable, ownerVariableSource);
162-
} else {
149+
if(ownerVariableSource.supportVectorSource()) {
163150
constructCacheFromVector(keysValueTable, ownerVariableSource.asVectorSource());
151+
} else {
152+
constructCacheFromTable(keysValueTable, ownerVariableSource);
164153
}
165154
log.debug("Cache constructed: {}", publicToPrivate);
166155
}

0 commit comments

Comments
 (0)