package ecologylab.bigsemantics.metametadata.fieldops; import ecologylab.serialization.annotations.simpl_scalar; /** * * @author quyin */ public class Substring implements FieldOp { @simpl_scalar private int begin; @simpl_scalar private int end; @simpl_scalar private String after; @simpl_scalar private String before; @simpl_scalar private String inclusiveAfter; @simpl_scalar private String inclusiveBefore; public int getBegin() { return begin; } public void setBegin(int begin) { this.begin = begin; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public String getAfter() { return after; } public void setAfter(String after) { this.after = after; } public String getBefore() { return before; } public void setBefore(String before) { this.before = before; } public String getInclusiveAfter() { return inclusiveAfter; } public void setInclusiveAfter(String inclusiveAfter) { this.inclusiveAfter = inclusiveAfter; } public String getInclusiveBefore() { return inclusiveBefore; } public void setInclusiveBefore(String inclusiveBefore) { this.inclusiveBefore = inclusiveBefore; } @Override public Object operateOn(Object rawValue) { if (rawValue != null) { String s = rawValue.toString(); int a = 0; if (after != null) { int p = s.indexOf(after); if (p >= 0) { a = p + after.length(); } } else if (inclusiveAfter != null) { int p = s.indexOf(inclusiveAfter); if (p >= 0) { a = p; } } else { a = begin; } int b = s.length(); if (before != null) { int p = s.lastIndexOf(before); if (p >= 0) { b = p; } } else if (inclusiveBefore != null) { int p = s.lastIndexOf(inclusiveBefore); if (p >= 0) { b = p + inclusiveBefore.length(); } } else { b = (end == 0) ? s.length() : end; } return s.substring(a, b); } return rawValue; } }