static PropertyValue getExcerpt(PropertyValue value) { Splitter listSplitter = Splitter.on(',').trimResults().omitEmptyStrings(); StringBuilder excerpt = new StringBuilder(EXCERPT_BEGIN); for (String v : listSplitter.splitToList(value.toString())) { excerpt.append(v); } excerpt.append(EXCERPT_END); return PropertyValues.newString(excerpt.toString()); } }
@Override public int hashCode() { if (hashCode == 0) { hashCode = Objects.hashCode(definition, property, PropertyValues.create(property)); } return hashCode; }
@Override public PropertyValue getValue(String columnName) { // overlay the score if (QueryConstants.JCR_SCORE.equals(columnName)) { return PropertyValues.newDouble(currentRow.score); } if (QueryConstants.REP_SPELLCHECK.equals(columnName) || QueryConstants.REP_SUGGEST.equals(columnName)) { return PropertyValues.newString(Iterables.toString(currentRow.suggestWords)); } if (QueryConstants.REP_EXCERPT.equals(columnName)) { return PropertyValues.newString(currentRow.excerpt); } return pathRow.getValue(columnName); }
case PropertyType.BINARY: Blob blob = value.getValue(Type.BINARY); return PropertyValues.newBinary(blob); case PropertyType.BOOLEAN: return PropertyValues.newBoolean(value.getValue(Type.BOOLEAN)); case PropertyType.DATE: return PropertyValues.newDate(value.getValue(Type.DATE)); case PropertyType.DOUBLE: return PropertyValues.newDouble(value.getValue(Type.DOUBLE)); case PropertyType.LONG: return PropertyValues.newLong(value.getValue(Type.LONG)); case PropertyType.DECIMAL: return PropertyValues.newDecimal(value.getValue(Type.DECIMAL)); switch (targetType) { case PropertyType.STRING: return PropertyValues.newString(v); case PropertyType.PATH: switch (sourceType) { case PropertyType.STRING: case PropertyType.NAME: return PropertyValues.newPath(v); case PropertyType.URI: URI uri = URI.create(v); return PropertyValues.newPath(v); return PropertyValues.newName(getOakPath(v, mapper));
switch (valueType) { case PropertyType.LONG: currentValue = PropertyValues.newLong(currentValue.getValue(Type.LONG)); break; case PropertyType.DOUBLE: currentValue = PropertyValues.newDouble(currentValue.getValue(Type.DOUBLE)); break; case PropertyType.DECIMAL: currentValue = PropertyValues.newDecimal(currentValue.getValue(Type.DECIMAL).negate()); break; default: switch (valueType) { case PropertyType.LONG: currentValue = PropertyValues.newLong(-currentValue.getValue(Type.LONG)); break; case PropertyType.DOUBLE: currentValue = PropertyValues.newDouble(-currentValue.getValue(Type.DOUBLE)); break; case PropertyType.BOOLEAN: currentValue = PropertyValues.newBoolean(!currentValue.getValue(Type.BOOLEAN)); break; case PropertyType.DECIMAL: currentValue = PropertyValues.newDecimal(currentValue.getValue(Type.DECIMAL).negate()); break; default: LiteralImpl literal = getUncastLiteral(PropertyValues.newBoolean(true)); return literal;
@Override public PropertyValue currentProperty() { String path = selector.currentPath(); if (path == null) { return null; } String name = PathUtils.getName(path); // TODO reverse namespace remapping? return PropertyValues.newName(name); }
@Override public boolean evaluate(PropertyValue p1, PropertyValue p2) { return PropertyValues.match(p1, p2); } },
@Override public PropertyValue currentProperty() { PropertyValue p = selector.currentOakProperty(QueryConstants.JCR_SCORE); if (p == null) { // TODO if score() is not supported by the index, use the value 0.0? return PropertyValues.newDouble(0.0); } return p; }
@Override public PropertyValue currentProperty() { PropertyValue p = operand.currentProperty(); if (p == null) { return null; } // TODO namespace remapping? if (!p.isArray()) { long length = p.size(); return PropertyValues.newLong(length); } // TODO what is the expected result for LENGTH(multiValueProperty)? throw new IllegalArgumentException("LENGTH(x) on multi-valued property is not supported"); }
@Test public void basicReferenceHandling() throws Exception{ NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("a").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("b").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("c").setProperty(createProperty("foo", "u2", Type.WEAKREFERENCE)); NodeState after = builder.getNodeState(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new ReferenceEditorProvider())); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); FilterImpl f = createFilter(indexed, NT_BASE); f.restrictProperty("*", Operator.EQUAL, newReference("u1"), PropertyType.REFERENCE); assertFilter(f, new ReferenceIndex(), indexed, of("/a", "/b")); FilterImpl f2 = createFilter(indexed, NT_BASE); f2.restrictProperty("*", Operator.EQUAL, newReference("u2"), PropertyType.WEAKREFERENCE); assertFilter(f2, new ReferenceIndex(), indexed, of("/c")); }
v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertEquals("v1 and v2 should be equals", 0, v1.compareTo(v2)); assertEquals("v1 and v2 should be equals", 0, v2.compareTo(v1)); v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertTrue("v1 < v2", v1.compareTo(v2) < 0); assertTrue("v2 > v1", v2.compareTo(v1) > 0); v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertTrue("v1 > v2", v1.compareTo(v2) > 0); assertTrue("v2 < v1", v2.compareTo(v1) < 0); v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertEquals("v1 and v2 should be equals", 0, v1.compareTo(v2)); assertEquals("v1 and v2 should be equals", 0, v2.compareTo(v1)); v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertTrue("v1 < v2", v1.compareTo(v2) < 0); assertTrue("v2 > v1", v2.compareTo(v1) > 0); v1 = newDate(format(d1)); v2 = newDate(format(d2)); assertTrue("v1 > v2", v1.compareTo(v2) > 0); assertTrue("v2 < v1", v2.compareTo(v1) < 0);
case PropertyType.BINARY: Blob blob = value.getValue(Type.BINARY); return PropertyValues.newBinary(blob); case PropertyType.BOOLEAN: return PropertyValues.newBoolean(value.getValue(Type.BOOLEAN)); case PropertyType.DATE: return PropertyValues.newDate(value.getValue(Type.DATE)); case PropertyType.DOUBLE: return PropertyValues.newDouble(value.getValue(Type.DOUBLE)); case PropertyType.LONG: return PropertyValues.newLong(value.getValue(Type.LONG)); case PropertyType.DECIMAL: return PropertyValues.newDecimal(value.getValue(Type.DECIMAL)); switch (targetType) { case PropertyType.STRING: return PropertyValues.newString(v); case PropertyType.PATH: switch (sourceType) { case PropertyType.STRING: case PropertyType.NAME: return PropertyValues.newPath(v); case PropertyType.URI: URI uri = URI.create(v); return PropertyValues.newPath(v); return PropertyValues.newName(getOakPath(v, mapper));
switch (valueType) { case PropertyType.LONG: currentValue = PropertyValues.newLong(currentValue.getValue(Type.LONG)); break; case PropertyType.DOUBLE: currentValue = PropertyValues.newDouble(currentValue.getValue(Type.DOUBLE)); break; case PropertyType.DECIMAL: currentValue = PropertyValues.newDecimal(currentValue.getValue(Type.DECIMAL).negate()); break; default: switch (valueType) { case PropertyType.LONG: currentValue = PropertyValues.newLong(-currentValue.getValue(Type.LONG)); break; case PropertyType.DOUBLE: currentValue = PropertyValues.newDouble(-currentValue.getValue(Type.DOUBLE)); break; case PropertyType.BOOLEAN: currentValue = PropertyValues.newBoolean(!currentValue.getValue(Type.BOOLEAN)); break; case PropertyType.DECIMAL: currentValue = PropertyValues.newDecimal(currentValue.getValue(Type.DECIMAL).negate()); break; default: LiteralImpl literal = getUncastLiteral(PropertyValues.newBoolean(true)); return literal;
@Override public PropertyValue currentProperty() { String path = selector.currentPath(); if (path == null) { return null; } String name = PathUtils.getName(path); // TODO reverse namespace remapping? return PropertyValues.newName(name); }