UNOMI-79 : Implement save persona with sessions.
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/585d427b Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/585d427b Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/585d427b Branch: refs/heads/feature-UNOMI-5-KARAF4 Commit: 585d427ba9dfa18d3a9a8e1e1cf25c3de6cef1d7 Parents: 26db159 Author: rizak <rizak.ah...@gmail.com> Authored: Mon Feb 27 16:23:02 2017 +0100 Committer: rizak <rizak.ah...@gmail.com> Committed: Mon Feb 27 16:23:02 2017 +0100 ---------------------------------------------------------------------- .../apache/unomi/api/PersonaWithSessions.java | 4 ++-- .../unomi/api/services/ProfileService.java | 8 +++++++ .../unomi/rest/ProfileServiceEndPoint.java | 12 ++++++++++ .../services/services/ProfileServiceImpl.java | 23 ++++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/585d427b/api/src/main/java/org/apache/unomi/api/PersonaWithSessions.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/unomi/api/PersonaWithSessions.java b/api/src/main/java/org/apache/unomi/api/PersonaWithSessions.java index 64b6a85..18483a7 100644 --- a/api/src/main/java/org/apache/unomi/api/PersonaWithSessions.java +++ b/api/src/main/java/org/apache/unomi/api/PersonaWithSessions.java @@ -54,6 +54,6 @@ public class PersonaWithSessions { @XmlTransient public PersonaSession getLastSession() { - return sessions.get(0); + return sessions.size()>0?sessions.get(0):null; } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/585d427b/api/src/main/java/org/apache/unomi/api/services/ProfileService.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/unomi/api/services/ProfileService.java b/api/src/main/java/org/apache/unomi/api/services/ProfileService.java index 3422054..f400746 100644 --- a/api/src/main/java/org/apache/unomi/api/services/ProfileService.java +++ b/api/src/main/java/org/apache/unomi/api/services/ProfileService.java @@ -227,6 +227,14 @@ public interface ProfileService { PartialList<Session> getPersonaSessions(String personaId, int offset, int size, String sortBy); /** + * Save a persona with its sessions. + * + * @param personaToSave the persona object containing all the persona information and sessions + */ + PersonaWithSessions savePersonaWithSessions(PersonaWithSessions personaToSave); + + + /** * Retrieves all the property types associated with the specified target. * * TODO: move to a different class http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/585d427b/rest/src/main/java/org/apache/unomi/rest/ProfileServiceEndPoint.java ---------------------------------------------------------------------- diff --git a/rest/src/main/java/org/apache/unomi/rest/ProfileServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/ProfileServiceEndPoint.java index 260e7a1..3b234b2 100644 --- a/rest/src/main/java/org/apache/unomi/rest/ProfileServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/ProfileServiceEndPoint.java @@ -306,6 +306,18 @@ public class ProfileServiceEndPoint { } /** + * Save the posted persona with its sessions + * + * @param personaWithSessions the persona to save with its sessions. + * @return a {@link PersonaWithSessions} instance with the persona identified by the specified identifier and all its associated sessions + */ + @POST + @Path("/personasWithSessions") + public PersonaWithSessions savePersonaWithSessions(PersonaWithSessions personaWithSessions) { + return profileService.savePersonaWithSessions(personaWithSessions); + } + + /** * Persists the specified {@link Persona} in the context server. * * @param persona the persona to persist http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/585d427b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java ---------------------------------------------------------------------- diff --git a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java index efe1d86..4aed515 100644 --- a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java +++ b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java @@ -683,6 +683,29 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList return persistenceService.query("profileId", personaId, sortBy, Session.class, offset, size); } + public PersonaWithSessions savePersonaWithSessions(PersonaWithSessions personaToSave){ + if(personaToSave !=null){ + //Generate a UUID if no itemId is set on the persona + if(personaToSave.getPersona().getItemId() == null){ + personaToSave.getPersona().setItemId("persona-"+UUID.randomUUID().toString()); + } + boolean savedPersona = persistenceService.save(personaToSave.getPersona()); + //Browse persona sessions + List<PersonaSession> sessions = personaToSave.getSessions(); + for (PersonaSession session : sessions) { + //Generate a UUID if no itemId is set on the session + if(session.getItemId() == null){ + session.setItemId(UUID.randomUUID().toString()); + } + //link the session to the persona + session.setProfile(personaToSave.getPersona()); + persistenceService.save(session); + } + return personaToSave; + } + return null; + } + private void loadPredefinedPersonas(BundleContext bundleContext) { if (bundleContext == null) { return;