/*
* Created on Aug 15, 2004
*/
package com.idega.core.idgenerator.business;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.business.IBOServiceBean;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.user.data.Group;
import com.idega.user.data.GroupHome;
import com.idega.user.data.User;
import com.idega.user.data.UserHome;
import com.idega.util.Timer;
/**
* This beans contains methods to apply unique ids
*
* @author <a href="mailto:eiki@idega.is">Eirikur S. Hrafnsson </a>
*
*/
public class UUIDBusinessBean extends IBOServiceBean implements UUIDBusiness {
private IdGenerator uidGenerator = IdGeneratorFactory.getUUIDGenerator();
/**
*
*/
public UUIDBusinessBean() {
super();
}
/**
* Adds a UUID to all users and groups
*/
public void generateUUIDsForAllUsersAndGroups() {
try {
generateUUIDsForAllUsers();
generateUUIDsForAllGroups();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Adds a UUID to the group or user or copies the uuid you pass into the
* method. Then stores the user/group
*/
public void addUniqueKeyIfNeeded(Group group, String uniqueIdToCopy) {
if (group.getUniqueId() == null) {
String uniqueId;
if (uniqueIdToCopy == null) {
uniqueId = this.uidGenerator.generateId();
}
else {
uniqueId = uniqueIdToCopy;
}
group.setUniqueId(uniqueId);
group.store();
}
}
/**
* Removes all UUID from all users and groups.
*/
public void removeUniqueIDsForUsersAndGroups() {
try {
removeUUIDsFromAllUsers();
removeUUIDsFromAllGroups();
}
catch (Exception e) {
e.printStackTrace();
}
}
public void generateUUIDsForAllGroups() throws FinderException, IDOLookupException {
int counter = 0;
int reportAfter = 500;
Timer timer = new Timer();
timer.start();
Collection groups = ((GroupHome) IDOLookup.getHome(Group.class)).findAll();
timer.stop();
System.out.println("Time for collecting groups : " + timer.getTime()/1000+"s");
timer.reset();
timer.start();
if (!groups.isEmpty()) {
Iterator iter = groups.iterator();
while (iter.hasNext()) {
counter++;
Group group = (Group) iter.next();
addUniqueKeyIfNeeded(group, null);
if ((counter % reportAfter) == 0) {
System.out.println("Time passed for creating UUIDs for " + counter + " groups : " + timer.getTime()/1000+"s");
}
}
groups = null;
}
timer.stop();
System.out.println("Time for groups : " + timer.getTime()/1000+"s");
}
public void generateUUIDsForAllUsers() throws FinderException, IDOLookupException {
int counter = 0;
int reportAfter = 500;
Timer timer = new Timer();
timer.start();
Collection users = ((UserHome) IDOLookup.getHome(User.class)).findAllUsers();
timer.stop();
System.out.println("Done fetching users, time : " + timer.getTimeString());
timer.reset();
timer.start();
if (!users.isEmpty()) {
Iterator iter = users.iterator();
while (iter.hasNext()) {
counter++;
User user = (User) iter.next();
addUniqueKeyIfNeeded(user, null);
if ((counter % reportAfter) == 0) {
System.out.println("Time passed for creating UUIDs for " + counter + " users : " + timer.getTime()/1000+"s");
}
user = null;
}
users = null;
}
timer.stop();
System.out.println("Time for users : " + timer.getTime()/1000+"s");
}
public void removeUUIDsFromAllGroups() throws FinderException, IDOLookupException {
int counter = 0;
int reportAfter = 100;
Timer timer = new Timer();
timer.start();
Collection groups = ((GroupHome) IDOLookup.getHome(Group.class)).findAll();
timer.stop();
System.out.println("Time for collecting groups : " + timer.getTime()/1000+"s");
timer.reset();
timer.start();
if (!groups.isEmpty()) {
Iterator iter = groups.iterator();
while (iter.hasNext()) {
counter++;
Group group = (Group) iter.next();
removeUniqueIdIfPresent(group);
if ((counter % reportAfter) == 0) {
System.out.println("Time passed removing UUIDs for " + counter + " groups : " + timer.getTime()/1000+"s");
}
}
groups = null;
}
timer.stop();
System.out.println("Time for groups : " + timer.getTime()/1000+"s");
}
public void removeUUIDsFromAllUsers() throws FinderException, IDOLookupException {
int counter = 0;
int reportAfter = 100;
Timer timer = new Timer();
timer.start();
Collection users = ((UserHome) IDOLookup.getHome(User.class)).findAllUsers();
timer.stop();
System.out.println("Done fetching users, time : " + timer.getTimeString());
timer.reset();
timer.start();
if (!users.isEmpty()) {
Iterator iter = users.iterator();
while (iter.hasNext()) {
counter++;
User user = (User) iter.next();
removeUniqueIdIfPresent(user);
if ((counter % reportAfter) == 0) {
System.out.println("Time passed removing UUIDs for " + counter + " users : " + timer.getTime()/1000+"s");
}
user = null;
}
users = null;
}
timer.stop();
System.out.println("Time for users : " + timer.getTime()/1000+"s");
}
/**
* Removes the UUID from the user/group if it has been set and stores the
* user/group if needed
*
* @param user
*/
public void removeUniqueIdIfPresent(Group group) {
if (group.getUniqueId() != null) {
group.setUniqueId(null);
group.store();
}
}
}