/*******************************************************************************
* Copyright (c) 2012 OpenLegacy Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* OpenLegacy Inc. - initial API and implementation
*******************************************************************************/
package org.openlegacy.terminal.utils;
import org.openlegacy.terminal.TerminalField;
import org.openlegacy.terminal.TerminalRow;
import org.openlegacy.terminal.TerminalSnapshot;
import java.util.ArrayList;
import java.util.List;
public class FieldsQuery {
public static List<TerminalField> queryFields(TerminalSnapshot snapshot, FieldsCriteria criteria) {
List<TerminalRow> rows = snapshot.getRows();
return queryFields(rows, criteria);
}
public static List<TerminalField> queryFields(List<TerminalRow> rows, FieldsCriteria criteria) {
List<TerminalField> matchedFields = new ArrayList<TerminalField>();
for (TerminalRow terminalRow : rows) {
List<TerminalField> fields = terminalRow.getFields();
for (TerminalField field : fields) {
if (criteria.match(field)) {
matchedFields.add(field);
}
}
}
return matchedFields;
}
public static interface FieldsCriteria {
boolean match(TerminalField terminalField);
}
public static class AllFieldsCriteria implements FieldsCriteria {
private static AllFieldsCriteria instance = new AllFieldsCriteria();
public static AllFieldsCriteria instance() {
return instance;
}
public boolean match(TerminalField terminalField) {
return true;
}
}
public static class EditableFieldsCriteria implements FieldsCriteria {
private static EditableFieldsCriteria instance = new EditableFieldsCriteria();
public static EditableFieldsCriteria instance() {
return instance;
}
public boolean match(TerminalField terminalField) {
return terminalField.isEditable();
}
}
public static class ModifiedFieldsCriteria implements FieldsCriteria {
private static ModifiedFieldsCriteria instance = new ModifiedFieldsCriteria();
public static ModifiedFieldsCriteria instance() {
return instance;
}
public boolean match(TerminalField terminalField) {
return terminalField.isModified();
}
}
}