package edu.ucsf.mousedatabase.dataimport; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class ImportAction { private String name; private List<Expression> acceptExpressions; private List<Expression> rejectExpressions; private List<Expression> outputExpressions; private String outputFormat; public ImportAction(String name, String outputFormat) { this.name = name; this.outputFormat = outputFormat; } public boolean rowIsValid(HashMap<String,String> row) { return meetsAcceptExpression(row) && passesRejectExpression(row); } //output format would be something like this: //Created new change request for holder ${holderid.name} who received mouse %{record.name} public String getOutput(HashMap<String,String> row) { String output = outputFormat; for (Expression expression : outputExpressions) { ExpressionMatch match = expression.match(row); if (!match.isMatch()) { //this should not happen, but it might, so... } for (String groupName : expression.getGroupNames()) { String replaceString = "${" + expression.getName() + "." + groupName + "}"; String value = match.getGroup(groupName); output.replaceAll(replaceString, value); } } return output; } private boolean meetsAcceptExpression(HashMap<String,String> row) { for (Expression expression : acceptExpressions) { ExpressionMatch m = expression.match(row); if (!m.isMatch()) { return false; } } return true; } private boolean passesRejectExpression(HashMap<String,String> row) { for (Expression expression : rejectExpressions) { ExpressionMatch m = expression.match(row); if (!m.isMatch()) { return false; } } return true; } public String getName() { return name; } public String getOutputFormat() { return outputFormat; } public void addAcceptExpression(Expression expr) { addExpression(acceptExpressions, expr); } public void addRejectExpression(Expression expr) { addExpression(rejectExpressions, expr); } public void addOutputExpression(Expression expr) { addExpression(outputExpressions, expr); } private void addExpression(List<Expression> list, Expression expr) { if (list == null) { list = new ArrayList<Expression>(); } list.add(expr); } }