Package org.openengsb.itests.util

Source Code of org.openengsb.itests.util.AbstractModelUsingExamTestHelper

/**
* 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.itests.util;

import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;

import java.lang.reflect.Method;

import org.openengsb.core.api.context.ContextHolder;
import org.openengsb.core.api.model.ModelDescription;
import org.openengsb.core.ekb.api.EKBCommit;
import org.openengsb.itests.exam.models.PrimitivePropertyModel;
import org.openengsb.itests.exam.models.SubModel;
import org.openengsb.itests.exam.models.TestModel;
import org.openengsb.itests.exam.models.TestModelProvider;
import org.ops4j.pax.tinybundles.core.TinyBundle;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkUtil;
import org.osgi.util.tracker.ServiceTracker;

public class AbstractModelUsingExamTestHelper extends AbstractExamTestHelper {
    private boolean providerInstalled = false;
    private final String providerVersion = "1.0.0";

    protected void registerModelProvider() throws Exception {
        if (providerInstalled) {
            return;
        }
        String delegationHeader =
            String.format("%s-%s", org.openengsb.labs.delegation.service.Constants.PROVIDED_CLASSES_HEADER,
                org.openengsb.core.api.Constants.DELEGATION_CONTEXT_MODELS);
        TinyBundle providerTinyBundle = bundle()
            .add(TestModel.class)
            .add(SubModel.class)
            .add(PrimitivePropertyModel.class)
            .add(TestModelProvider.class)
            .set(Constants.BUNDLE_ACTIVATOR, TestModelProvider.class.getName())
            .set(Constants.BUNDLE_SYMBOLICNAME, "test.model.provider")
            .set(Constants.BUNDLE_VERSION, providerVersion)
            .set(Constants.EXPORT_PACKAGE, "org.openengsb.itests.exam.models")
            .set(Constants.IMPORT_PACKAGE,
                "org.openengsb.core.api.model, org.osgi.framework, org.slf4j, "
                        + "org.openengsb.labs.delegation.service")
            .set(delegationHeader, "org.openengsb.itests.exam.models.*")
            .set(org.openengsb.core.api.Constants.PROVIDE_MODELS_HEADER, "true");
        Bundle providerBundle = getBundleContext().installBundle("test://testlocation/test.provider.jar",
            providerTinyBundle.build());
        providerBundle.start();
        providerInstalled = true;
    }

    protected ModelDescription getTestModelDescription() {
        return new ModelDescription(TestModel.class.getName(), providerVersion);
    }

    protected Class<?> getTestModel() throws Exception {
        Object provider = loadTestModelProvider();
        return (Class<?>) provider.getClass().getMethod("loadTestModel").invoke(provider);
    }

    protected ModelDescription getSubModelDescription() {
        return new ModelDescription(SubModel.class.getName(), providerVersion);
    }

    protected Class<?> getSubModel() throws Exception {
        Object provider = loadTestModelProvider();
        return (Class<?>) provider.getClass().getMethod("loadSubModel").invoke(provider);
    }

    protected ModelDescription getPrimitivePropertyModelDescription() {
        return new ModelDescription(PrimitivePropertyModel.class.getName(), providerVersion);
    }

    protected Class<?> getPrimitivePropertyModel() throws Exception {
        Object provider = loadTestModelProvider();
        return (Class<?>) provider.getClass().getMethod("loadPrimitivePropertyModel").invoke(provider);
    }

    private Object loadTestModelProvider() throws Exception {
        String filter = String.format("(%s=%s)", Constants.OBJECTCLASS, TestModelProvider.class.getName());
        Filter osgiFilter = FrameworkUtil.createFilter(filter);
        ServiceTracker tracker = new ServiceTracker(getBundleContext(), osgiFilter, null);
        tracker.open(true);
        return tracker.waitForService(4000);
    }

    protected void setProperty(Object model, String methodName, Object... params) throws Exception {
        Class<?>[] classes = new Class<?>[params.length];
        for (int i = 0; i < params.length; i++) {
            classes[i] = params[i].getClass();
        }
        try {
            Method method = model.getClass().getMethod(methodName, classes);
            method.invoke(model, params);
        } catch (Exception e) {
            for (Method method : model.getClass().getMethods()) {
                if (method.getName().equals(methodName)) {
                    method.invoke(model, params);
                    break;
                }
            }
        }
    }

    protected Object getProperty(Object model, String methodName) throws Exception {
        try {
            Method method = model.getClass().getMethod(methodName);
            return method.invoke(model);
        } catch (Exception e) {
            throw new IllegalArgumentException("There is no method " + methodName + " for the class "
                    + model.getClass().getName());
        }
    }

    protected String getModelOid(String modelId) {
        return String.format("%s/%s", ContextHolder.get().getCurrentContextId(), modelId);
    }

    protected EKBCommit getTestEKBCommit() {
        EKBCommit commit = new EKBCommit().setDomainId("testdomain").setConnectorId("testconnector");
        commit.setInstanceId("testinstance");
        return commit;
    }
}
TOP

Related Classes of org.openengsb.itests.util.AbstractModelUsingExamTestHelper

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.