diff options
Diffstat (limited to 'src/main/java/com/speedment/examples/socialserver/Server.java')
-rw-r--r-- | src/main/java/com/speedment/examples/socialserver/Server.java | 213 |
1 files changed, 104 insertions, 109 deletions
diff --git a/src/main/java/com/speedment/examples/socialserver/Server.java b/src/main/java/com/speedment/examples/socialserver/Server.java index 9276a13..0407e3a 100644 --- a/src/main/java/com/speedment/examples/socialserver/Server.java +++ b/src/main/java/com/speedment/examples/socialserver/Server.java @@ -27,58 +27,58 @@ import java.util.stream.Stream; public class Server extends ServerBase { protected final Random random = new SecureRandom(); - private final Map<String, Long> sessions = new HashMap<>(); - + private final Map<String, Long> sessions = new HashMap<>(); + private final Speedment speed; - + private final Manager<User> users; private final Manager<Image> images; private final Manager<Link> links; - + private final JsonEncoder<User> jsonUserEncoder; private final JsonEncoder<Image> jsonImageEncoder; - - public Server() { - speed = new SocialnetworkApplication().build(); - users = speed.managerOf(User.class); + + public Server() { + speed = new SocialnetworkApplication().build(); + users = speed.managerOf(User.class); images = speed.managerOf(Image.class); - links = speed.managerOf(Link.class); - + links = speed.managerOf(Link.class); + jsonUserEncoder = JsonEncoder.allOf(users) - .remove(User.PASSWORD); - + .remove(User.PASSWORD); + jsonImageEncoder = JsonEncoder - .allOf(images) - .put(Image.UPLOADER, - JsonEncoder.allOf(users) - .remove(User.AVATAR) - .remove(User.PASSWORD) - ); - } - + .allOf(images) + .put(Image.UPLOADER, + JsonEncoder.allOf(users) + .remove(User.AVATAR) + .remove(User.PASSWORD) + ); + } + private String createSession(User user) { - final String key = nextSessionId(); - sessions.put(key, user.getId()); - return key; - } - - private Optional<User> getLoggedIn(String key) { + final String key = nextSessionId(); + sessions.put(key, user.getId()); + return key; + } + + private Optional<User> getLoggedIn(String key) { final Optional<Long> userId = Optional.ofNullable(sessions.get(key)); - - return userId.flatMap(id -> - users.stream() + + return userId.flatMap(id + -> users.stream() .filter(User.ID.equal(id)) .findAny() ); - } + } @Override public String onRegister(String mail, String password) { try { return createSession(users.newInstance() - .setMail(mail) - .setPassword(password) - .persist() + .setMail(mail) + .setPassword(password) + .persist() ); } catch (SpeedmentException ex) { return "false"; @@ -88,148 +88,143 @@ public class Server extends ServerBase { @Override public String onLogin(String mail, String password) { return users.stream() - .filter(User.MAIL.equalIgnoreCase(mail)) - .filter(User.PASSWORD.equal(password)) - .findAny() - .map(this::createSession) - .orElse("false") - ; + .filter(User.MAIL.equalIgnoreCase(mail)) + .filter(User.PASSWORD.equal(password)) + .findAny() + .map(this::createSession) + .orElse("false"); } @Override public String onSelf(String sessionKey) { return getLoggedIn(sessionKey) - .map(jsonUserEncoder::apply) - .orElse("false"); + .map(jsonUserEncoder::apply) + .orElse("false"); } @Override public String onUpload(String title, String description, String imgData, String sessionKey) { final Optional<User> user = getLoggedIn(sessionKey); - + if (user.isPresent()) { try { images.newInstance() - .setTitle(title) - .setDescription(description) - .setImgData(imgData) - .setUploader(user.get().getId()) - .setUploaded(Timestamp.from(Instant.now())) - .persist(); - + .setTitle(title) + .setDescription(description) + .setImgData(imgData) + .setUploader(user.get().getId()) + .setUploaded(Timestamp.from(Instant.now())) + .persist(); + return "true"; } catch (SpeedmentException ex) { return "false"; } } - + return "false"; } @Override public String onFind(String freeText, String sessionKey) { final Optional<User> user = getLoggedIn(sessionKey); - + if (user.isPresent()) { final User me = user.get(); - + final Stream<User> found = users.stream() - // If the freetext matches any field. - .filter( - User.FIRSTNAME.startsWith(freeText).or( - User.LASTNAME.startsWith(freeText)).or( - User.MAIL.startsWith(freeText)) - ) - - // And this is not us. - .filter(User.ID.notEqual(me.getId())) - - // Remove people we already follow - .filter(them -> !me.findLinksByFollower() - .anyMatch(Link.FOLLOWS.equal(them.getId())) - ) - - // Limit result to 10 persons. - .limit(10); - + // If the freetext matches any field. + .filter( + User.FIRSTNAME.startsWith(freeText).or( + User.LASTNAME.startsWith(freeText)).or( + User.MAIL.startsWith(freeText)) + ) + // And this is not us. + .filter(User.ID.notEqual(me.getId())) + // Remove people we already follow + .filter(them -> !me.findLinksByFollower() + .anyMatch(Link.FOLLOWS.equal(them.getId())) + ) + // Limit result to 10 persons. + .limit(10); + final String result = found - .map(jsonUserEncoder::apply) - .collect(joining(", ")); - + .map(jsonUserEncoder::apply) + .collect(joining(", ")); + return "{\"users\":[" + result + "]}"; } - + return "false"; } @Override public String onFollow(long userId, String sessionKey) { final Optional<User> user = getLoggedIn(sessionKey); - + if (user.isPresent()) { final User me = user.get(); - + try { links.newInstance() - .setFollower(me.getId()) - .setFollows(userId) - .persist(); - + .setFollower(me.getId()) + .setFollows(userId) + .persist(); + return "true"; } catch (SpeedmentException ex) { return "false"; } } - + return "false"; } @Override public String onBrowse(String sessionKey, Optional<Timestamp> from, Optional<Timestamp> to) { final Optional<User> user = getLoggedIn(sessionKey); - + if (user.isPresent()) { final User me = user.get(); - + final Stream<User> visibleUsers = Stream.concat( - Stream.of(me), - me.findLinksByFollower().map(Link::findFollows) + Stream.of(me), + me.findLinksByFollower().map(Link::findFollows) ); - - final Stream<Image> images = visibleUsers - .flatMap(User::findImages) - .filter(img -> !from.isPresent() || img.getUploaded().after(from.get())) - .filter(img -> !to.isPresent() || img.getUploaded().before(to.get())) - ; - - final String result = images - .map(jsonImageEncoder::apply) - .collect(joining(",")); - + + final Stream<Image> imagesToBrowse = visibleUsers + .flatMap(User::findImages) + .filter(img -> !from.isPresent() || img.getUploaded().after(from.get())) + .filter(img -> !to.isPresent() || img.getUploaded().before(to.get())); + + final String result = imagesToBrowse + .map(jsonImageEncoder::apply) + .collect(joining(",")); + return "{\"images\":[" + result + "]}"; } - + return "false"; } @Override - public String onUpdate(String mail, String firstname, String lastName, - Optional<String> avatar, String sessionKey) { - + public String onUpdate(String mail, String firstname, String lastName, + Optional<String> avatar, String sessionKey) { + final Optional<User> user = getLoggedIn(sessionKey); - + if (user.isPresent()) { final User me = user.get(); - + final User copy = me.copy() - .setMail(mail) - .setFirstName(firstname) - .setLastName(lastName); - + .setMail(mail) + .setFirstName(firstname) + .setLastName(lastName); + if (avatar.isPresent()) { copy.setAvatar(avatar.get()); } - + try { final User updated = copy.update(); return jsonUserEncoder.apply(updated); @@ -237,7 +232,7 @@ public class Server extends ServerBase { return "false"; } } - + return "false"; } @@ -251,4 +246,4 @@ public class Server extends ServerBase { public static void main(String... args) { ServerRunner.run(Server.class); } -}
\ No newline at end of file +} |