package de.tud.kom.socom.web.server;
import java.util.List;
import de.tud.kom.socom.web.client.services.administration.SoComAdministrationService;
import de.tud.kom.socom.web.client.sharedmodels.SimpleUser;
import de.tud.kom.socom.web.client.util.exceptions.IllegalAccessException;
import de.tud.kom.socom.web.server.database.influence.HSQLInfluenceDatabaseAccess;
import de.tud.kom.socom.web.server.database.influence.InfluenceDatabaseAccess;
import de.tud.kom.socom.web.server.database.user.HSQLUserDatabaseAccess;
import de.tud.kom.socom.web.server.database.user.UserDatabaseAccess;
@SuppressWarnings("serial")
public class SoComAdministrationServiceImpl extends SoComService implements SoComAdministrationService {
private UserDatabaseAccess udb = HSQLUserDatabaseAccess.getInstance();
private InfluenceDatabaseAccess idb = HSQLInfluenceDatabaseAccess.getInstance();
@Override
public SimpleUser getUser(String username) {
return udb.getSimpleUserByName(username);
}
@Override
public List<SimpleUser> getUsersStartingWith(String startingWith) {
return udb.getSimpleUsersByName(startingWith);
}
@Override
public boolean changeUserDeletedState(String sid, long uid, int deleteState) throws IllegalAccessException {
if(getCurrentUser(sid).isAdmin())
return udb.changeUserDeletionFlag(uid, deleteState);
throw new IllegalAccessException("not an admin");
}
@Override
public String[] getDeletedStates() {
return udb.getDeletedStates();
}
@Override
public boolean changeInfluenceAnswerDeletedState(String sid, boolean predefined, long answerId, int deleteState) throws IllegalAccessException {
if(!(getCurrentUser(sid).isAdmin() || (!predefined && idb.isOwnerOfFreeAnswer(getCurrentUser(sid).getUid(), answerId))))
throw new IllegalAccessException("not an admin");
if(predefined) return idb.changePredefinedAnswerDeletionFlag(answerId, deleteState);
else return idb.changeFreeAnswerDeletionFlag(answerId, deleteState);
}
@Override
public boolean startInfluence(String sid, long influenceId, long time) throws IllegalAccessException {
if(!getCurrentUser(sid).isAdmin())
throw new IllegalAccessException("not an admin");
return idb.startInfluence(influenceId, time);
}
@Override
public boolean stopInfluence(String sid, long influenceId) throws IllegalAccessException {
if(!getCurrentUser(sid).isAdmin())
throw new IllegalAccessException("not an admin");
return idb.stopInfluence(influenceId);
}
@Override
public boolean changeInfluenceAnswerVisibilityState(String sid, boolean predefined, long id, int newVisibility) throws IllegalAccessException {
if(!(getCurrentUser(sid).isAdmin() || (!predefined && idb.isOwnerOfFreeAnswer(getCurrentUser(sid).getUid(), id))))
throw new IllegalAccessException("not an admin");
if(predefined) return false;
else return idb.changeFreeAnswerVisibility(id, newVisibility);
}
}