Example usage for org.hibernate ScrollMode SCROLL_INSENSITIVE

List of usage examples for org.hibernate ScrollMode SCROLL_INSENSITIVE

Introduction

In this page you can find the example usage for org.hibernate ScrollMode SCROLL_INSENSITIVE.

Prototype

ScrollMode SCROLL_INSENSITIVE

To view the source code for org.hibernate ScrollMode SCROLL_INSENSITIVE.

Click Source Link

Document

Requests a scrollable result which is insensitive to changes in the underlying data.

Usage

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  ww.ja  v a2s.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   w w  w.ja  v a2  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.xerela.provider.devices.DeviceResolutionElf.java

License:Mozilla Public License

/**
 * Populates a {@link PageData} with the results for the given criteria.
 * @param pageData The page to retrieve.
 * @param criteria The query./*from  w w  w  .j  av a2  s .  c o  m*/
 * @param sortColumn The sort column or <code>null</code>
 * @param descending <code>true</code> for descending sort, <code>false</code> otherwise.
 * @return The populated page.
 */
public static PageData populatePageData(PageData pageData, Criteria criteria, String sortColumn,
        boolean descending) {
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("populatePageData from criteria: " + criteria.toString()); //$NON-NLS-1$
    }

    criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);

    if (pageData.getOffset() == 0) {
        // Set the total result size into the page data.
        criteria.setProjection(Projections.count(ATTR_DEVICE_ID));
        Object uniqueResult = criteria.uniqueResult();
        if (uniqueResult instanceof Integer) {
            pageData.setTotal((Integer) uniqueResult);
        } else if (uniqueResult instanceof Long) {
            pageData.setTotal(((Long) uniqueResult).intValue());
        } else {
            pageData.setTotal(((BigInteger) uniqueResult).intValue());
        }

        criteria.setProjection(null);
    }

    if (sortColumn != null) {
        if (sortColumn.equals(ATTR_IP_ADDRESS)) {
            criteria.addOrder(descending ? Order.desc(ATTR_IP_HIGH) : Order.asc(ATTR_IP_HIGH))
                    .addOrder(descending ? Order.desc(ATTR_IP_LOW) : Order.asc(ATTR_IP_LOW));
        } else {
            criteria.addOrder((descending ? Order.desc(sortColumn.trim()) : Order.asc(sortColumn.trim())));
        }
    }

    List<ZDeviceLite> list = new ArrayList<ZDeviceLite>();
    ScrollableResults scroll = criteria.scroll();
    while (scroll.next()) {
        Object[] objects = scroll.get();
        list.add((ZDeviceLite) objects[0]);
    }
    scroll.close();

    pageData.setDevices(list.toArray(new ZDeviceLite[0]));

    return pageData;
}

From source file:org.xerela.provider.scheduler.Scheduler.java

License:Mozilla Public License

/** {@inheritDoc} */
public PageData getExecutionData(PageData pageData, String sortColumn, boolean descending) {
    Session session = SchedulerActivator.getSessionFactory().getCurrentSession();

    Criteria criteria = session.createCriteria(ExecutionData.class).add(Restrictions.isNotNull("startTime"))
            .setFirstResult(pageData.getOffset()).setMaxResults(pageData.getPageSize());

    if (pageData.getOffset() == 0) {
        // Set the total result size into the page data.
        criteria.setProjection(Projections.count("id"));

        Integer total = (Integer) criteria.uniqueResult();
        pageData.setTotal(total);//from w  w w  . j av  a2  s . com

        criteria.setProjection(null);
    }

    if (sortColumn != null) {
        criteria.addOrder((descending ? Order.desc(sortColumn.trim()) : Order.asc(sortColumn.trim())));
    }

    List<ExecutionData> list = new ArrayList<ExecutionData>();
    ScrollableResults scroll = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
    while (scroll.next()) {
        list.add((ExecutionData) scroll.get(0));
    }
    scroll.close();

    pageData.setExecutionData(list);

    return pageData;
}

From source file:org.xerela.provider.telemetry.TelemetryProvider.java

License:Mozilla Public License

/** {@inheritDoc} */
@SuppressWarnings({ "unchecked", "nls" })
public MacPageData getMacTable(MacPageData pageData, String ipAddress, String managedNetwork) {
    ZDeviceCore device = getDevice(ipAddress, managedNetwork);
    if (device == null) {
        pageData.setMacEntries(new MacTableEntry[0]);
        pageData.setTotal(0);/*from  w  ww .  j  av a  2  s . c om*/
        return pageData;
    }

    boolean ownTransaction = TransactionElf.beginOrJoinTransaction();
    try {
        Session session = TelemetryActivator.getSessionFactory().getCurrentSession();
        String fromClause = "FROM discovery_mac WHERE device_id = " + device.getDeviceId();
        SQLQuery query = session
                .createSQLQuery("SELECT mac_address, interface, vlan " + fromClause + " ORDER BY interface");
        query.addScalar("mac_address", Hibernate.LONG);
        query.addScalar("interface", Hibernate.STRING);
        query.addScalar("vlan", Hibernate.STRING);
        query.setFirstResult(pageData.getOffset()).setMaxResults(pageData.getPageSize());
        query.scroll(ScrollMode.SCROLL_INSENSITIVE);
        List<Object[]> resultList = (List<Object[]>) query.list();
        if (resultList == null || resultList.isEmpty()) {
            pageData.setMacEntries(new MacTableEntry[0]);
            pageData.setTotal(0);
            return pageData;
        } else {
            if (pageData.getOffset() == 0) {
                // Set the total result size into the page data.
                query = session.createSQLQuery("SELECT count(mac_address) " + fromClause);
                pageData.setTotal(getCount(query));
            }

            List<MacTableEntry> macTable = new ArrayList<MacTableEntry>();
            for (Object[] resultEntry : resultList) {
                MacTableEntry entry = new MacTableEntry();
                entry.setMacAddress((Long) resultEntry[0]);
                entry.setPort((String) resultEntry[1]);
                entry.setVlan((String) resultEntry[2]);
                macTable.add(entry);
            }
            pageData.setMacEntries(macTable.toArray(new MacTableEntry[0]));
            return pageData;
        }
    } finally {
        if (ownTransaction) {
            TransactionElf.commit();
        }
    }
}

From source file:org.xerela.provider.telemetry.TelemetryProvider.java

License:Mozilla Public License

/** {@inheritDoc} */
@SuppressWarnings({ "unchecked", "nls" })
public ArpPageData getArpTable(ArpPageData pageData, String ipAddress, String managedNetwork) {
    ZDeviceCore device = getDevice(ipAddress, managedNetwork);
    if (device == null) {
        pageData.setArpEntries(new ArpTableEntry[0]);
        pageData.setTotal(0);/*w  w  w. java 2 s  .  c  o m*/
        return pageData;
    }

    boolean ownTransaction = TransactionElf.beginOrJoinTransaction();
    try {
        Session session = TelemetryActivator.getSessionFactory().getCurrentSession();
        String fromClause = "FROM discovery_arp arp WHERE arp.device_id = " + device.getDeviceId();
        SQLQuery query = session.createSQLQuery(
                "SELECT ip_address, mac_address, interface " + fromClause + " ORDER BY ip_address");
        query.addScalar("ip_address", Hibernate.STRING);
        query.addScalar("mac_address", Hibernate.LONG);
        query.addScalar("interface", Hibernate.STRING);
        query.setFirstResult(pageData.getOffset()).setMaxResults(pageData.getPageSize());
        query.scroll(ScrollMode.SCROLL_INSENSITIVE);
        List<Object[]> resultList = (List<Object[]>) query.list();
        if (resultList == null || resultList.isEmpty()) {
            pageData.setArpEntries(new ArpTableEntry[0]);
            pageData.setTotal(0);
            return pageData;
        } else {
            if (pageData.getOffset() == 0) {
                // Set the total result size into the page data.
                query = session.createSQLQuery("SELECT count(arp.ip_address) " + fromClause);
                pageData.setTotal(getCount(query));
            }

            List<ArpTableEntry> arpTable = new ArrayList<ArpTableEntry>();
            for (Object[] resultEntry : resultList) {
                ArpTableEntry entry = new ArpTableEntry();
                entry.setIpAddress((String) resultEntry[0]);
                entry.setMacAddress((Long) resultEntry[1]);
                entry.setInterfaceName((String) resultEntry[2]);
                arpTable.add(entry);
            }
            pageData.setArpEntries(arpTable.toArray(new ArpTableEntry[0]));
            return pageData;
        }
    } finally {
        if (ownTransaction) {
            TransactionElf.commit();
        }
    }
}

From source file:org.xerela.provider.telemetry.TelemetryProvider.java

License:Mozilla Public License

/**
 * {@inheritDoc}//from  www. j  a va 2  s .  c  om
 */
@SuppressWarnings({ "unchecked", "nls" })
public DeviceArpPageData getArpEntries(DeviceArpPageData pageData, String networkAddress, String sort,
        boolean descending) {
    StringBuilder selectClause = new StringBuilder(
            "SELECT d.ip_address as device, d.network as managedNetwork, arp.device_id as device_id, arp.ip_address as ipAddress, arp.mac_address as macAddress, arp.interface as interfaceName");
    StringBuilder fromClause = new StringBuilder(
            " FROM discovery_arp arp LEFT JOIN device d on arp.device_id = d.device_id");
    if (networkAddress.indexOf('/') > 0) {
        Long[] hiLoRange = NetworkAddressElf.getHiLoRange(networkAddress);
        if (hiLoRange[0] == null) {
            if (NetworkAddressElf.isIPv6AddressOrMask(networkAddress)) {
                String[] ipAndCidr = networkAddress.split("/");
                long[] hiLo = NetworkAddressElf.getHiLo(ipAndCidr[0]);
                fromClause.append(String.format(" WHERE arp.ip_low BETWEEN %d AND %d AND arp.ip_high=%d",
                        hiLoRange[2], hiLoRange[1], hiLo[0]));
            } else {
                fromClause.append(
                        String.format(" WHERE arp.ip_low BETWEEN %d AND %d", hiLoRange[2], hiLoRange[1]));
            }
        } else {
            fromClause
                    .append(String.format(" WHERE arp.ip_high BETWEEN %d AND %d", hiLoRange[1], hiLoRange[0]));
        }
    } else {
        long[] hiLo = NetworkAddressElf.getHiLo(networkAddress);
        fromClause.append(String.format(" WHERE arp.ip_high=%d AND arp.ip_low=%d", hiLo[0], hiLo[1]));
    }

    selectClause.append(fromClause);
    if (sort != null) {
        selectClause.append(" ORDER BY ").append(sort);
        if (descending) {
            selectClause.append(" DESC");
        }
    }

    boolean ownTransaction = TransactionElf.beginOrJoinTransaction();
    try {
        Session session = TelemetryActivator.getSessionFactory().getCurrentSession();
        SQLQuery query = session.createSQLQuery(selectClause.toString());
        query.addScalar("device", Hibernate.STRING);
        query.addScalar("managedNetwork", Hibernate.STRING);
        query.addScalar("device_id", Hibernate.INTEGER);
        query.addScalar("ipAddress", Hibernate.STRING);
        query.addScalar("macAddress", Hibernate.LONG);
        query.addScalar("interfaceName", Hibernate.STRING);

        query.setFirstResult(pageData.getOffset()).setMaxResults(pageData.getPageSize());
        query.scroll(ScrollMode.SCROLL_INSENSITIVE);
        List<Object[]> resultList = (List<Object[]>) query.list();
        if (resultList == null || resultList.isEmpty()) {
            pageData.setArpEntries(new DeviceArpTableEntry[0]);
            pageData.setTotal(0);
            return pageData;
        } else {
            if (pageData.getOffset() == 0) {
                // Set the total result size into the page data.
                query = session.createSQLQuery("SELECT count(arp.ip_address) " + fromClause.toString());
                pageData.setTotal(getCount(query));
            }

            List<DeviceArpTableEntry> arpTable = new ArrayList<DeviceArpTableEntry>();
            for (Object[] resultEntry : resultList) {
                DeviceArpTableEntry entry = new DeviceArpTableEntry();
                entry.setDevice((String) resultEntry[0]);
                entry.setManagedNetwork((String) resultEntry[1]);
                entry.setDeviceId((Integer) resultEntry[2]);
                entry.setIpAddress((String) resultEntry[3]);
                entry.setMacAddress((Long) resultEntry[4]);
                entry.setInterfaceName((String) resultEntry[5]);
                arpTable.add(entry);
            }
            pageData.setArpEntries(arpTable.toArray(new DeviceArpTableEntry[0]));
            return pageData;
        }
    } finally {
        if (ownTransaction) {
            TransactionElf.commit();
        }
    }
}

From source file:vnpt.media.efinder.model.PaginationResult.java

public PaginationResult(Query query, int page, int maxResult, int maxNavigationPage) {
    final int pageIndex = page - 1 < 0 ? 0 : page - 1;
    int fromRecordIndex = pageIndex * maxResult;
    int maxRecordIndex = fromRecordIndex + maxResult;

    ScrollableResults resultScroll = query.scroll(ScrollMode.SCROLL_INSENSITIVE);

    //resultScroll.g
    List results = new ArrayList<>();
    boolean hasResult = resultScroll.first();
    if (hasResult) {
        // Cuon toi vi tri
        hasResult = resultScroll.scroll(fromRecordIndex);
        if (hasResult) {
            do {//w  w w . ja  v  a  2  s. com
                E record = (E) resultScroll.get(0);
                results.add(record);
            } while (resultScroll.next()//
                    && resultScroll.getRowNumber() >= fromRecordIndex
                    && resultScroll.getRowNumber() < maxRecordIndex);
        }

        // chuyen toi ban ghi cuoi
        resultScroll.last();
    }

    // Tong so ban ghi
    this.totalRecords = resultScroll.getRowNumber() + 1;
    this.currentPage = pageIndex + 1;
    this.list = results;
    this.maxResult = maxResult;
    this.totalPages = (this.totalRecords / this.maxResult);
    if (totalRecords % this.maxResult != 0) {
        this.totalPages = this.totalPages + 1;
    }
    this.maxNavigationPage = totalPages;

    if (maxNavigationPage < totalPages) {
        this.maxNavigationPage = maxNavigationPage;
    }

    this.calcNavigationPages();

}