From c27464f1a232924d57fdb5d1f78e9185a347a049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Micha=C5=82ek?= Date: Thu, 12 Feb 2015 10:37:51 +0100 Subject: [PATCH] send notofication to mobile --- src/main/java/application/Config.java | 4 +- .../java/application/events/EventManager.java | 63 ++++++++++++------- .../events/impl/MainDoorEntryEvent.java | 2 +- .../java/application/model/Notification.java | 25 ++++++++ 4 files changed, 68 insertions(+), 26 deletions(-) create mode 100644 src/main/java/application/model/Notification.java diff --git a/src/main/java/application/Config.java b/src/main/java/application/Config.java index e73d229..6f037d9 100644 --- a/src/main/java/application/Config.java +++ b/src/main/java/application/Config.java @@ -1,7 +1,5 @@ package application; -import application.events.impl.EntryEvent; -import application.model.User; import application.repositories.*; import application.utils.Initializer; import application.utils.TokensGenerator; @@ -30,7 +28,7 @@ import org.springframework.web.servlet.view.JstlView; @EnableScheduling @EnableWebMvc public class Config extends SpringBootServletInitializer { - + public final static String GCM_KEY = "AIzaSyBOK0PgwyTopom2thLGBmLS3lOzTkDKm0M"; @Scheduled(fixedRate = 50000) public void generatePassword() { diff --git a/src/main/java/application/events/EventManager.java b/src/main/java/application/events/EventManager.java index a5273c2..3a8bedc 100644 --- a/src/main/java/application/events/EventManager.java +++ b/src/main/java/application/events/EventManager.java @@ -1,14 +1,20 @@ package application.events; +import application.Config; import application.events.impl.DoorLockedEvent; import application.events.impl.EntryEvent; import application.events.impl.MainDoorEntryEvent; +import application.model.Notification; import application.model.User; import application.repositories.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.reflections.Reflections; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestTemplate; import java.util.HashSet; @@ -39,13 +45,14 @@ public class EventManager { Set> eventClassSet; Set eventsSet; + public EventManager() { /* eventClassSet = findEventClasses(); eventsSet = instantiateEvents(eventClassSet);*/ System.out.println("Class EventManagerCreated"); } - public Set> findEventClasses(){ + public Set> findEventClasses() { System.out.println("Class Finder started..."); Reflections reflections = new Reflections("application.events.impl"); Set> classes = reflections.getSubTypesOf(EventObject.class); @@ -53,12 +60,12 @@ public class EventManager { return classes; } - public Set instantiateEvents(Set> classes){ + public Set instantiateEvents(Set> classes) { Set eventObjectSet = new HashSet<>(); for (Class c : classes) { try { - EventObject obj=c.newInstance(); - System.out.println("Crated new Event: "+c.getName()); + EventObject obj = c.newInstance(); + System.out.println("Crated new Event: " + c.getName()); eventObjectSet.add(obj); } catch (InstantiationException e) { e.printStackTrace(); @@ -69,42 +76,54 @@ public class EventManager { return eventObjectSet; } - public void startEvents(){ - for(EventObject e:eventsSet){ + public void startEvents() { + for (EventObject e : eventsSet) { e.validEvent(); - if(e.isValid())e.handleEvent(); + if (e.isValid()) e.handleEvent(); } } - public void sendNotification(EventObject eventObject,User user){ + public void sendNotification(EventObject eventObject, User user) { String uri = "https://android.googleapis.com/gcm/send"; System.out.print(eventObject.createMessage() + user); RestTemplate restTemplate = new RestTemplate(); - restTemplate.getForObject(uri, - String.class); + Notification notification = new Notification(eventObject, user); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Authorization", "key=" + Config.GCM_KEY); + HttpEntity entity; + try { + entity = new HttpEntity<>(new ObjectMapper().writeValueAsString(notification), headers); + } catch (JsonProcessingException e) { + entity = new HttpEntity<>("Ni mo dżejsonów", headers); + } + + restTemplate.postForObject(uri, entity, Object.class, headers); } - public void processEvent(long userId , long doorId){ - if(doorId==1){ - for(MainDoorEntryEvent e: mainDoorEntryEventRepository.findAll()){ - if(e.getWho()==userId){ - sendNotification(e,userRepository.findOne(e.getUser())); + public void processEvent(long userId, long doorId) { + if (doorId == 1) { + for (MainDoorEntryEvent e : mainDoorEntryEventRepository.findAll()) { + if (e.getWho() == userId) { + sendNotification(e, userRepository.findOne(e.getUser())); } } - }else { + } else { for (EntryEvent e : entryEventRepository.findAll()) { if (e.getWho() == userId && e.getDoor() == doorId) - sendNotification(e,userRepository.findOne(e.getUser())); + sendNotification(e, userRepository.findOne(e.getUser())); } } } - public void doorLockedEvent(DoorLockedEvent doorLockedEvent){ - for(User user:userRepository.findAll()){ - sendNotification(doorLockedEvent,user); + public void doorLockedEvent(DoorLockedEvent doorLockedEvent) { + for (User user : userRepository.findAll()) { + sendNotification(doorLockedEvent, user); } } - public void doorUnlockedEvent(DoorLockedEvent doorLockedEvent){ + + public void doorUnlockedEvent(DoorLockedEvent doorLockedEvent) { } } diff --git a/src/main/java/application/events/impl/MainDoorEntryEvent.java b/src/main/java/application/events/impl/MainDoorEntryEvent.java index 3831192..d62f0ac 100644 --- a/src/main/java/application/events/impl/MainDoorEntryEvent.java +++ b/src/main/java/application/events/impl/MainDoorEntryEvent.java @@ -34,7 +34,7 @@ public class MainDoorEntryEvent implements EventObject { @Override public String createMessage() { - return null; + return "User " + who + " entered Main Door"; } diff --git a/src/main/java/application/model/Notification.java b/src/main/java/application/model/Notification.java new file mode 100644 index 0000000..ac210ae --- /dev/null +++ b/src/main/java/application/model/Notification.java @@ -0,0 +1,25 @@ +package application.model; + +import application.events.EventObject; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * Created by Marcin on 2015-02-12. + */ +public class Notification implements Serializable { + public ArrayList registration_ids; + public Data data; + + public static class Data{ + public String message; + } + + public Notification(EventObject eventObject, User user) { + registration_ids = new ArrayList<>(); + registration_ids.add(user.getRegistratioId()); + data = new Data(); + data.message = eventObject.createMessage(); + } +} \ No newline at end of file