package org.eclipse.emf.emfstore.client.test.server; import static org.junit.Assert.assertNotNull; import java.io.IOException; import org.eclipse.emf.emfstore.client.model.ModelPackage; import org.eclipse.emf.emfstore.client.model.ProjectSpace; import org.eclipse.emf.emfstore.client.model.Usersession; import org.eclipse.emf.emfstore.client.model.Workspace; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceImpl; import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand; import org.eclipse.emf.emfstore.client.properties.PropertyManager; import org.eclipse.emf.emfstore.client.test.SetupHelper; import org.eclipse.emf.emfstore.client.test.testmodel.TestmodelFactory; import org.eclipse.emf.emfstore.common.model.util.ModelUtil; import org.eclipse.emf.emfstore.server.exceptions.AccessControlException; import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException; import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnitId; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class PropertiesTest extends ServerTests { private static ProjectSpace projectSpace1; private static PropertyManager propertyManager1; private static ProjectSpace projectSpace2; private static PropertyManager propertyManager2; private static Usersession usersession1; private static Usersession usersession2; private ACOrgUnitId user1; private ACOrgUnitId user2; @Before public void setUpTests() throws EmfStoreException { user1 = SetupHelper.createUserOnServer(getSessionId(), "writer1").getId(); SetupHelper.addUsersRole(getSessionId(), user1.getId(), getWriterRoleId(), getProjectId()); user2 = SetupHelper.createUserOnServer(getSessionId(), "writer2").getId(); SetupHelper.addUsersRole(getSessionId(), user2.getId(), getWriterRoleId(), getProjectId()); usersession1 = setUpUsersession("writer1", "foo"); usersession2 = setUpUsersession("writer2", "foo"); new EMFStoreCommand() { @Override protected void doRun() { Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace(); workspace.getServerInfos().add(getServerInfo()); workspace.getUsersessions().add(usersession1); workspace.getUsersessions().add(usersession2); workspace.save(); try { usersession1.logIn(); usersession2.logIn(); projectSpace1 = workspace.checkout(usersession1, getProjectInfo()); projectSpace2 = workspace.checkout(usersession2, getProjectInfo()); } catch (AccessControlException e) { throw new RuntimeException(e); } catch (EmfStoreException e) { throw new RuntimeException(e); } } }.run(false); } @After public void tearDownUsers() throws EmfStoreException { SetupHelper.deleteUserOnServer(getSessionId(), user1); SetupHelper.deleteUserOnServer(getSessionId(), user2); } @Test public void sharedPropertiesTest() throws EmfStoreException { propertyManager1 = projectSpace1.getPropertyManager(); propertyManager2 = projectSpace2.getPropertyManager(); new EMFStoreCommand() { @Override protected void doRun() { propertyManager1.setSharedStringProperty("FirstPropKey", "test1"); propertyManager2.setSharedStringProperty("SecondTest", "test2"); try { propertyManager1.transmit(); propertyManager2.transmit(); propertyManager1.transmit(); } catch (EmfStoreException e) { throw new RuntimeException(e); } } }.run(false); // 1. Test, ob transmit funktioniert Assert.assertEquals(propertyManager1.getSharedStringProperty("FirstPropKey"), propertyManager2.getSharedStringProperty("FirstPropKey")); Assert.assertEquals(propertyManager2.getSharedStringProperty("SecondTest"), propertyManager1.getSharedStringProperty("SecondTest")); new EMFStoreCommand() { @Override protected void doRun() { propertyManager1.setSharedStringProperty("SecondTest", "test4"); propertyManager2.setSharedStringProperty("SecondTest", "test5"); try { propertyManager1.transmit(); propertyManager2.transmit(); propertyManager1.transmit(); } catch (EmfStoreException e) { throw new RuntimeException(e); } } }.run(false); // 2. Funktioniert update Assert.assertEquals("test5", propertyManager1.getSharedStringProperty("SecondTest")); } @Test public void testLocalProperties() throws IOException { new EMFStoreCommand() { @Override protected void doRun() { projectSpace1.getPropertyManager().setLocalProperty("foo", TestmodelFactory.eINSTANCE.createTestElement()); } }.run(false); ((ProjectSpaceImpl) projectSpace1).saveProjectSpaceOnly(); ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(ModelPackage.eINSTANCE.getProjectSpace(), projectSpace1.eResource().getURI(), false); assertNotNull(loadedProjectSpace.getPropertyManager().getLocalProperty("foo")); } }