/**
* This file is part of jFlvTool.
*
* jFlvTool is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* jFlvTool is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* file name : EmbeddedData.java
* authors : Jon Keys
* created : June 29, 2007, 3:32 PM
* copyright : Sony Digital Authoring Services
*
* modifications:
* Date: Name: Description:
* ---------- --------------- ----------------------------------------------
* June 29, 2007 Jon Keys Creation
*/
package edu.washington.cs.oneswarm.ui.gwt.server.ffmpeg.jflv.metadata;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.text.DecimalFormat;
/**
*
* @author Jon Keys
*/
public class EmbeddedData {
private static DecimalFormat decf = new DecimalFormat("#####0.00###");
private HashMap<String, Object> metadata;
/** Creates a new instance of EmbeddedData */
public EmbeddedData() {
metadata = new HashMap<String, Object>();
}
public void addData(String key, Object value) {
metadata.put(key, value);
}
public void removeData(String key) {
try {
metadata.remove(key);
} catch (Exception e) {
// do nothing
}
}// removeData()
public HashMap<String, Object> getData() {
return metadata;
}
public void setData(HashMap<String, Object> metadata) {
this.metadata = metadata;
}
public String printMetaData() {
return prettyPrintData(metadata);
}
public static String prettyPrintData(Object obj) {
String objClass = obj.getClass().getName();
StringBuffer metaprint = new StringBuffer();
if (objClass.endsWith("String")) {
metaprint.append((String) obj);
} else if (objClass.endsWith("Double")) {
metaprint.append(decf.format(((Double) obj).doubleValue()) + "");
} else if (objClass.endsWith("Boolean")) {
metaprint.append(((Boolean) obj).toString());
} else if (objClass.endsWith("HashMap")) {
metaprint.append(printMixedData((HashMap<String, Object>) obj));
} else if (objClass.endsWith("ArrayList")) {
metaprint.append(printArrayData((ArrayList<Object>) obj));
} else if (objClass.endsWith("AMFTime")) {
metaprint.append(((AMFTime) obj).getTimeString());
} else if (objClass.endsWith("AMFObject")) {
metaprint.append(printObjectData((AMFObject) obj));
}
objClass = null;
return metaprint.toString();
}// prettyPrintData()
private static String printObjectData(AMFObject amfObj) {
String varname = null;
Object var = null;
StringBuffer mixprint = new StringBuffer();
Iterator it = amfObj.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
varname = (String) entry.getKey();
var = (Object) entry.getValue();
if (varname != null && varname.length() > 0 && var != null) {
mixprint.append(varname + " : " + prettyPrintData(var) + "\n");
}
}// while
varname = null;
var = null;
it = null;
return mixprint.toString();
}// printTimeData()
private static String printArrayData(ArrayList<Object> arrObj) {
StringBuffer arrprint = new StringBuffer();
for (Object obj : arrObj) {
arrprint.append("\n\t" + prettyPrintData(obj));
}
arrprint.append("\n");
return arrprint.toString();
}// printArrayData()
private static String printMixedData(HashMap<String, Object> mapObj) {
String varname = null;
Object var = null;
StringBuffer mixprint = new StringBuffer();
Iterator it = mapObj.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
varname = (String) entry.getKey();
var = (Object) entry.getValue();
if (varname != null && varname.length() > 0 && var != null) {
mixprint.append(varname + " : " + prettyPrintData(var) + "\n");
}
}// while
varname = null;
var = null;
it = null;
return mixprint.toString();
}// printMixedData()
}// EmbeddedData