![JAR search and dependency download from the Maven repository](/logo.png)
com.lordofthejars.nosqlunit.marklogic.MarkLogicOperation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nosqlunit-marklogic Show documentation
Show all versions of nosqlunit-marklogic Show documentation
NoSQLUnit adapter for MarkLogic
The newest version!
package com.lordofthejars.nosqlunit.marklogic;
import com.lordofthejars.nosqlunit.core.AbstractCustomizableDatabaseOperation;
import com.lordofthejars.nosqlunit.core.NoSqlAssertionError;
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.MarkLogicIOException;
import com.marklogic.client.query.DeleteQueryDefinition;
import com.marklogic.client.query.QueryManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;
import static java.util.Arrays.asList;
public final class MarkLogicOperation extends AbstractCustomizableDatabaseOperation {
private static final Logger LOGGER = LoggerFactory.getLogger(MarkLogicOperation.class);
private DatabaseClient databaseClient;
private MarkLogicConfiguration marklogicConfiguration;
public MarkLogicOperation(MarkLogicConfiguration marklogicConfiguration) {
this(marklogicConfiguration.getDatabaseClient(), marklogicConfiguration, null);
}
public MarkLogicOperation(MarkLogicConfiguration marklogicConfiguration, Object target) {
this(marklogicConfiguration.getDatabaseClient(), marklogicConfiguration, target);
}
protected MarkLogicOperation(DatabaseClient databaseClient, MarkLogicConfiguration marklogicConfiguration, Object target) {
this.databaseClient = databaseClient;
this.marklogicConfiguration = marklogicConfiguration;
setInsertionStrategy(new DefaultInsertionStrategy(target));
setComparisonStrategy(new DefaultComparisonStrategy(target));
}
@Override
public void insert(InputStream contentStream) {
insertData(contentStream);
}
private void insertData(InputStream contentStream) {
try {
executeInsertion(new MarkLogicConnectionCallback() {
@Override
public DatabaseClient databaseClient() {
return databaseClient;
}
}, contentStream);
} catch (Throwable e) {
throw new IllegalArgumentException("Unexpected error inserting data set file.", e);
}
}
@Override
public void deleteAll() {
try {
deleteAllElements(databaseClient);
} catch (MarkLogicIOException e) {
LOGGER.error(e.getMessage(), e);
throw e;
}
}
void setTarget(Object target) {
((DefaultInsertionStrategy) insertionStrategy).setTarget(target);
((DefaultComparisonStrategy) comparisonStrategy).setTarget(target);
}
private void deleteAllElements(DatabaseClient databaseClient) {
String directory = marklogicConfiguration.getCleanDirectory();
QueryManager queryManager = databaseClient.newQueryManager();
//delete data seeded by framework in any case
Set collections = new HashSet<>(asList(marklogicConfiguration.getCleanCollections()));
if (!collections.isEmpty()) {
//see: https://stackoverflow.com/questions/53523500/failed-to-delete-multiple-collections
collections.forEach(c -> {
DeleteQueryDefinition deleteQuery = queryManager.newDeleteDefinition();
deleteQuery.setDirectory(directory);
deleteQuery.setCollections(c);
queryManager.delete(deleteQuery);
});
} else {
DeleteQueryDefinition deleteQuery = queryManager.newDeleteDefinition();
deleteQuery.setDirectory(directory);
queryManager.delete(deleteQuery);
}
}
@Override
public boolean databaseIs(InputStream contentStream) {
return compareData(contentStream);
}
private boolean compareData(InputStream contentStream) throws NoSqlAssertionError {
try {
executeComparison(new MarkLogicConnectionCallback() {
@Override
public DatabaseClient databaseClient() {
return databaseClient;
}
}, contentStream);
return true;
} catch (NoSqlAssertionError e) {
throw e;
} catch (Throwable e) {
throw new IllegalArgumentException("Unexpected error reading expected data set file.", e);
}
}
@Override
public DatabaseClient connectionManager() {
return databaseClient;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy