package service.filestore;
import java.util.List;
import java.util.TimeZone;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.api.security.user.Group;
import models.Flag;
import models.Notification;
import models.User;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.util.ISO8601Utils;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import play.libs.Json;
public class JsonBuilder {
public JsonBuilder() {}
public ObjectNode toJson(final User user, final boolean isAdmin) {
final ObjectNode json = Json.newObject();
json.put("id", user.getId());
json.put("name", user.getName());
json.put("email", user.getEmail());
json.put("isAdmin", isAdmin);
json.put("isVerified", user.isVerified());
return json;
}
public ObjectNode toJson(final Notification notification) {
final ObjectNode json = Json.newObject();
json.put("id", notification.getId());
json.put("message", notification.getMessage());
json.put("read", notification.isRead());
json.put("timestamp",
ISO8601Utils.format(
notification.getCreated(), true,
TimeZone.getDefault()));
return json;
}
public ArrayNode toJson(final Iterable<FileStore.Folder> folders)
throws RepositoryException {
return toJson(folders, true);
}
public ArrayNode toJson(final Iterable<FileStore.Folder> folders, boolean hideParents)
throws RepositoryException {
final ArrayNode l = JsonNodeFactory.instance.arrayNode();
for (final FileStore.Folder folder : folders) {
l.addAll(toJson(folder, hideParents));
}
return l;
}
public ArrayNode toJson(final FileStore.Folder folder)
throws RepositoryException {
return toJson(folder, true);
}
public ArrayNode toJson(final FileStore.Folder folder, boolean hideParent)
throws RepositoryException {
final ArrayNode l = JsonNodeFactory.instance.arrayNode();
l.add(toJsonShallow(folder, hideParent));
l.addAll(toJson(folder.getFolders(), false));
for (final FileStore.File childFile : folder.getFiles()) {
l.add(toJsonShallow(childFile));
}
return l;
}
public ObjectNode toJson(final Flag flag)
throws RepositoryException {
final ObjectNode json = Json.newObject();
json.put("id", flag.getId());
json.put("targetId", flag.getTargetId());
json.put("userId", flag.getUser().getId());
return json;
}
public ObjectNode toJsonShallow(
final FileStore.Folder folder,
boolean hideParent)
throws RepositoryException {
final ObjectNode json = JsonNodeFactory.instance.objectNode();
json.put("id", folder.getIdentifier());
json.put("name", folder.getName());
json.put("path", folder.getPath());
json.put("type", "folder");
if (folder.getParent() != null && !hideParent) {
json.put("parent", folder.getParent().getIdentifier());
}
json.put("accessLevel", folder.getAccessLevel().toString());
return json;
}
public ObjectNode toJsonShallow(final FileStore.File file)
throws RepositoryException {
final ObjectNode json = JsonNodeFactory.instance.objectNode();
json.put("id", file.getIdentifier());
json.put("name", file.getName());
json.put("path", file.getPath());
json.put("mime", file.getMimeType());
json.put("sha512", file.getDigest());
json.put("type", "file");
json.put("parent", file.getParent().getIdentifier());
json.put("accessLevel", file.getAccessLevel().toString());
json.put("modified",
ISO8601Utils.format(
file.getModificationTime().getTime(), true,
TimeZone.getDefault()));
return json;
}
public JsonNode toJson(Group group, List<User> members)
throws RepositoryException {
final ObjectNode json = Json.newObject();
json.put("id", group.getID());
json.put("name", group.getPrincipal().getName());
final ArrayNode memberIds = json.putArray("members");
for (User user : members) {
memberIds.add(user.getId());
}
return json;
}
}