📄 abstractcommand.java
字号:
/**
* Copyright (C) 2003 Manfred Andres
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Created on 28.09.2003
*/
package freecs.commands;
import java.util.Vector;
import freecs.Server;
import freecs.interfaces.ICommand;
import freecs.interfaces.IUserStates;
import freecs.layout.TemplateManager;
import freecs.layout.TemplateSet;
import freecs.content.MessageState;
import freecs.core.Group;
import freecs.core.MessageRenderer;
import freecs.core.User;
import freecs.core.UserManager;
/**
* @author Manfred Andres
*
* freecs.commands
*/
public abstract class AbstractCommand implements ICommand {
private final String cmd = "Abstract";
private final String toStringValue = createToStringValue();
public boolean execute (MessageState msgState, String param) {
Server.log (this, "not implemented", Server.MSG_ERROR, Server.LVL_MINOR);
return false;
}
boolean isPunished (MessageState msgState) {
if (!msgState.sender.isPunished ())
return false;
msgState.msgTemplate = "error.user.punished";
msgState.sender.sendMessage(msgState.mp);
return true;
}
/**
* Utility method for retrieving an User. If the user
* hasn't been found the apropriate Message will be sent
* to the sender.
* @param msgState
* @param uname
* @return
*/
User getUser (MessageState msgState, String uname) {
User ru = UserManager.mgr.getUserByName (uname);
if (ru == null) {
msgState.msgTemplate = "error.user.notOnServer.singular";
msgState.param = uname;
msgState.sender.sendMessage (msgState.mp);
}
return ru;
}
/**
* Utility method setting the invitation-state for one specific user
* @param msgState The message-state to operate on
* @param cu The user to set the invitation for
* @return boolean true if invitation was successful, false if not
*/
boolean setInvited (MessageState msgState, User cu) {
User tusr = msgState.usercontext;
msgState.usercontext = cu;
if (msgState.sender.equals(cu.invitedBy())
&& msgState.targetGroup.equals(cu.invitedTo())) {
msgState.msgTemplate = "error.i.alreadyInvited";
msgState.sender.sendMessage (msgState.mp);
msgState.usercontext = tusr;
return false;
}
if (msgState.targetGroup.equals (cu.getGroup())) {
msgState.msgTemplate = "error.i.alreadyHere";
msgState.sender.sendMessage (msgState.mp);
msgState.usercontext = tusr;
return false;
}
if (!cu.invitedFrom (msgState.sender)) {
msgState.usercontext = tusr;
return false;
}
if (msgState.msgTemplate==null)
return true;
cu.sendMessage(msgState.mp);
return true;
}
boolean isVip (User u, Group g, MessageState msgState) {
if (u.hasRight(IUserStates.ROLE_GOD))
return true;
if (!u.hasRight(IUserStates.ROLE_VIP))
return false;
if (g.usrIsMember(u))
return true;
msgState.usrList = g.getMemberships();
return false;
}
String getUserList (MessageState msgState, boolean shorten) {
TemplateSet ts = msgState.sender.getTemplateSet ();
String s = generateUserList (msgState, shorten, ts);
if (s.length () == 0)
return null;
msgState.msgTemplate = "list.users";
msgState.message = s;
String tpl = msgState.sender.getTemplateSet().getMessageTemplate("list.users");
return MessageRenderer.renderTemplate (msgState, tpl);
}
public String generateUserList (MessageState msgState, boolean shorten, TemplateSet ts) {
if (ts == null) {
ts = TemplateManager.mgr.getTemplateSet();
}
Group g = msgState.sourceGroup;
StringBuffer sb = new StringBuffer ();
String tplcnt = ts.getMessageTemplate (shorten ? "message.user.short" : "message.user.overview");
String seperator = ts.getMessageTemplate ("message.user.short.seperator");
if (!shorten)
sb.append ("<br>");
if (seperator != null)
seperator = MessageRenderer.renderTemplate (msgState, seperator, false);
int cnt = 0;
boolean success = false;
User[] usrs = g.getUserArray();
if (usrs==null)
return "";
for (int i = 0; i < usrs.length; i++) {
msgState.usercontext = usrs[i];
String snippet = MessageRenderer.renderTemplate (msgState, tplcnt, false);
sb.append (snippet == null ? msgState.usercontext.getName () : snippet);
if (i<(usrs.length-1) && (shorten || snippet == null)) {
if (seperator != null)
sb.append (seperator);
else
sb.append (", ");
}
}
return sb.toString();
}
boolean sendUserList (MessageState msgState, boolean shorten) {
TemplateSet ts = msgState.sender.getTemplateSet ();
String s = generateUserList (msgState, shorten, ts);
if (s.length () == 0)
return false;
msgState.msgTemplate = "list.users";
msgState.message = s;
msgState.sender.sendMessage (msgState.mp);
return true;
}
/**
* Splits up a " " (space)- seperated userlist and returns a vector containing the
* found user-objects. Not-found-users will be collected and an "error.user.notOnServer.plural"
* will be sent to the sender.
* @param msgState the message-state to operate on
* @param param the string containing the users
* @return a vector containing all found user-objects
*/
public Vector getMultibleUsers (MessageState msgState, String param) {
String usrs[] = param.split(" ");
Vector found = new Vector();
Vector notfound = new Vector();
for (int i = 0; i < usrs.length; i++) {
User cu = UserManager.mgr.getUserByName(usrs[i]);
if (cu == null) {
notfound.add(usrs[i]);
continue;
}
found.add(cu);
}
if (notfound.size() > 1) {
msgState.usrList = notfound.toArray();
msgState.msgTemplate = "error.user.notOnServer.plural";
msgState.sender.sendMessage(msgState.mp);
} else if (notfound.size() == 1) {
msgState.param = (String) notfound.get(0);
msgState.msgTemplate = "error.user.notOnServer.singular";
msgState.sender.sendMessage(msgState.mp);
}
return found;
}
public void sendPrivateMessage (MessageState msgState, User cu, String message) {
msgState.sender.setPrivateUser (cu);
cu.setForeignPrivateUser (msgState.sender);
msgState.usercontext = cu;
msgState.msgTemplate = "message.m";
cu.sendMessage (msgState.mp);
if (cu.isAway ()) msgState.msgTemplate = "message.m.away";
else msgState.msgTemplate = "message.m.confirm";
msgState.sender.sendMessage (msgState.mp);
}
/**
* .) check the permissions of sender for the right to change su-state for this user
* .) set the su-state wanted
* @param msgState the message-state-object containing all infos
* @param cu the user which will be changed
* @param give give or take su
* @return true on success, false otherwise
*/
boolean setSuRight (MessageState msgState, User cu, boolean give) {
if (cu.hasRight (IUserStates.PROTECTED_FROM_RIGHTCHANGE))
return false;
Group cug = cu.getGroup ();
if (!cug.usrMaySetSu (msgState.sender))
return false;
if (give)
return cug.addToSusers (cu);
else
cug.removeFromSusers (cu);
return true;
}
public String toString () {
return toStringValue;
}
public static short _isColorCodeValid (String col) {
if (col.length() != 6)
return 1;
for (int i = 0; i < col.length (); i++) {
char c = col.charAt (i);
if (c != '0' && c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6' && c != '7' && c != '8' && c != '9' && c != 'a' && c != 'b' && c != 'c' && c != 'd' && c != 'e' && c != 'f') {
return 1;
}
}
int r = Integer.parseInt (col.substring (0,2), 16);
int g = Integer.parseInt (col.substring (2,4), 16);
int b = Integer.parseInt (col.substring (4,6), 16);
int sum = r + g + b;
if ((765 - sum) < 64)
return 2;
return 0;
}
public boolean isColorCodeValid (MessageState msgState) {
String colcode = msgState.param.trim().toLowerCase();
short result = _isColorCodeValid(colcode);
if (result==0)
return true;
if (result==1)
msgState.msgTemplate = "error.col.wrongCode";
else if (result==2)
msgState.msgTemplate = "error.col.lockedColor";
return false;
}
private String createToStringValue() {
String fullName = getClass().getName();
return "[Command " + cmd + "]";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -