blob: e73e5d29ecd398d547b751392ed6277ada0b171b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* 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:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.internal.test.types;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.scout.commons.holders.IntegerHolder;
import org.eclipse.scout.sdk.extensions.runtime.classes.RuntimeClasses;
import org.eclipse.scout.sdk.extensions.targetpackage.IDefaultTargetPackage;
import org.eclipse.scout.sdk.internal.test.AbstractScoutSdkTest;
import org.eclipse.scout.sdk.operation.form.FormNewOperation;
import org.eclipse.scout.sdk.operation.service.ServiceNewOperation;
import org.eclipse.scout.sdk.testing.SdkAssert;
import org.eclipse.scout.sdk.util.internal.sigcache.SignatureCache;
import org.eclipse.scout.sdk.util.type.TypeFilters;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.util.typecache.IPrimaryTypeTypeHierarchy;
import org.eclipse.scout.sdk.util.typecache.ITypeHierarchy;
import org.eclipse.scout.sdk.util.typecache.ITypeHierarchyChangedListener;
import org.eclipse.scout.sdk.workspace.IScoutBundle;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeComparators;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeFilters;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* <h1>TypeHierarchyTest</h1>
* <p>
*/
public class TypeHierarchyTest1 extends AbstractScoutSdkTest {
private static String BUNDLE_NAME_CLIENT = "test.client";
private static String BUNDLE_NAME_SHARED = "test.shared";
private static String BUNDLE_NAME_SERVER = "test.server";
@BeforeClass
public static void setUpWorkspace() throws Exception {
setupWorkspace("resources/util/typeCache", BUNDLE_NAME_CLIENT, BUNDLE_NAME_SHARED, BUNDLE_NAME_SERVER);
}
@Test
public void testPrimaryTypeHierarchy() {
IType companyForm = SdkAssert.assertTypeExists("test.client.ui.forms.CompanyForm");
IType iformField = TypeUtility.getType(RuntimeClasses.IFormField);
IPrimaryTypeTypeHierarchy primaryFormFieldHierarchy = TypeUtility.getPrimaryTypeHierarchy(iformField);
ITypeHierarchy companyFormHierarchy = primaryFormFieldHierarchy.combinedTypeHierarchy(companyForm);
Assert.assertTrue(primaryFormFieldHierarchy.isCreated());
IType mainBox = SdkAssert.assertTypeExists(companyForm, "MainBox");
IType[] formFields = TypeUtility.getInnerTypes(mainBox, TypeFilters.getSubtypeFilter(iformField, companyFormHierarchy), ScoutTypeComparators.getOrderAnnotationComparator());
Assert.assertTrue(formFields.length == 3);
Assert.assertEquals(formFields[0].getElementName(), "NameField");
Assert.assertEquals(formFields[1].getElementName(), "SinceField");
Assert.assertEquals(formFields[2].getElementName(), "DetailsGroup");
}
@Test
public void testFormHierarchy() throws Exception {
final IJavaProject project = JavaCore.create(getProject(BUNDLE_NAME_CLIENT));
final IScoutBundle sb = ScoutTypeUtility.getScoutBundle(project);
final IType iForm = TypeUtility.getType(RuntimeClasses.IForm);
final IPrimaryTypeTypeHierarchy formHierarchy = TypeUtility.getPrimaryTypeHierarchy(iForm);
IType[] subtypes = formHierarchy.getAllSubtypes(iForm, ScoutTypeFilters.getTypesInScoutBundles(sb));
Assert.assertEquals(1, subtypes.length);
final IntegerHolder formCountHolder = new IntegerHolder(-1);
formHierarchy.addHierarchyListener(new ITypeHierarchyChangedListener() {
@Override
public void hierarchyInvalidated() {
formCountHolder.setValue(formHierarchy.getAllSubtypes(iForm, ScoutTypeFilters.getTypesInScoutBundles(sb)).length);
synchronized (formCountHolder) {
formCountHolder.notifyAll();
}
}
});
IScoutBundle client = ScoutTypeUtility.getScoutBundle(project.getProject());
SdkAssert.assertNotNull(client);
FormNewOperation formOp = new FormNewOperation("ANewForm", client.getPackageName(".ui.forms"), client.getJavaProject());
formOp.setSuperTypeSignature(RuntimeClasses.getSuperTypeSignature(RuntimeClasses.IForm, project));
executeBuildAssertNoCompileErrors(formOp);
synchronized (formCountHolder) {
while (formCountHolder.getValue() == -1) {
formCountHolder.wait();
}
}
// expect created form
Assert.assertEquals(2, formCountHolder.getValue().intValue());
}
@Test
public void testCreateNewService() throws Exception {
final IType iService = TypeUtility.getType(RuntimeClasses.IService);
final IPrimaryTypeTypeHierarchy serviceHierarchy = TypeUtility.getPrimaryTypeHierarchy(iService);
IType[] subtypes = serviceHierarchy.getAllSubtypes(iService, TypeFilters.getInWorkspaceFilter());
Assert.assertEquals(2, subtypes.length);
final IntegerHolder serviceCountHolder = new IntegerHolder(-1);
serviceHierarchy.addHierarchyListener(new ITypeHierarchyChangedListener() {
@Override
public void hierarchyInvalidated() {
serviceCountHolder.setValue(serviceHierarchy.getAllSubtypes(iService, TypeFilters.getInWorkspaceFilter()).length);
synchronized (serviceCountHolder) {
serviceCountHolder.notifyAll();
}
}
});
IScoutBundle clientBundle = ScoutTypeUtility.getScoutBundle(getProject(BUNDLE_NAME_CLIENT));
SdkAssert.assertNotNull(clientBundle);
IScoutBundle sharedBundle = ScoutTypeUtility.getScoutBundle(getProject(BUNDLE_NAME_SHARED));
SdkAssert.assertNotNull(sharedBundle);
IScoutBundle serverBundle = ScoutTypeUtility.getScoutBundle(getProject(BUNDLE_NAME_SERVER));
SdkAssert.assertNotNull(serverBundle);
ServiceNewOperation serviceOp = new ServiceNewOperation("ITestService", "TestService");
serviceOp.addProxyRegistrationProject(clientBundle.getJavaProject());
serviceOp.addServiceRegistrationProject(serverBundle.getJavaProject());
serviceOp.setImplementationProject(serverBundle.getJavaProject());
serviceOp.setInterfaceProject(sharedBundle.getJavaProject());
serviceOp.addInterfaceInterfaceSignature(SignatureCache.createTypeSignature(RuntimeClasses.IService));
serviceOp.setInterfacePackageName(sharedBundle.getDefaultPackage(IDefaultTargetPackage.SHARED_SERVICES) + ".notexisting");
serviceOp.setImplementationPackageName(serverBundle.getDefaultPackage(IDefaultTargetPackage.SERVER_SERVICES) + ".notexisting");
serviceOp.setImplementationSuperTypeSignature(RuntimeClasses.getSuperTypeSignature(RuntimeClasses.IService, serverBundle.getJavaProject()));
executeBuildAssertNoCompileErrors(serviceOp);
synchronized (serviceCountHolder) {
while (serviceCountHolder.getValue() == -1) {
serviceCountHolder.wait();
}
}
// expect created form
Assert.assertEquals(4, serviceCountHolder.getValue().intValue());
}
@AfterClass
public static void cleanUp() throws Exception {
clearWorkspace();
}
}