-
Bug
-
Resolution: Done
-
Major
-
4.4.0.Final
The current implementation of Connection#isConnected() will always overwrite the authorization strategy in the client that it is using. This seems wrong given that #getResources, #createResource, #updateResource (and other methods) also set it but check if it already exists beforehand. Making sure that they dont overwrite an existing strategy.
public boolean isConnected(IProgressMonitor monitor) { client.setAuthorizationStrategy(getAuthorizationStrategy()); try {
public <T extends IResource> T createResource(T resource) { try { if(client.getAuthorizationStrategy() == null) { client.setAuthorizationStrategy(getAuthorizationStrategy()); } return client.create(resource);
A very likely side-effect of this is in Connection#ownsResource which compares clients (the one in the connection and the one attached to the given resource. The 2 clients are compared with the authorization strategy:
@Override public boolean equals(Object obj) { ... return ObjectUtils.equals(strategy, other.strategy);
the lookup for a connection for a given resource in ConnectionRegistryUtils#safeGetConnectionFor will therefore fail after a Connection#isConnected:
public static Connection safeGetConnectionFor(IResource resource) { Collection<Connection> all = ConnectionsRegistrySingleton.getInstance().getAll(Connection.class); for (Connection connection : all) { if(connection.ownsResource(resource)) { return connection; } } return null; }
- is related to
-
OSJC-256 DefaultClient: should #equal other client w/ same/different AuthStrategy as long as username is the same
- Closed
- relates to
-
JBIDE-22380 New Application wizard: project is not preselected (nor can you select any) if launched from explorer
- Closed