use of org.apache.commons.lang3.Range in project molgenis by molgenis.
the class PostgreSqlQueryGenerator method getSqlWhere.
static <E extends Entity> String getSqlWhere(EntityType entityType, Query<E> q, List<Object> parameters, AtomicInteger mrefFilterIndex) {
StringBuilder result = new StringBuilder();
for (QueryRule r : q.getRules()) {
Attribute attr = null;
if (r.getField() != null) {
attr = entityType.getAttribute(r.getField());
if (attr == null) {
throw new MolgenisDataException(format("Unknown attribute [%s]", r.getField()));
}
if (isPersistedInOtherTable(attr)) {
mrefFilterIndex.incrementAndGet();
}
}
StringBuilder predicate = new StringBuilder();
Operator operator = r.getOperator();
switch(operator) {
case AND:
result.append(" AND ");
break;
case NESTED:
QueryImpl<Entity> nestedQ = new QueryImpl<>(r.getNestedRules());
result.append('(').append(getSqlWhere(entityType, nestedQ, parameters, mrefFilterIndex)).append(')');
break;
case OR:
result.append(" OR ");
break;
case LIKE:
requireNonNull(attr, format(UNSPECIFIED_ATTRIBUTE_MSG, LIKE));
String columnName;
if (isPersistedInOtherTable(attr)) {
columnName = getFilterColumnName(attr, mrefFilterIndex.get());
} else {
columnName = "this." + getColumnName(attr);
}
if (isStringType(attr) || isTextType(attr)) {
result.append(' ').append(columnName);
} else {
result.append(" CAST(").append(columnName).append(" as TEXT)");
}
result.append(" LIKE ?");
parameters.add("%" + PostgreSqlUtils.getPostgreSqlQueryValue(r.getValue(), attr) + '%');
break;
case IN:
{
requireNonNull(attr, format(UNSPECIFIED_ATTRIBUTE_MSG, IN));
Object inValue = r.getValue();
if (inValue == null) {
throw new MolgenisDataException("Missing value for IN query");
}
if (!(inValue instanceof Iterable<?>)) {
throw new MolgenisDataException(format("IN value is of type [%s] instead of [Iterable]", inValue.getClass().getSimpleName()));
}
StringBuilder in = new StringBuilder();
Attribute inAttr = attr;
Stream<Object> postgreSqlIds = stream(((Iterable<?>) inValue).spliterator(), false).map(idValue -> PostgreSqlUtils.getPostgreSqlQueryValue(idValue, inAttr));
for (Iterator<Object> it = postgreSqlIds.iterator(); it.hasNext(); ) {
Object postgreSqlId = it.next();
in.append('?');
if (it.hasNext()) {
in.append(',');
}
parameters.add(postgreSqlId);
}
if (isPersistedInOtherTable(attr)) {
result.append(getFilterColumnName(attr, mrefFilterIndex.get()));
} else {
result.append("this");
}
Attribute equalsAttr;
if (attr.isMappedBy()) {
equalsAttr = attr.getRefEntity().getIdAttribute();
} else {
equalsAttr = entityType.getAttribute(r.getField());
}
result.append('.').append(getColumnName(equalsAttr));
result.append(" IN (").append(in).append(')');
break;
}
case NOT:
result.append(" NOT ");
break;
case RANGE:
requireNonNull(attr, format(UNSPECIFIED_ATTRIBUTE_MSG, RANGE));
Object range = r.getValue();
if (range == null) {
throw new MolgenisDataException("Missing value for RANGE query");
}
if (!(range instanceof Iterable<?>)) {
throw new MolgenisDataException(format("RANGE value is of type [%s] instead of [Iterable]", range.getClass().getSimpleName()));
}
Iterator<?> rangeValues = ((Iterable<?>) range).iterator();
// from
parameters.add(rangeValues.next());
// to
parameters.add(rangeValues.next());
StringBuilder column = new StringBuilder();
if (isPersistedInOtherTable(attr)) {
column.append(getFilterColumnName(attr, mrefFilterIndex.get()));
} else {
column.append("this");
}
column.append('.').append(getColumnName(entityType.getAttribute(r.getField())));
predicate.append(column).append(" >= ? AND ").append(column).append(" <= ?");
result.append(predicate);
break;
case EQUALS:
if (attr == null) {
throw new MolgenisDataException("Missing attribute field in EQUALS query rule");
}
if (isPersistedInOtherTable(attr)) {
predicate.append(getFilterColumnName(attr, mrefFilterIndex.get()));
} else {
predicate.append("this");
}
Attribute equalsAttr;
if (attr.isMappedBy()) {
equalsAttr = attr.getRefEntity().getIdAttribute();
} else {
equalsAttr = entityType.getAttribute(r.getField());
}
predicate.append('.').append(getColumnName(equalsAttr));
if (r.getValue() == null) {
// expression = null is not valid, use IS NULL
predicate.append(" IS NULL ");
} else {
Object postgreSqlVal = PostgreSqlUtils.getPostgreSqlQueryValue(r.getValue(), attr);
// It does however return those rows when queried with "... NOT abstract IS TRUE"
if (attr.getDataType() == BOOL) {
Boolean bool = (Boolean) postgreSqlVal;
// noinspection ConstantConditions (getPostgreSqlQueryValue() != null if r.getValue() != null)
if (bool)
predicate.append(" IS TRUE");
else
predicate.append(" IS FALSE");
} else {
predicate.append(" =");
predicate.append(" ? ");
parameters.add(postgreSqlVal);
}
}
if (result.length() > 0 && !result.toString().endsWith(" OR ") && !result.toString().endsWith(" AND ") && !result.toString().endsWith(" NOT ")) {
result.append(" AND ");
}
result.append(predicate);
break;
case GREATER:
case GREATER_EQUAL:
case LESS:
case LESS_EQUAL:
requireNonNull(attr, format(UNSPECIFIED_ATTRIBUTE_MSG, format("%s, %s, %s or %s", GREATER, GREATER_EQUAL, LESS, LESS_EQUAL)));
if (isPersistedInOtherTable(attr)) {
predicate.append(getFilterColumnName(attr, mrefFilterIndex.get()));
} else {
predicate.append("this");
}
predicate.append('.').append(getColumnName(entityType.getAttribute(r.getField())));
switch(operator) {
case GREATER:
predicate.append(" >");
break;
case GREATER_EQUAL:
predicate.append(" >=");
break;
case LESS:
predicate.append(" <");
break;
case LESS_EQUAL:
predicate.append(" <=");
break;
// $CASES-OMITTED$
default:
throw new RuntimeException(format("Unexpected query operator [%s]", operator));
}
predicate.append(" ? ");
parameters.add(PostgreSqlUtils.getPostgreSqlQueryValue(r.getValue(), attr));
if (result.length() > 0 && !result.toString().endsWith(" OR ") && !result.toString().endsWith(" AND ") && !result.toString().endsWith(" NOT ")) {
result.append(" AND ");
}
result.append(predicate);
break;
case DIS_MAX:
case FUZZY_MATCH:
case FUZZY_MATCH_NGRAM:
case SEARCH:
case SHOULD:
// PostgreSQL does not support semantic searching and sorting matching rows on relevance.
throw new UnsupportedOperationException(format("Query operator [%s] not supported by PostgreSQL repository", operator.toString()));
default:
throw new UnexpectedEnumException(operator);
}
}
return result.toString().trim();
}
use of org.apache.commons.lang3.Range in project TechReborn by TechReborn.
the class BuiltContainer method transferStackInSlot.
@Override
public ItemStack transferStackInSlot(final EntityPlayer player, final int index) {
ItemStack originalStack = ItemStack.EMPTY;
final Slot slot = this.inventorySlots.get(index);
if (slot != null && slot.getHasStack()) {
final ItemStack stackInSlot = slot.getStack();
originalStack = stackInSlot.copy();
boolean shifted = false;
for (final Range<Integer> range : this.playerSlotRanges) if (range.contains(index)) {
if (this.shiftToTile(stackInSlot))
shifted = true;
break;
}
if (!shifted)
for (final Range<Integer> range : this.tileSlotRanges) if (range.contains(index)) {
if (this.shiftToPlayer(stackInSlot))
shifted = true;
break;
}
slot.onSlotChange(stackInSlot, originalStack);
if (stackInSlot.getCount() <= 0)
slot.putStack(ItemStack.EMPTY);
else
slot.onSlotChanged();
if (stackInSlot.getCount() == originalStack.getCount())
return ItemStack.EMPTY;
slot.onTake(player, stackInSlot);
}
return originalStack;
}
use of org.apache.commons.lang3.Range in project photon-model by vmware.
the class IPAddressAllocationTaskService method allocateIpInRange.
private DeferredResult<IPAddressAllocationContext> allocateIpInRange(IPAddressState ipAddressState, String connectedResourceLink, IPAddressAllocationContext context) {
// Found a record for the specified IP
if (IPAddressStatus.AVAILABLE.equals(ipAddressState.ipAddressStatus)) {
IPAddressState patchedState = new IPAddressState();
patchedState.ipAddressStatus = IPAddressStatus.ALLOCATED;
patchedState.connectedResourceLink = connectedResourceLink;
return sendWithDeferredResult(Operation.createPatch(this, ipAddressState.documentSelfLink).setBody(patchedState)).thenAccept(oper -> {
logInfo("Allocated IP address %s within range %s to resource %s", ipAddressState.ipAddress, context.subnetRangeState.name, connectedResourceLink);
addIpToContext(context, connectedResourceLink, ipAddressState);
}).thenApply(oper -> context);
} else {
if (connectedResourceLink.equals(ipAddressState.connectedResourceLink)) {
logInfo("IP address '%s' is already allocated to the same resource [%s]", ipAddressState.ipAddress, connectedResourceLink);
addIpToContext(context, connectedResourceLink, ipAddressState);
return DeferredResult.completed(context);
} else {
String errMsg = String.format("IP address '%s' is already allocated to a different resource [%s]", ipAddressState.ipAddress, ipAddressState.connectedResourceLink);
logSevere(errMsg);
return DeferredResult.failed(new IllegalArgumentException(errMsg));
}
}
}
use of org.apache.commons.lang3.Range in project libSBOLj by SynBioDex.
the class SequenceAnnotationTest method test_locationMethods.
@Test
public void test_locationMethods() throws SBOLValidationException {
Cut promoter_cut = promoter_SA.addCut("promoter_cut", 1);
assertTrue(gRNA_b_gene.getSequenceAnnotation("promoter_SA").getLocation("promoter_cut").equals(promoter_cut));
promoter_cut.unsetOrientation();
assertNull(promoter_cut.getOrientation());
Location test = promoter_cut;
assertNotNull(test.toString());
Cut terminator_cut = terminator_SA.addCut("terminator_cut", 100);
assertTrue(gRNA_b_gene.getSequenceAnnotation("terminator_SA").getLocation("terminator_cut").equals(terminator_cut));
Cut gene_cut = gene_SA.addCut("gene_cut", 50, OrientationType.INLINE);
assertTrue(gRNA_b_gene.getSequenceAnnotation("gene_SA").getLocation("gene_cut").equals(gene_cut));
gene_SA.removeLocation(gene_cut);
assertNull(gene_SA.getLocation("gene_cut"));
Range gene_range = gene_SA.addRange("gene_range", 50, 99);
assertTrue(gRNA_b_gene.getSequenceAnnotation("gene_SA").getLocation("gene_range").equals(gene_range));
gene_range.unsetOrientation();
assertNull(gene_range.getOrientation());
promoter_SA.removeLocation(promoter_cut);
assertNull(promoter_SA.getLocation(promoter_cut.getIdentity()));
GenericLocation promoter_glocation = promoter_SA.addGenericLocation("promoter_glocation");
assertTrue(gRNA_b_gene.getSequenceAnnotation("promoter_SA").getLocation("promoter_glocation").equals(promoter_glocation));
terminator_SA.removeLocation(terminator_cut);
assertNull(terminator_SA.getLocation("terminator_cut"));
GenericLocation terminator_glocation = terminator_SA.addGenericLocation("terminator_glocation", OrientationType.INLINE);
assertTrue(gRNA_b_gene.getSequenceAnnotation("terminator_SA").getLocation("terminator_glocation").equals(terminator_glocation));
}
use of org.apache.commons.lang3.Range in project atlasdb by palantir.
the class SerializableTransaction method verifyColumnRanges.
private void verifyColumnRanges(Transaction readOnlyTransaction) {
// verify each set of reads to ensure they are the same.
for (Entry<TableReference, ConcurrentMap<byte[], ConcurrentMap<BatchColumnRangeSelection, byte[]>>> tableAndRange : columnRangeEndsByTable.entrySet()) {
TableReference table = tableAndRange.getKey();
Map<byte[], ConcurrentMap<BatchColumnRangeSelection, byte[]>> columnRangeEnds = tableAndRange.getValue();
Map<Cell, byte[]> writes = writesByTable.get(table);
Map<BatchColumnRangeSelection, List<byte[]>> rangesToRows = Maps.newHashMap();
for (Entry<byte[], ConcurrentMap<BatchColumnRangeSelection, byte[]>> rowAndRangeEnds : columnRangeEnds.entrySet()) {
byte[] row = rowAndRangeEnds.getKey();
Map<BatchColumnRangeSelection, byte[]> rangeEnds = columnRangeEnds.get(row);
for (Entry<BatchColumnRangeSelection, byte[]> e : rangeEnds.entrySet()) {
BatchColumnRangeSelection range = e.getKey();
byte[] rangeEnd = e.getValue();
if (rangeEnd.length != 0 && !RangeRequests.isTerminalRow(false, rangeEnd)) {
range = BatchColumnRangeSelection.create(range.getStartCol(), RangeRequests.getNextStartRow(false, rangeEnd), range.getBatchHint());
}
if (rangesToRows.get(range) != null) {
rangesToRows.get(range).add(row);
} else {
rangesToRows.put(range, ImmutableList.of(row));
}
}
}
for (Entry<BatchColumnRangeSelection, List<byte[]>> e : rangesToRows.entrySet()) {
BatchColumnRangeSelection range = e.getKey();
List<byte[]> rows = e.getValue();
Map<byte[], BatchingVisitable<Map.Entry<Cell, byte[]>>> result = readOnlyTransaction.getRowsColumnRange(table, rows, range);
for (Entry<byte[], BatchingVisitable<Map.Entry<Cell, byte[]>>> res : result.entrySet()) {
byte[] row = res.getKey();
BatchingVisitableView<Entry<Cell, byte[]>> bv = BatchingVisitableView.of(res.getValue());
NavigableMap<Cell, ByteBuffer> readsInRange = Maps.transformValues(getReadsInColumnRange(table, row, range), input -> ByteBuffer.wrap(input));
boolean isEqual = bv.transformBatch(input -> filterWritesFromCells(input, writes)).isEqual(readsInRange.entrySet());
if (!isEqual) {
handleTransactionConflict(table);
}
}
}
}
}
Aggregations