Explicitly acknowledge and handle case of unknown mode symbol.

cefexperiments
Danny van Heumen 11 years ago
parent 11f4a54a9e
commit 29a35dac74

@ -10,6 +10,7 @@
import java.util.Map.Entry;
import net.java.sip.communicator.impl.protocol.irc.ModeParser.ModeEntry;
import net.java.sip.communicator.impl.protocol.irc.exception.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
@ -455,8 +456,17 @@ private void prepareChatRoom(final ChatRoomIrcImpl chatRoom,
ChatRoomMemberRole role;
for (final IRCUserStatus status : channel.getStatusesForUser(user))
{
role = convertMemberMode(status.getChanModeType());
member.addRole(role);
try
{
role = convertMemberMode(status.getChanModeType());
member.addRole(role);
}
catch (UnknownModeException e)
{
LOGGER.info(
"Unknown mode encountered. This mode will be ignored.",
e);
}
}
chatRoom.addChatRoomMember(member.getContactAddress(), member);
if (this.connectionState.getNickname().equals(user.getNick()))
@ -652,8 +662,11 @@ public void invite(final String memberId, final ChatRoomIrcImpl chatroom)
* @param modeSymbol The member mode character.
* @return Return the instance of ChatRoomMemberRole corresponding to the
* member mode character.
* @throws UnknownModeException returns UnknownModeException in case unknown
* mode is encountered
*/
private static ChatRoomMemberRole convertMemberMode(final char modeSymbol)
throws UnknownModeException
{
return Mode.bySymbol(modeSymbol).getRole();
}

@ -6,6 +6,7 @@
*/
package net.java.sip.communicator.impl.protocol.irc;
import net.java.sip.communicator.impl.protocol.irc.exception.*;
import net.java.sip.communicator.service.protocol.*;
/**
@ -71,8 +72,10 @@ public enum Mode
*
* @param symbol mode char
* @return returns instance
* @throws UnknownModeException throws exception in case of unknown mode
* symbol
*/
public static Mode bySymbol(final char symbol)
public static Mode bySymbol(final char symbol) throws UnknownModeException
{
for (Mode mode : Mode.values())
{
@ -81,8 +84,7 @@ public static Mode bySymbol(final char symbol)
return mode;
}
}
throw new IllegalArgumentException("Unknown mode symbol provided. ('"
+ symbol + "')");
throw new UnknownModeException(symbol);
}
/**

@ -0,0 +1,46 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.irc.exception;
/**
* (Checked) Exception for unknown mode symbols.
*
* @author Danny van Heumen
*/
public class UnknownModeException extends Exception
{
/**
* Serialization id.
*/
private static final long serialVersionUID = 1L;
/**
* Symbol of unknown mode.
*/
private final char symbol;
/**
* Constructor.
*
* @param symbol the unknown mode's symbol
*/
public UnknownModeException(final char symbol)
{
super("Encountered an unknown mode: " + symbol + ".");
this.symbol = symbol;
}
/**
* Get the symbol of the unknown mode.
*
* @return returns the IRC mode symbol
*/
public char getSymbol()
{
return this.symbol;
}
}

@ -6,6 +6,7 @@
package net.java.sip.communicator.impl.protocol.irc;
import junit.framework.*;
import net.java.sip.communicator.impl.protocol.irc.exception.*;
import net.java.sip.communicator.service.protocol.*;
public class ModeTest
@ -28,7 +29,7 @@ public void testGetRole()
.assertTrue(Mode.OPERATOR.getRole() instanceof ChatRoomMemberRole);
}
public void testGetBySymbol()
public void testGetBySymbol() throws UnknownModeException
{
Assert.assertSame(Mode.OPERATOR, Mode.bySymbol('o'));
}
@ -38,9 +39,9 @@ public void testGetBySymbolNonExisting()
try
{
Mode.bySymbol('&');
Assert.fail("Expected IllegalArgumentException");
Assert.fail("Expected UnknownModeException");
}
catch (IllegalArgumentException e)
catch (UnknownModeException e)
{
}
}

Loading…
Cancel
Save