Example usage for org.apache.commons.collections4 Predicate evaluate

List of usage examples for org.apache.commons.collections4 Predicate evaluate

Introduction

In this page you can find the example usage for org.apache.commons.collections4 Predicate evaluate.

Prototype

boolean evaluate(T object);

Source Link

Document

Use the specified parameter to perform a test that returns true or false.

Usage

From source file:com.feilong.core.util.AggregateUtil.java

/**
 *  <code>objectCollection</code>,?? <code>includePredicate</code>, <code>propertyName</code>.
 * /*from w w w .  j  av  a 2 s  . c o m*/
 * <p>
 * {@link LinkedHashMap},key<code>propertyName</code>,value;<br>
 * ? objectCollection <code>propertyName</code>?
 * </p>
 * 
 * <h3>:</h3>
 * 
 * <blockquote>
 * 
 * <pre class="code">
 * 
 * List{@code <User>} list = new ArrayList{@code <User>}();
 * list.add(new User("", 20));
 * list.add(new User("", 30));
 * list.add(new User("", 40));
 * list.add(new User("", 50));
 * 
 * Map{@code <String, Integer>} map = AggregateUtil.groupCount(list, "name", new Predicate{@code <User>}(){
 *     {@code @Override}
 *     public boolean evaluate(User user){
 *         return user.getAge() {@code >} 30;
 *     }
 * });
 * LOGGER.debug(JsonUtil.format(map));
 * 
 * </pre>
 * 
 * <b>:</b>
 * 
 * <pre class="code">
 * {
 * "": 1,
 * "": 1
 * }
 * 
 * </pre>
 * 
 * </blockquote>
 *
 * @param <T>
 *            the generic type
 * @param <O>
 *            the generic type
 * @param objectCollection
 *            the object collection
 * @param propertyName
 *            O??,Possibly indexed and/or nested name of the property to be modified,??
 *            <a href="../bean/BeanUtil.html#propertyName">propertyName</a>
 * @param includePredicate
 *            ? ? <code>includePredicate</code>,null ?Object
 * @return  <code>objectCollection</code> nullempty, {@link Collections#emptyMap()}<br>
 *          <code>propertyName</code> null, {@link NullPointerException}<br>
 *          <code>propertyName</code> blank, {@link IllegalArgumentException}
 * @see org.apache.commons.collections4.CollectionUtils#getCardinalityMap(Iterable)
 */
public static <T, O> Map<T, Integer> groupCount(Collection<O> objectCollection, String propertyName,
        Predicate<O> includePredicate) {
    if (isNullOrEmpty(objectCollection)) {
        return Collections.emptyMap();
    }
    Validate.notBlank(propertyName, "propertyName can't be null/empty!");

    Map<T, Integer> map = new LinkedHashMap<T, Integer>();
    for (O obj : objectCollection) {
        if (null != includePredicate && !includePredicate.evaluate(obj)) {
            continue;
        }
        MapUtil.putSumValue(map, PropertyUtil.<T>getProperty(obj, propertyName), 1);
    }
    return map;
}

From source file:com.feilong.core.util.AggregateUtil.java

/**
 * <code>objectCollection</code>,???? <code>includePredicate</code>  <code>propertyNames</code>  ,.
 * /*w  ww .  j  a va  2  s  . co m*/
 * <p>
 * ???null,0,?
 * </p>
 * 
 * 
 * <h3>:</h3>
 * 
 * <blockquote>
 * 
 * <pre class="code">
 * User user1 = new User(10L);
 * user1.setName("");
 * user1.setAge(50);
 * 
 * User user2 = new User(20L);
 * user1.setName("");
 * user2.setAge(50);
 * 
 * User user3 = new User(100L);
 * user3.setName("");
 * user3.setAge(100);
 * 
 * List{@code <User>} list = toList(user1, user2, user3);
 * Map{@code <String, BigDecimal>} map = AggregateUtil.sum(list, ConvertUtil.toArray("id", "age"), new Predicate{@code <User>}(){
 * 
 *     {@code @Override}
 *     public boolean evaluate(User user){
 *         return !"".equals(user.getName());
 *     }
 * });
 * LOGGER.debug(JsonUtil.format(map));
 * 
 * </pre>
 * 
 * <b>:</b>
 * 
 * <pre class="code">
 * {
 * "id": 30,
 * "age": 100
 * }
 * </pre>
 * 
 * </blockquote>
 *
 * @param <O>
 *            the generic type
 * @param objectCollection
 *            the object collection
 * @param propertyNames
 *            O??,Possibly indexed and/or nested name of the property to be modified,??
 *            <a href="../bean/BeanUtil.html#propertyName">propertyName</a>
 * @param includePredicate
 *            the include predicate
 * @return  <code>objectCollection</code> nullempty, {@link Collections#emptyMap()}<br>
 *         <code>propertyNames</code> null  {@link NullPointerException} <br>
 *         <code>propertyNames</code>  null  {@link IllegalArgumentException}<br>
 */
public static <O> Map<String, BigDecimal> sum(Collection<O> objectCollection, String[] propertyNames,
        Predicate<O> includePredicate) {
    if (isNullOrEmpty(objectCollection)) {
        return Collections.emptyMap();
    }
    Validate.noNullElements(propertyNames, "propertyNames can't be null/empty!");

    Map<String, BigDecimal> sumMap = newLinkedHashMap(objectCollection.size());
    for (O obj : objectCollection) {
        if (null != includePredicate && !includePredicate.evaluate(obj)) {
            continue;
        }

        for (String propertyName : propertyNames) {
            //???null,0 
            BigDecimal addValue = NumberUtil.getAddValue(ObjectUtils.defaultIfNull(sumMap.get(propertyName), 0),
                    ObjectUtils.defaultIfNull(PropertyUtil.<Number>getProperty(obj, propertyName), 0));
            sumMap.put(propertyName, addValue);
        }
    }
    return sumMap;
}

From source file:com.link_intersystems.lang.reflect.DeclaringClassMemberPredicateTest.java

@Test
public void evaluateFalse() throws SecurityException, NoSuchMethodException, NoSuchFieldException {
    Predicate declaringClassMemberPredicate = ReflectFacade.getDeclaringClassPredicate(JComponent.class);
    Method declaredMethod = Container.class.getDeclaredMethod("getPreferredSize");
    boolean evaluate = declaringClassMemberPredicate.evaluate(declaredMethod);
    assertFalse(evaluate);/*  w w w .  j  av a  2s .  c o  m*/

    Constructor<Container> declaredConstructor = Container.class.getDeclaredConstructor();
    evaluate = declaringClassMemberPredicate.evaluate(declaredConstructor);
    assertFalse(evaluate);

    Field declaredField = Container.class.getDeclaredField("INCLUDE_SELF");
    evaluate = declaringClassMemberPredicate.evaluate(declaredField);
    assertFalse(evaluate);
}

From source file:com.link_intersystems.lang.reflect.DeclaringClassMemberPredicateTest.java

@Test
public void evaluateTrue() throws SecurityException, NoSuchMethodException, NoSuchFieldException {
    Predicate declaringClassMemberPredicate = ReflectFacade.getDeclaringClassPredicate(JComponent.class);
    Method declaredMethod = JComponent.class.getDeclaredMethod("getPreferredSize");
    boolean evaluate = declaringClassMemberPredicate.evaluate(declaredMethod);
    assertTrue(evaluate);//  w  ww . j a va 2s  . c  o  m

    Constructor<JComponent> declaredConstructor = JComponent.class.getDeclaredConstructor();
    evaluate = declaringClassMemberPredicate.evaluate(declaredConstructor);
    assertTrue(evaluate);

    Field declaredField = JComponent.class.getDeclaredField("WHEN_FOCUSED");
    evaluate = declaringClassMemberPredicate.evaluate(declaredField);
    assertTrue(evaluate);
}

From source file:com.feilong.core.util.AggregateUtilTest.java

/**
 * TestStatisticsUtilTest.//from  w  w w . j  a  va2  s  . com
 */
@Test
public void testStatisticsUtilTest() {
    String[] planets = { "Mercury", "Venus", "Earth", "Mars" };
    Comparator<String> distanceFromSun = new FixedOrderComparator<>(planets);
    Predicate<String> predicate = new ComparatorPredicate<String>("Venus", distanceFromSun, Criterion.GREATER);

    LOGGER.debug("{}", predicate.evaluate("Earth"));
}

From source file:com.sunchenbin.store.feilong.core.util.CollectionsUtil.java

/**
 *  <code>objectCollection</code>,? ? <code>includePredicate</code>, {@code propertyName}.
 *
 * @param <T>/*w w  w  .j a va  2  s . c  o  m*/
 *            the generic type
 * @param <O>
 *            the generic type
 * @param objectCollection
 *            the object collection
 * @param includePredicate
 *            ? ? <code>includePredicate</code>,null ?Object
 * @param propertyName
 *            the property name
 * @return the map< t, integer>
 * @since 1.2.0
 */
public static <T, O> Map<T, Integer> groupCount(Collection<O> objectCollection, Predicate<O> includePredicate,
        String propertyName) {
    if (Validator.isNullOrEmpty(objectCollection)) {
        throw new NullPointerException("objectCollection can't be null/empty!");
    }

    if (Validator.isNullOrEmpty(propertyName)) {
        throw new NullPointerException("propertyName is null or empty!");
    }

    Map<T, Integer> map = new LinkedHashMap<T, Integer>();

    for (O o : objectCollection) {
        if (null != includePredicate) {
            //
            boolean continueFlag = !includePredicate.evaluate(o);

            if (continueFlag) {
                continue;
            }
        }

        T t = PropertyUtil.getProperty(o, propertyName);
        Integer count = map.get(t);
        if (null == count) {
            count = 0;
        }
        count = count + 1;

        map.put(t, count);
    }
    return map;
}

From source file:com.haulmont.cuba.core.app.cache.CacheSet.java

public Pair<Integer, Integer> countConjunction(Collection<Predicate> selectors, Predicate amplifyingSelector) {
    checkNotNull(selectors);//from  ww  w . j a v  a  2  s .co m
    checkNotNull(amplifyingSelector);

    ConjunctionPredicate conjunctionPredicate = new ConjunctionPredicate(selectors);

    int count1 = 0;
    int count2 = 0;

    for (Object item : items) {
        if (conjunctionPredicate.evaluate(item)) {
            count1++;
            if (amplifyingSelector.evaluate(item)) {
                count2++;
            }
        }
    }

    return new Pair<>(count1, count2);
}

From source file:com.link_intersystems.lang.reflect.ReflectFacade.java

public boolean evaluate(T object) {
    Predicate<T> predicate = serializablePredicate.get();
    boolean result = predicate.evaluate(object);
    return result;
}

From source file:com.feilong.core.util.CollectionsUtil.java

/**
 *  <code>objectCollection</code>,?? <code>includePredicate</code>,(propertyName?,,list? putmap).
 * //ww  w .  j  a va2s  . c om
 * <p>
 * {@link LinkedHashMap},key <code>objectCollection</code> <code>propertyName</code>,value <code>objectCollection</code>
 * ;
 * <br>
 * ? <code>objectCollection</code> <code>propertyName</code>?
 * </p>
 * 
 * <h3>:</h3>
 * <blockquote>
 * 
 * <pre class="code">
List{@code <User>} list = new ArrayList{@code <User>}();
list.add(new User("", 10));
list.add(new User("", 28));
list.add(new User("", 32));
list.add(new User("", 30));
list.add(new User("", 10));
        
Map{@code <String, List<User>>} map = CollectionsUtil.group(list, "name", new Predicate{@code <User>}(){
        
    {@code @Override}
    public boolean evaluate(User user){
        return user.getAge() {@code >} 20;
    }
});
LOGGER.info(JsonUtil.format(map));
 * </pre>
 * 
 *  :
 * 
 * <pre class="code">
{
"": [{
    "age": 28,
    "name": ""
}],
"": [{
        "age": 32,
        "name": ""
    },{
        "age": 30,
        "name": ""
    }
]
}
 * </pre>
 * 
 * ,?,??:
 * 
 * <pre class="code">
 * Predicate{@code <User>} comparatorPredicate = BeanPredicateUtil.comparatorPredicate("age", 20, Criterion.LESS);
 * Map{@code <String, List<User>>} map = CollectionsUtil.group(list, "name", comparatorPredicate);
 * </pre>
 * 
 * ??
 * {@link com.feilong.core.util.predicate.BeanPredicateUtil#comparatorPredicate(String, Comparable, org.apache.commons.collections4.functors.ComparatorPredicate.Criterion)}
 * 
 * </blockquote>
 *
 * @param <T>
 *            ?,T,Object,excel?String,???Integer?,??
 * @param <O>
 *            the generic type
 * @param objectCollection
 *            the object list
 * @param propertyName
 *            O??,Possibly indexed and/or nested name of the property to be modified,??
 *            <a href="../bean/BeanUtil.html#propertyName">propertyName</a>
 * @param includePredicate
 *            the include predicate
 * @return  <code>objectCollection</code> nullempty, {@link Collections#emptyMap()}<br>
 *          <code>propertyName</code> null, {@link NullPointerException}<br>
 *          <code>propertyName</code> blank, {@link IllegalArgumentException}<br>
 *         element match <code>includePredicate</code>, empty {@link LinkedHashMap}<br>
 *          <code>includePredicate</code> null,
 * @see PropertyUtil#getProperty(Object, String)
 * @see #groupOne(Collection, String)
 * @since 1.5.5
 */
public static <T, O> Map<T, List<O>> group(Collection<O> objectCollection, String propertyName,
        Predicate<O> includePredicate) {
    if (isNullOrEmpty(objectCollection)) {
        return Collections.emptyMap();
    }
    Validate.notBlank(propertyName, "propertyName can't be null/empty!");

    Map<T, List<O>> map = newLinkedHashMap(objectCollection.size());
    for (O obj : objectCollection) {
        if (null != includePredicate && !includePredicate.evaluate(obj)) {
            continue;
        }
        MapUtil.putMultiValue(map, PropertyUtil.<T>getProperty(obj, propertyName), obj);
    }
    return map;
}

From source file:org.apache.nifi.controller.FlowController.java

/**
 * Returns the status for the components in the specified group with the
 * specified report. The results will be filtered by executing the specified
 * predicate./*from  w  ww  .ja v  a 2s.c  o  m*/
 *
 * @param group group id
 * @param statusReport report
 * @param isAuthorized is authorized check
 * @return the component status
 */
public ProcessGroupStatus getGroupStatus(final ProcessGroup group, final RepositoryStatusReport statusReport,
        final Predicate<Authorizable> isAuthorized) {
    if (group == null) {
        return null;
    }

    final ProcessGroupStatus status = new ProcessGroupStatus();
    status.setId(group.getIdentifier());
    status.setName(isAuthorized.evaluate(group) ? group.getName() : group.getIdentifier());
    int activeGroupThreads = 0;
    long bytesRead = 0L;
    long bytesWritten = 0L;
    int queuedCount = 0;
    long queuedContentSize = 0L;
    int flowFilesIn = 0;
    long bytesIn = 0L;
    int flowFilesOut = 0;
    long bytesOut = 0L;
    int flowFilesReceived = 0;
    long bytesReceived = 0L;
    int flowFilesSent = 0;
    long bytesSent = 0L;
    int flowFilesTransferred = 0;
    long bytesTransferred = 0;

    // set status for processors
    final Collection<ProcessorStatus> processorStatusCollection = new ArrayList<>();
    status.setProcessorStatus(processorStatusCollection);
    for (final ProcessorNode procNode : group.getProcessors()) {
        final ProcessorStatus procStat = getProcessorStatus(statusReport, procNode, isAuthorized);
        processorStatusCollection.add(procStat);
        activeGroupThreads += procStat.getActiveThreadCount();
        bytesRead += procStat.getBytesRead();
        bytesWritten += procStat.getBytesWritten();

        flowFilesReceived += procStat.getFlowFilesReceived();
        bytesReceived += procStat.getBytesReceived();
        flowFilesSent += procStat.getFlowFilesSent();
        bytesSent += procStat.getBytesSent();
    }

    // set status for local child groups
    final Collection<ProcessGroupStatus> localChildGroupStatusCollection = new ArrayList<>();
    status.setProcessGroupStatus(localChildGroupStatusCollection);
    for (final ProcessGroup childGroup : group.getProcessGroups()) {
        final ProcessGroupStatus childGroupStatus = getGroupStatus(childGroup, statusReport, isAuthorized);
        localChildGroupStatusCollection.add(childGroupStatus);
        activeGroupThreads += childGroupStatus.getActiveThreadCount();
        bytesRead += childGroupStatus.getBytesRead();
        bytesWritten += childGroupStatus.getBytesWritten();
        queuedCount += childGroupStatus.getQueuedCount();
        queuedContentSize += childGroupStatus.getQueuedContentSize();

        flowFilesReceived += childGroupStatus.getFlowFilesReceived();
        bytesReceived += childGroupStatus.getBytesReceived();
        flowFilesSent += childGroupStatus.getFlowFilesSent();
        bytesSent += childGroupStatus.getBytesSent();

        flowFilesTransferred += childGroupStatus.getFlowFilesTransferred();
        bytesTransferred += childGroupStatus.getBytesTransferred();
    }

    // set status for remote child groups
    final Collection<RemoteProcessGroupStatus> remoteProcessGroupStatusCollection = new ArrayList<>();
    status.setRemoteProcessGroupStatus(remoteProcessGroupStatusCollection);
    for (final RemoteProcessGroup remoteGroup : group.getRemoteProcessGroups()) {
        final RemoteProcessGroupStatus remoteStatus = createRemoteGroupStatus(remoteGroup, statusReport,
                isAuthorized);
        if (remoteStatus != null) {
            remoteProcessGroupStatusCollection.add(remoteStatus);

            flowFilesReceived += remoteStatus.getReceivedCount();
            bytesReceived += remoteStatus.getReceivedContentSize();
            flowFilesSent += remoteStatus.getSentCount();
            bytesSent += remoteStatus.getSentContentSize();
        }
    }

    // connection status
    final Collection<ConnectionStatus> connectionStatusCollection = new ArrayList<>();
    status.setConnectionStatus(connectionStatusCollection);

    // get the connection and remote port status
    for (final Connection conn : group.getConnections()) {
        final boolean isConnectionAuthorized = isAuthorized.evaluate(conn);
        final boolean isSourceAuthorized = isAuthorized.evaluate(conn.getSource());
        final boolean isDestinationAuthorized = isAuthorized.evaluate(conn.getDestination());

        final ConnectionStatus connStatus = new ConnectionStatus();
        connStatus.setId(conn.getIdentifier());
        connStatus.setGroupId(conn.getProcessGroup().getIdentifier());
        connStatus.setSourceId(conn.getSource().getIdentifier());
        connStatus.setSourceName(
                isSourceAuthorized ? conn.getSource().getName() : conn.getSource().getIdentifier());
        connStatus.setDestinationId(conn.getDestination().getIdentifier());
        connStatus.setDestinationName(isDestinationAuthorized ? conn.getDestination().getName()
                : conn.getDestination().getIdentifier());
        connStatus.setBackPressureDataSizeThreshold(conn.getFlowFileQueue().getBackPressureDataSizeThreshold());
        connStatus.setBackPressureObjectThreshold(conn.getFlowFileQueue().getBackPressureObjectThreshold());

        final FlowFileEvent connectionStatusReport = statusReport.getReportEntry(conn.getIdentifier());
        if (connectionStatusReport != null) {
            connStatus.setInputBytes(connectionStatusReport.getContentSizeIn());
            connStatus.setInputCount(connectionStatusReport.getFlowFilesIn());
            connStatus.setOutputBytes(connectionStatusReport.getContentSizeOut());
            connStatus.setOutputCount(connectionStatusReport.getFlowFilesOut());

            flowFilesTransferred += connectionStatusReport.getFlowFilesIn()
                    + connectionStatusReport.getFlowFilesOut();
            bytesTransferred += connectionStatusReport.getContentSizeIn()
                    + connectionStatusReport.getContentSizeOut();
        }

        if (isConnectionAuthorized) {
            if (StringUtils.isNotBlank(conn.getName())) {
                connStatus.setName(conn.getName());
            } else if (conn.getRelationships() != null && !conn.getRelationships().isEmpty()) {
                final Collection<String> relationships = new ArrayList<>(conn.getRelationships().size());
                for (final Relationship relationship : conn.getRelationships()) {
                    relationships.add(relationship.getName());
                }
                connStatus.setName(StringUtils.join(relationships, ", "));
            }
        } else {
            connStatus.setName(conn.getIdentifier());
        }

        final QueueSize queueSize = conn.getFlowFileQueue().size();
        final int connectionQueuedCount = queueSize.getObjectCount();
        final long connectionQueuedBytes = queueSize.getByteCount();
        if (connectionQueuedCount > 0) {
            connStatus.setQueuedBytes(connectionQueuedBytes);
            connStatus.setQueuedCount(connectionQueuedCount);
        }
        connectionStatusCollection.add(connStatus);
        queuedCount += connectionQueuedCount;
        queuedContentSize += connectionQueuedBytes;

        final Connectable source = conn.getSource();
        if (ConnectableType.REMOTE_OUTPUT_PORT.equals(source.getConnectableType())) {
            final RemoteGroupPort remoteOutputPort = (RemoteGroupPort) source;
            activeGroupThreads += processScheduler.getActiveThreadCount(remoteOutputPort);
        }

        final Connectable destination = conn.getDestination();
        if (ConnectableType.REMOTE_INPUT_PORT.equals(destination.getConnectableType())) {
            final RemoteGroupPort remoteInputPort = (RemoteGroupPort) destination;
            activeGroupThreads += processScheduler.getActiveThreadCount(remoteInputPort);
        }
    }

    // status for input ports
    final Collection<PortStatus> inputPortStatusCollection = new ArrayList<>();
    status.setInputPortStatus(inputPortStatusCollection);

    final Set<Port> inputPorts = group.getInputPorts();
    for (final Port port : inputPorts) {
        final boolean isInputPortAuthorized = isAuthorized.evaluate(port);

        final PortStatus portStatus = new PortStatus();
        portStatus.setId(port.getIdentifier());
        portStatus.setGroupId(port.getProcessGroup().getIdentifier());
        portStatus.setName(isInputPortAuthorized ? port.getName() : port.getIdentifier());
        portStatus.setActiveThreadCount(processScheduler.getActiveThreadCount(port));

        // determine the run status
        if (ScheduledState.RUNNING.equals(port.getScheduledState())) {
            portStatus.setRunStatus(RunStatus.Running);
        } else if (ScheduledState.DISABLED.equals(port.getScheduledState())) {
            portStatus.setRunStatus(RunStatus.Disabled);
        } else if (!port.isValid()) {
            portStatus.setRunStatus(RunStatus.Invalid);
        } else {
            portStatus.setRunStatus(RunStatus.Stopped);
        }

        // special handling for root group ports
        if (port instanceof RootGroupPort) {
            final RootGroupPort rootGroupPort = (RootGroupPort) port;
            portStatus.setTransmitting(rootGroupPort.isTransmitting());
        }

        final FlowFileEvent entry = statusReport.getReportEntries().get(port.getIdentifier());
        if (entry == null) {
            portStatus.setInputBytes(0L);
            portStatus.setInputCount(0);
            portStatus.setOutputBytes(0L);
            portStatus.setOutputCount(0);
        } else {
            final int processedCount = entry.getFlowFilesOut();
            final long numProcessedBytes = entry.getContentSizeOut();
            portStatus.setOutputBytes(numProcessedBytes);
            portStatus.setOutputCount(processedCount);

            final int inputCount = entry.getFlowFilesIn();
            final long inputBytes = entry.getContentSizeIn();
            portStatus.setInputBytes(inputBytes);
            portStatus.setInputCount(inputCount);

            flowFilesIn += inputCount;
            bytesIn += inputBytes;
            bytesWritten += entry.getBytesWritten();

            flowFilesReceived += entry.getFlowFilesReceived();
            bytesReceived += entry.getBytesReceived();
        }

        inputPortStatusCollection.add(portStatus);
        activeGroupThreads += portStatus.getActiveThreadCount();
    }

    // status for output ports
    final Collection<PortStatus> outputPortStatusCollection = new ArrayList<>();
    status.setOutputPortStatus(outputPortStatusCollection);

    final Set<Port> outputPorts = group.getOutputPorts();
    for (final Port port : outputPorts) {
        final boolean isOutputPortAuthorized = isAuthorized.evaluate(port);

        final PortStatus portStatus = new PortStatus();
        portStatus.setId(port.getIdentifier());
        portStatus.setGroupId(port.getProcessGroup().getIdentifier());
        portStatus.setName(isOutputPortAuthorized ? port.getName() : port.getIdentifier());
        portStatus.setActiveThreadCount(processScheduler.getActiveThreadCount(port));

        // determine the run status
        if (ScheduledState.RUNNING.equals(port.getScheduledState())) {
            portStatus.setRunStatus(RunStatus.Running);
        } else if (ScheduledState.DISABLED.equals(port.getScheduledState())) {
            portStatus.setRunStatus(RunStatus.Disabled);
        } else if (!port.isValid()) {
            portStatus.setRunStatus(RunStatus.Invalid);
        } else {
            portStatus.setRunStatus(RunStatus.Stopped);
        }

        // special handling for root group ports
        if (port instanceof RootGroupPort) {
            final RootGroupPort rootGroupPort = (RootGroupPort) port;
            portStatus.setTransmitting(rootGroupPort.isTransmitting());
        }

        final FlowFileEvent entry = statusReport.getReportEntries().get(port.getIdentifier());
        if (entry == null) {
            portStatus.setInputBytes(0L);
            portStatus.setInputCount(0);
            portStatus.setOutputBytes(0L);
            portStatus.setOutputCount(0);
        } else {
            final int processedCount = entry.getFlowFilesOut();
            final long numProcessedBytes = entry.getContentSizeOut();
            portStatus.setOutputBytes(numProcessedBytes);
            portStatus.setOutputCount(processedCount);

            final int inputCount = entry.getFlowFilesIn();
            final long inputBytes = entry.getContentSizeIn();
            portStatus.setInputBytes(inputBytes);
            portStatus.setInputCount(inputCount);

            bytesRead += entry.getBytesRead();

            flowFilesOut += entry.getFlowFilesOut();
            bytesOut += entry.getContentSizeOut();

            flowFilesSent = entry.getFlowFilesSent();
            bytesSent += entry.getBytesSent();
        }

        outputPortStatusCollection.add(portStatus);
        activeGroupThreads += portStatus.getActiveThreadCount();
    }

    for (final Funnel funnel : group.getFunnels()) {
        activeGroupThreads += processScheduler.getActiveThreadCount(funnel);
    }

    status.setActiveThreadCount(activeGroupThreads);
    status.setBytesRead(bytesRead);
    status.setBytesWritten(bytesWritten);
    status.setQueuedCount(queuedCount);
    status.setQueuedContentSize(queuedContentSize);
    status.setInputContentSize(bytesIn);
    status.setInputCount(flowFilesIn);
    status.setOutputContentSize(bytesOut);
    status.setOutputCount(flowFilesOut);
    status.setFlowFilesReceived(flowFilesReceived);
    status.setBytesReceived(bytesReceived);
    status.setFlowFilesSent(flowFilesSent);
    status.setBytesSent(bytesSent);
    status.setFlowFilesTransferred(flowFilesTransferred);
    status.setBytesTransferred(bytesTransferred);

    return status;
}