package scrum.server; import ilarkesto.auth.Auth; import ilarkesto.base.time.TimePeriod; import ilarkesto.core.logging.Log; import ilarkesto.gwt.server.AGwtConversation; import ilarkesto.persistence.AEntity; import java.util.HashSet; import scrum.client.DataTransferObject; import scrum.client.communication.Pinger; import scrum.server.admin.SystemConfig; import scrum.server.admin.User; import scrum.server.collaboration.Emoticon; import scrum.server.collaboration.EmoticonDao; import scrum.server.project.Project; public class GwtConversation extends AGwtConversation { private static final Log LOG = Log.get(GwtConversation.class); private TimePeriod TIMEOUT = new TimePeriod(Pinger.MAX_DELAY * 10); private Project project; // --- dependencies --- private EmoticonDao emoticonDao; public void setEmoticonDao(EmoticonDao emoticonDao) { this.emoticonDao = emoticonDao; } // --- --- public GwtConversation(WebSession session, int number) { super(session, number); } @Override protected void filterEntityProperties(AEntity entity, java.util.Map propertiesMap) { super.filterEntityProperties(entity, propertiesMap); User user = getSession().getUser(); if (entity instanceof SystemConfig) { if (user == null || !user.isAdmin()) { propertiesMap.remove("smtpPassword"); } } else if (entity instanceof User) { if (user == null || (user != entity && !user.isAdmin())) { propertiesMap.remove("password"); propertiesMap.remove("email"); propertiesMap.remove("loginToken"); } } } @Override protected boolean isEntityVisible(AEntity entity) { return Auth.isVisible(entity, getSession().getUser()); } public void sendUserScopeDataToClient(User user) { getNextData().setUserId(user.getId()); ScrumWebApplication app = ScrumWebApplication.get(); getNextData().systemMessage = app.getSystemMessage(); sendToClient(user); sendToClient(app.getProjectDao().getEntitiesVisibleForUser(user)); // all projects sendToClient(app.getUserDao().getEntitiesVisibleForUser(user)); // all users } @Override public synchronized void sendToClient(AEntity entity) { super.sendToClient(entity); for (Emoticon emoticon : emoticonDao.getEmoticonsByParent(entity)) { super.sendToClient(emoticon); } } @Override public void invalidate() { super.invalidate(); ScrumWebApplication.get().updateOnlineTeamMembers(getProject(), this); if (getSession().getUser() != null && project != null) ScrumWebApplication.get().setUsersSelectedEntities(project, this, new HashSet<String>(0)); } @Override protected DataTransferObject createDataTransferObject() { return new DataTransferObject(); } @Override public WebSession getSession() { return (WebSession) super.getSession(); } @Override public DataTransferObject getNextData() { return (DataTransferObject) super.getNextData(); } public Project getProject() { return project; } public void setProject(Project project) { LOG.info("Project selected:", project); this.project = project; } @Override protected TimePeriod getTimeout() { return TIMEOUT; } }