Example usage for org.hibernate.criterion Projections distinct

List of usage examples for org.hibernate.criterion Projections distinct

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections distinct.

Prototype

public static Projection distinct(Projection projection) 

Source Link

Document

Create a distinct projection from a projection.

Usage

From source file:org.opennms.netmgt.bsm.persistence.impl.BusinessServiceDaoImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override//from  w ww  . jav  a  2  s.  c om
public List<BusinessServiceEntity> findMatching(final org.opennms.core.criteria.Criteria criteria) {
    final HibernateCallback<List<BusinessServiceEntity>> callback = session -> {
        // If limit and offset are set, we MUST manually limit the result, as by default
        // hibernate would return multiple rows for each entity if the criteria has alias/join definitions
        // or the entity fetched by the criteria has EAGER loaded relationships and this relationship is 1:n and
        // there is more than 1 elements (e.g. each parent has 3 children). Order and Limit definitions are not
        // working in this case, using the default implementation of findMatching. See: BSM-104, NMS-8079
        if (criteria.getLimit() != null || criteria.getOffset() != null) {
            final Criteria idCriteria = m_criteriaConverter.convert(criteria, session);
            idCriteria.setProjection(Projections.distinct(Projections.projectionList()
                    .add(Projections.property("id")).add(Projections.property("name"))));
            List<Object[]> idList = idCriteria.list();
            if (!idList.isEmpty()) {
                Criteria entityCriteria = session.createCriteria(criteria.getCriteriaClass());
                entityCriteria.add(
                        Restrictions.in("id", idList.stream().map(e -> e[0]).collect(Collectors.toList())));
                entityCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
                return entityCriteria.list();
            }
            return Collections.emptyList();
        } else { // if no offset, limit is set, we can leverage the DISTINCT_ROOT_ENTITY result transformer behaviour.
            // Manually override default. Otherwise for each 1 - n relationship (with n > 1), n entities are returned instead of 1
            final Criteria hibernateCriteria = m_criteriaConverter.convert(criteria, session);
            hibernateCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            return (List<BusinessServiceEntity>) (hibernateCriteria.list());
        }
    };
    return getHibernateTemplate().execute(callback);
}

From source file:org.opennms.netmgt.dao.hibernate.AssetRecordDaoHibernate.java

License:Open Source License

@Override
public List<OnmsAssetRecord> getDistinctProperties() {
    DetachedCriteria criteria = DetachedCriteria.forClass(OnmsAssetRecord.class);
    ProjectionList projList = Projections.projectionList();

    // projList.add(Projections.alias(Projections.property("geolocation"), "geolocation"));
    projList.add(Projections.alias(Projections.property("additionalhardware"), "additionalhardware"));
    projList.add(Projections.alias(Projections.property("geolocation.address1"), "address1"));
    projList.add(Projections.alias(Projections.property("geolocation.address2"), "address2"));
    projList.add(Projections.alias(Projections.property("admin"), "admin"));
    projList.add(Projections.alias(Projections.property("assetNumber"), "assetNumber"));
    projList.add(Projections.alias(Projections.property("autoenable"), "autoenable"));
    projList.add(Projections.alias(Projections.property("building"), "building"));
    projList.add(Projections.alias(Projections.property("category"), "category"));
    projList.add(Projections.alias(Projections.property("circuitId"), "circuitId"));
    projList.add(Projections.alias(Projections.property("geolocation.city"), "city"));
    projList.add(Projections.alias(Projections.property("comment"), "comment"));
    projList.add(Projections.alias(Projections.property("connection"), "connection"));
    projList.add(Projections.alias(Projections.property("geolocation.longitude"), "longitude"));
    projList.add(Projections.alias(Projections.property("geolocation.latitude"), "latitude"));
    projList.add(Projections.alias(Projections.property("cpu"), "cpu"));
    projList.add(Projections.alias(Projections.property("department"), "department"));
    projList.add(Projections.alias(Projections.property("description"), "description"));
    projList.add(Projections.alias(Projections.property("displayCategory"), "displayCategory"));
    projList.add(Projections.alias(Projections.property("division"), "division"));
    projList.add(Projections.alias(Projections.property("enable"), "enable"));
    projList.add(Projections.alias(Projections.property("floor"), "floor"));
    projList.add(Projections.alias(Projections.property("hdd1"), "hdd1"));
    projList.add(Projections.alias(Projections.property("hdd2"), "hdd2"));
    projList.add(Projections.alias(Projections.property("hdd3"), "hdd3"));
    projList.add(Projections.alias(Projections.property("hdd4"), "hdd4"));
    projList.add(Projections.alias(Projections.property("hdd5"), "hdd5"));
    projList.add(Projections.alias(Projections.property("hdd6"), "hdd6"));
    projList.add(Projections.alias(Projections.property("inputpower"), "inputpower"));
    projList.add(Projections.alias(Projections.property("lease"), "lease"));
    projList.add(Projections.alias(Projections.property("maintcontract"), "maintcontract"));
    projList.add(Projections.alias(Projections.property("manufacturer"), "manufacturer"));
    projList.add(Projections.alias(Projections.property("modelNumber"), "modelNumber"));
    projList.add(Projections.alias(Projections.property("notifyCategory"), "notifyCategory"));
    projList.add(Projections.alias(Projections.property("numpowersupplies"), "numpowersupplies"));
    projList.add(Projections.alias(Projections.property("operatingSystem"), "operatingSystem"));
    projList.add(Projections.alias(Projections.property("pollerCategory"), "pollerCategory"));
    projList.add(Projections.alias(Projections.property("port"), "port"));
    projList.add(Projections.alias(Projections.property("rack"), "rack"));
    projList.add(Projections.alias(Projections.property("ram"), "ram"));
    projList.add(Projections.alias(Projections.property("region"), "region"));
    projList.add(Projections.alias(Projections.property("room"), "room"));
    projList.add(Projections.alias(Projections.property("serialNumber"), "serialNumber"));
    projList.add(Projections.alias(Projections.property("slot"), "slot"));
    projList.add(Projections.alias(Projections.property("snmpcommunity"), "snmpcommunity"));
    projList.add(Projections.alias(Projections.property("geolocation.state"), "state"));
    projList.add(Projections.alias(Projections.property("storagectrl"), "storagectrl"));
    projList.add(Projections.alias(Projections.property("supportPhone"), "supportPhone"));
    projList.add(Projections.alias(Projections.property("thresholdCategory"), "thresholdCategory"));
    projList.add(Projections.alias(Projections.property("username"), "username"));
    projList.add(Projections.alias(Projections.property("vendor"), "vendor"));
    projList.add(Projections.alias(Projections.property("vendorAssetNumber"), "vendorAssetNumber"));
    projList.add(Projections.alias(Projections.property("vendorFax"), "vendorFax"));
    projList.add(Projections.alias(Projections.property("vendorPhone"), "vendorPhone"));
    projList.add(Projections.alias(Projections.property("geolocation.zip"), "zip"));
    projList.add(Projections.alias(Projections.property("vmwareManagedObjectId"), "vmwareManagedObjectId"));
    projList.add(Projections.alias(Projections.property("vmwareManagedEntityType"), "vmwareManagedEntityType"));
    projList.add(Projections.alias(Projections.property("vmwareManagementServer"), "vmwareManagementServer"));
    projList.add(Projections.alias(Projections.property("vmwareTopologyInfo"), "vmwareTopologyInfo"));
    projList.add(Projections.alias(Projections.property("vmwareState"), "vmwareState"));

    criteria.setProjection(Projections.distinct(projList));
    criteria.setResultTransformer(Transformers.aliasToBean(OnmsAssetRecord.class));

    @SuppressWarnings("unchecked")
    List<OnmsAssetRecord> result = (List<OnmsAssetRecord>) getHibernateTemplate().findByCriteria(criteria);
    return result;
}

From source file:org.opentaps.common.domain.order.PurchaseOrderLookupRepository.java

License:Open Source License

/** {@inheritDoc} */
public List<OrderViewForListing> findOrders() throws RepositoryException {

    // convert fromDateStr / thruDateStr into Timestamps if the string versions were given
    if (UtilValidate.isNotEmpty(fromDateStr)) {
        fromDate = UtilDate.toTimestamp(fromDateStr, timeZone, locale);
    }/*from  ww w .j  a  va2 s .  c om*/
    if (UtilValidate.isNotEmpty(thruDateStr)) {
        thruDate = UtilDate.toTimestamp(thruDateStr, timeZone, locale);
    }
    Session session = null;
    try {
        // get a hibernate session
        session = getInfrastructure().getSession();
        Criteria criteria = session.createCriteria(OrderHeader.class);

        // always filter by the current organization
        criteria.add(Restrictions.eq(OrderHeader.Fields.billToPartyId.name(), organizationPartyId));

        // filters by order type, we only want purchase order
        criteria.add(Restrictions.eq(OrderHeader.Fields.orderTypeId.name(), OrderTypeConstants.PURCHASE_ORDER));

        // set the from/thru date filter if they were given
        if (fromDate != null) {
            criteria.add(Restrictions.ge(OrderHeader.Fields.orderDate.name(), fromDate));
        }
        if (thruDate != null) {
            criteria.add(Restrictions.le(OrderHeader.Fields.orderDate.name(), thruDate));
        }

        // filter the role assoc, there is only one supplier role per order
        Criteria roleCriteria = criteria.createAlias("orderRoles", "or");
        roleCriteria.add(Restrictions.eq("or.id." + OrderRole.Fields.roleTypeId.name(),
                RoleTypeConstants.BILL_FROM_VENDOR));

        // filter by order status
        if (findDesiredOnly) {
            List<String> statuses = UtilMisc.toList(StatusItemConstants.OrderStatus.ORDER_APPROVED,
                    StatusItemConstants.OrderStatus.ORDER_CREATED, StatusItemConstants.OrderStatus.ORDER_HOLD);
            criteria.add(Restrictions.in(OrderHeader.Fields.statusId.name(), statuses));
        }

        // filter by the given orderId string
        if (UtilValidate.isNotEmpty(orderId)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderId.name(), orderId, MatchMode.START));
        }

        // filter by exact matching status, if a statusId was given
        if (UtilValidate.isNotEmpty(statusId)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.statusId.name(), statusId));
        }

        // filter by the user who created the order if given
        if (UtilValidate.isNotEmpty(createdBy)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.createdBy.name(), createdBy));
        }

        // filter by the given orderName string
        if (UtilValidate.isNotEmpty(orderName)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderName.name(), orderName, MatchMode.START));
        }

        // filter by the given supplierPartyId string, from the OrderRole entity
        if (UtilValidate.isNotEmpty(supplierPartyId)) {
            roleCriteria.add(Restrictions.ilike("or.id." + OrderRole.Fields.partyId.name(), supplierPartyId,
                    MatchMode.START));
        }

        // filter by product, if given
        criteria.createAlias("orderItems", "oi");
        if (UtilValidate.isNotEmpty(productPattern)) {
            try {
                // try to get product by using productPattern as productId
                Product product = getProductRepository().getProductById(productPattern);
                criteria.add(
                        Restrictions.eq("oi." + OrderItem.Fields.productId.name(), product.getProductId()));
            } catch (EntityNotFoundException e) {
                // could not get the product by using productPattern as productId
                // find all the products that may match
                String likePattern = "%" + productPattern + "%";
                EntityCondition conditionList = EntityCondition.makeCondition(EntityOperator.OR,
                        EntityCondition.makeCondition(ProductAndGoodIdentification.Fields.productId.getName(),
                                EntityOperator.LIKE, likePattern),
                        EntityCondition.makeCondition(
                                ProductAndGoodIdentification.Fields.internalName.getName(), EntityOperator.LIKE,
                                likePattern),
                        EntityCondition.makeCondition(ProductAndGoodIdentification.Fields.productName.getName(),
                                EntityOperator.LIKE, likePattern),
                        EntityCondition.makeCondition(ProductAndGoodIdentification.Fields.comments.getName(),
                                EntityOperator.LIKE, likePattern),
                        EntityCondition.makeCondition(ProductAndGoodIdentification.Fields.description.getName(),
                                EntityOperator.LIKE, likePattern),
                        EntityCondition.makeCondition(
                                ProductAndGoodIdentification.Fields.longDescription.getName(),
                                EntityOperator.LIKE, likePattern),
                        EntityCondition.makeCondition(ProductAndGoodIdentification.Fields.idValue.getName(),
                                EntityOperator.LIKE, likePattern));
                List<ProductAndGoodIdentification> products = findList(ProductAndGoodIdentification.class,
                        conditionList);
                if (products.size() > 0) {
                    criteria.add(Restrictions.in("oi." + OrderItem.Fields.productId.name(), Entity
                            .getDistinctFieldValues(products, ProductAndGoodIdentification.Fields.productId)));
                }
            }
        }

        // specify the fields to return
        criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property(OrderHeader.Fields.orderId.name())))
                .add(Projections.property(OrderHeader.Fields.orderName.name()))
                .add(Projections.property(OrderHeader.Fields.statusId.name()))
                .add(Projections.property(OrderHeader.Fields.grandTotal.name()))
                .add(Projections.property(OrderHeader.Fields.orderDate.name()))
                .add(Projections.property(OrderHeader.Fields.currencyUom.name()))
                .add(Projections.property("or.id." + OrderRole.Fields.partyId.name())));

        // set the order by
        if (orderBy == null) {
            orderBy = Arrays.asList(OrderHeader.Fields.orderDate.desc());
        }
        // some substitution is needed to fit the hibernate field names
        // this also maps the calculated fields and indicates the non sortable fields
        Map<String, String> subs = new HashMap<String, String>();
        subs.put("partyId", "or.id.partyId");
        subs.put("partyName", "or.id.partyId");
        subs.put("orderDateString", "orderDate");
        subs.put("orderNameId", "orderId");
        subs.put("statusDescription", "statusId");
        HibernateUtil.setCriteriaOrder(criteria, orderBy, subs);

        ScrollableResults results = null;
        List<OrderViewForListing> results2 = new ArrayList<OrderViewForListing>();
        try {
            // fetch the paginated results
            results = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
            if (usePagination()) {
                results.setRowNumber(getPageStart());
            } else {
                results.first();
            }

            // convert them into OrderViewForListing objects which will also calculate or format some fields for display
            Object[] o = results.get();
            int n = 0; // number of results actually read
            while (o != null) {
                OrderViewForListing r = new OrderViewForListing();
                r.initRepository(this);
                int i = 0;
                r.setOrderId((String) o[i++]);
                r.setOrderName((String) o[i++]);
                r.setStatusId((String) o[i++]);
                r.setGrandTotal((BigDecimal) o[i++]);
                r.setOrderDate((Timestamp) o[i++]);
                r.setCurrencyUom((String) o[i++]);
                r.setPartyId((String) o[i++]);
                r.calculateExtraFields(getDelegator(), timeZone, locale);
                results2.add(r);
                n++;

                if (!results.next()) {
                    break;
                }
                if (usePagination() && n >= getPageSize()) {
                    break;
                }
                o = results.get();
            }
            results.last();
            // note: row number starts at 0
            setResultSize(results.getRowNumber() + 1);
        } finally {
            results.close();
        }

        return results2;

    } catch (InfrastructureException e) {
        throw new RepositoryException(e);
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:org.opentaps.common.domain.order.SalesOrderLookupRepository.java

License:Open Source License

/** {@inheritDoc} */
public List<OrderViewForListing> findOrders() throws RepositoryException {

    // convert fromDateStr / thruDateStr into Timestamps if the string versions were given
    if (UtilValidate.isNotEmpty(fromDateStr)) {
        fromDate = UtilDate.toTimestamp(fromDateStr, timeZone, locale);
    }//from w w  w .ja v  a 2s . co m
    if (UtilValidate.isNotEmpty(thruDateStr)) {
        thruDate = UtilDate.toTimestamp(thruDateStr, timeZone, locale);
    }
    Session session = null;
    try {
        // get a hibernate session
        session = getInfrastructure().getSession();
        Criteria criteria = session.createCriteria(OrderHeader.class);

        // always filter by the current organization
        criteria.add(Restrictions.eq(OrderHeader.Fields.billFromPartyId.name(), organizationPartyId));

        // filters by order type, we only want sales order
        criteria.add(Restrictions.eq(OrderHeader.Fields.orderTypeId.name(), OrderTypeConstants.SALES_ORDER));

        // set the from/thru date filter if they were given
        if (fromDate != null) {
            criteria.add(Restrictions.ge(OrderHeader.Fields.orderDate.name(), fromDate));
        }
        if (thruDate != null) {
            criteria.add(Restrictions.le(OrderHeader.Fields.orderDate.name(), thruDate));
        }

        // filter the role assoc, there is only one customer role per order
        Criteria roleCriteria = criteria.createAlias("orderRoles", "or");
        roleCriteria.add(Restrictions.eq("or.id." + OrderRole.Fields.roleTypeId.name(),
                RoleTypeConstants.BILL_TO_CUSTOMER));

        // filter orders created by the given user (TODO: what use is viewPref as a string here, should be a boolean flag instead ?)
        if (UtilValidate.isNotEmpty(viewPref)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.createdBy.name(), userLoginId));
        }

        // filter by order status
        if (findActiveOnly || findDesiredOnly) {
            List<String> statuses = UtilMisc.toList(StatusItemConstants.OrderStatus.ORDER_APPROVED,
                    StatusItemConstants.OrderStatus.ORDER_CREATED, StatusItemConstants.OrderStatus.ORDER_HOLD);
            if (findActiveOnly) {
                statuses.add(StatusItemConstants.OrderStatus.ORDER_PROCESSING);
            }

            criteria.add(Restrictions.in(OrderHeader.Fields.statusId.name(), statuses));
        }

        // filter by the given orderId string
        if (UtilValidate.isNotEmpty(orderId)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderId.name(), orderId, MatchMode.START));
        }
        // filter by the given externalOrderId string
        if (UtilValidate.isNotEmpty(externalOrderId)) {
            criteria.add(
                    Restrictions.ilike(OrderHeader.Fields.externalId.name(), externalOrderId, MatchMode.START));
        }

        // filter by exact matching status, if a statusId was given
        if (UtilValidate.isNotEmpty(statusId)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.statusId.name(), statusId));
        }

        // filter by product store if given
        if (UtilValidate.isNotEmpty(productStoreId)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.productStoreId.name(), productStoreId));
        }

        // filter by the user who created the order if given
        if (UtilValidate.isNotEmpty(createdBy)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.createdBy.name(), createdBy));
        }

        // filter by the given orderName string
        if (UtilValidate.isNotEmpty(orderName)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderName.name(), orderName, MatchMode.START));
        }

        // filter by the given customerPartyId string, from the OrderRole entity
        if (UtilValidate.isNotEmpty(customerPartyId)) {
            roleCriteria.add(Restrictions.ilike("or.id." + OrderRole.Fields.partyId.name(), customerPartyId,
                    MatchMode.START));
        }

        // filter by the given purchaseOrderId string, from the OrderItem entity
        criteria.createAlias("orderItems", "oi");
        if (UtilValidate.isNotEmpty(purchaseOrderId)) {
            criteria.add(Restrictions.ilike("oi." + OrderItem.Fields.correspondingPoId.name(), purchaseOrderId,
                    MatchMode.START));
        }

        // filter by the given productId string, from the OrderItem entity
        if (UtilValidate.isNotEmpty(productId)) {
            criteria.add(
                    Restrictions.ilike("oi." + OrderItem.Fields.productId.name(), productId, MatchMode.START));
        }

        // filter by the given shippingAddress string, from the OrderItemShipGroup entity
        criteria.createAlias("orderItemShipGroups", "oisg");
        Criteria address = criteria.createCriteria("oisg.postalAddress");
        if (UtilValidate.isNotEmpty(shippingAddress)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.address1.name(), shippingAddress,
                    MatchMode.ANYWHERE));
        }

        if (UtilValidate.isNotEmpty(shippingCountry)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.countryGeoId.name(), shippingCountry,
                    MatchMode.EXACT));
        }

        if (UtilValidate.isNotEmpty(shippingStateProvince)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.stateProvinceGeoId.name(),
                    shippingStateProvince, MatchMode.EXACT));
        }

        if (UtilValidate.isNotEmpty(shippingCity)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.city.name(), shippingCity, MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingPostalCode)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.postalCode.name(), shippingPostalCode,
                    MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingToName)) {
            address.add(
                    Restrictions.ilike(PostalAddress.Fields.toName.name(), shippingToName, MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingAttnName)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.attnName.name(), shippingAttnName,
                    MatchMode.START));
        }
        // filter by the given lotId and serialNumber, which may come either from
        // OrderItemShipGrpInvRes -> InventoryItem
        // or
        // ItemIssuance -> InventoryItem
        criteria.createCriteria("orderItemShipGrpInvReses", Criteria.LEFT_JOIN).createCriteria("inventoryItem",
                "rii", Criteria.LEFT_JOIN);
        criteria.createCriteria("itemIssuances", Criteria.LEFT_JOIN).createCriteria("inventoryItem", "iii",
                Criteria.LEFT_JOIN);
        if (UtilValidate.isNotEmpty(lotId)) {
            criteria.add(Restrictions.or(
                    Restrictions.ilike("rii." + InventoryItem.Fields.lotId.name(), lotId, MatchMode.START),
                    Restrictions.ilike("iii." + InventoryItem.Fields.lotId.name(), lotId, MatchMode.START)));
        }
        if (UtilValidate.isNotEmpty(serialNumber)) {
            criteria.add(Restrictions.or(
                    Restrictions.ilike("rii." + InventoryItem.Fields.serialNumber.name(), serialNumber,
                            MatchMode.START),
                    Restrictions.ilike("iii." + InventoryItem.Fields.serialNumber.name(), serialNumber,
                            MatchMode.START)));
        }

        criteria.createCriteria("trackingCodeOrders", "tco", Criteria.LEFT_JOIN);

        // specify the fields to return
        criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property(OrderHeader.Fields.orderId.name())))
                .add(Projections.property(OrderHeader.Fields.orderName.name()))
                .add(Projections.property(OrderHeader.Fields.statusId.name()))
                .add(Projections.property(OrderHeader.Fields.grandTotal.name()))
                .add(Projections.property(OrderHeader.Fields.orderDate.name()))
                .add(Projections.property(OrderHeader.Fields.currencyUom.name()))
                .add(Projections.property("or.id." + OrderRole.Fields.partyId.name()))
                .add(Projections.property("oi." + OrderItem.Fields.correspondingPoId.name()))
                .add(Projections.property("tco." + TrackingCodeOrder.Fields.trackingCodeId.name())));
        Debug.logInfo("criteria.toString() : " + criteria.toString(), MODULE);
        // set the order by
        if (orderBy == null) {
            orderBy = Arrays.asList(OrderHeader.Fields.orderDate.desc());
        }
        // some substitution is needed to fit the hibernate field names
        // this also maps the calculated fields and indicates the non sortable fields
        Map<String, String> subs = new HashMap<String, String>();
        subs.put("partyId", "or.id.partyId");
        subs.put("partyName", "or.id.partyId");
        subs.put("orderDateString", "orderDate");
        subs.put("shipByDateString", null);
        subs.put("orderNameId", "orderId");
        subs.put("statusDescription", "statusId");
        subs.put("correspondingPoId", "oi.correspondingPoId");
        subs.put("trackingCodeId", "tco.trackingCodeId");
        HibernateUtil.setCriteriaOrder(criteria, orderBy, subs);

        ScrollableResults results = null;
        List<OrderViewForListing> results2 = new ArrayList<OrderViewForListing>();
        try {
            // fetch the paginated results
            results = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
            if (usePagination()) {
                results.setRowNumber(getPageStart());
            } else {
                results.first();
            }

            // convert them into OrderViewForListing objects which will also calculate or format some fields for display
            Object[] o = results.get();
            int n = 0; // number of results actually read
            while (o != null) {
                OrderViewForListing r = new OrderViewForListing();
                r.initRepository(this);
                int i = 0;
                r.setOrderId((String) o[i++]);
                r.setOrderName((String) o[i++]);
                r.setStatusId((String) o[i++]);
                r.setGrandTotal((BigDecimal) o[i++]);
                r.setOrderDate((Timestamp) o[i++]);
                r.setCurrencyUom((String) o[i++]);
                r.setPartyId((String) o[i++]);
                r.setCorrespondingPoId((String) o[i++]);
                r.setTrackingCodeId((String) o[i++]);
                r.calculateExtraFields(getDelegator(), timeZone, locale);
                results2.add(r);
                n++;

                if (!results.next()) {
                    break;
                }
                if (usePagination() && n >= getPageSize()) {
                    break;
                }
                o = results.get();
            }
            results.last();
            // note: row number starts at 0
            setResultSize(results.getRowNumber() + 1);
        } finally {
            if (results != null) {
                results.close();
            }
        }

        return results2;

    } catch (InfrastructureException e) {
        Debug.logError(e, MODULE);
        throw new RepositoryException(e);
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:org.opentaps.financials.domain.billing.invoice.InvoiceLookupRepository.java

License:Open Source License

/** {@inheritDoc} */
public List<InvoiceViewForListing> findInvoices() throws RepositoryException {

    // convert from / thru from String into Timestamps if the string versions were given
    if (UtilValidate.isNotEmpty(fromInvoiceDateString)) {
        fromInvoiceDate = UtilDate.toTimestamp(fromInvoiceDateString, timeZone, locale);
    }//from  ww w .j ava  2 s .  c o m
    if (UtilValidate.isNotEmpty(thruInvoiceDateString)) {
        thruInvoiceDate = UtilDate.toTimestamp(thruInvoiceDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(fromDueDateString)) {
        fromDueDate = UtilDate.toTimestamp(fromDueDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(thruDueDateString)) {
        thruDueDate = UtilDate.toTimestamp(thruDueDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(fromPaidDateString)) {
        fromPaidDate = UtilDate.toTimestamp(fromPaidDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(thruPaidDateString)) {
        thruPaidDate = UtilDate.toTimestamp(thruPaidDateString, timeZone, locale);
    }
    Session session = null;
    try {
        // get a hibernate session
        session = getInfrastructure().getSession();
        Criteria criteria = session.createCriteria(Invoice.class);

        // always filter by invoice type
        criteria.add(Restrictions.eq(Invoice.Fields.invoiceTypeId.name(), invoiceTypeId));

        // some id filters
        if (UtilValidate.isNotEmpty(partyId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.partyId.name(), partyId));
        }
        if (UtilValidate.isNotEmpty(partyIdFrom)) {
            criteria.add(Restrictions.eq(Invoice.Fields.partyIdFrom.name(), partyIdFrom));
        }
        if (UtilValidate.isNotEmpty(invoiceId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.invoiceId.name(), invoiceId));
        }
        if (UtilValidate.isNotEmpty(statusId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.statusId.name(), statusId));
        }
        if (UtilValidate.isNotEmpty(processingStatusId)) {
            // this is a special case where we want an empty status
            if ("_NA_".equals(processingStatusId)) {
                criteria.add(Restrictions.eq(Invoice.Fields.processingStatusId.name(), null));
            } else {
                criteria.add(Restrictions.eq(Invoice.Fields.processingStatusId.name(), processingStatusId));
            }
        }

        // set the from/thru date filter if they were given
        if (fromInvoiceDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.invoiceDate.name(), fromInvoiceDate));
        }
        if (thruInvoiceDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.invoiceDate.name(), thruInvoiceDate));
        }

        if (fromDueDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.dueDate.name(), fromDueDate));
        }
        if (thruDueDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.dueDate.name(), thruDueDate));
        }

        if (fromPaidDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.paidDate.name(), fromPaidDate));
        }
        if (thruPaidDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.paidDate.name(), thruPaidDate));
        }

        // set the from/thru amount filter if they were given
        if (fromAmount != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.invoiceTotal.name(), fromAmount));
        }
        if (thruAmount != null) {
            criteria.add(Restrictions.le(Invoice.Fields.invoiceTotal.name(), thruAmount));
        }

        if (fromOpenAmount != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.openAmount.name(), fromOpenAmount));
        }
        if (thruOpenAmount != null) {
            criteria.add(Restrictions.le(Invoice.Fields.openAmount.name(), thruOpenAmount));
        }

        // set the other like filters if they were given
        if (UtilValidate.isNotEmpty(referenceNumber)) {
            criteria.add(Restrictions.ilike(Invoice.Fields.referenceNumber.name(), referenceNumber,
                    MatchMode.ANYWHERE));
        }
        if (UtilValidate.isNotEmpty(message)) {
            criteria.add(Restrictions.ilike(Invoice.Fields.invoiceMessage.name(), message, MatchMode.ANYWHERE));
        }
        // order Id search needs a join with OrderItemBilling
        if (UtilValidate.isNotEmpty(orderId)) {
            criteria.createAlias("orderItemBillings", "oib");
            criteria.add(Restrictions.eq("oib." + OrderItemBilling.Fields.orderId.name(), orderId));
        }
        // item description search needs a join with InvoiceItem
        if (UtilValidate.isNotEmpty(itemDescription)) {
            criteria.createAlias("invoiceItems", "ii");
            criteria.add(Restrictions.ilike("ii." + InvoiceItem.Fields.description.name(), itemDescription,
                    MatchMode.ANYWHERE));
        }

        // TODO: accounting tags

        // specify the fields to return
        criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property(Invoice.Fields.invoiceId.name())))
                .add(Projections.property(Invoice.Fields.partyId.name()))
                .add(Projections.property(Invoice.Fields.partyIdFrom.name()))
                .add(Projections.property(Invoice.Fields.statusId.name()))
                .add(Projections.property(Invoice.Fields.processingStatusId.name()))
                .add(Projections.property(Invoice.Fields.invoiceDate.name()))
                .add(Projections.property(Invoice.Fields.dueDate.name()))
                .add(Projections.property(Invoice.Fields.currencyUomId.name()))
                .add(Projections.property(Invoice.Fields.invoiceTotal.name()))
                .add(Projections.property(Invoice.Fields.openAmount.name()))
                .add(Projections.property(Invoice.Fields.referenceNumber.name())));

        // set the order by
        if (orderBy == null) {
            orderBy = Arrays.asList(Invoice.Fields.invoiceDate.desc());
        }
        // some substitution is needed to fit the hibernate field names
        // this also maps the calculated fields and indicates the non sortable fields
        Map<String, String> subs = new HashMap<String, String>();
        subs.put("partyName", "partyId");
        subs.put("partyNameFrom", "partyIdFrom");
        subs.put("invoiceDateString", "invoiceDate");
        subs.put("dueDateString", "dueDate");
        subs.put("statusDescription", "statusId");
        subs.put("processingStatusDescription", "processingStatusId");
        HibernateUtil.setCriteriaOrder(criteria, orderBy, subs);

        ScrollableResults results = null;
        List<InvoiceViewForListing> results2 = new ArrayList<InvoiceViewForListing>();
        try {
            // fetch the paginated results
            results = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
            if (usePagination()) {
                results.setRowNumber(getPageStart());
            }

            // convert them into InvoiceViewForListing objects which will also calculate or format some fields for display
            Object[] o = results.get();
            int n = 0; // number of results actually read
            while (o != null) {
                InvoiceViewForListing r = new InvoiceViewForListing();
                r.initRepository(this);
                int i = 0;
                r.setInvoiceId((String) o[i++]);
                r.setPartyId((String) o[i++]);
                r.setPartyIdFrom((String) o[i++]);
                r.setStatusId((String) o[i++]);
                r.setProcessingStatusId((String) o[i++]);
                r.setInvoiceDate((Timestamp) o[i++]);
                r.setDueDate((Timestamp) o[i++]);
                r.setCurrencyUomId((String) o[i++]);
                r.setInvoiceTotal((BigDecimal) o[i++]);
                r.setOpenAmount((BigDecimal) o[i++]);
                r.setReferenceNumber((String) o[i++]);
                r.calculateExtraFields(getDelegator(), timeZone, locale);
                results2.add(r);
                n++;

                if (!results.next()) {
                    break;
                }
                if (usePagination() && n >= getPageSize()) {
                    break;
                }
                o = results.get();
            }
            results.last();
            // note: row number starts at 0
            setResultSize(results.getRowNumber() + 1);
        } finally {
            results.close();
        }

        return results2;

    } catch (InfrastructureException e) {
        throw new RepositoryException(e);
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:org.owasp.dependencytrack.dao.VulnerabilityDao.java

License:Open Source License

/**
 * Returns a list of Vulnerability objects for LibraryVersions
 * that have a dependency of the specified ApplicationVersion.
 *
 * @param applicationVersion The ApplicationVersion to retrieve vulnerability for
 * @return a List of Vulnerability objects
 *//*from w  w  w.ja  va 2  s  . co m*/
@SuppressWarnings("unchecked")
public List<VulnerableComponent> getVulnerableComponents(ApplicationVersion applicationVersion) {
    final Query query = sessionFactory.getCurrentSession()
            .createQuery("from ApplicationDependency where applicationVersion=:version");
    query.setParameter("version", applicationVersion);

    final List<VulnerableComponent> vulnerableComponents = new ArrayList<>();

    // Retrieve all of the library versions from the specified application version
    final List<LibraryVersion> libvers = new ArrayList<>();
    final List<ApplicationDependency> deps = query.list();
    for (ApplicationDependency dep : deps) {
        libvers.add(dep.getLibraryVersion());
    }

    // Iterate through the library versions looking for scan results
    for (LibraryVersion libraryVersion : libvers) {
        final Criteria criteria = sessionFactory.getCurrentSession().createCriteria(ScanResult.class);
        criteria.add(Expression.eq("libraryVersion", libraryVersion));
        final ProjectionList projList = Projections.projectionList();
        projList.add(Projections.property("libraryVersion"));
        projList.add(Projections.property("vulnerability"));
        criteria.setProjection(Projections.distinct(projList));
        final List<Object[]> results = criteria.list();
        final List<Vulnerability> vulns = new ArrayList<>();

        for (Object[] result : results) {
            for (Object object : result) {
                if (object instanceof Vulnerability) {
                    vulns.add((Vulnerability) object);
                }
            }
        }

        final VulnerableComponent vulnerableComponent = new VulnerableComponent();
        vulnerableComponent.setLibraryVersion(libraryVersion);
        vulnerableComponent.setVulnerabilities(vulns);
        // Add the VulnerableComponent to the list of vulnerableComponents to return
        vulnerableComponents.add(vulnerableComponent);
    }
    return vulnerableComponents;
}

From source file:org.owasp.dependencytrack.dao.VulnerabilityDao.java

License:Open Source License

public List<Vulnerability> getVulnsForLibraryVersion(LibraryVersion libraryVersion) {
    //todo: remove criteria and replace with HQL
    final Criteria criteria = sessionFactory.getCurrentSession().createCriteria(ScanResult.class);
    criteria.add(Expression.eq("libraryVersion", libraryVersion));
    final ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("libraryVersion"));
    projList.add(Projections.property("vulnerability"));
    criteria.setProjection(Projections.distinct(projList));
    final List<Object[]> results = criteria.list();
    final List<Vulnerability> vulns = new ArrayList<>();

    for (Object[] result : results) {
        for (Object object : result) {
            if (object instanceof Vulnerability) {
                vulns.add((Vulnerability) object);
            }//from   w w  w .  j av a2 s.c  o  m
        }
    }

    return vulns;
}

From source file:org.owasp.dependencytrack.dao.VulnerabilityDaoImpl.java

License:Open Source License

/**
 * Returns a list of Vulnerability objects for LibraryVersions that have a
 * dependency of the specified ApplicationVersion.
 *
 * @param applicationVersion//  w ww .j  a va 2 s .  c  o m
 *            The ApplicationVersion to retrieve vulnerability for
 * @return a List of Vulnerability objects
 */
@SuppressWarnings("unchecked")
public List<VulnerableComponent> getVulnerableComponents(final ApplicationVersion applicationVersion) {
    final Session session = getSession();
    final List<VulnerableComponent> vulnerableComponents = new ArrayList<>();
    // Retrieve all of the library versions from the specified application version
    final List<LibraryVersion> libvers = new ArrayList<>();
    final Query query = session.createQuery("from ApplicationDependency where applicationVersion=:version");
    query.setParameter("version", applicationVersion);
    final List<ApplicationDependency> deps = query.list();

    for (ApplicationDependency dep : deps) {
        libvers.add(dep.getLibraryVersion());
    }

    // Iterate through the library versions looking for scan results
    for (LibraryVersion libraryVersion : libvers) {
        final Criteria criteria = session.createCriteria(ScanResult.class);
        criteria.add(Restrictions.eq("libraryVersion", libraryVersion));
        final ProjectionList projList = Projections.projectionList();
        projList.add(Projections.property("libraryVersion"));
        projList.add(Projections.property("vulnerability"));
        criteria.setProjection(Projections.distinct(projList));
        final List<Object[]> results = criteria.list();
        final List<Vulnerability> vulns = new ArrayList<>();

        for (Object[] result : results) {
            for (Object object : result) {
                if (object instanceof Vulnerability) {
                    vulns.add((Vulnerability) object);
                }
            }
        }

        final VulnerableComponent vulnerableComponent = new VulnerableComponent();
        vulnerableComponent.setLibraryVersion(libraryVersion);
        vulnerableComponent.setVulnerabilities(vulns);
        // Add the VulnerableComponent to the list of vulnerableComponents to return
        vulnerableComponents.add(vulnerableComponent);
    }
    return vulnerableComponents;
}

From source file:org.owasp.dependencytrack.dao.VulnerabilityDaoImpl.java

License:Open Source License

public List<Vulnerability> getVulnsForLibraryVersion(final LibraryVersion libraryVersion) {
    final Session session = getSession();
    final Criteria criteria = session.createCriteria(ScanResult.class);
    criteria.add(Restrictions.eq("libraryVersion", libraryVersion));
    final ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("libraryVersion"));
    projList.add(Projections.property("vulnerability"));
    criteria.setProjection(Projections.distinct(projList));
    final List<Object[]> results = criteria.list();
    final List<Vulnerability> vulns = new ArrayList<>();

    for (Object[] result : results) {
        for (Object object : result) {
            if (object instanceof Vulnerability) {
                vulns.add((Vulnerability) object);
            }/*from w  ww.  java  2 s  . c  o m*/
        }
    }
    return vulns;

}

From source file:org.sakaiproject.signup.dao.SignupMeetingDaoImpl.java

License:Educational Community License

@Override
public List<String> getAllCategories(String siteId) throws DataAccessException {
    DetachedCriteria criteria = DetachedCriteria.forClass(SignupMeeting.class)
            .setProjection(Projections
                    .distinct(Projections.projectionList().add(Projections.property("category"), "category")))
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).addOrder(Order.asc("category"))
            .createCriteria("signupSites").add(Restrictions.eq("siteId", siteId));

    List<String> categorys = (List<String>) getHibernateTemplate().findByCriteria(criteria);

    if (categorys != null && !categorys.isEmpty()) {
        return categorys;
    }//  w w  w. j  a  va  2  s  .  c  o  m

    return null;
}