/* * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nuxeo - initial API and implementation * */ package org.eclipse.ecr.convert.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.ecr.convert.extension.ConverterDescriptor; /** * Helper class to manage chains of converters. * * @author tiry */ public class MimeTypeTranslationHelper { protected static final Map<String, List<ConvertOption>> srcMappings = new HashMap<String, List<ConvertOption>>(); protected static final Map<String, List<ConvertOption>> dstMappings = new HashMap<String, List<ConvertOption>>(); // Utility class. private MimeTypeTranslationHelper() { } public static void addConverter(ConverterDescriptor desc) { List<String> sMts = desc.getSourceMimeTypes(); String dMt = desc.getDestinationMimeType(); List<ConvertOption> dco = dstMappings.get(dMt); if (dco == null) { dco = new ArrayList<ConvertOption>(); } for (String sMT : sMts) { List<ConvertOption> sco = srcMappings.get(sMT); if (sco == null) { sco = new ArrayList<ConvertOption>(); } sco.add(new ConvertOption(desc.getConverterName(), dMt)); srcMappings.put(sMT, sco); dco.add(new ConvertOption(desc.getConverterName(), sMT)); } dstMappings.put(dMt, dco); } public static String getConverterName(String sourceMimeType, String destMimeType) { List<ConvertOption> sco = srcMappings.get(sourceMimeType); if (sco == null) { // use wildcard sco = srcMappings.get("*"); if (sco == null) { return null; } } for (ConvertOption co : sco) { if (co.mimeType.equals(destMimeType)) { return co.getConverterName(); } } return null; } public static List<String> getConverterNames(String sourceMimeType, String destMimeType) { List<ConvertOption> sco = srcMappings.get(sourceMimeType); List<String> converterNames = new ArrayList<String>(); if (sco == null) { // use wildcard sco = srcMappings.get("*"); if (sco == null) { return converterNames; } } for (ConvertOption co : sco) { if (co.mimeType.equals(destMimeType)) { converterNames.add(co.getConverterName()); } } return converterNames; } public static List<String> getDestinationMimeTypes(String sourceMimeType) { List<String> dst = new ArrayList<String>(); List<ConvertOption> sco = srcMappings.get(sourceMimeType); if (sco != null) { for (ConvertOption co : sco) { dst.add(co.getMimeType()); } } return dst; } public static List<String> getSourceMimeTypes(String destinationMimeType) { List<String> src = new ArrayList<String>(); List<ConvertOption> dco = dstMappings.get(destinationMimeType); if (dco != null) { for (ConvertOption co : dco) { src.add(co.getMimeType()); } } return src; } }