use of org.jaffa.transaction.apis.data.TransactionCriteria in project jaffa-framework by jaffa-projects.
the class JaffaTransactionMessageService method getTransactionByFieldsAndBeginsWithFields.
/**
* Gets the Transaction that has the specified fields-values and also fields that begin with
* the specified values. If multiple beginsWith values are defined for a field, the field will be checked against
* them all.
*
* @param fields the field name/value pairs
* @param beginsWith the field name/begins-with values
* @return the Transaction that contains the specified fields with the input values
* @throws FrameworkException
*/
@Override
public Transaction getTransactionByFieldsAndBeginsWithFields(HashMap<String, String> fields, HashMap<String, String> beginsWith) throws FrameworkException {
UOW uow = null;
Transaction transaction = null;
try {
uow = new UOW();
TransactionCriteria transactionCriteria = new TransactionCriteria();
List<TransactionFieldCriteria> tranFieldCriteriaList = new ArrayList<TransactionFieldCriteria>();
// add all of the field criteria
for (Map.Entry<String, String> field : fields.entrySet()) {
TransactionFieldCriteria fieldCriteria = new TransactionFieldCriteria();
fieldCriteria.setFieldName(field.getKey());
StringCriteriaField stringCriteria = StringCriteriaField.getStringCriteriaField(StringCriteriaField.RELATIONAL_EQUALS, field.getValue(), null);
fieldCriteria.setValue(stringCriteria);
tranFieldCriteriaList.add(fieldCriteria);
}
// add all of the begins with criteria
for (Map.Entry<String, String> beginsWithField : beginsWith.entrySet()) {
TransactionFieldCriteria beginsWithCriteria = new TransactionFieldCriteria();
beginsWithCriteria.setFieldName(beginsWithField.getKey());
StringCriteriaField stringCriteria = StringCriteriaField.getStringCriteriaField(StringCriteriaField.RELATIONAL_BEGINS_WITH, beginsWithField.getValue(), null);
beginsWithCriteria.setValue(stringCriteria);
tranFieldCriteriaList.add(beginsWithCriteria);
}
// set all of the field criteria on the transaction criteria
TransactionFieldCriteria[] criteriaArray = new TransactionFieldCriteria[tranFieldCriteriaList.size()];
criteriaArray = tranFieldCriteriaList.toArray(criteriaArray);
transactionCriteria.setTransactionFields(criteriaArray);
// call the transaction service for a response to the query
TransactionService transactionService = new TransactionService();
TransactionQueryResponse response = transactionService.query(transactionCriteria);
// return a transaction from the response
for (TransactionGraph transactionGraph : response.getGraphs()) {
if ((transactionGraph != null) && (transactionGraph.getId() != null)) {
transaction = getTransaction(transactionGraph.getId());
}
}
} finally {
if (uow != null) {
uow.close();
}
}
return transaction;
}
use of org.jaffa.transaction.apis.data.TransactionCriteria in project jaffa-framework by jaffa-projects.
the class JaffaTransactionMessageService method getTransactionsByFields.
/**
* Gets all Transactions that have the specified fields with the input values.
* If there are more than one value for a key, this will return fields that have any of the specified values.
*
* @param fields the field name/value pairs
* @return a collection of Transactions that contain the specified fields with the input values
* @throws FrameworkException
*/
@Override
public Collection<Transaction> getTransactionsByFields(HashMap<String, List<Serializable>> fields) throws FrameworkException {
UOW uow = null;
List<Transaction> results = new ArrayList<Transaction>();
try {
uow = new UOW();
Criteria transactionCriteria = new Criteria();
transactionCriteria.setTable(TransactionMeta.getName());
// add each field in the field map to the query
for (Map.Entry<String, List<Serializable>> field : fields.entrySet()) {
// if there is no field or values defined, skip to the next entry
if ((field.getKey() == null) || field.getKey().isEmpty() || field.getValue().isEmpty()) {
continue;
}
// if the value list has one entry, create a criteria
if (field.getValue().size() == 1) {
Criteria singleValueCriteria = new Criteria();
singleValueCriteria.setTable(TransactionFieldMeta.getName());
singleValueCriteria.addInnerCriteria(TransactionFieldMeta.TRANSACTION_ID, TransactionMeta.ID);
singleValueCriteria.addCriteria(TransactionFieldMeta.FIELD_NAME, field.getKey());
if (field.getValue().get(0) == null) {
singleValueCriteria.addCriteria(TransactionFieldMeta.VALUE, Criteria.RELATIONAL_IS_NULL);
} else {
singleValueCriteria.addCriteria(TransactionFieldMeta.VALUE, field.getValue().get(0));
}
transactionCriteria.addAggregate(singleValueCriteria);
continue;
}
// if the value list has multiple entries, create an atomic criteria for each one
Criteria multiValueCriteria = new AtomicCriteria();
multiValueCriteria.setTable(TransactionFieldMeta.getName());
multiValueCriteria.addInnerCriteria(TransactionFieldMeta.TRANSACTION_ID, TransactionMeta.ID);
multiValueCriteria.addCriteria(TransactionFieldMeta.FIELD_NAME, field.getKey());
AtomicCriteria ac = new AtomicCriteria();
for (Object value : field.getValue()) {
// check if this is the first criteria or an 'or' criteria when adding it
if (value == null) {
if ((ac.getCriteriaEntries() == null) || ac.getCriteriaEntries().isEmpty()) {
ac.addCriteria(TransactionFieldMeta.VALUE, Criteria.RELATIONAL_IS_NULL);
} else {
ac.addOrCriteria(TransactionFieldMeta.VALUE, Criteria.RELATIONAL_IS_NULL);
}
} else {
if ((ac.getCriteriaEntries() == null) || ac.getCriteriaEntries().isEmpty()) {
ac.addCriteria(TransactionFieldMeta.VALUE, value);
} else {
ac.addOrCriteria(TransactionFieldMeta.VALUE, value);
}
}
}
multiValueCriteria.addAtomic(ac);
transactionCriteria.addAggregate(multiValueCriteria);
}
for (Object result : uow.query(transactionCriteria)) {
if (!(result instanceof Transaction)) {
continue;
}
results.add((Transaction) result);
}
} finally {
if (uow != null) {
uow.close();
}
}
return results;
}
use of org.jaffa.transaction.apis.data.TransactionCriteria in project jaffa-framework by jaffa-projects.
the class JaffaTransactionMessageService method getTransactionsByFieldsOred.
/**
* Gets all Transactions that have any of the specified fields with the input values.
* If there are more than one value for a key, this will return fields that have any of the specified values.
*
* @param fields the field name/value pairs that a Transaction must have at least one of to ne returned
* @return a collection of Transactions that contain the specified fields with the input values
* @throws FrameworkException
*/
@Override
public Collection<Transaction> getTransactionsByFieldsOred(HashMap<String, Serializable> fields) throws FrameworkException {
UOW uow = null;
List<Transaction> results = new ArrayList<Transaction>();
try {
uow = new UOW();
Criteria transactionCriteria = new Criteria();
transactionCriteria.setTable(TransactionMeta.getName());
Criteria transactionFieldCriteria = new Criteria();
transactionFieldCriteria.setTable(TransactionFieldMeta.getName());
transactionFieldCriteria.addInnerCriteria(TransactionFieldMeta.TRANSACTION_ID, TransactionMeta.ID);
transactionCriteria.addAggregate(transactionFieldCriteria);
AtomicCriteria ac = new AtomicCriteria();
// add each field in the field map to the query
AtomicCriteria firstCriteria = null;
for (Map.Entry<String, Serializable> field : fields.entrySet()) {
// if there is no field defined, skip to the next entry
if ((field.getKey() == null) || field.getKey().isEmpty()) {
continue;
}
AtomicCriteria ac1 = new AtomicCriteria();
ac1.addCriteria(TransactionFieldMeta.FIELD_NAME, field.getKey());
if (field.getValue() == null) {
ac1.addCriteria(TransactionFieldMeta.VALUE, Criteria.RELATIONAL_IS_NULL);
} else {
ac1.addCriteria(TransactionFieldMeta.VALUE, field.getValue());
}
if (firstCriteria != null) {
firstCriteria.addOrAtomic(ac1);
} else {
firstCriteria = ac1;
ac.addAtomic(firstCriteria);
}
}
transactionFieldCriteria.addAtomic(ac);
for (Object result : uow.query(transactionCriteria)) {
if (!(result instanceof Transaction)) {
continue;
}
results.add((Transaction) result);
}
} finally {
if (uow != null) {
uow.close();
}
}
return results;
}
use of org.jaffa.transaction.apis.data.TransactionCriteria in project jaffa-framework by jaffa-projects.
the class JaffaTransactionMessageService method getInboundByTypeSubTypeAndFields.
/**
* Gets all inbound Transactions that have the specified type, subType and fields with the input values.
* If there are more than one value for a key, this will return fields that have any of the specified values.
*
* @param type the type of Transactions to return
* @param subType the subType of Transactions to return
* @param fields the field name/value pairs
* @return a collection of inbound Transactions of the input type and subType that contain the specified
* fields with the input values
* @throws FrameworkException
*/
@Override
public Collection<Transaction> getInboundByTypeSubTypeAndFields(String type, String subType, HashMap<String, String> fields) throws FrameworkException {
UOW uow = null;
Collection<Transaction> transactions = new ArrayList<Transaction>();
try {
uow = new UOW();
Criteria transactionCriteria = new Criteria();
// query for inbound Transaction with the input type and subType
transactionCriteria.setTable(TransactionMeta.getName());
transactionCriteria.addCriteria(TransactionMeta.TYPE, type);
transactionCriteria.addCriteria(TransactionMeta.SUB_TYPE, subType);
transactionCriteria.addCriteria(TransactionMeta.DIRECTION, Transaction.Direction.IN.name());
// add each field in the field map to the query
for (Map.Entry<String, String> field : fields.entrySet()) {
if ((field.getKey() == null) || field.getKey().isEmpty()) {
continue;
}
Criteria fieldCriteria = new Criteria();
fieldCriteria.setTable(TransactionFieldMeta.getName());
fieldCriteria.addInnerCriteria(TransactionFieldMeta.TRANSACTION_ID, TransactionMeta.ID);
fieldCriteria.addCriteria(TransactionFieldMeta.FIELD_NAME, field.getKey());
fieldCriteria.addCriteria(TransactionFieldMeta.VALUE, field.getValue());
transactionCriteria.addAggregate(fieldCriteria);
}
for (Object result : uow.query(transactionCriteria)) {
if (!(result instanceof Transaction)) {
continue;
}
transactions.add((Transaction) result);
}
} finally {
if (uow != null) {
uow.close();
}
}
return transactions;
}
use of org.jaffa.transaction.apis.data.TransactionCriteria in project jaffa-framework by jaffa-projects.
the class JaffaTransactionMessageService method getTransactionByFields.
/**
* Gets the Transaction that has the specified fields with the input values.
*
* @param fields the field name/value pairs
* @return the Transaction that contains the specified fields with the input values
* @throws FrameworkException
*/
@Override
public Transaction getTransactionByFields(HashMap<String, String> fields) throws FrameworkException {
UOW uow = null;
Transaction transaction = null;
try {
uow = new UOW();
Criteria transactionCriteria = new Criteria();
transactionCriteria.setTable(TransactionMeta.getName());
// add each field in the field map to the query
for (Map.Entry<String, String> field : fields.entrySet()) {
if ((field.getKey() == null) || field.getKey().isEmpty()) {
continue;
}
Criteria fieldCriteria = new Criteria();
fieldCriteria.setTable(TransactionFieldMeta.getName());
fieldCriteria.addInnerCriteria(TransactionFieldMeta.TRANSACTION_ID, TransactionMeta.ID);
fieldCriteria.addCriteria(TransactionFieldMeta.FIELD_NAME, field.getKey());
fieldCriteria.addCriteria(TransactionFieldMeta.VALUE, field.getValue());
transactionCriteria.addAggregate(fieldCriteria);
}
for (Object result : uow.query(transactionCriteria)) {
if (!(result instanceof Transaction)) {
continue;
}
transaction = (Transaction) result;
break;
}
} finally {
if (uow != null) {
uow.close();
}
}
return transaction;
}
Aggregations