summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/speedment/examples/social/JSONImage.java
blob: 7846930cde31641088dd006ca190aac86014524e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
 *
 * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); You may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.speedment.examples.social;

import static com.speedment.examples.social.util.Base64Util.fromBase64;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javafx.scene.image.Image;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

/**
 *
 * @author Emil Forslund
 */
public class JSONImage implements Comparable<JSONImage> {
	private String title, description;
	private Image image;
	private LocalDateTime uploaded;
	private JSONUser uploader;
	
	private JSONImage() {}
	
	public String getTitle() {
		return title;
	}
	
	public String getDescription() {
		return description;
	}
	
	public Image getImage() {
		return image;
	}
	
	public LocalDateTime getUploaded() {
		return uploaded;
	}
	
	public JSONUser getUploader() {
		return uploader;
	}
	
	public static List<JSONImage> parseFrom(String json) {

		final JSONObject container = (JSONObject) JSONValue.parse(json);
		final JSONArray array = (JSONArray) container.get("images");
		final List<JSONImage> images = new ArrayList<>();

		array.stream().forEach(o -> {
			final JSONObject obj = (JSONObject) o;
			final JSONImage img = new JSONImage();
            final long time = Long.parseLong(obj.get("uploaded").toString());
            
            final LocalDateTime ldt = LocalDateTime.ofEpochSecond(time / 1000L, (int) (time % 1000) * 1000, ZoneOffset.UTC);
            
			img.title		= obj.get("title").toString();
			img.description = obj.get("description").toString();
			img.uploaded	= ldt;
			img.uploader    = JSONUser.parse((JSONObject) obj.get("uploader"));
			img.image       = fromBase64(obj.get("imgData").toString());
			images.add(img);
		});
		
		Collections.sort(images, Comparator.reverseOrder());
		
		return images;
	}

	@Override
	public int compareTo(JSONImage o) {
		return (int) Duration.between(o.uploaded, uploaded).getSeconds();
	}
}