package cz.nkp.differ.compare.io;
import cz.nkp.differ.compare.metadata.ImageMetadata;
import cz.nkp.differ.compare.metadata.MetadataSource;
import java.awt.Image;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
*
* @author xrosecky
*/
@XmlRootElement(name = "result")
@XmlType(propOrder = {"type", "width", "height", "checksum", "metadata", "sources", "histogram", "fullImage", "preview"})
@XmlAccessorType(XmlAccessType.FIELD)
public class SerializableImageProcessorResult implements ImageProcessorResult {
@XmlElement(name = "image-full")
private SerializableImage fullImage;
@XmlElement(name = "image-preview")
private SerializableImage preview;
@XmlElementWrapper(name = "histogram-list")
@XmlElement(name = "histogram")
private int[][] histogram;
private String checksum;
private Type type;
private int width;
private int height;
@XmlElementWrapper(name = "metadata-list")
@XmlElement(name = "metadata")
private List<ImageMetadata> metadata = null;
@XmlElementWrapper(name = "sources-list")
@XmlElement(name = "source")
private List<MetadataSource> sources = null;
public SerializableImageProcessorResult() {
}
@Override
public Image getFullImage() {
return fullImage;
}
public void setFullImage(SerializableImage fullImage) {
this.fullImage = fullImage;
}
@Override
public int[][] getHistogram() {
return histogram;
}
public void setHistogram(int histogram[][]) {
this.histogram = histogram;
}
@Override
public Image getPreview() {
return preview;
}
public void setPreview(SerializableImage preview) {
this.preview = preview;
}
@Override
public String getMD5Checksum() {
return checksum;
}
public void setMD5Checksum(String checksum) {
this.checksum = checksum;
}
@Override
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
@Override
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
@Override
public List<ImageMetadata> getMetadata() {
return metadata;
}
public void setMetadata(List<ImageMetadata> metadata) {
this.metadata = metadata;
}
public String getChecksum() {
return checksum;
}
public void setChecksum(String checksum) {
this.checksum = checksum;
}
public List<MetadataSource> getSources() {
return sources;
}
public void setSources(List<MetadataSource> sources) {
this.sources = sources;
}
public static SerializableImageProcessorResult create(ImageProcessorResult original, boolean fullImage) {
SerializableImageProcessorResult result = new SerializableImageProcessorResult();
result.setHeight(original.getHeight());
result.setWidth(original.getWidth());
result.setMetadata(original.getMetadata());
result.setHistogram(original.getHistogram());
result.setType(original.getType());
Set<MetadataSource> sources = new HashSet<MetadataSource>();
for (ImageMetadata metadata : original.getMetadata()) {
sources.add(metadata.getSource());
}
result.setSources(new ArrayList<MetadataSource>());
result.getSources().addAll(sources);
if (original.getPreview() != null) {
try {
result.setPreview(new SerializableImage(original.getPreview()));
} catch (IOException ioe) {
result.setPreview(null);
}
}
if (fullImage && original.getFullImage() != null) {
try {
result.setPreview(new SerializableImage(original.getFullImage()));
} catch (IOException ioe) {
result.setFullImage(null);
}
}
return result;
}
}