package org.jtheque.movies.persistence.od.impl; /* * Copyright JTheque (Baptiste Wicht) * * 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. */ import org.jtheque.collections.DataCollection; import org.jtheque.images.ImageService; import org.jtheque.movies.MoviesResources; import org.jtheque.movies.persistence.od.able.Category; import org.jtheque.movies.persistence.od.able.Movie; import org.jtheque.movies.utils.PreciseDuration; import org.jtheque.movies.utils.Resolution; import org.jtheque.persistence.Note; import org.jtheque.primary.utils.AbstractData; import org.jtheque.utils.bean.BeanUtils; import org.jtheque.utils.bean.EqualsUtils; import org.jtheque.utils.bean.HashCodeUtils; import org.jtheque.utils.io.FileUtils; import javax.swing.Icon; import java.util.Collection; import java.util.Date; import java.util.HashSet; import java.util.Set; /** * A movie implementation. * * @author Baptiste Wicht */ public final class MovieImpl extends AbstractData implements Movie { private Movie memento; private boolean mementoState; private String title; private String image; private Set<Category> categories = new HashSet<Category>(6); private String file; private Note note; private DataCollection theCollection; private PreciseDuration duration; private Resolution resolution; private static final String[] FIELDS = {"id", "title", "categories", "file", "note", "theCollection", "duration", "resolution", "image"}; //Data methods @Override public DataCollection getTheCollection() { return theCollection; } @Override public void setTheCollection(DataCollection theCollection) { this.theCollection = theCollection; } @Override public String getTitle() { return title; } @Override public void setTitle(String title) { this.title = title; } @Override public Set<Category> getCategories() { return categories; } @Override public void setCategories(Collection<Category> categories) { this.categories = new HashSet<Category>(categories); } @Override public String getFile() { return file; } @Override public void setFile(String file) { this.file = file; } @Override public Note getNote() { return note; } @Override public void setNote(Note note) { this.note = note; } @Override public PreciseDuration getDuration() { return duration; } @Override public void setDuration(PreciseDuration duration) { this.duration = duration; } @Override public Resolution getResolution() { return resolution; } @Override public void setResolution(Resolution resolution) { this.resolution = resolution; } @Override public String getImage() { return image; } @Override public void setImage(String image) { this.image = image; } //Utility methods @Override public String getDisplayableText() { return title; } @Override public Icon getIcon(ImageService imageService) { return imageService.getIcon(MoviesResources.MOVIE_ICON); } @Override public int hashCode() { return HashCodeUtils.hashCodeDirect(title, categories, file, note, theCollection, duration, resolution, image); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!(obj instanceof Movie)) { return false; } Movie movie = (Movie) obj; return EqualsUtils.areEqualsDirect(this, movie, title, categories, file, note, theCollection, duration, resolution, image, movie.getTitle(), movie.getCategories(), movie.getFile(), movie.getNote(), movie.getTheCollection(), movie.getDuration(), movie.getResolution(), movie.getImage()); } @Override public void saveToMemento() { mementoState = true; memento = BeanUtils.createQuickMemento(this, MovieImpl.class, FIELDS); } @Override public void restoreMemento() { if (mementoState) { BeanUtils.restoreQuickMemento(this, memento, FIELDS); } } @Override public void addCategories(Collection<Category> categories) { this.categories.addAll(categories); } @Override public void addCategory(Category category) { categories.add(category); } @Override public boolean isInCollection(DataCollection collection) { return theCollection != null && theCollection.equals(collection); } @Override public boolean hasCategories() { return !categories.isEmpty(); } @Override public boolean isOfCategory(Category category) { return category != null && categories.contains(category); } @Override public Date getFileLastModifiedDate() { return FileUtils.getLastModifiedDate(file); } @Override public long getFileSize() { return FileUtils.getFileSize(file); } @Override public String toString() { return title; } }