/* ** ** Copyright 2013, Jules White ** ** */ package org.magnum.soda.example.maint; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import org.magnum.soda.Callback; import org.magnum.soda.Soda; import org.magnum.soda.SodaQuery; import org.magnum.soda.ctx.SodaQR; import org.magnum.soda.proxy.SodaAsync; public class MaintenanceReportsImpl implements MaintenanceReports { private List<MaintenanceListener> listeners_ = new LinkedList<MaintenanceListener>(); private List<MaintenanceReport> reports_ = new LinkedList<MaintenanceReport>(); private Map<UUID, List<String>> followers_ = new HashMap<UUID, List<String>>(); private Map<UUID, List<UserListener>> followerlisteners_ = new HashMap<UUID, List<UserListener>>(); @Override public void addReport(MaintenanceReport r) { System.out.println("content :" + r.getContents() + " :" + r.getCreatorId()); reports_.add(r); for (MaintenanceListener l : listeners_) { l.reportAdded(r); } } @Override public void deleteReport(UUID id) { Iterator<MaintenanceReport> it = reports_.iterator(); while (it.hasNext()) { if (it.next().getId().equals(id)) { reports_.remove(it.next()); break; } } if(followerlisteners_.containsKey(id)) { for (UserListener l : followerlisteners_.get(id)) { //l.notifyFollowers(r); } followerlisteners_.remove(id); } } public void bindQRContext(Soda s, MaintenanceReport r) { SodaQR qr = SodaQR.create(r.getContents()); s.bind(r).to(qr); } @Override @SodaAsync public void getReports(Callback<List<MaintenanceReport>> callback) { callback.handle(reports_); } @Override public List<MaintenanceReport> getReports() { return reports_; } @Override public void addListener(MaintenanceListener l) { listeners_.add(l); } @Override public void removeListener(MaintenanceListener l) { listeners_.remove(l); } @Override @SodaAsync public void getReports(Callback<List<MaintenanceReport>> callback, Soda s, byte[] b) { SodaQR _objQR = SodaQR.fromImageData(b); SodaQuery<MaintenanceReport> _objSQ = s.find(MaintenanceReport.class, _objQR); callback.handle(_objSQ.getList_()); } @Override @SodaAsync public void getReports(String username, Callback<List<MaintenanceReport>> callback) { List<MaintenanceReport> queryresult = new LinkedList<MaintenanceReport>(); Iterator<MaintenanceReport> itr = reports_.iterator(); while (itr.hasNext()) { MaintenanceReport mreport = itr.next(); if (mreport.getCreatorId().equals(username)) { queryresult.add(mreport); } } callback.handle(queryresult); } @Override public void modifyReport(MaintenanceReport r) { // TODO Auto-generated method stub boolean success = false; System.out.println("content :" + r.getContents() + " :" + r.getCreatorId()); Iterator<MaintenanceReport> it = reports_.iterator(); while (it.hasNext()) { MaintenanceReport temp = it.next(); if (temp.getId().equals(r.getId())) { temp.setImageData(r.getImageData()); temp.setContents(r.getContents()); success = true; break; } } if (success) { for (MaintenanceListener l : listeners_) { l.reportchanged(r); } if(followerlisteners_.containsKey(r.getId())) { for (UserListener l : followerlisteners_.get(r.getId())) { l.notifyFollowers(r); } } } } @Override public void addFollower(MaintenanceReport r, String u) { // TODO Auto-generated method stub List<String> lusr = null; if (followers_.containsKey(r.getId())) { lusr = followers_.get(r.getId()); } else { lusr = new ArrayList<String>(); } lusr.add(u); followers_.put(r.getId(), lusr); if (followerlisteners_.containsKey(r.getId())) { for (UserListener l : followerlisteners_.get(r.getId())) { l.notifyFollowers(r); } } } @Override public void removeFollower(MaintenanceReport r, String u) { // TODO Auto-generated method stub followers_.remove(r.getId()); if(followers_.containsKey(r.getId())) { List<String> lusr=followers_.get(r.getId()); if(lusr.contains(u)) lusr.remove(u); } if (followerlisteners_.containsKey(r.getId())) { for (UserListener l : followerlisteners_.get(r.getId())) { l.notifyFollowers(r); } } } @Override public void addFollowerListener(UUID id, UserListener l) { // TODO Auto-generated method stub List<UserListener> lusr = null; if (followerlisteners_.containsKey(id)) { lusr = followerlisteners_.get(id); } else { lusr = new ArrayList<UserListener>(); } lusr.add(l); followerlisteners_.put(id, lusr); } @Override public void removeFollowerListener(UUID id, UserListener l) { // TODO Auto-generated method stub if (followerlisteners_.containsKey(id)) { List<UserListener> lu = followerlisteners_.get(id); //Iterator itr=lu.iterator(); if (lu.contains(l)) lu.remove(l); } } @Override public List<String> getFollowers(UUID r) { // TODO Auto-generated method stub if(followers_.containsKey(r)) return followers_.get(r); return null; } @Override public List<MaintenanceReport> getFollowing(String user) { // TODO Auto-generated method stub System.out.println("inside getfollowing.111"); List<MaintenanceReport> result=new ArrayList<MaintenanceReport>(); Iterator<UUID> itr=followers_.keySet().iterator(); while(itr.hasNext()) { UUID i=itr.next(); System.out.println("UUID:" + i); Iterator<String> users=followers_.get(i).iterator(); while(users.hasNext()) { if(users.next().equals(user)){ System.out.println("User:" + user); result.add(getReportsById(i)); } } } return null; } @Override public MaintenanceReport getReportsById(UUID id) { // TODO Auto-generated method stub MaintenanceReport result=null; Iterator<MaintenanceReport> rep=reports_.iterator(); while(rep.hasNext()) { result=rep.next(); if(result.getId().equals(id)) return result; } return null; } }