package io.lumify.newUserWorkspaceCopy;
import com.google.inject.Inject;
import io.lumify.core.config.Configuration;
import io.lumify.core.model.user.UserListener;
import io.lumify.core.model.user.UserRepository;
import io.lumify.core.model.workspace.Workspace;
import io.lumify.core.model.workspace.WorkspaceRepository;
import io.lumify.core.user.User;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
public class NewUserWorkspaceCopyUserListener implements UserListener {
private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(NewUserWorkspaceCopyUserListener.class);
public static final String SETTING_WORKSPACE_ID = "newUserWorkspaceCopy.workspaceId";
public static final String SETTING_NEW_WORKSPACE_TITLE = "newUserWorkspaceCopy.newWorkspaceTitle";
private Configuration configuration;
private WorkspaceRepository workspaceRepository;
private UserRepository userRepository;
@Override
public void newUserAdded(User user) {
try {
String workspaceId = this.configuration.get(SETTING_WORKSPACE_ID, null);
if (workspaceId == null) {
LOGGER.warn("cannot find configuration parameter: %s", SETTING_WORKSPACE_ID);
return;
}
Workspace workspace = this.workspaceRepository.findById(workspaceId, this.userRepository.getSystemUser());
if (workspace == null) {
LOGGER.warn("cannot find workspace: %s", workspaceId);
return;
}
Workspace newWorkspace = this.workspaceRepository.copyTo(workspace, user, this.userRepository.getSystemUser());
String newWorkspaceTitle = this.configuration.get(SETTING_NEW_WORKSPACE_TITLE, null);
if (newWorkspaceTitle != null) {
workspaceRepository.setTitle(newWorkspace, newWorkspaceTitle, user);
}
this.userRepository.setCurrentWorkspace(user.getUserId(), newWorkspace.getWorkspaceId());
} catch (Exception ex) {
LOGGER.error("Could not share workspace", ex);
}
}
@Inject
public void setConfiguration(Configuration configuration) {
this.configuration = configuration;
}
@Inject
public void setWorkspaceRepository(WorkspaceRepository workspaceRepository) {
this.workspaceRepository = workspaceRepository;
}
@Inject
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}