ca.myewb.controllers.chapter.FindDupes.java Source code

Java tutorial

Introduction

Here is the source code for ca.myewb.controllers.chapter.FindDupes.java

Source

/*
    
This file is part of OpenMyEWB.
    
OpenMyEWB is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
OpenMyEWB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with OpenMyEWB.  If not, see <http://www.gnu.org/licenses/>.
    
OpenMyEWB is Copyright 2005-2009 Nicolas Kruchten (nicolas@kruchten.com), Francis Kung, Engineers Without Borders Canada, Michael Trauttmansdorff, Jon Fishbein, David Kadish
    
*/

package ca.myewb.controllers.chapter;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import org.apache.velocity.context.Context;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Projections;

import ca.myewb.controllers.common.Member;
import ca.myewb.frame.HibernateUtil;
import ca.myewb.frame.Controller;
import ca.myewb.model.UserModel;

public class FindDupes extends Controller {
    public void handle(Context ctx) throws Exception {
        UserModel targetUser = (UserModel) getAndCheckFromUrl(UserModel.class);

        Member.viewMember(ctx, targetUser, false, false);

        findEmailMatch(ctx, targetUser.getLastname(), "lastnameInEmail");
        findEmailMatch(ctx, targetUser.getUsername(), "usernameInEmail");
        findEmailMatch(ctx, targetUser.getEmail().split("@")[0], "emailUserInEmail");
        findNameMatch(ctx, targetUser, "sameNames");
        findUsernameMatch(ctx, targetUser, "emailUserInUsername");
    }

    private void findEmailMatch(Context ctx, String toMatch, String key) {
        int maxSize = 11;
        String query = "SELECT userid FROM useremails e WHERE e.email LIKE '%" + toMatch + "%'";
        List ids = HibernateUtil.currentSession().createSQLQuery(query).list();
        if (ids.isEmpty()) {
            ctx.put(key, new Vector());
            return;
        }

        Criteria crit = hibernateSession.createCriteria(UserModel.class);
        List uniqueResultsList = crit.add(Restrictions.in("id", ids)).add(Restrictions.ne("id", new Integer(1)))
                .setProjection(Projections.groupProperty("id")).setMaxResults(maxSize).list();

        Vector<UserModel> uniqueResults = new Vector<UserModel>();

        if (uniqueResultsList.size() < maxSize) {
            Iterator iter = uniqueResultsList.iterator();

            while (iter.hasNext()) {
                Integer i = (Integer) iter.next();

                // This try/catch block is a workaround to the deleted-admin-causes-cgilib-blowup bug
                try {
                    uniqueResults.add((UserModel) hibernateSession.get(UserModel.class, i));
                } catch (Exception e) {
                    log.warn("Unable to add user to usersearch: id " + i.toString());
                }
            }
            ctx.put(key, uniqueResults);
        }
    }

    private void findNameMatch(Context ctx, UserModel targetUser, String key) {
        int maxSize = 11;

        Criteria crit = hibernateSession.createCriteria(UserModel.class);
        List uniqueResultsList = crit.add(Restrictions.eq("firstname", targetUser.getFirstname()))
                .add(Restrictions.eq("lastname", targetUser.getLastname()))
                .add(Restrictions.ne("id", new Integer(1))).setProjection(Projections.groupProperty("id"))
                .setMaxResults(maxSize).list();

        Vector<UserModel> uniqueResults = new Vector<UserModel>();

        if (uniqueResultsList.size() < maxSize) {
            Iterator iter = uniqueResultsList.iterator();

            while (iter.hasNext()) {
                Integer i = (Integer) iter.next();

                // This try/catch block is a workaround to the deleted-admin-causes-cgilib-blowup bug
                try {
                    uniqueResults.add((UserModel) hibernateSession.get(UserModel.class, i));
                } catch (Exception e) {
                    log.warn("Unable to add user to usersearch: id " + i.toString());
                }
            }
            ctx.put(key, uniqueResults);
        }
    }

    private void findUsernameMatch(Context ctx, UserModel targetUser, String key) {
        int maxSize = 11;

        Criteria crit = hibernateSession.createCriteria(UserModel.class);
        List uniqueResultsList = crit
                .add(Restrictions.like("username", "%" + targetUser.getEmail().split("@")[0] + "%"))
                .add(Restrictions.ne("id", new Integer(1))).setProjection(Projections.groupProperty("id"))
                .setMaxResults(maxSize).list();

        Vector<UserModel> uniqueResults = new Vector<UserModel>();

        if (uniqueResultsList.size() < maxSize) {
            Iterator iter = uniqueResultsList.iterator();

            while (iter.hasNext()) {
                Integer i = (Integer) iter.next();

                // This try/catch block is a workaround to the deleted-admin-causes-cgilib-blowup bug
                try {
                    uniqueResults.add((UserModel) hibernateSession.get(UserModel.class, i));
                } catch (Exception e) {
                    log.warn("Unable to add user to usersearch: id " + i.toString());
                }
            }
            ctx.put(key, uniqueResults);
        }
    }

    public Set<String> invisibleGroups() {
        Set<String> s = new HashSet<String>();
        s.add("Admin");

        return s;
    }

    public String displayName() {
        return "Possible Dupes";
    }

    public int weight() {
        return -100;
    }
}