org.yakindu.sct.generator.core.extensions.FileExtensions.java Source code

Java tutorial

Introduction

Here is the source code for org.yakindu.sct.generator.core.extensions.FileExtensions.java

Source

/**
 * 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);
        }
    }

}