Search in sources :

Example 1 with TransactionCriteria

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;
}
Also used : TransactionService(org.jaffa.transaction.apis.TransactionService) TransactionFieldCriteria(org.jaffa.transaction.apis.data.TransactionFieldCriteria) ArrayList(java.util.ArrayList) TransactionQueryResponse(org.jaffa.transaction.apis.data.TransactionQueryResponse) TransactionCriteria(org.jaffa.transaction.apis.data.TransactionCriteria) Transaction(org.jaffa.transaction.domain.Transaction) TransactionGraph(org.jaffa.transaction.apis.data.TransactionGraph) UOW(org.jaffa.persistence.UOW) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) StringCriteriaField(org.jaffa.components.finder.StringCriteriaField)

Example 2 with TransactionCriteria

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;
}
Also used : Transaction(org.jaffa.transaction.domain.Transaction) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) Criteria(org.jaffa.persistence.Criteria) TransactionFieldCriteria(org.jaffa.transaction.apis.data.TransactionFieldCriteria) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) TransactionCriteria(org.jaffa.transaction.apis.data.TransactionCriteria) UOW(org.jaffa.persistence.UOW) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 3 with TransactionCriteria

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;
}
Also used : Serializable(java.io.Serializable) Transaction(org.jaffa.transaction.domain.Transaction) ArrayList(java.util.ArrayList) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) Criteria(org.jaffa.persistence.Criteria) TransactionFieldCriteria(org.jaffa.transaction.apis.data.TransactionFieldCriteria) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) TransactionCriteria(org.jaffa.transaction.apis.data.TransactionCriteria) UOW(org.jaffa.persistence.UOW) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 4 with TransactionCriteria

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;
}
Also used : Transaction(org.jaffa.transaction.domain.Transaction) ArrayList(java.util.ArrayList) Criteria(org.jaffa.persistence.Criteria) TransactionFieldCriteria(org.jaffa.transaction.apis.data.TransactionFieldCriteria) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) TransactionCriteria(org.jaffa.transaction.apis.data.TransactionCriteria) UOW(org.jaffa.persistence.UOW) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 5 with TransactionCriteria

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;
}
Also used : Transaction(org.jaffa.transaction.domain.Transaction) Criteria(org.jaffa.persistence.Criteria) TransactionFieldCriteria(org.jaffa.transaction.apis.data.TransactionFieldCriteria) AtomicCriteria(org.jaffa.persistence.AtomicCriteria) TransactionCriteria(org.jaffa.transaction.apis.data.TransactionCriteria) UOW(org.jaffa.persistence.UOW) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Aggregations

UOW (org.jaffa.persistence.UOW)6 TransactionCriteria (org.jaffa.transaction.apis.data.TransactionCriteria)6 TransactionFieldCriteria (org.jaffa.transaction.apis.data.TransactionFieldCriteria)6 Transaction (org.jaffa.transaction.domain.Transaction)6 ArrayList (java.util.ArrayList)5 HashMap (java.util.HashMap)5 LinkedHashMap (java.util.LinkedHashMap)5 Map (java.util.Map)5 AtomicCriteria (org.jaffa.persistence.AtomicCriteria)5 Criteria (org.jaffa.persistence.Criteria)5 Serializable (java.io.Serializable)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 StringCriteriaField (org.jaffa.components.finder.StringCriteriaField)1 TransactionService (org.jaffa.transaction.apis.TransactionService)1 TransactionGraph (org.jaffa.transaction.apis.data.TransactionGraph)1 TransactionQueryResponse (org.jaffa.transaction.apis.data.TransactionQueryResponse)1