package models; import java.util.Date; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import com.avaje.ebean.Model; import com.fasterxml.jackson.databind.JsonNode; import play.data.format.Formats.DateTime; import play.data.validation.Constraints.Required; import play.libs.Json; @Entity public class Image extends Model { @Id public Long id; @Required public String checksum; public String name; public String extension; public String imagePath; public String thumbnailPath; public String refImagePath; public String sobelImagePath; public int imageWidth; public int imageHeight; public int thumbnailWidth; public int thumbnailHeight; public String mainColor; public String avgColor; public String medColor; @Column(columnDefinition = "TEXT") public String signature; @DateTime(pattern = "dd/MM/yyyy") public Date created = new Date(); @OneToMany(mappedBy="image") @OrderBy("count DESC") public List colors; public static Finder Find = new Finder(Image.class); public static Image findOrCreate(final String checksum) { Image image = Find.where().eq("checksum", checksum).findUnique(); if(image == null) { image = new Image(); image.checksum = checksum; image.save(); } return image; } public void setSignature(java.awt.Color[][] sigArray) { if(sigArray != null) { this.signature = Json.toJson(sigArray).toString().trim(); } } public Color[][] getSignature() { int x = 0; int y = 0; Color[][] sig = new Color[5][5]; JsonNode sigArray = Json.parse(this.signature); if (sigArray.isArray()) { for (final JsonNode xNode : sigArray) { if (xNode.isArray()) { for (final JsonNode yNode : xNode) { sig[y][x] = Color.findOrCreate(yNode.get("red").asInt(), yNode.get("green").asInt(), yNode.get("blue").asInt()); y++; } } y = 0; x++; } } return sig; } public String signatureAsMatrix() { StringBuilder sb = new StringBuilder(); Color[][] sig = getSignature(); for(int x = 0; x < sig.length; x++) { for(int y = 0; y < sig[x].length; y++) { sb.append(sig[x][y].toString()) .append(","); } sb.append("\n"); } return sb.toString(); } public String signatureAsString() { StringBuilder sb = new StringBuilder(); Color[][] sig = getSignature(); for(int x = 0; x < sig.length; x++) { for(int y = 0; y < sig[x].length; y++) { sb.append(x).append(":").append(y).append("=") .append(sig[x][y].toString()) .append("\n"); } } return sb.toString(); } }