Package org.openengsb.core.ekb.transformation.wonderland.internal

Source Code of org.openengsb.core.ekb.transformation.wonderland.internal.TransformationEngineService

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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 org.openengsb.core.ekb.transformation.wonderland.internal;

import java.util.ArrayList;
import java.util.List;

import org.openengsb.core.api.model.ModelDescription;
import org.openengsb.core.ekb.api.ModelGraph;
import org.openengsb.core.ekb.api.ModelRegistry;
import org.openengsb.core.ekb.api.TransformationEngine;
import org.openengsb.core.ekb.api.transformation.TransformationDescription;
import org.openengsb.core.ekb.api.transformation.TransformationOperationLoader;
import org.openengsb.core.ekb.transformation.wonderland.internal.performer.TransformationPerformer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Implementation of the transformation engine. Only supports the transformations from OpenEngSBModels to
* OpenEngSBModels.
*/
public class TransformationEngineService implements TransformationEngine {
    private static final Logger LOGGER = LoggerFactory.getLogger(TransformationEngineService.class);
    private ModelRegistry modelRegistry;
    private ModelGraph graphDb;
    private PropertyConnectionCalculator calculator;
    private TransformationOperationLoader operationLoader;

    @Override
    public void saveDescription(TransformationDescription description) {
        LOGGER.debug("Added transformation description {} to transformation engine service", description);
        deleteDescription(description);
        description.setPropertyConnections(calculator.getPropertyConnections(description));
        graphDb.addTransformation(description);
    }

    @Override
    public void saveDescriptions(List<TransformationDescription> descriptions) {
        for (TransformationDescription description : descriptions) {
            saveDescription(description);
        }
    }

    @Override
    public void deleteDescription(TransformationDescription description) {
        LOGGER.debug("Deleted transformation description {} from transformation engine service", description);
        graphDb.removeTransformation(description);
    }

    @Override
    public void deleteDescriptionsByFile(String fileName) {
        for (TransformationDescription description : getDescriptionsByFile(fileName)) {
            deleteDescription(description);
        }
    }

    @Override
    public List<TransformationDescription> getDescriptionsByFile(String fileName) {
        return graphDb.getTransformationsPerFileName(fileName);
    }

    @Override
    public Object performTransformation(ModelDescription sourceModel, ModelDescription targetModel, Object source) {
        return performTransformation(sourceModel, targetModel, source, null, new ArrayList<String>());
    }

    @Override
    public Object performTransformation(ModelDescription sourceModel, ModelDescription targetModel, Object source,
            Object target) {
        return performTransformation(sourceModel, targetModel, source, target, new ArrayList<String>());
    }

    @Override
    public Object performTransformation(ModelDescription sourceModel, ModelDescription targetModel, Object source,
            List<String> ids) {
        return performTransformation(sourceModel, targetModel, source, null, ids);
    }

    @Override
    public Object performTransformation(ModelDescription sourceModel, ModelDescription targetModel, Object source,
            Object target, List<String> ids) {
        try {
            List<TransformationDescription> result = graphDb.getTransformationPath(sourceModel, targetModel, ids);
            if (result == null || result.isEmpty()) {
                return source;
            }
            for (int i = 0; i < result.size(); i++) {
                TransformationDescription step = result.get(i);
                if (i != result.size() - 1) {
                    TransformationPerformer performer = new TransformationPerformer(modelRegistry, operationLoader);
                    source = performer.transformObject(step, source);
                } else {
                    TransformationPerformer performer = new TransformationPerformer(modelRegistry, operationLoader);
                    source = performer.transformObject(step, source, target);
                }
            }
            return source;
        } catch (InstantiationException e) {
            LOGGER.error("Instantiation exception while trying to perform transformations", e);
        } catch (IllegalAccessException e) {
            LOGGER.error("Illegal accesss exception while trying to perform transformations", e);
        } catch (ClassNotFoundException e) {
            LOGGER.error("Class not found exception while trying to perform transformations", e);
        }
        throw new IllegalArgumentException("No transformation description for the given parameters defined");
    }

    @Override
    public Boolean isTransformationPossible(ModelDescription sourceModel, ModelDescription targetModel) {
        return isTransformationPossible(sourceModel, targetModel, new ArrayList<String>());
    }

    @Override
    public Boolean isTransformationPossible(ModelDescription sourceModel, ModelDescription targetModel,
            List<String> ids) {
        return graphDb.isTransformationPossible(sourceModel, targetModel, ids);
    }

    public void setModelRegistry(ModelRegistry modelRegistry) {
        this.modelRegistry = modelRegistry;
        calculator = new PropertyConnectionCalculator(modelRegistry);
    }

    public void setGraphDb(ModelGraph graphDb) {
        this.graphDb = graphDb;
    }

    public void setOperationLoader(TransformationOperationLoader operationLoader) {
        this.operationLoader = operationLoader;
    }
}
TOP

Related Classes of org.openengsb.core.ekb.transformation.wonderland.internal.TransformationEngineService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.