/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorolamobility.preflighting.internal.commandoutput; import static com.motorolamobility.preflighting.core.logging.PreflightingLogger.warn; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; import com.motorolamobility.preflighting.output.AbstractOutputter; public class OutputterExtensionReader { private static final String OUTPUTTER_EXT_POINT_ID = "com.motorolamobility.preflighting.outputter"; private static final String OUTPUTTER_ATTRIBUTE_ID = "id"; private static final String OUTPUTTER_ATTRIBUTE_CLASS = "class"; private static Map<String, AbstractOutputter> outputtersMap = null; private static Map<String, AbstractOutputter> loadOutputters() { outputtersMap = new HashMap<String, AbstractOutputter>(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IConfigurationElement[] elements = registry.getConfigurationElementsFor(OUTPUTTER_EXT_POINT_ID); for (IConfigurationElement element : elements) { if (element.getName().equals("outputter")) { try { String id = element.getAttribute(OUTPUTTER_ATTRIBUTE_ID).toUpperCase(); AbstractOutputter outputter = (AbstractOutputter) element .createExecutableExtension(OUTPUTTER_ATTRIBUTE_CLASS); outputtersMap.put(id, outputter); } catch (CoreException e) { warn(OutputterExtensionReader.class, "Error reading outputter extension for extension point " //$NON-NLS-1$ + OUTPUTTER_EXT_POINT_ID, e); } } } return outputtersMap; } public static Map<String, AbstractOutputter> getOutputtersMap() { return outputtersMap != null ? outputtersMap : loadOutputters(); } }