Skip to content

Instantly share code, notes, and snippets.

@jhpedemonte
Created September 24, 2012 16:15
Show Gist options
  • Save jhpedemonte/3776779 to your computer and use it in GitHub Desktop.
Save jhpedemonte/3776779 to your computer and use it in GitHub Desktop.
Backport of workaround from Eclipse Bug 389754 to Orion v0.5
diff --git a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebElement.java b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebElement.java
index 652cad7..9aa40ee 100644
--- a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebElement.java
+++ b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebElement.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2012 IBM Corporation and others.
* 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
@@ -59,7 +59,8 @@ public class WebElement {
*/
public void save() throws CoreException {
try {
- store.flush();
+ //flush directly at root level to workaround equinox bug 389754.
+ store.parent().flush();
} catch (BackingStoreException e) {
throw new CoreException(new Status(IStatus.ERROR, ServerConstants.PI_SERVER_CORE, "Error saving state"));
}
diff --git a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebUser.java b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebUser.java
index 499a117..3363593 100644
--- a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebUser.java
+++ b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/WebUser.java
@@ -41,12 +41,13 @@ public class WebUser extends WebElement {
result.put(ProtocolConstants.KEY_NAME, userName);
if (result.get(ProtocolConstants.KEY_ID, null) == null)
result.put(ProtocolConstants.KEY_ID, new UniversalUniqueIdentifier().toBase64String());
+ WebUser user = new WebUser(result);
try {
- result.flush();
- } catch (BackingStoreException e) {
+ user.save();
+ } catch (CoreException e) {
LogHelper.log(e);
}
- return new WebUser(result);
+ return user;
}
public WebWorkspace createWorkspace(String name) throws CoreException {
diff --git a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/authorization/AuthorizationService.java b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/authorization/AuthorizationService.java
index f01644f..dac391c 100644
--- a/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/authorization/AuthorizationService.java
+++ b/bundles/org.eclipse.orion.server.servlets/src/org/eclipse/orion/internal/server/servlets/workspace/authorization/AuthorizationService.java
@@ -105,7 +105,8 @@ public class AuthorizationService {
private static void saveRights(IEclipsePreferences result, JSONArray userRightArray) throws BackingStoreException {
result.put(ProtocolConstants.KEY_USER_RIGHTS, userRightArray.toString());
result.putInt(ProtocolConstants.KEY_USER_RIGHTS_VERSION, CURRENT_VERSION);
- result.flush();
+ //flush directly at root level to workaround equinox bug 389754.
+ result.parent().flush();
}
/**
diff --git a/tests/org.eclipse.orion.server.tests/src/org/eclipse/orion/server/tests/prefs/PreferenceTest.java b/tests/org.eclipse.orion.server.tests/src/org/eclipse/orion/server/tests/prefs/PreferenceTest.java
index ce11fb1..2969990 100644
--- a/tests/org.eclipse.orion.server.tests/src/org/eclipse/orion/server/tests/prefs/PreferenceTest.java
+++ b/tests/org.eclipse.orion.server.tests/src/org/eclipse/orion/server/tests/prefs/PreferenceTest.java
@@ -20,6 +20,7 @@ import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.orion.internal.server.core.IOUtilities;
import org.eclipse.orion.server.core.users.OrionScope;
import org.eclipse.orion.server.tests.AbstractServerTest;
@@ -45,13 +46,22 @@ public class PreferenceTest extends AbstractServerTest {
@Before
public void setUp() throws BackingStoreException {
OrionScope prefs = new OrionScope();
- prefs.getNode("Users").removeNode();
- prefs.getNode("Workspaces").removeNode();
- prefs.getNode("Projects").removeNode();
+ clearPreferences(prefs.getNode("Users"));
+ clearPreferences(prefs.getNode("Workspaces"));
+ clearPreferences(prefs.getNode("Projects"));
webConversation = new WebConversation();
webConversation.setExceptionsThrownOnErrorStatus(false);
}
+ private void clearPreferences(IEclipsePreferences prefs) throws BackingStoreException {
+ //clear children
+ for (String child : prefs.childrenNames()) {
+ prefs.node(child).removeNode();
+ }
+ prefs.clear();
+ prefs.flush();
+ }
+
@Test
public void testGetSingle() throws IOException, JSONException {
List<String> locations = getTestPreferenceNodes();
@@ -227,21 +237,21 @@ public class PreferenceTest extends AbstractServerTest {
WebRequest request = new GetMethodWebRequest(location);
setAuthentication(request);
WebResponse response = webConversation.getResource(request);
- assertEquals(HttpURLConnection.HTTP_NOT_FOUND, response.getResponseCode());
+ assertEquals("1." + location, HttpURLConnection.HTTP_NOT_FOUND, response.getResponseCode());
//put a value
request = createSetPreferenceRequest(location, "Name", "Frodo");
setAuthentication(request);
response = webConversation.getResource(request);
- assertEquals("1." + location, HttpURLConnection.HTTP_NO_CONTENT, response.getResponseCode());
+ assertEquals("2." + location, HttpURLConnection.HTTP_NO_CONTENT, response.getResponseCode());
//now doing a get should succeed
request = new GetMethodWebRequest(location);
setAuthentication(request);
response = webConversation.getResource(request);
- assertEquals("2." + location, HttpURLConnection.HTTP_OK, response.getResponseCode());
+ assertEquals("3." + location, HttpURLConnection.HTTP_OK, response.getResponseCode());
JSONObject result = new JSONObject(response.getText());
- assertEquals("3." + location, "Frodo", result.optString("Name"));
+ assertEquals("4." + location, "Frodo", result.optString("Name"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment