@Override public void remove( Path path, String field ) { checkForChanges(path.with(field)); }
private void checkForChanges( Path path ) { for (Path ignorePath : IGNORE_PATHS) { if (path.equals(ignorePath)) return; } if (!largeValueChanged && path.equals(MINIMUM_BINARY_SIZE_IN_BYTES_PATH)) largeValueChanged = true; else if (!binaryStorageChanged && path.startsWith(BINARY_STORAGE_PATH)) binaryStorageChanged = true; else if (!storageChanged && path.startsWith(STORAGE_PATH)) storageChanged = true; if (!sequencingChanged && path.startsWith(SEQUENCING_PATH)) sequencingChanged = true; if (!extractorsChanged && path.startsWith(EXTRACTORS_PATH)) extractorsChanged = true; if (!securityChanged && path.startsWith(SECURITY_PATH)) securityChanged = true; if (!workspacesChanged && path.startsWith(WORKSPACES_PATH) && !path.startsWith(PREDEFINED_PATH)) workspacesChanged = true; if (!predefinedWorkspacesChanged && path.startsWith(PREDEFINED_PATH)) predefinedWorkspacesChanged = true; if (!indexesChanged && path.startsWith(INDEXES_PATH)) indexesChanged = true; if (!indexProvidersChanged && path.startsWith(INDEX_PROVIDERS_PATH)) indexProvidersChanged = true; if (!jndiChanged && path.equals(JNDI_PATH)) jndiChanged = true; if (!nameChanged && path.equals(NAME_PATH)) nameChanged = true; if (!monitoringChanged && path.equals(MONITORING_PATH)) monitoringChanged = true; if (!connectorsChanged && path.startsWith(CONNECTORS_PATH)) connectorsChanged = true; } }
@Override public boolean startsWith( Path other ) { if (other.size() > this.size()) return false; Iterator<String> thatIter = other.iterator(); Iterator<String> thisIter = this.iterator(); while (thatIter.hasNext() && thisIter.hasNext()) { if (!thisIter.next().equals(thatIter.next())) return false; } return !thatIter.hasNext(); }
@Override public void validate( Object fieldValue, String fieldName, Document parent, Path pathToParent, Problems problems, SchemaDocumentResolver resolver ) { if (Null.matches(fieldValue) && fieldName != null) { if (pathToParent.size() == 0) { problems.recordError(pathToParent.with(fieldName), "The top-level '" + fieldName + "' field is required"); } else { problems.recordError(pathToParent.with(fieldName), "The '" + fieldName + "' field on '" + pathToParent + "' is required"); } } else { problems.recordSuccess(); } }
protected void addValidatorsForPattern( Document parent, Path parentPath, Problems problems, CompositeValidator validators ) { String regex = parent.getString("pattern"); if (regex != null) { String requiredName = parentPath.getLast(); if (requiredName != null) { try { Pattern pattern = Pattern.compile(regex); validators.add(new PatternValidator(requiredName, pattern)); } catch (PatternSyntaxException e) { problems.recordError(parentPath.with("pattern"), "The supplied value '" + regex + "' is expected to be a valid regular expression, but there was an error at position " + e.getIndex() + ": " + e.getDescription()); } } } }
protected void addValidatorsForEnum( Document parent, Path parentPath, Problems problems, CompositeValidator validators ) { List<?> enumValues = parent.getArray("enum"); if (enumValues != null && !enumValues.isEmpty()) { String requiredName = parentPath.getLast(); if (requiredName != null) { validators.add(new EnumValidator(requiredName, enumValues)); } } }
@Override public int compareTo( Path that ) { if (that == this) return 0; if (that instanceof EmptyPath) return 0; return 0 - that.size(); }
@Override public int compareTo( Conversion that ) { if (this == that) return 0; return this.problem.getPath().compareTo(that.problem.getPath()); }
protected void addValidatorsForPattern( Document parent, Path parentPath, Problems problems, CompositeValidator validators ) { String regex = parent.getString("pattern"); if (regex != null) { String requiredName = parentPath.getLast(); if (requiredName != null) { try { Pattern pattern = Pattern.compile(regex); validators.add(new PatternValidator(requiredName, pattern)); } catch (PatternSyntaxException e) { problems.recordError(parentPath.with("pattern"), "The supplied value '" + regex + "' is expected to be a valid regular expression, but there was an error at position " + e.getIndex() + ": " + e.getDescription()); } } } }
@Override public void validate( Object fieldValue, String fieldName, Document parent, Path pathToParent, Problems problems, SchemaDocumentResolver resolver ) { if (Null.matches(fieldValue) && fieldName != null) { if (pathToParent.size() == 0) { problems.recordError(pathToParent.with(fieldName), "The top-level '" + fieldName + "' field is required"); } else { problems.recordError(pathToParent.with(fieldName), "The '" + fieldName + "' field on '" + pathToParent + "' is required"); } } else { problems.recordSuccess(); } }
@Override public boolean startsWith( Path other ) { if (other.size() > this.size()) return false; Iterator<String> thatIter = other.iterator(); Iterator<String> thisIter = this.iterator(); while (thatIter.hasNext() && thisIter.hasNext()) { if (!thisIter.next().equals(thatIter.next())) return false; } return !thatIter.hasNext(); }
protected void addValidatorsForEnum( Document parent, Path parentPath, Problems problems, CompositeValidator validators ) { List<?> enumValues = parent.getArray("enum"); if (enumValues != null && !enumValues.isEmpty()) { String requiredName = parentPath.getLast(); if (requiredName != null) { validators.add(new EnumValidator(requiredName, enumValues)); } } }
@Override public boolean equals( Object obj ) { if (obj == this) return true; if (obj instanceof Path) { Path that = (Path)obj; return that.size() == 0; } return false; }
@Override public int compareTo( Conversion that ) { if (this == that) return 0; return this.problem.getPath().compareTo(that.problem.getPath()); }
@Override protected EditableArray createEditableArray( MutableArray array, String fieldName, DocumentValueFactory factory ) { return new ObservableArrayEditor(array, path.with(fieldName), observer, factory); }
@Override public int compareTo( Path that ) { if (that == this) return 0; int diff = this.size() - that.size(); if (diff != 0) return diff; Iterator<String> thatIter = that.iterator(); Iterator<String> thisIter = this.iterator(); while (thatIter.hasNext()) { int value = thisIter.next().compareTo(thatIter.next()); if (value != 0) return value; } assert !thisIter.hasNext(); return 0; }