// Copyright 2006, FreeHEP.
package org.freehep.util.export;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* @author duns
* @version $Id$
*/
public class ExportFileTypeGroups {
public static final String VECTOR = "vector";
public static final String BITMAP = "bitmap";
public static final String OTHER = "other";
public static final String ALTERNATIVE = "alternative";
private List/*<String>*/ groupNames;
private Map/*<String, Map<String, ExportFileType>>*/ groups;
private List/*<ExportFileType>*/ alternatives;
private Map/*<String, String>*/ labels;
public ExportFileTypeGroups(List/*<ExportFileType>*/ exportFileTypes) {
groupNames = new ArrayList();
groupNames.add(VECTOR);
groupNames.add(BITMAP);
groupNames.add(OTHER);
groupNames.add(ALTERNATIVE);
labels = new HashMap();
labels.put(VECTOR, "Vector Formats");
labels.put(BITMAP, "Bitmap Formats");
labels.put(OTHER, "Other");
labels.put(ALTERNATIVE, "Alternative Formats");
groups = new HashMap();
alternatives = new ArrayList();
for (Iterator i = exportFileTypes.iterator(); i.hasNext(); ) {
ExportFileType exportFileType = (ExportFileType)i.next();
String mimeType = exportFileType.getMIMETypes()[0];
String key;
if (MimeTypes.isBitmap(mimeType)) {
key = BITMAP;
} else if (MimeTypes.isVector(mimeType)) {
key = VECTOR;
} else {
key = OTHER;
}
Map fileTypes = (Map)groups.get(key);
if (fileTypes == null) {
fileTypes = new HashMap();
groups.put(key, fileTypes);
}
String extension = exportFileType.getExtensions()[0];
if (fileTypes.get(extension) == null) {
fileTypes.put(extension, exportFileType);
} else {
alternatives.add(exportFileType);
}
}
}
/**
* Return all registered ExportFileTypes for a certain group.
*/
public List getExportFileTypes(String group) {
List result = new ArrayList();
if (group.equals(ALTERNATIVE)) {
result.addAll(alternatives);
} else {
Map fileTypes = (Map)groups.get(group);
if (fileTypes != null) result.addAll(fileTypes.values());
}
return result;
}
public List getGroupNames() {
return groupNames;
}
public String getLabel(String group) {
return (String)labels.get(group);
}
}