Package org.openengsb.core.edb.jpa.internal.util

Source Code of org.openengsb.core.edb.jpa.internal.util.EDBUtils

/**
* 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.edb.jpa.internal.util;

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

import org.openengsb.core.edb.api.EDBObject;
import org.openengsb.core.edb.api.EDBObjectEntry;
import org.openengsb.core.edb.jpa.internal.JPAEntry;
import org.openengsb.core.edb.jpa.internal.JPAObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* The EDBUtils class contains functions needed in the whole EDB implementation.
*/
public final class EDBUtils {
    private static final Logger LOGGER = LoggerFactory.getLogger(EDBUtils.class);
    private static List<EDBConverterStep> steps = new ArrayList<EDBConverterStep>(Arrays.asList(
        new StringConverterStep(), new DateConverterStep(), new DefaultConverterStep()));

    private EDBUtils() {
    }

    /**
     * Converts a JPAEntry object into an EDBObjectEntry element. If there is a problem with the instantiation of the
     * type of the JPAEntry, the simple string object will be written in the resulting element. To instantiate the type
     * first the static method "valueOf" of the type will be tried. If that didn't work, then the constructor of the
     * object with a string parameter is used. If that didn't work either, the simple string will be set in the entry.
     */
    public static EDBObjectEntry convertJPAEntryToEDBObjectEntry(JPAEntry entry) {
        for (EDBConverterStep step : steps) {
            if (step.doesStepFit(entry.getType())) {
                LOGGER.debug("EDBConverterStep {} fit for type {}", step.getClass().getName(), entry.getType());
                return step.convertToEDBObjectEntry(entry);
            }
        }
        LOGGER.error("No EDBConverterStep fit for JPAEntry {}", entry);
        return null;
    }

    /**
     * Converts a JPAEntry object into an EDBObjectEntry.
     */
    public static JPAEntry convertEDBObjectEntryToJPAEntry(EDBObjectEntry entry, JPAObject owner) {
        for (EDBConverterStep step : steps) {
            if (step.doesStepFit(entry.getType())) {
                LOGGER.debug("EDBConverterStep {} fit for type {}", step.getClass().getName(), entry.getType());
                return step.convertToJPAEntry(entry, owner);
            }
        }
        LOGGER.error("No EDBConverterStep fit for EDBObjectEntry {}", entry);
        return null;
    }

    /**
     * Converts a JPAObject object into an EDBObject.
     */
    public static EDBObject convertJPAObjectToEDBObject(JPAObject object) {
        EDBObject result = new EDBObject(object.getOID());
        for (JPAEntry kvp : object.getEntries()) {
            EDBObjectEntry entry = convertJPAEntryToEDBObjectEntry(kvp);
            result.put(entry.getKey(), entry);
        }
        result.setDeleted(object.isDeleted());
        if (object.getTimestamp() != null) {
            result.updateTimestamp(object.getTimestamp());
        }
        return result;
    }

    /**
     * Converts an EDBObject object into a JPAObject object.
     */
    public static JPAObject convertEDBObjectToJPAObject(EDBObject object) {
        JPAObject result = new JPAObject();
        result.setTimestamp(object.getTimestamp());
        result.setOID(object.getOID());
        result.setDeleted(object.isDeleted());
        List<JPAEntry> entries = new ArrayList<JPAEntry>();
        for (EDBObjectEntry entry : object.values()) {
            entries.add(convertEDBObjectEntryToJPAEntry(entry, result));
        }
        result.setEntries(entries);
        return result;
    }

    /**
     * Converts a list of EDBObjects into a list of JPAObjects
     */
    public static List<JPAObject> convertEDBObjectsToJPAObjects(List<EDBObject> objects) {
        List<JPAObject> result = new ArrayList<JPAObject>();
        for (EDBObject object : objects) {
            result.add(convertEDBObjectToJPAObject(object));
        }
        return result;
    }

    /**
     * Converts a list of JPAObjects into a list of EDBObjects
     */
    public static List<EDBObject> convertJPAObjectsToEDBObjects(List<JPAObject> objects) {
        List<EDBObject> result = new ArrayList<EDBObject>();
        for (JPAObject object : objects) {
            result.add(convertJPAObjectToEDBObject(object));
        }
        return result;
    }
}
TOP

Related Classes of org.openengsb.core.edb.jpa.internal.util.EDBUtils

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.