+++ /dev/null
-package tim.prune.data;
-
-import java.util.ArrayList;
-
-/**
- * Class to hold a list of Media, either Photos or Audio files
- */
-public abstract class MediaList
-{
- /** list of media objects */
- protected ArrayList<MediaObject> _media = null;
-
-
- /**
- * Empty constructor
- */
- public MediaList() {
- this(null);
- }
-
- /**
- * Constructor
- * @param inList ArrayList containing media objects
- */
- protected MediaList(ArrayList<MediaObject> inList)
- {
- _media = inList;
- if (_media == null) {
- _media = new ArrayList<MediaObject>();
- }
- }
-
- /**
- * @return the number of media in the list
- */
- public int getNumMedia() {
- return _media.size();
- }
-
- /**
- * Add an object to the list
- * @param inObject object to add
- */
- public void addMedia(MediaObject inObject)
- {
- if (inObject != null) {
- _media.add(inObject);
- }
- }
-
- /**
- * Add an object to the list at a specified index (used for undo)
- * @param inObject object to add
- * @param inIndex index at which to add
- */
- public void addMedia(MediaObject inObject, int inIndex)
- {
- if (inObject != null) {
- _media.add(inIndex, inObject);
- }
- }
-
-
- /**
- * Remove the selected media from the list
- * @param inIndex index number to remove
- */
- public void deleteMedia(int inIndex)
- {
- // Maybe throw exception if this fails?
- _media.remove(inIndex);
- }
-
-
- /**
- * Checks if the specified object is already in the list
- * @param inMedia media object to check
- * @return true if it's already in the list
- */
- public boolean contains(MediaObject inMedia) {
- return (getMediaIndex(inMedia) > -1);
- }
-
-
- /**
- * Get the index of the given media
- * @param inMedia object to check
- * @return index of this object in the list, or -1 if not found
- */
- public int getMediaIndex(MediaObject inMedia)
- {
- // Check if we need to check
- final int num = getNumMedia();
- if (num <= 0 || inMedia == null)
- return -1;
- // Loop over list
- for (int i=0; i<num; i++)
- {
- MediaObject m = _media.get(i);
- if (m != null && m.equals(inMedia)) {
- return i;
- }
- }
- // not found
- return -1;
- }
-
-
- /**
- * Get the media at the given index
- * @param inIndex index number, starting at 0
- * @return specified object
- */
- public MediaObject getMedia(int inIndex)
- {
- if (inIndex < 0 || inIndex >= getNumMedia()) return null;
- return _media.get(inIndex);
- }
-
-
- /**
- * Crop the list to the specified size
- * @param inIndex previous size
- */
- public void cropTo(int inIndex)
- {
- if (inIndex <= 0)
- {
- // delete whole list
- _media.clear();
- }
- else
- {
- // delete to previous size
- while (_media.size() > inIndex) {
- _media.remove(_media.size()-1);
- }
- }
- }
-
-
- /**
- * @return array of file names
- */
- public String[] getNameList()
- {
- final int num = getNumMedia();
- String[] names = new String[num];
- for (int i=0; i<num; i++) {
- names[i] = getMedia(i).getName();
- }
- return names;
- }
-
-
- /**
- * @return true if list contains correlated media
- */
- public boolean hasCorrelatedMedia()
- {
- for (MediaObject m : _media) {
- if (m.getDataPoint() != null) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return true if list contains uncorrelated media
- */
- public boolean hasUncorrelatedMedia()
- {
- for (MediaObject m : _media) {
- if (m.getDataPoint() == null && m.hasTimestamp()) {
- return true;
- }
- }
- return false;
- }
-
-
- /**
- * Remove all correlated media from the list
- */
- public void removeCorrelatedMedia()
- {
- if (getNumMedia() > 0)
- {
- // Construct new list to copy into
- ArrayList<MediaObject> listCopy = new ArrayList<MediaObject>();
- // Loop over list
- for (MediaObject m : _media)
- {
- // Copy media if it has no point
- if (m != null)
- {
- if (m.getDataPoint() == null)
- listCopy.add(m);
- else
- m.resetCachedData();
- }
- }
- // Switch reference to new list
- _media = listCopy;
- }
- }
-
- /**
- * @return true if any of the media objects have Files
- */
- public boolean hasMediaWithFile()
- {
- for (MediaObject m: _media) {
- if (m.getFile() != null) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return true if there are any modified media in the list
- */
- public boolean hasModifiedMedia()
- {
- for (MediaObject m: _media) {
- if (m.isModified()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return clone of list contents
- */
- public abstract MediaList cloneList();
-
- /**
- * Restore contents from other MediaList
- * @param inOther MediaList with cloned contents
- */
- public void restore(MediaList inOther)
- {
- _media.clear();
- if (inOther != null && inOther.getNumMedia() > 0)
- {
- // Copy contents from other list
- _media.addAll(inOther._media);
- }
- }
-}