Skip to content
Snippets Groups Projects
Commit 18210fe2 authored by Oliver Rieger's avatar Oliver Rieger
Browse files

take driver role action modified to remove the driver role from a selected user.

parent 1bb2bc2f
Branches
Tags
No related merge requests found
...@@ -171,6 +171,9 @@ public class SharedProject implements ISharedProject { ...@@ -171,6 +171,9 @@ public class SharedProject implements ISharedProject {
public void setDriver(User driver, boolean replicated) { public void setDriver(User driver, boolean replicated) {
assert driver != null; assert driver != null;
/* if user has current role observr*/
if(getParticipant(driver.getJid()).getUserRole() == UserRole.OBSERVER){
/* set new driver status in participant list of sharedProject. */ /* set new driver status in participant list of sharedProject. */
getParticipant(driver.getJid()).setUserRole(UserRole.DRIVER); getParticipant(driver.getJid()).setUserRole(UserRole.DRIVER);
...@@ -207,6 +210,26 @@ public class SharedProject implements ISharedProject { ...@@ -207,6 +210,26 @@ public class SharedProject implements ISharedProject {
setProjectReadonly(!isDriver()); setProjectReadonly(!isDriver());
}
else{
/* changed state form observer to driver*/
if(getParticipant(driver.getJid()).getUserRole() == UserRole.DRIVER){
/* set the local driver state to observer*/
if(isDriver(new User(myID))){
setProjectReadonly(true);
this.driver = host;
}
/* set observer state. */
getParticipant(driver.getJid()).setUserRole(UserRole.OBSERVER);
}
}
/* inform observer. */
JID jid = driver.getJid(); JID jid = driver.getJid();
for (ISharedProjectListener listener : listeners) { for (ISharedProjectListener listener : listeners) {
listener.driverChanged(jid, replicated); listener.driverChanged(jid, replicated);
...@@ -214,7 +237,16 @@ public class SharedProject implements ISharedProject { ...@@ -214,7 +237,16 @@ public class SharedProject implements ISharedProject {
} }
public void removeDriver(User driver, boolean replicated) { public void removeDriver(User driver, boolean replicated) {
/* set new observer status in participant list of sharedProject. */
getParticipant(driver.getJid()).setUserRole(UserRole.OBSERVER);
/**
* communicate driver role change to listener.
*/
JID jid = driver.getJid();
for (ISharedProjectListener listener : listeners) {
listener.driverChanged(jid, replicated);
}
} }
/* /*
...@@ -232,12 +264,15 @@ public class SharedProject implements ISharedProject { ...@@ -232,12 +264,15 @@ public class SharedProject implements ISharedProject {
* @see de.fu_berlin.inf.dpp.ISharedProject * @see de.fu_berlin.inf.dpp.ISharedProject
*/ */
public boolean isDriver() { public boolean isDriver() {
//TODO: change driver status request to userrole request of participient list.
//HOST //HOST
if(activitySequencer.getConcurrentManager() != null && activitySequencer.getConcurrentManager().isHostSide()){ if(activitySequencer.getConcurrentManager() != null && activitySequencer.getConcurrentManager().isHostSide()){
return activitySequencer.getConcurrentManager().isDriver(driver); return activitySequencer.getConcurrentManager().isDriver(driver);
} }
//CLIENT //CLIENT
return driver.getJid().equals(myID); return driver.getJid().equals(myID);
} }
/* /*
......
...@@ -65,6 +65,7 @@ import de.fu_berlin.inf.dpp.ui.actions.GiveDriverRoleAction; ...@@ -65,6 +65,7 @@ import de.fu_berlin.inf.dpp.ui.actions.GiveDriverRoleAction;
import de.fu_berlin.inf.dpp.ui.actions.OpenInviteInterface; import de.fu_berlin.inf.dpp.ui.actions.OpenInviteInterface;
import de.fu_berlin.inf.dpp.ui.actions.LeaveSessionAction; import de.fu_berlin.inf.dpp.ui.actions.LeaveSessionAction;
import de.fu_berlin.inf.dpp.ui.actions.RemoveAllDriverRoleAction; import de.fu_berlin.inf.dpp.ui.actions.RemoveAllDriverRoleAction;
import de.fu_berlin.inf.dpp.ui.actions.TakeDriverRoleAction;
public class SessionView extends ViewPart public class SessionView extends ViewPart
...@@ -76,6 +77,8 @@ public class SessionView extends ViewPart ...@@ -76,6 +77,8 @@ public class SessionView extends ViewPart
private GiveDriverRoleAction giveDriverRoleAction; private GiveDriverRoleAction giveDriverRoleAction;
private TakeDriverRoleAction takeDriverRoleAction;
private IPreferenceStore store = null; private IPreferenceStore store = null;
...@@ -266,6 +269,7 @@ public class SessionView extends ViewPart ...@@ -266,6 +269,7 @@ public class SessionView extends ViewPart
viewer.setInput(null); viewer.setInput(null);
giveDriverRoleAction = new GiveDriverRoleAction(viewer); giveDriverRoleAction = new GiveDriverRoleAction(viewer);
takeDriverRoleAction = new TakeDriverRoleAction(viewer);
contributeToActionBars(); contributeToActionBars();
hookContextMenu(); hookContextMenu();
...@@ -325,6 +329,7 @@ public class SessionView extends ViewPart ...@@ -325,6 +329,7 @@ public class SessionView extends ViewPart
private void fillContextMenu(IMenuManager manager) { private void fillContextMenu(IMenuManager manager) {
manager.add(giveDriverRoleAction); manager.add(giveDriverRoleAction);
manager.add(takeDriverRoleAction);
// Other plug-ins can contribute there actions here // Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
......
...@@ -22,20 +22,27 @@ package de.fu_berlin.inf.dpp.ui.actions; ...@@ -22,20 +22,27 @@ package de.fu_berlin.inf.dpp.ui.actions;
import org.eclipse.jface.action.Action; import org.eclipse.jface.action.Action;
import de.fu_berlin.inf.dpp.Saros; import de.fu_berlin.inf.dpp.Saros;
import de.fu_berlin.inf.dpp.User;
import de.fu_berlin.inf.dpp.User.UserRole;
import de.fu_berlin.inf.dpp.invitation.IIncomingInvitationProcess; import de.fu_berlin.inf.dpp.invitation.IIncomingInvitationProcess;
import de.fu_berlin.inf.dpp.net.JID; import de.fu_berlin.inf.dpp.net.JID;
import de.fu_berlin.inf.dpp.project.ISessionListener; import de.fu_berlin.inf.dpp.project.ISessionListener;
import de.fu_berlin.inf.dpp.project.ISharedProject; import de.fu_berlin.inf.dpp.project.ISharedProject;
import de.fu_berlin.inf.dpp.project.ISharedProjectListener; import de.fu_berlin.inf.dpp.project.ISharedProjectListener;
import de.fu_berlin.inf.dpp.ui.SarosUI; import de.fu_berlin.inf.dpp.ui.SarosUI;
/**
* this action remove all remote driver from project. Only the project host has
* the driver role after this action is executed.
* @author orieger
*
*/
public class RemoveAllDriverRoleAction extends Action implements ISharedProjectListener, public class RemoveAllDriverRoleAction extends Action implements ISharedProjectListener,
ISessionListener { ISessionListener {
public RemoveAllDriverRoleAction() { public RemoveAllDriverRoleAction() {
super("Take user driver role"); super("Take remote user driver roles");
setImageDescriptor(SarosUI.getImageDescriptor("icons/user_edit.png")); setImageDescriptor(SarosUI.getImageDescriptor("icons/user_edit.png"));
setToolTipText("Take driver role"); setToolTipText("Take remote driver roles");
Saros.getDefault().getSessionManager().addSessionListener(this); Saros.getDefault().getSessionManager().addSessionListener(this);
updateEnablement(); updateEnablement();
...@@ -43,7 +50,14 @@ public class RemoveAllDriverRoleAction extends Action implements ISharedProjectL ...@@ -43,7 +50,14 @@ public class RemoveAllDriverRoleAction extends Action implements ISharedProjectL
@Override @Override
public void run() { public void run() {
getSharedProject().setDriver(getSharedProject().getHost(), false); // getSharedProject().setDriver(getSharedProject().getHost(), false);
ISharedProject project = Saros.getDefault().getSessionManager().getSharedProject();
for(User user : project.getParticipants()){
if(user.getUserRole() == UserRole.DRIVER && !project.getHost().equals(user)){
project.removeDriver(user, false);
}
}
} }
/* /*
......
package de.fu_berlin.inf.dpp.ui.actions;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.actions.SelectionProviderAction;
import de.fu_berlin.inf.dpp.Saros;
import de.fu_berlin.inf.dpp.User;
import de.fu_berlin.inf.dpp.invitation.IIncomingInvitationProcess;
import de.fu_berlin.inf.dpp.net.JID;
import de.fu_berlin.inf.dpp.project.ISessionListener;
import de.fu_berlin.inf.dpp.project.ISharedProject;
import de.fu_berlin.inf.dpp.project.ISharedProjectListener;
import de.fu_berlin.inf.dpp.ui.SarosUI;
public class TakeDriverRoleAction extends SelectionProviderAction implements
ISharedProjectListener, ISessionListener {
private User selectedUser;
public TakeDriverRoleAction(ISelectionProvider provider) {
super(provider, "Take driver role");
setImageDescriptor(SarosUI.getImageDescriptor("icons/user.png"));
setToolTipText("Take the driver role from this user.");
Saros.getDefault().getSessionManager().addSessionListener(this);
updateEnablemnet();
}
@Override
public void run() {
ISharedProject project = Saros.getDefault().getSessionManager().getSharedProject();
// project.setDriver(selectedUser, false);
project.removeDriver(selectedUser, false);
}
@Override
public void selectionChanged(IStructuredSelection selection) {
selectedUser = (selection.size() == 1) ? (User) selection.getFirstElement() : null;
updateEnablemnet();
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISessionListener
*/
public void sessionStarted(ISharedProject session) {
session.addListener(this);
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISessionListener
*/
public void sessionEnded(ISharedProject session) {
session.removeListener(this);
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISessionListener
*/
public void invitationReceived(IIncomingInvitationProcess process) {
// ignore
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISharedProjectListener
*/
public void driverChanged(JID driver, boolean replicated) {
updateEnablemnet();
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISharedProjectListener
*/
public void userJoined(JID user) {
// ignore
}
/*
* (non-Javadoc)
*
* @see de.fu_berlin.inf.dpp.listeners.ISharedProjectListener
*/
public void userLeft(JID user) {
// ignore
}
private void updateEnablemnet() {
ISharedProject project = Saros.getDefault().getSessionManager().getSharedProject();
boolean enabled = (project != null
&& selectedUser != null
&& project.isHost()
&& !project.getHost().equals(selectedUser)
&& project.isDriver(selectedUser));
setEnabled(enabled);
// setEnabled(project != null && (project.isDriver() /*|| project.isHost()*/)
// && selectedUser != null && !project.getDriver().equals(selectedUser));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment