Created
September 24, 2012 16:15
-
-
Save jhpedemonte/3776779 to your computer and use it in GitHub Desktop.
Backport of workaround from Eclipse Bug 389754 to Orion v0.5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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