Port AppStatesPreferenceCleaner to spi branch (#6611)
* Port AppStatesPreferenceCleaner from master branch. Class has been missed as a result of previous merges. * Move AppStatesPreferenceCleaner to che-core-api-workspace. * Move WorkspaceRemovedEvent and WorkspaceCreatedEvent to che-core-api-workspace-shared; Move AppStatesPreferenceCleaner to che-core-api-user6.19.x
parent
405f9d4142
commit
ba47c0b825
|
|
@ -163,5 +163,7 @@ public class WsMasterModule extends AbstractModule {
|
|||
// bind(org.eclipse.che.api.agent.server.filters.AddExecInstallerInStackFilter.class);
|
||||
|
||||
bind(ServerCheckerFactory.class).to(ServerCheckerFactoryImpl.class);
|
||||
|
||||
bind(org.eclipse.che.api.user.server.AppStatesPreferenceCleaner.class);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import java.util.concurrent.Executors;
|
|||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.commons.lang.concurrent.LoggingUncaughtExceptionHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import static org.mockito.Mockito.when;
|
|||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.model.workspace.WorkspaceConfig;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.testng.MockitoTestNGListener;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import com.google.inject.Singleton;
|
|||
import io.fabric8.openshift.client.OpenShiftClient;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftClientFactory;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import static org.mockito.Mockito.when;
|
|||
|
||||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.testng.MockitoTestNGListener;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import javax.inject.Singleton;
|
|||
import org.eclipse.che.api.core.ServerException;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.commons.env.EnvironmentContext;
|
||||
import org.eclipse.che.multiuser.permission.workspace.server.model.impl.WorkerImpl;
|
||||
import org.eclipse.che.multiuser.permission.workspace.server.spi.WorkerDao;
|
||||
|
|
|
|||
|
|
@ -33,10 +33,10 @@ import org.eclipse.che.api.core.ServerException;
|
|||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.WorkspaceManager;
|
||||
import org.eclipse.che.api.workspace.server.event.BeforeWorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.ProjectConfigImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
|
||||
import org.eclipse.che.api.workspace.server.spi.WorkspaceDao;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.core.db.cascade.CascadeEventSubscriber;
|
||||
import org.eclipse.che.core.db.jpa.DuplicateKeyException;
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,10 @@
|
|||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-workspace</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-workspace-shared</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-commons-annotations</artifactId>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import org.eclipse.che.api.core.model.workspace.Workspace;
|
|||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.server.event.ServerIdleEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ import org.eclipse.che.api.core.model.workspace.Workspace;
|
|||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.server.event.ServerIdleEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
import org.mockito.Mock;
|
||||
|
|
|
|||
|
|
@ -48,10 +48,6 @@
|
|||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-user</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-workspace</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-workspace-shared</artifactId>
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ import org.eclipse.che.api.core.notification.EventService;
|
|||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.ssh.server.SshManager;
|
||||
import org.eclipse.che.api.user.server.UserManager;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import org.eclipse.che.api.core.notification.EventService;
|
|||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.ssh.server.SshManager;
|
||||
import org.eclipse.che.api.user.server.UserManager;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
import org.mockito.InjectMocks;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
<findbugs.failonerror>false</findbugs.failonerror>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
|
|
@ -68,6 +72,10 @@
|
|||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-user-shared</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-api-workspace-shared</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.core</groupId>
|
||||
<artifactId>che-core-commons-lang</artifactId>
|
||||
|
|
@ -80,6 +88,10 @@
|
|||
<groupId>org.everrest</groupId>
|
||||
<artifactId>everrest-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-persist</artifactId>
|
||||
|
|
@ -95,11 +107,6 @@
|
|||
<artifactId>javax.persistence</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2017 Red Hat, Inc.
|
||||
* 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:
|
||||
* Red Hat, Inc. - initial API and implementation
|
||||
*/
|
||||
package org.eclipse.che.api.user.server;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import java.util.Map;
|
||||
import javax.annotation.PostConstruct;
|
||||
import org.eclipse.che.api.core.NotFoundException;
|
||||
import org.eclipse.che.api.core.ServerException;
|
||||
import org.eclipse.che.api.core.model.user.User;
|
||||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.core.notification.EventSubscriber;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/** Handler for clean up app state preference when workspace is removed. */
|
||||
@Singleton
|
||||
public class AppStatesPreferenceCleaner implements EventSubscriber<WorkspaceRemovedEvent> {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AppStatesPreferenceCleaner.class);
|
||||
|
||||
/** The name of the property for the mappings in user preferences. */
|
||||
public static final String APP_STATES_PREFERENCE_PROPERTY = "IdeAppStates";
|
||||
|
||||
private JsonParser jsonParser;
|
||||
private EventService eventService;
|
||||
private UserManager userManager;
|
||||
private PreferenceManager preferenceManager;
|
||||
|
||||
@Inject
|
||||
public AppStatesPreferenceCleaner(
|
||||
JsonParser jsonParser,
|
||||
EventService eventService,
|
||||
UserManager userManager,
|
||||
PreferenceManager preferenceManager) {
|
||||
this.jsonParser = jsonParser;
|
||||
this.eventService = eventService;
|
||||
this.userManager = userManager;
|
||||
this.preferenceManager = preferenceManager;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void subscribe() {
|
||||
eventService.subscribe(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(WorkspaceRemovedEvent workspaceRemovedEvent) {
|
||||
try {
|
||||
Workspace workspace = workspaceRemovedEvent.getWorkspace();
|
||||
User user = userManager.getByName(workspace.getNamespace());
|
||||
if (user == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String userId = user.getId();
|
||||
Map<String, String> preferences = preferenceManager.find(userId);
|
||||
String appStates = preferences.get(APP_STATES_PREFERENCE_PROPERTY);
|
||||
if (appStates == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
JsonObject workspaces = jsonParser.parse(appStates).getAsJsonObject();
|
||||
JsonElement removedWorkspacePreferences = workspaces.remove(workspace.getId());
|
||||
if (removedWorkspacePreferences != null) {
|
||||
preferences.put(APP_STATES_PREFERENCE_PROPERTY, workspaces.toString());
|
||||
preferenceManager.save(userId, preferences);
|
||||
}
|
||||
} catch (NotFoundException | ServerException e) {
|
||||
Workspace workspace = workspaceRemovedEvent.getWorkspace();
|
||||
LOG.error(
|
||||
"Unable to clean up preferences for owner of the workspace {} with namespace {}",
|
||||
workspace.getId(),
|
||||
workspace.getNamespace());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* Red Hat, Inc. - initial API and implementation
|
||||
*/
|
||||
package org.eclipse.che.api.workspace.server.event;
|
||||
package org.eclipse.che.api.workspace.shared.event;
|
||||
|
||||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.notification.EventOrigin;
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* Red Hat, Inc. - initial API and implementation
|
||||
*/
|
||||
package org.eclipse.che.api.workspace.server.event;
|
||||
package org.eclipse.che.api.workspace.shared.event;
|
||||
|
||||
import org.eclipse.che.api.core.model.workspace.Workspace;
|
||||
import org.eclipse.che.api.core.notification.EventOrigin;
|
||||
|
|
@ -36,12 +36,12 @@ import org.eclipse.che.api.core.model.workspace.Workspace;
|
|||
import org.eclipse.che.api.core.model.workspace.WorkspaceConfig;
|
||||
import org.eclipse.che.api.core.model.workspace.WorkspaceStatus;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
|
||||
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
|
||||
import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException;
|
||||
import org.eclipse.che.api.workspace.server.spi.WorkspaceDao;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceCreatedEvent;
|
||||
import org.eclipse.che.commons.annotation.Nullable;
|
||||
import org.eclipse.che.commons.env.EnvironmentContext;
|
||||
import org.eclipse.che.commons.subject.Subject;
|
||||
|
|
|
|||
|
|
@ -33,10 +33,10 @@ import org.eclipse.che.api.core.ServerException;
|
|||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.WorkspaceManager;
|
||||
import org.eclipse.che.api.workspace.server.event.BeforeWorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.ProjectConfigImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
|
||||
import org.eclipse.che.api.workspace.server.spi.WorkspaceDao;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.core.db.cascade.CascadeEventSubscriber;
|
||||
import org.eclipse.che.core.db.jpa.DuplicateKeyException;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ import org.eclipse.che.api.core.NotFoundException;
|
|||
import org.eclipse.che.api.core.ServerException;
|
||||
import org.eclipse.che.api.core.notification.EventService;
|
||||
import org.eclipse.che.api.workspace.server.event.BeforeWorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.CommandImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.EnvironmentImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.MachineConfigImpl;
|
||||
|
|
@ -50,6 +49,7 @@ import org.eclipse.che.api.workspace.server.model.impl.SourceStorageImpl;
|
|||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl;
|
||||
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
|
||||
import org.eclipse.che.api.workspace.server.spi.WorkspaceDao;
|
||||
import org.eclipse.che.api.workspace.shared.event.WorkspaceRemovedEvent;
|
||||
import org.eclipse.che.commons.test.tck.TckListener;
|
||||
import org.eclipse.che.commons.test.tck.repository.TckRepository;
|
||||
import org.eclipse.che.commons.test.tck.repository.TckRepositoryException;
|
||||
|
|
|
|||
Loading…
Reference in New Issue