com.mirth.connect.plugins.datapruner.DataPrunerMessageList.java Source code

Java tutorial

Introduction

Here is the source code for com.mirth.connect.plugins.datapruner.DataPrunerMessageList.java

Source

/*
 * Copyright (c) Mirth Corporation. All rights reserved.
 * http://www.mirthcorp.com
 * 
 * The software in this package is published under the terms of the MPL
 * license a copy of which has been included with this distribution in
 * the LICENSE.txt file.
 */

package com.mirth.connect.plugins.datapruner;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.ibatis.session.SqlSession;

import com.mirth.connect.donkey.model.message.ConnectorMessage;
import com.mirth.connect.donkey.model.message.Message;
import com.mirth.connect.donkey.server.Donkey;
import com.mirth.connect.donkey.server.data.DonkeyDao;
import com.mirth.connect.donkey.server.data.DonkeyDaoFactory;
import com.mirth.connect.server.util.SqlConfig;
import com.mirth.connect.util.PaginatedList;

public class DataPrunerMessageList extends PaginatedList<Message> {
    private Map<String, Object> params;
    private DonkeyDaoFactory daoFactory = Donkey.getInstance().getDaoFactory();
    private String channelId;
    private List<Long> messageIds = new ArrayList<Long>();
    private List<Long> contentMessageIds = new ArrayList<Long>();
    private Calendar messageDateThreshold;

    public DataPrunerMessageList(String channelId, int pageSize, Map<String, Object> params,
            Calendar messageDateThreshold) {
        this.channelId = channelId;
        this.params = new HashMap<String, Object>();

        // do a shallow copy of params, because we will be adding offset/limit later in getItems()
        for (Entry<String, Object> entry : params.entrySet()) {
            this.params.put(entry.getKey(), entry.getValue());
        }

        setPageSize(pageSize);
        this.messageDateThreshold = messageDateThreshold;
    }

    public List<Long> getMessageIds() {
        return messageIds;
    }

    public List<Long> getContentMessageIds() {
        return contentMessageIds;
    }

    @Override
    public Long getItemCount() {
        return null;
    }

    @Override
    protected List<Message> getItems(int offset, int limit) throws Exception {
        List<Map<String, Object>> maps;
        SqlSession session = SqlConfig.getSqlSessionManager().openSession();
        params.put("offset", offset);
        params.put("limit", limit);

        try {
            maps = session.selectList("Message.getMessagesToPrune", params);
        } finally {
            session.close();
        }

        List<Message> messages = new ArrayList<Message>();
        DonkeyDao dao = daoFactory.getDao();

        try {
            for (Map<String, Object> map : maps) {
                Long messageId = (Long) map.get("id");
                long connectorReceivedDateMillis = ((Calendar) map.get("mm_received_date")).getTimeInMillis();

                Map<Integer, ConnectorMessage> connectorMessages = null;
                connectorMessages = dao.getConnectorMessages(channelId, messageId);

                Message message = new Message();
                message.setMessageId(messageId);
                message.setChannelId(channelId);
                message.setReceivedDate((Calendar) map.get("received_date"));
                message.setProcessed((Boolean) map.get("processed"));
                message.setServerId((String) map.get("server_id"));
                message.setImportId((Long) map.get("import_id"));
                message.getConnectorMessages().putAll(connectorMessages);

                messages.add(message);

                contentMessageIds.add(messageId);

                if (messageDateThreshold != null
                        && connectorReceivedDateMillis < messageDateThreshold.getTimeInMillis()) {
                    messageIds.add(messageId);
                }
            }

            return messages;
        } finally {
            dao.close();
        }
    }
}