blob: 38f67c130ac43cad20e807ed7059f2d906051154 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence.sync;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceDescription;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jst.ws.jaxws.dom.runtime.DomUtil;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IServiceEndpointInterface;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebService;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebServiceProject;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.JaxWsWorkspaceResource;
import org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence.DomTestUtils;
import org.eclipse.jst.ws.jaxws.testutils.dom.WaitingDomUtil;
import org.eclipse.jst.ws.jaxws.testutils.jmock.MockObjectTestCase;
import org.eclipse.jst.ws.jaxws.testutils.jobs.JobUtils;
import org.eclipse.jst.ws.jaxws.testutils.project.TestEjb3Project;
import org.eclipse.jst.ws.jaxws.testutils.project.TestProject;
public class SynchronizationTestFixture extends MockObjectTestCase
{
protected TestProject testPrj1;
protected TestProject testPrj2;
protected JaxWsWorkspaceResource target;
protected IJavaModel javaModel;
protected static final String prj1PckName = "com.sap.test.modelsync1";
protected static final String prj2PckName = "com.sap.test.modelsync2";
protected static final String ws1ImplName = prj1PckName + ".WS1";
protected static final String sei1ImplName = prj1PckName + ".Sei1";
protected static final String ws2ImplName = prj2PckName + ".WS2";
protected static final String sei2ImplName = prj2PckName + ".Sei2";
protected IWebServiceProject wsPrj1;
protected IWebService ws1;
protected IServiceEndpointInterface sei1;
protected IWebServiceProject wsPrj2;
protected IWebService ws2;
protected IServiceEndpointInterface sei2;
protected Collection<String> allowedProjects;
protected DomUtil domUtil;
protected DomTestUtils testUtil = new DomTestUtils();
public void setUp() throws Exception
{
domUtil = new WaitingDomUtil();
allowedProjects = new ArrayList<String>(3);
javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
target = createTarget();
testPrj1 = new TestProject(new TestEjb3Project("TestProject1").getProject());
testPrj1.createSourceFolder("src");
final IPackageFragment modelSync1 = testPrj1.createPackage("com.sap.test.modelsync1");
final String javaModelErrorMessage = "Java Model Error. Just created type not found in the java model";
assertNotNull(javaModelErrorMessage, testPrj1.createType(modelSync1, "Sei1.java", "@javax.jws.WebService(name=\"Sei1Name\") public interface Sei1 {}"));
assertNotNull(javaModelErrorMessage, testPrj1.createType(modelSync1, "WS1.java", "@javax.jws.WebService(serviceName=\"WS1Name\", endpointInterface=\"com.sap.test.modelsync1.Sei1\") public class WS1 {}"));
testPrj2 = new TestProject(new TestEjb3Project("TestProject2").getProject());
testPrj2.createSourceFolder("src");
final IPackageFragment modelSync2 = testPrj2.createPackage("com.sap.test.modelsync2");
assertNotNull(javaModelErrorMessage, testPrj2.createType(modelSync2, "Sei2.java", "@javax.jws.WebService(name=\"Sei2Name\") public interface Sei2 {}"));
assertNotNull(javaModelErrorMessage, testPrj2.createType(modelSync2, "WS2.java", "@javax.jws.WebService(serviceName=\"WS2Name\", endpointInterface=\"com.sap.test.modelsync1.Sei2\") public class WS2 {}"));
allowedProjects.add(testPrj1.getJavaProject().getElementName());
allowedProjects.add(testPrj2.getJavaProject().getElementName());
JobUtils.waitForJobs();
target.load(null);
wsPrj1 = domUtil.findProjectByName(target.getDOM(), testPrj1.getJavaProject().getElementName());
assertNotNull(wsPrj1);
assertEquals(1, wsPrj1.getServiceEndpointInterfaces().size());
assertEquals(1, wsPrj1.getWebServices().size());
ws1 = domUtil.findWsByImplName(wsPrj1, ws1ImplName);
assertNotNull(ws1);
sei1 = domUtil.findSeiByImplName(wsPrj1, sei1ImplName);
assertNotNull(sei1);
wsPrj2 = domUtil.findProjectByName(target.getDOM(), testPrj2.getJavaProject().getElementName());
assertNotNull(wsPrj2);
assertEquals(1, wsPrj2.getServiceEndpointInterfaces().size());
assertEquals(1, wsPrj2.getWebServices().size());
ws2 = domUtil.findWsByImplName(wsPrj2, ws2ImplName);
assertNotNull(ws2);
sei2 = domUtil.findSeiByImplName(wsPrj2, sei2ImplName);
assertNotNull(sei2);
}
@Override
public void beforeTestCase() throws CoreException
{
enableAutoBuild(ResourcesPlugin.getWorkspace(), false);
}
@Override
public void afterTestCase() throws CoreException
{
enableAutoBuild(ResourcesPlugin.getWorkspace(), true);
}
private void enableAutoBuild(IWorkspace ws, boolean enable) throws CoreException
{
final IWorkspaceDescription desc = ws.getDescription();
desc.setAutoBuilding(enable);
ws.setDescription(desc);
}
protected Adapter findAdapter(EObject object, Class<?> clazz) {
for (Adapter adapter: object.eAdapters()) {
if (adapter.isAdapterForType(clazz)) {
return adapter;
}
}
return null;
}
@Override
public void tearDown() throws CoreException
{
target.stopSynchronizing();
testPrj1.dispose();
testPrj2.dispose();
}
private JaxWsWorkspaceResource createTarget()
{
return new JaxWsWorkspaceResource(javaModel)
{
@Override
public boolean approveProject(IJavaProject prj) {
for (String allowedPrj : allowedProjects)
{
if (prj.getElementName().equals(allowedPrj))
{
return true;
}
}
return false;
}
};
}
}