/** * Copyright (c) 2012 committers of YAKINDU 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: * committers of YAKINDU - initial API and implementation */ package org.yakindu.sct.generator.core.extensions; import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; /** * * @author andreas muelder - Initial contribution and API * */ public class FileExtensions { private static final String EXTENSION_POINT_ID = "org.yakindu.sct.generator.core.extensions"; private static final String FILE_EXTENSION = "fileExtension"; private static final String GENERATOR_ID = "generatorId"; private static Iterable<FileExtensionDescriptor> generatorDescriptors; public static class FileExtensionDescriptor { private final IConfigurationElement configElement; FileExtensionDescriptor(IConfigurationElement configElement) { this.configElement = configElement; } public String getExtension() { return configElement.getAttribute(FILE_EXTENSION); } public String getGeneratorId() { return configElement.getAttribute(GENERATOR_ID); } } public static Iterable<FileExtensionDescriptor> getFileExtensions() { IConfigurationElement[] configurationElements = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_POINT_ID); if (generatorDescriptors == null) { generatorDescriptors = transform(newArrayList(configurationElements), new CreateFileExtensions()); } return generatorDescriptors; } public static String getFileExtension(final String generatorId) { FileExtensionDescriptor descriptor = Iterables.find(getFileExtensions(), new Predicate<FileExtensionDescriptor>() { public boolean apply(FileExtensionDescriptor input) { return generatorId.equals(input.getGeneratorId()); } }); return descriptor.getExtension(); } public static String getGeneratorForFileExtension(String extension) { IConfigurationElement[] configurationElements = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_POINT_ID); for (IConfigurationElement x : configurationElements) { if (x.getAttribute(FILE_EXTENSION).equals(extension)) { return x.getAttribute(GENERATOR_ID); } } return null; } private static final class CreateFileExtensions implements Function<IConfigurationElement, FileExtensionDescriptor> { public FileExtensionDescriptor apply(IConfigurationElement from) { return new FileExtensionDescriptor(from); } } }