text: /*
  COPYRIGHT STATUS:
  Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
  software are sponsored by the U.S. Department of Energy under Contract No.
  DE-AC02-76CH03000. Therefore, the U.S. Government retains a  world-wide
  non-exclusive, royalty-free license to publish or reproduce these documents
  and software for U.S. Government purposes.  All documents and software
  available from this server are protected under the U.S. and Foreign
  Copyright Laws, and FNAL reserves all rights.
  
  Distribution of the software available from this server is free of
  charge subject to the user following the terms of the Fermitools
  Software Legal Information.
  
  Redistribution and/or modification of the software shall be accompanied
  by the Fermitools Software Legal Information  (including the copyright
  notice).
  
  The user is asked to feed back problems, benefits, and/or suggestions
  about the software to the Fermilab Software Providers.
  
  Neither the name of Fermilab, the  URA, nor the names of the contributors
  may be used to endorse or promote products derived from this software
  without specific prior written permission.
  
  DISCLAIMER OF LIABILITY (BSD):
  
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED  WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
  OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
  FOR  ANY  DIRECT, INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, OR
  CONSEQUENTIAL DAMAGES  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  OF SUBSTITUTE  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY  OF
  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  OF THE USE OF THIS
  SOFTWARE, EVEN IF ADVISED OF THE  POSSIBILITY OF SUCH DAMAGE.
  
  Liabilities of the Government:
  
  This software is provided by URA, independent from its Prime Contract
  with the U.S. Department of Energy. URA is acting independently from
  the Government and in its own private capacity and is not acting on
  behalf of the U.S. Government, nor as its contractor nor its agent.
  Correspondingly, it is understood and agreed that the U.S. Government
  has no connection to this software and in no manner whatsoever shall
  be liable for nor assume any responsibility or obligation for any claim,
  cost, or damages arising out of or resulting from the use of the software
  available from this server.
  
  Export Control:
  
  All documents and software available from this server are subject to U.S.
  export control laws.  Anyone downloading information from this server is
  obligated to secure any necessary Government licenses before exporting
  documents or software obtained from this server.
   */
  package org.dcache.vehicles.pool;
  
  import com.google.common.base.Strings;
  import java.util.function.Predicate;
  
  import org.dcache.pool.movers.json.MoverData;
  
  /**
   * <p>Request for listings corresponding to mover ls, but excluding the
   * p2p client queue.</p>
   */
  public class PoolMoverListingMessage extends
                  PoolActivityListingMessage<MoverData> {
      private static final long serialVersionUID = -3586502361789998143L;
  
      protected final String queue;
      private final String mode;
      private final String door;
  
      public PoolMoverListingMessage(int offset,
                                     int limit,
                                     String pnfsid,
                                     String queue,
                                     String state,
                                     String mode,
                                     String door,
                                     String storageClass,
                                     String sort) {
          super(offset, limit, pnfsid, state, storageClass, sort);
          this.queue = queue;
          this.mode = mode;
          this.door = door;
      }
  
      @Override
      public Predicate<MoverData> filter() {
          Predicate<MoverData> matchesPnfsid =
                          (data) -> pnfsid == null
                                          || Strings.nullToEmpty(data.getPnfsId())
                                                    .contains(pnfsid);
          Predicate<MoverData> matchesQueue =
                          (data) -> queue == null
                                          || Strings.nullToEmpty(data.getQueue())
                                                    .contains(queue);
          Predicate<MoverData> matchesState =
                          (data) -> state == null
                                          || Strings.nullToEmpty(data.getState())
                                                    .contains(state);
          Predicate<MoverData> matchesMode =
                          (data) -> mode == null
                                          || Strings.nullToEmpty(data.getMode())
                                                    .contains(mode);
          Predicate<MoverData> matchesDoor =
                          (data) -> door == null
                                          || Strings.nullToEmpty(data.getDoor())
                                                    .contains(door);
          Predicate<MoverData> matchesClass =
                          (data) -> storageClass == null
                                          || Strings.nullToEmpty(
                                          data.getStorageClass())
                                                    .contains(storageClass);
          return matchesPnfsid.and(matchesQueue).and(matchesState)
                              .and(matchesMode).and(matchesDoor)
                              .and(matchesClass);
      }
  }
  