org.pnml.tools.epnk.applications.hlpng.resources.ResourceManager.java Source code

Java tutorial

Introduction

Here is the source code for org.pnml.tools.epnk.applications.hlpng.resources.ResourceManager.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Mindaugas Laganeckas.
 * 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:
 *     Mindaugas Laganeckas - initial API and implementation
 ******************************************************************************/
package org.pnml.tools.epnk.applications.hlpng.resources;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.pnml.tools.epnk.applications.hlpng.runtime.RuntimeValueFactory;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.ComparisonManager;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.DatatypesComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.ListComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.MultisetComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.NumberOfComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.TermComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.TupleComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.UserOperatorComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.comparators.VariableComparator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.extensions.IUserExtensions;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.firing.IFiringStrategy;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.BooleansEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.IEvaluator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.ISortEvaluator;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.SortEvaluationManager;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.DotsEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.EvaluationManager;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.IntegersEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.ListsEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.MultisetsEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.StringsEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.TermsEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.UserOperatorEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.UserSortEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.VariableEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.reversible.AdditionEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.reversible.DivisionEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.reversible.MultiplicationEval;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.reversible.ReversibleOperationManager;
import org.pnml.tools.epnk.applications.hlpng.transitionBinding.operators.reversible.SubtractionEval;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.booleans.impl.BooleanConstantImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.dots.impl.DotConstantImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.integers.impl.AdditionImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.integers.impl.DivisionImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.integers.impl.MultiplicationImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.integers.impl.NumberConstantImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.integers.impl.SubtractionImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.lists.impl.MakeListImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.multisets.impl.NumberOfImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.strings.impl.StringConstantImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.terms.impl.MultiSetOperatorImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.terms.impl.TupleImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.terms.impl.UserOperatorImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.terms.impl.UserSortImpl;
import org.pnml.tools.epnk.pntypes.hlpngs.datatypes.terms.impl.VariableImpl;

public class ResourceManager {
    public static final String SIMULATOR_PLUGIN_ID = "org.pnml.tools.epnk.applications.hlpng.simulator";

    public static EvaluationManager createEvaluationManager(RuntimeValueFactory factory, String extensionId) {
        final EvaluationManager evaluationManager = new EvaluationManager();
        final SortEvaluationManager sortManager = new SortEvaluationManager();
        // integers package
        evaluationManager.register(NumberConstantImpl.class.getPackage(), new IntegersEval());
        // booleans package
        evaluationManager.register(BooleanConstantImpl.class.getPackage(), new BooleansEval());
        // strings package
        evaluationManager.register(StringConstantImpl.class.getPackage(), new StringsEval());
        // dots
        evaluationManager.register(DotConstantImpl.class.getPackage(), new DotsEval());
        // lists package
        evaluationManager.register(MakeListImpl.class.getPackage(), new ListsEval());
        // multisets package
        MultisetsEval multisetsEval = new MultisetsEval(factory);
        evaluationManager.register(NumberOfImpl.class.getPackage(), multisetsEval);
        // terms package
        evaluationManager.register(TupleImpl.class.getPackage(), new TermsEval());
        // variables
        evaluationManager.register(VariableImpl.class, new VariableEval());
        // user operations
        UserOperatorEval userOperatorEval = new UserOperatorEval(evaluationManager);
        evaluationManager.register(UserOperatorImpl.class, userOperatorEval);
        UserSortEval userSortEval = new UserSortEval();
        sortManager.register(UserSortImpl.class, userSortEval);

        evaluationManager.register(AdditionImpl.class, new AdditionEval());
        evaluationManager.register(MultiplicationImpl.class, new MultiplicationEval());
        evaluationManager.register(SubtractionImpl.class, new SubtractionEval());
        evaluationManager.register(DivisionImpl.class, new DivisionEval());

        // user extensions
        if (extensionId != null) {
            final List<IEvaluator> userExt = new ArrayList<IEvaluator>();
            final List<ISortEvaluator> userSortExt = new ArrayList<ISortEvaluator>();

            IConfigurationElement[] config = Platform.getExtensionRegistry()
                    .getConfigurationElementsFor(extensionId);
            for (IConfigurationElement e : config) {
                try {
                    IUserExtensions arbitraryOperatorEval = (IUserExtensions) e.createExecutableExtension("class");
                    userExt.add(arbitraryOperatorEval);
                    userSortExt.add(arbitraryOperatorEval);
                } catch (CoreException e1) {
                    e1.printStackTrace();
                }
            }

            userOperatorEval.setArbitraryOperatorEvaluators(userExt);
            userSortEval.setArbitraryOperatorEvaluators(userSortExt);

            multisetsEval.setSortEvaluator(sortManager);
        }

        return evaluationManager;
    }

    public static ReversibleOperationManager createReversibleOperationManager(EvaluationManager evaluationManager) {
        ReversibleOperationManager reversibleOperationManager = new ReversibleOperationManager(evaluationManager);

        reversibleOperationManager.register(AdditionImpl.class, new AdditionEval());
        reversibleOperationManager.register(MultiplicationImpl.class, new MultiplicationEval());
        reversibleOperationManager.register(SubtractionImpl.class, new SubtractionEval());
        reversibleOperationManager.register(DivisionImpl.class, new DivisionEval());

        return reversibleOperationManager;
    }

    public static ComparisonManager createComparisonManager(EvaluationManager evaluationManager,
            ReversibleOperationManager reversibleOperationManager) {
        ComparisonManager comparisonManager = new ComparisonManager();

        DatatypesComparator datatypesComparator = new DatatypesComparator();
        comparisonManager.register(NumberConstantImpl.class.getPackage(), datatypesComparator);
        comparisonManager.register(BooleanConstantImpl.class.getPackage(), datatypesComparator);
        comparisonManager.register(StringConstantImpl.class.getPackage(), datatypesComparator);

        comparisonManager.register(TupleImpl.class, new TupleComparator(comparisonManager));
        comparisonManager.register(MultiSetOperatorImpl.class, new MultisetComparator(comparisonManager));
        comparisonManager.register(NumberOfImpl.class, new NumberOfComparator(comparisonManager));
        comparisonManager.register(MakeListImpl.class, new ListComparator(comparisonManager));

        TermComparator termComparator = new TermComparator(evaluationManager);
        comparisonManager.register(AdditionImpl.class, termComparator);
        comparisonManager.register(MultiplicationImpl.class, termComparator);
        comparisonManager.register(SubtractionImpl.class, termComparator);
        comparisonManager.register(DivisionImpl.class, termComparator);
        ;

        comparisonManager.register(VariableImpl.class, new VariableComparator());
        comparisonManager.register(UserOperatorImpl.class, new UserOperatorComparator());

        comparisonManager.setDefaultComparator(termComparator);

        return comparisonManager;
    }

    public static IFiringStrategy getFiringStrategy(String id) {
        IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(id);
        IFiringStrategy strategy = null;
        for (IConfigurationElement e : config) {
            try {
                strategy = (IFiringStrategy) e.createExecutableExtension("class");
            } catch (CoreException e1) {
                System.err.println("WRN: failed to load the firing strateg: " + e1.getMessage());
            }
        }
        return strategy;
    }

    public static ImageDescriptor getImageDescriptor(String relativePath, String pluginID) {
        try {
            URL fileURL = Platform.getBundle(pluginID).getEntry(relativePath);
            final URL fullPath = FileLocator.resolve(fileURL);
            final Image i = new Image(Display.getDefault(), fullPath.getPath());
            return ImageDescriptor.createFromImage(i);
        } catch (Exception e) {
            System.err.println("WRN: Failed to load image: " + relativePath);
        }
        return null;
    }
}