package comeon.model; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.File; import java.util.Map; public final class Media { private final PropertyChangeSupport pcs; private final File file; private final String fileName; private final Template template; private String templateText; private String renderedTemplate; private final Map<String, Object> metadata; private final byte[] thumbnail; private State state; public Media(final File file, final String fileName, final Template template, final Map<String, Object> metadata, final byte[] thumbnail) { super(); this.pcs = new PropertyChangeSupport(this); this.file = file; this.fileName = fileName; this.template = template; this.templateText = template.getTemplateText(); this.metadata = metadata; this.thumbnail = thumbnail; this.state = State.ToBeUploaded; } public void renderTemplate(final User user) { this.setRenderedTemplate(template.getKind().render(template, templateText, user, this)); } public File getFile() { return file; } public Template getTemplate() { return template; } public String getTemplateText() { return templateText; } public void setTemplateText(final String templateText) { final String oldTemplateText = this.templateText; this.templateText = templateText; pcs.firePropertyChange("templateText", oldTemplateText, templateText); } public String getRenderedTemplate() { return renderedTemplate; } public void setRenderedTemplate(final String renderedTemplate) { final String oldRenderedTemplate = this.renderedTemplate; this.renderedTemplate = renderedTemplate; pcs.firePropertyChange("renderedTemplate", oldRenderedTemplate, renderedTemplate); } public Map<String, Object> getMetadata() { return metadata; } public byte[] getThumbnail() { return thumbnail; } public String getFileName() { return fileName; } public State getState() { return state; } public void setState(final State state) { final State oldState = this.state; this.state = state; pcs.firePropertyChange("state", oldState, state); } public void addPropertyChangeListener(final PropertyChangeListener pcl) { this.pcs.addPropertyChangeListener(pcl); } public void removePropertyChangeLister(final PropertyChangeListener pcl) { this.pcs.removePropertyChangeListener(pcl); } @Override public boolean equals(final Object obj) { final boolean isEqual; if (obj == null) { isEqual = false; } else if (obj instanceof Media) { final Media o = (Media) obj; isEqual = this.file.equals(o.file); } else { isEqual = false; } return isEqual; } @Override public int hashCode() { return this.file.hashCode(); } public enum State { ToBeUploaded, UploadedSuccessfully, FailedUpload } }