Advertisement
Seldon

Untitled

Dec 12th, 2012
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.81 KB | None | 0 0
  1. package com.gridnine.commons.visited;
  2.  
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.UUID;
  7.  
  8. import org.hibernate.Criteria;
  9. import org.hibernate.criterion.Order;
  10. import org.hibernate.criterion.Restrictions;
  11. import org.opencms.security.CmsPrincipal;
  12. import org.opencms.util.CmsUUID;
  13.  
  14. import com.gridnine.commons.hibernate.HibernateUtil;
  15. import com.gridnine.linkon.catalog.contacts.Person;
  16.  
  17. public class VisitedResourcesHandler {
  18.    
  19.     private static volatile VisitedResourcesHandler instance;
  20.    
  21.     private Map<UUID, UUID[]> news;
  22.    
  23.     private VisitedResourcesHandler() {
  24.        
  25.         List<Record> records = getRecords();
  26.        
  27.         for (Record rec : records) {
  28.             news.put(rec.getResource(), deserializeUUID(rec.getUsers()));
  29.         }
  30.        
  31.     }
  32.    
  33.     public static VisitedResourcesHandler getInstance() {
  34.         if (instance == null) {
  35.             synchronized (VisitedResourcesHandler.class) {
  36.                 if (instance == null) {
  37.                     instance = new VisitedResourcesHandler();
  38.                 }
  39.             }
  40.         }
  41.         return instance;
  42.     }
  43.    
  44.     private String serializeUUID(UUID[] uuids) {
  45.         return Arrays.toString(uuids);
  46.     }
  47.    
  48.     private UUID[] deserializeUUID(String uuidString) {
  49.        
  50.         String[] arrUUIDs = uuidString.split(",");
  51.         UUID[] uuids = new UUID[arrUUIDs.length];
  52.        
  53.         for (int i = 0; i < arrUUIDs.length; i++) {
  54.             uuids[i] = UUID.fromString(arrUUIDs[i]);
  55.         }
  56.        
  57.         return uuids;
  58.     }
  59.    
  60.     public boolean isRead(UUID resource, UUID user) {
  61.         UUID[] usersUUIDs = news.get(resource);
  62.         if (usersUUIDs != null) {
  63.             return Arrays.binarySearch(usersUUIDs, user) >= 0;
  64.         }
  65.         return false;
  66.     }
  67.    
  68.     public boolean isRead(CmsPrincipal resource, CmsPrincipal user) {
  69.         return isRead(resource.getId(), user.getId());
  70.     }
  71.    
  72.     public boolean isRead(CmsUUID resource, CmsUUID user) {
  73.         return isRead(UUID.fromString(resource.getStringValue()),
  74.                 UUID.fromString(user.getStringValue()));
  75.     }
  76.    
  77.     public void addReadPage(UUID userUUID, UUID resourceUUID) {
  78.         UUID[] usersUUIDs = news.get(resourceUUID);
  79.        
  80.         Record rec = null;
  81.         if (usersUUIDs == null) {
  82.             rec = new Record();
  83.             rec.setResource(resourceUUID);
  84.             rec.setUsers(userUUID.toString());
  85.             saveRecord(rec);
  86.             news.put(resourceUUID, new UUID[] { userUUID });
  87.         } else {
  88.             if (Arrays.binarySearch(usersUUIDs, userUUID) < 0) {
  89.                 rec = getRecord(resourceUUID);
  90.                 usersUUIDs = Arrays.copyOf(usersUUIDs, usersUUIDs.length + 1);
  91.                 usersUUIDs[usersUUIDs.length - 1] = userUUID;
  92.                 Arrays.sort(usersUUIDs);
  93.                 rec.setUsers(serializeUUID(usersUUIDs));
  94.                 saveRecord(rec);
  95.                 news.put(resourceUUID, usersUUIDs);
  96.             }
  97.         }
  98.        
  99.     }
  100.    
  101.     private static List<Record> getRecords() {
  102.        
  103.         Criteria crit =
  104.                 HibernateUtil.currentSession().createCriteria(Person.class);
  105.        
  106.         crit.addOrder(Order.asc("resource")); //$NON-NLS-1$
  107.        
  108.         return crit.list();
  109.     }
  110.    
  111.     private static Record getRecord(UUID resource) {
  112.        
  113.         Criteria crit =
  114.                 HibernateUtil.currentSession().createCriteria(Person.class);
  115.        
  116.         crit.add(Restrictions.eq("resource", resource));
  117.        
  118.         return (Record) crit.uniqueResult();
  119.     }
  120.    
  121.     private void saveRecord(Record rec) {
  122.         HibernateUtil.currentSession().saveOrUpdate(rec);
  123.         HibernateUtil.commitTransaction();
  124.     }
  125.    
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement