com.devicehive.service.helpers.HazelcastHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.devicehive.service.helpers.HazelcastHelper.java

Source

package com.devicehive.service.helpers;

/*
 * #%L
 * DeviceHive Backend Logic
 * %%
 * Copyright (C) 2016 DataArt
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import com.devicehive.model.DeviceCommand;
import com.devicehive.model.DeviceNotification;
import com.devicehive.model.HazelcastEntity;
import com.devicehive.model.updates.DeviceClassUpdate;
import com.hazelcast.query.Predicate;
import com.hazelcast.query.Predicates;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import static com.devicehive.model.enums.SearchableField.*;

@Component
public class HazelcastHelper {

    public Predicate prepareFilters(final Long id, final String guid) {
        return prepareFilters(id, guid, null, null, null, null, null, null);
    }

    public <T extends HazelcastEntity> Predicate prepareFilters(final String guid, final Collection<String> names,
            final Collection<String> devices, final Date timestampSt, final Date timestampEnd, final String status,
            Class<T> entityClass) {
        if (entityClass.equals(DeviceCommand.class)) {
            return prepareFilters(null, guid, devices, null, names, timestampSt, timestampEnd, status);
        }
        if (entityClass.equals(DeviceNotification.class)) {
            return prepareFilters(null, guid, devices, names, null, timestampSt, timestampEnd, status);
        }
        return null;
    }

    private Predicate prepareFilters(Long id, String guid, Collection<String> devices,
            Collection<String> notifications, Collection<String> commands, Date timestampSt, Date timestampEnd,
            String status) {
        final List<Predicate> predicates = new ArrayList<>();
        if (id != null) {
            predicates.add(Predicates.equal(ID.getField(), id));
        }

        if (StringUtils.isNotEmpty(guid)) {
            predicates.add(Predicates.equal(GUID.getField(), guid));
        }

        if (devices != null && !devices.isEmpty()) {
            predicates.add(Predicates.in(DEVICE_GUID.getField(), devices.toArray(new String[devices.size()])));
        }

        if (notifications != null && !notifications.isEmpty()) {
            predicates.add(Predicates.in(NOTIFICATION.getField(),
                    notifications.toArray(new String[notifications.size()])));
        } else if (commands != null && !commands.isEmpty()) {
            predicates.add(Predicates.in(COMMAND.getField(), commands.toArray(new String[commands.size()])));
        }

        if (timestampSt != null) {
            predicates.add(Predicates.greaterThan(TIMESTAMP.getField(), timestampSt));
        }

        if (timestampEnd != null) {
            predicates.add(Predicates.lessThan(TIMESTAMP.getField(), timestampEnd));
        }

        if (StringUtils.isNotEmpty(status)) {
            predicates.add(Predicates.equal(STATUS.getField(), status));
        }

        final Predicate[] predicatesArray = new Predicate[predicates.size()];
        for (int i = 0; i < predicates.size(); i++) {
            predicatesArray[i] = predicates.get(i);
        }

        return Predicates.and(predicatesArray);
    }
}