⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericalertselectorimpl.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
字号:
/* * Copyright 2006-2007 Queplix Corp. * * Licensed under the Queplix Public License, Version 1.1.1 (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.queplix.com/solutions/commercial-open-source/queplix-public-license/ * * 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. */package com.queplix.core.modules.alert.utils;import com.queplix.core.modules.alert.AlertBlock;import com.queplix.core.utils.cache.Cache;import com.queplix.core.utils.log.AbstractLogger;import com.queplix.core.utils.log.Log;import com.queplix.core.integrator.security.LogonSession;import com.queplix.core.integrator.security.User;import java.util.Comparator;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.SortedMap;import java.util.TreeMap;/** * Generic implementation of alert selector. * @author [ALB] Baranov Andrey * @version $Revision: 1.2 $ $Date: 2005/09/27 12:08:49 $ */public class GenericAlertSelectorImpl    implements AlertSelector {    // ----------------------------------------------------- variables    // Comporator.    protected Comparator comparator = new AlertComparator();    // Logger.    protected AbstractLogger logger = Log.getLog( getClass() );    // Properties.    protected Properties prop;    // ----------------------------------------------------- public methods    /*     * No javadoc     * @see AlertSelector#search     */    public SortedMap search( Cache cache, AlertSelectorCriteria criteria ) {        // Init.        LogonSession ls = criteria.getLogonSession();        boolean incoming = criteria.isIncomming();        Long startAlertID = criteria.getStartID();        Integer page = criteria.getPage();        Integer pageSize = criteria.getPageSize();        // Check if cache is empty - return NULL        Object lastKey = cache.getLastKey();        if( lastKey == null ) {            logger.INFO( "Skip searching. Cannot find Last Key. Probably cache is empty." );            return null;        }        logger.DEBUG( "Last key: " + lastKey );        // Prepare result map with default comporator        SortedMap ret = new TreeMap( comparator );        if( startAlertID != null ) {            long id = startAlertID.longValue();            // Check if the last key in cache less or equals to Start Alert ID - return NULL            if( id >= Long.parseLong( "" + lastKey ) ) {                logger.INFO( "Skip searching. Start ID " + startAlertID + " >= " + lastKey );                return null;            }            // Get SortedMap with keys high than Start Alert ID            SortedMap map = cache.tailMap( new Long( id + 1 ) );            if( map == null || map.isEmpty() ) {                logger.INFO( "Skip searching. Got empty Map." );                return null;            }            // ..and sort it in DESC order.            ret.putAll( map );        } else {            // Get entire SortedMap and sort it in DESC order.            Map map = cache.toMap();            if( map == null || map.isEmpty() ) {                logger.INFO( "Skip searching. Got empty Map." );                return null;            }            ret.putAll( map );        }        //        // Return only user's alerts.        // @see SQLExecutorGenericImpl#doSelect        //        User user = ls.getUser();//        boolean isAdmin = SecurityManager.isAdmin( user ); old sample//        boolean isEmployee = ( user.getUserTypeID() == EmployeeUser.ID ); old sample        boolean isAdmin = false;//todo change login        boolean isEmployee = true;//todo change login        List<Long> userGroups = user.getUserGroups();        // .. user alert block for checking        AlertBlock block = new AlertBlock( user.getUserID(), user.getAuthenticationType() );        // .. available more records flag        boolean availableMore = false;        // .. start and end positions in SortedMap        int start = 0;        int end = 0;        if( page != null && pageSize != null ) {            start = page * pageSize;            end = start + pageSize;        }        // .. current position in SortedMap        int i = 0;        for( Iterator it = ret.keySet().iterator(); it.hasNext(); ) {            Object key = it.next();            AlertVO alertVO = ( AlertVO ) ret.get( key );            // 1. Check if alert deleted (has block) for current user            if( alertVO.contains( block ) ) {                // remove from the <code>ret</code>                it.remove();                continue;            }            if( incoming ) {                // 2. Check is user is Admin.                // 3. Check own incoming alerts.                // 4. Check own incoming workgroup alerts.                // 5. Check 'To All' flag (only for Employee).                if( !isAdmin &&                    !alertVO.isOwner( user ) &&//                    !alertVO.isOwner( userGroups ) &&//todo change logic, move it back                    ! ( isEmployee && alertVO.isToAllAlert() ) ) {                    // .. not found                    // remove from the <code>ret</code>                    it.remove();                    continue;                }            } else {                // 2. Check is user is Admin.                // 3. Check own outgoing alerts                if( !isAdmin && !alertVO.isSender( user ) ) {                    // .. not found                    // remove from the <code>ret</code>                    it.remove();                    continue;                }            }            // Check start position            if( start > i ) {                // remove from the <code>ret</code>                it.remove();                i++;                continue;            }            // Check rows limit            if( end > 0 && i >= end ) {                // mark that we have more records...                availableMore = true;                // remove the rest from the <code>ret</code>                it.remove();                i++;                for( ; it.hasNext(); it.next(), it.remove(), i++ );                break;            }            i++;        }        if( availableMore ) {            // set "available more records" flag            criteria.setAvailableMore( true );        }        // Ok.        return ret;    }    /*     * No javadoc     * @see Cache#setProperties     */    public void setProperties( Properties prop ) {        this.prop = prop;    }    /**     * Property getter by the <code>name</code>.     * @param name String     * @return Object     */    public Object getProperty( String name ) {        return prop == null ? null : prop.get( name );    }    // ----------------------------------------------------- inner class    /**     * <p>Default Alert comporator. Sorting by Alert ID in DESC order.</p>     */    static class AlertComparator        implements Comparator {        /*         * No javadoc         * @see Comparator#compare         */        public int compare( Object o1, Object o2 ) {            long l1 = ( ( Long ) o1 ).longValue();            long l2 = ( ( Long ) o2 ).longValue();            if( l1 > l2 ) {                return -1;            } else if( l1 < l2 ) {                return 1;            } else {                return 0;            }        }        /*         * No javadoc         * @see Comparator#equals         */        public boolean equals( Object that ) {            if( this == that ) {                return true;            }            return false;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -