/* * Copyright 2000-2006 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.communicator.core.impl.users; import jetbrains.communicator.core.EventBroadcaster; import jetbrains.communicator.core.users.User; import jetbrains.communicator.core.users.UserEvent; import jetbrains.communicator.core.users.UserModel; import jetbrains.communicator.util.StringUtil; /** * @author Kir */ public abstract class BaseUserImpl implements User { public static final String CAN_ACCESS_MY_FILES = "canAccessMyFiles"; public static final String GROUP = "group"; public static final String DISPLAY_NAME = "displayName"; private final String myName; private String myGroup; private String myDisplayName; private boolean myCanAccessMyFiles; protected BaseUserImpl(String name, String group) { assert name != null; myName = name; myDisplayName = name; myGroup = StringUtil.fixGroup(group); } public String getName() { return myName; } public String getDisplayName() { return myDisplayName; } public void setDisplayName(final String name, UserModel userModel) { if (StringUtil.isEmpty(name)) return; if (userModel != null) { User inModel = userModel.findUser(getName(), getTransportCode()); if (inModel != null) { ((BaseUserImpl) inModel).setDisplayNameWithEvent(name, userModel.getBroadcaster()); } } myDisplayName = name; } public String getGroup() { return myGroup; } public void setGroup(final String group, UserModel userModel) { final String fixedGroup = StringUtil.fixGroup(group); if (userModel != null) { User inModel = userModel.findUser(getName(), getTransportCode()); if (inModel != null) { ((BaseUserImpl) inModel).setGroupWithEvent(fixedGroup, userModel.getBroadcaster()); } } myGroup = fixedGroup; } public boolean canAccessMyFiles() { return myCanAccessMyFiles; } public void setCanAccessMyFiles(final boolean canAccessMyFiles, UserModel userModel) { if (userModel != null) { User inModel = userModel.findUser(getName(), getTransportCode()); if (inModel != null) { ((BaseUserImpl) inModel).setCanAccessWithEvent(canAccessMyFiles, userModel.getBroadcaster()); } } myCanAccessMyFiles = canAccessMyFiles; } private void setCanAccessWithEvent(final boolean canAccessMyFiles, EventBroadcaster broadcaster) { if (canAccessMyFiles == canAccessMyFiles()) return; broadcaster.doChange(new UserEvent.Updated(this, CAN_ACCESS_MY_FILES, canAccessMyFiles(), canAccessMyFiles), new Runnable() { public void run() { myCanAccessMyFiles = canAccessMyFiles; } }); } private void setGroupWithEvent(final String group, EventBroadcaster broadcaster) { if (myGroup.equals(group)) return; broadcaster.doChange(new UserEvent.Updated(this, GROUP, myGroup, group), new Runnable() { public void run() { myGroup = group; } }); } private void setDisplayNameWithEvent(final String name, EventBroadcaster broadcaster) { if (myDisplayName.equals(name)) return; broadcaster.doChange(new UserEvent.Updated(this, DISPLAY_NAME, myDisplayName, name), new Runnable() { public void run() { myDisplayName = name; } }); } public String toString() { return '[' + StringUtil.getShortName(getClass()) + ' ' + myName + ' ' + myGroup + ']'; } public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof BaseUserImpl)) return false; final BaseUserImpl baseUser = (BaseUserImpl) o; return !(myName != null ? !myName.equals(baseUser.myName) : baseUser.myName != null); } public int hashCode() { return (myName != null ? myName.hashCode() : 0); } }