package commands; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import polly.core.MSG; import polly.core.MyPlugin; import de.skuzzle.polly.sdk.Command; import de.skuzzle.polly.sdk.MyPolly; import de.skuzzle.polly.sdk.Parameter; import de.skuzzle.polly.sdk.Signature; import de.skuzzle.polly.sdk.Types; import de.skuzzle.polly.sdk.User; import de.skuzzle.polly.sdk.exceptions.CommandException; import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException; public class UsersCommand extends Command { public UsersCommand(MyPolly polly) throws DuplicatedSignatureException { super(polly, "users"); //$NON-NLS-1$ this.createSignature(MSG.usersSig0Desc, MyPlugin.LIST_USERS_PERMISSION); this.createSignature(MSG.usersSig1Desc, MyPlugin.LIST_USERS_PERMISSION, new Parameter(MSG.usersSig1Pattern, Types.STRING)); this.createSignature(MSG.usersSig2Desc, MyPlugin.LIST_USERS_PERMISSION, new Parameter(MSG.usersSig2Pattern, Types.STRING), new Parameter(MSG.usersSig2LoggedInOnly, Types.BOOLEAN)); this.setRegisteredOnly(); this.setHelpText(MSG.usersHelp); } @Override protected boolean executeOnBoth(User executer, String channel, Signature signature) throws CommandException { String pattern =".*"; //$NON-NLS-1$ boolean loggedInOnly = false; if (this.match(signature, 1)) { pattern = signature.getStringValue(0); } else if (this.match(signature, 2)) { pattern = signature.getStringValue(0); loggedInOnly = signature.getBooleanValue(1); } List<User> users = this.getMyPolly().users().getRegisteredUsers(); Collections.sort(users); Pattern p = Pattern.compile(pattern.toLowerCase()); StringBuilder b = new StringBuilder(); Iterator<User> it = users.iterator(); while (it.hasNext()) { User current = it.next(); this.getMyPolly().persistence().refresh(current); Matcher m1 = p.matcher(current.getName().toLowerCase()); String cNick = current.getCurrentNickName(); cNick = cNick == null ? "" : cNick.toLowerCase(); //$NON-NLS-1$ Matcher m2 = p.matcher(cNick); if (m1.matches() || m2.matches()) { if (loggedInOnly && !this.getMyPolly().users().isSignedOn(current)) { continue; } b.append(current.getName()); if (this.getMyPolly().users().isSignedOn(current)) { b.append(" ("); //$NON-NLS-1$ b.append(current.getCurrentNickName()); b.append(")"); //$NON-NLS-1$ } if (it.hasNext()) { b.append(", "); //$NON-NLS-1$ } } } if (users.isEmpty()) { b.append(MSG.usersNoUsers); } this.reply(channel, b.toString()); return false; } }