public static ArraySliceOperation parse(String operation){ //check valid chars for (int i = 0; i < operation.length(); i++) { char c = operation.charAt(i); if( !isDigit(c) && c != '-' && c != ':'){ throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } } String[] tokens = operation.split(":"); Integer tempFrom = tryRead(tokens, 0); Integer tempTo = tryRead(tokens, 1); Operation tempOperation; if (tempFrom != null && tempTo == null) { tempOperation = Operation.SLICE_FROM; } else if (tempFrom != null) { tempOperation = Operation.SLICE_BETWEEN; } else if (tempTo != null) { tempOperation = Operation.SLICE_TO; } else { throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } return new ArraySliceOperation(tempFrom, tempTo, tempOperation); }
private void sliceBetween(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); int to = operation.to(); to = Math.min(length, to); if (from >= to || length == 0) { return; } logger.debug("Slice between indexes on array with length: {}. From index: {} to: {}. Input: {}", length, from, to, toString()); for (int i = from; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
@Override public void evaluate(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { if (!checkArrayModel(currentPath, model, ctx)) return; switch (operation.operation()) { case SLICE_FROM: sliceFrom(currentPath, parent, model, ctx); break; case SLICE_BETWEEN: sliceBetween(currentPath, parent, model, ctx); break; case SLICE_TO: sliceTo(currentPath, parent, model, ctx); break; } }
@Override public String getPathFragment() { return operation.toString(); }
private void sliceFrom(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); if (from < 0) { //calculate slice start from array length from = length + from; } from = Math.max(0, from); logger.debug("Slice from index on array with length: {}. From index: {} to: {}. Input: {}", length, from, length - 1, toString()); if (length == 0 || from >= length) { return; } for (int i = from; i < length; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
private void sliceTo(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); if (length == 0) { return; } int to = operation.to(); if (to < 0) { //calculate slice end from array length to = length + to; } to = Math.min(length, to); logger.debug("Slice to index on array with length: {}. From index: 0 to: {}. Input: {}", length, to, toString()); for (int i = 0; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
ArraySliceOperation arraySliceOperation = ArraySliceOperation.parse(expression); appender.appendPathToken(PathTokenFactory.createSliceArrayPathToken(arraySliceOperation)); } else {
@Override public String getPathFragment() { if(arrayIndexOperation != null){ return arrayIndexOperation.toString(); } else { return arraySliceOperation.toString(); } }
public void sliceFrom(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); if (from < 0) { //calculate slice start from array length from = length + from; } from = Math.max(0, from); logger.debug("Slice from index on array with length: {}. From index: {} to: {}. Input: {}", length, from, length - 1, toString()); if (length == 0 || from >= length) { return; } for (int i = from; i < length; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
public void sliceTo(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); if (length == 0) { return; } int to = operation.to(); if (to < 0) { //calculate slice end from array length to = length + to; } to = Math.min(length, to); logger.debug("Slice to index on array with length: {}. From index: 0 to: {}. Input: {}", length, to, toString()); for (int i = 0; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
ArraySliceOperation arraySliceOperation = ArraySliceOperation.parse(expression); appender.appendPathToken(PathTokenFactory.createSliceArrayPathToken(arraySliceOperation)); } else {
public void sliceBetween(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); int to = operation.to(); to = Math.min(length, to); if (from >= to || length == 0) { return; } logger.debug("Slice between indexes on array with length: {}. From index: {} to: {}. Input: {}", length, from, to, toString()); for (int i = from; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
public static ArraySliceOperation parse(String operation){ //check valid chars for (int i = 0; i < operation.length(); i++) { char c = operation.charAt(i); if( !isDigit(c) && c != '-' && c != ':'){ throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } } String[] tokens = operation.split(":"); Integer tempFrom = tryRead(tokens, 0); Integer tempTo = tryRead(tokens, 1); Operation tempOperpation; if(tempFrom != null && tempTo == null){ tempOperpation = Operation.SLICE_FROM; } else if(tempFrom != null && tempTo != null){ tempOperpation = Operation.SLICE_BETWEEN; } else if(tempFrom == null && tempTo != null){ tempOperpation = Operation.SLICE_TO; } else { throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } return new ArraySliceOperation(tempFrom, tempTo, tempOperpation); }
@Override public String getPathFragment() { if(arrayIndexOperation != null){ return arrayIndexOperation.toString(); } else { return arraySliceOperation.toString(); } }
public void evaluateSliceOperation(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { if (! checkArrayModel(currentPath, model, ctx)) return; switch (arraySliceOperation.operation()) { case SLICE_FROM: sliceFrom(arraySliceOperation, currentPath, parent, model, ctx); break; case SLICE_BETWEEN: sliceBetween(arraySliceOperation, currentPath, parent, model, ctx); break; case SLICE_TO: sliceTo(arraySliceOperation, currentPath, parent, model, ctx); break; } }
public void sliceFrom(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); if (from < 0) { //calculate slice start from array length from = length + from; } from = Math.max(0, from); logger.debug("Slice from index on array with length: {}. From index: {} to: {}. Input: {}", length, from, length - 1, toString()); if (length == 0 || from >= length) { return; } for (int i = from; i < length; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
public void sliceTo(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); if (length == 0) { return; } int to = operation.to(); if (to < 0) { //calculate slice end from array length to = length + to; } to = Math.min(length, to); logger.debug("Slice to index on array with length: {}. From index: 0 to: {}. Input: {}", length, to, toString()); for (int i = 0; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
ArraySliceOperation arraySliceOperation = ArraySliceOperation.parse(expression); appender.appendPathToken(PathTokenFactory.createSliceArrayPathToken(arraySliceOperation)); } else {
public void sliceBetween(ArraySliceOperation operation, String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) { int length = ctx.jsonProvider().length(model); int from = operation.from(); int to = operation.to(); to = Math.min(length, to); if (from >= to || length == 0) { return; } logger.debug("Slice between indexes on array with length: {}. From index: {} to: {}. Input: {}", length, from, to, toString()); for (int i = from; i < to; i++) { handleArrayIndex(i, currentPath, model, ctx); } }
public static ArraySliceOperation parse(String operation){ //check valid chars for (int i = 0; i < operation.length(); i++) { char c = operation.charAt(i); if( !isDigit(c) && c != '-' && c != ':'){ throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } } String[] tokens = operation.split(":"); Integer tempFrom = tryRead(tokens, 0); Integer tempTo = tryRead(tokens, 1); Operation tempOperpation; if(tempFrom != null && tempTo == null){ tempOperpation = Operation.SLICE_FROM; } else if(tempFrom != null && tempTo != null){ tempOperpation = Operation.SLICE_BETWEEN; } else if(tempFrom == null && tempTo != null){ tempOperpation = Operation.SLICE_TO; } else { throw new InvalidPathException("Failed to parse SliceOperation: " + operation); } return new ArraySliceOperation(tempFrom, tempTo, tempOperpation); }