package com.limegroup.gnutella.metadata; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.limegroup.gnutella.util.NameValue; import com.limegroup.gnutella.xml.LimeXMLUtils; import com.limegroup.gnutella.xml.XMLStringUtils; /** * Encapsulates video metadata. Subclasses must implement parseFile. */ public abstract class VideoMetaData extends MetaData { private String title; private String year; private int length = -1; private String comment; private String language; private String license; private int width = -1; private int height = -1; private String licensetype; public static String schemaURI = "http://www.limewire.com/schemas/video.xsd"; private static final String DLM = XMLStringUtils.DELIMITER; private static final String KPX = "videos" + DLM + "video" + DLM; public static final String TITLE_KEY = KPX + "title" + DLM; public static final String YEAR_KEY = KPX + "year" + DLM; public static final String LENGTH_KEY = KPX + "length" + DLM; public static final String LANGUAGE_KEY = KPX + "language" + DLM; public static final String COMMENTS_KEY = KPX + "comments" + DLM; public static final String LICENSE_KEY = KPX + "license" + DLM; public static final String HEIGHT_KEY = KPX + "width" + DLM; public static final String WIDTH_KEY = KPX + "height" + DLM; public static final String LICENSE_TYPE_KEY = KPX + "licensetype" + DLM; /** * Constructs a blank VideoMetaData object. */ protected VideoMetaData() throws IOException { } /** * Parses the file for data. */ public VideoMetaData(File f) throws IOException { parseFile(f); } /** * Parses video metadata out of the file if this is a known video file. * Otherwise returns null. */ public static VideoMetaData parseVideoMetaData(File file) throws IOException { if (LimeXMLUtils.isRIFFFile(file)) return new RIFFMetaData(file); else if (LimeXMLUtils.isOGMFile(file)) return new OGMMetaData(file); else if(LimeXMLUtils.isWMVFile(file)) return new WMVMetaData(file); return null; } public String getSchemaURI() { return schemaURI; } public String getTitle() { return title; } public String getYear() { return year; } public int getLength() { return length; } public String getComment() { return comment; } public String getLanguage() { return language; } public String getLicense() { return license; } public int getWidth() { return width; } public int getHeight() { return height; } public String getLicenseType() { return licensetype; } void setTitle(String title) { this.title = title; } void setYear(String year) { this.year = year; } void setLength(int length) { this.length = length; } void setComment(String comment) { this.comment = comment; } void setLanguage(String language) { this.language = language; } void setLicense(String license) { this.license = license; } void setWidth(int width) { this.width = width; } void setHeight(int height) { this.height = height; } void setLicenseType(String licensetype) { this.licensetype = licensetype; } /** * Determines if all fields are valid. */ public boolean isComplete() { return isValid(title) && isValid(year) && isValid(length) && isValid(comment) && isValid(language) && isValid(license) && isValid(width) && isValid(height) && isValid(licensetype) ; } public List toNameValueList() { List list = new ArrayList(); add(list, title, TITLE_KEY); add(list, year, YEAR_KEY); add(list, length, LENGTH_KEY); add(list, comment, COMMENTS_KEY); add(list, language, LANGUAGE_KEY); add(list, license, LICENSE_KEY); add(list, width, WIDTH_KEY); add(list, height, HEIGHT_KEY); add(list, licensetype, LICENSE_TYPE_KEY); return list; } private void add(List list, String value, String key) { if(isValid(value)) list.add(new NameValue(key, value.trim())); } private void add(List list, int value, String key) { if(isValid(value)) list.add(new NameValue(key, "" + value)); } private boolean isValid(String s) { return s != null && !s.trim().equals(""); } private boolean isValid(int i) { return i >= 0; } }