aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java321
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/ContactGroupIrcImpl.java112
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/ControlChar.java123
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/FormattedTextBuilder.java64
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcAccountID.java38
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java17
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java12
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcStatusEnum.java22
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/OperationSetMultiUserChatIrcImpl.java84
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java208
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/Utils.java28
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf2
-rw-r--r--src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java2
-rw-r--r--src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java55
-rw-r--r--test/net/java/sip/communicator/impl/protocol/irc/UtilsTest.java47
15 files changed, 755 insertions, 380 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java
index d8efdc2..2ced60b 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/ChatRoomIrcImpl.java
@@ -121,8 +121,8 @@ public class ChatRoomIrcImpl
* @param chatRoomName the name of the chat room
* @param parentProvider the protocol provider
*/
- public ChatRoomIrcImpl(String chatRoomName,
- ProtocolProviderServiceIrcImpl parentProvider)
+ public ChatRoomIrcImpl(final String chatRoomName,
+ final ProtocolProviderServiceIrcImpl parentProvider)
{
this(chatRoomName, parentProvider, false);
}
@@ -135,25 +135,30 @@ public class ChatRoomIrcImpl
* @param chatRoomName the name of the chat room (cannot be null or empty
* string)
* @param parentProvider the protocol provider
- * @param isPrivate indicates if this chat room is a private one
* @param isSystem indicates if this chat room is a system room
*/
- public ChatRoomIrcImpl( String chatRoomName,
- ProtocolProviderServiceIrcImpl parentProvider,
- boolean isSystem)
+ public ChatRoomIrcImpl(final String chatRoomName,
+ final ProtocolProviderServiceIrcImpl parentProvider,
+ final boolean isSystem)
{
if (parentProvider == null)
+ {
throw new IllegalArgumentException("parentProvider cannot be null");
+ }
this.parentProvider = parentProvider;
if (chatRoomName == null || chatRoomName.isEmpty())
+ {
throw new IllegalArgumentException(
"chatRoomName cannot be null or empty string");
+ }
this.chatRoomName = chatRoomName;
this.isSystem = isSystem;
}
/**
* hashCode implementation for Chat Room.
+ *
+ * @return returns hash code for this instance
*/
@Override
public int hashCode()
@@ -171,9 +176,12 @@ public class ChatRoomIrcImpl
/**
* equals implementation for Chat Room.
+ *
+ * @param obj other instance
+ * @return returns true if equal or false if not
*/
@Override
- public boolean equals(Object obj)
+ public boolean equals(final Object obj)
{
if (this == obj)
return true;
@@ -198,7 +206,7 @@ public class ChatRoomIrcImpl
{
return chatRoomName;
}
-
+
/**
* Returns the identifier of this <tt>ChatRoom</tt>.
*
@@ -209,15 +217,15 @@ public class ChatRoomIrcImpl
{
return chatRoomName;
}
-
+
/**
* Adds a <tt>ChatRoomMember</tt> to the list of members of this chat room.
*
* @param memberID the identifier of the member
* @param member the <tt>ChatRoomMember</tt> to add.
*/
-
- protected void addChatRoomMember(String memberID, ChatRoomMember member)
+ protected void addChatRoomMember(final String memberID,
+ final ChatRoomMember member)
{
chatRoomMembers.put(memberID, member);
}
@@ -228,7 +236,7 @@ public class ChatRoomIrcImpl
*
* @param memberID the name of the <tt>ChatRoomMember</tt> to remove.
*/
- protected void removeChatRoomMember(String memberID)
+ protected void removeChatRoomMember(final String memberID)
{
chatRoomMembers.remove(memberID);
}
@@ -243,14 +251,17 @@ public class ChatRoomIrcImpl
public void join() throws OperationFailedException
{
if (!parentProvider.getIrcStack().isConnected())
+ {
throw new OperationFailedException(
"We are currently not connected to the server.",
OperationFailedException.NETWORK_FAILURE);
+ }
if (parentProvider.getIrcStack().isJoined(this))
- throw new OperationFailedException(
- "Channel is already joined.",
+ {
+ throw new OperationFailedException("Channel is already joined.",
OperationFailedException.SUBSCRIPTION_ALREADY_EXISTS);
+ }
parentProvider.getIrcStack().join(this);
}
@@ -264,7 +275,7 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException with the corresponding code if an error
* occurs while joining the room.
*/
- public void join(byte[] password) throws OperationFailedException
+ public void join(final byte[] password) throws OperationFailedException
{
parentProvider.getIrcStack().join(this, password.toString());
}
@@ -279,7 +290,7 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException with the corresponding code if an error
* occurs while joining the room.
*/
- public void joinAs(String nickname) throws OperationFailedException
+ public void joinAs(final String nickname) throws OperationFailedException
{
this.setUserNickname(nickname);
this.join();
@@ -297,7 +308,7 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException with the corresponding code if an error
* occurs while joining the room.
*/
- public void joinAs(String nickname, byte[] password)
+ public void joinAs(final String nickname, final byte[] password)
throws OperationFailedException
{
this.setUserNickname(nickname);
@@ -350,8 +361,8 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException if we are not joined or we don't have
* enough privileges to ban a participant.
*/
- public void banParticipant(ChatRoomMember chatRoomMember, String reason)
- throws OperationFailedException
+ public void banParticipant(final ChatRoomMember chatRoomMember,
+ final String reason) throws OperationFailedException
{
this.parentProvider.getIrcStack().banParticipant(this,
chatRoomMember, reason);
@@ -365,8 +376,8 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException if we are not joined or we don't have
* enough privileges to kick a participant.
*/
- public void kickParticipant(ChatRoomMember chatRoomMember, String reason)
- throws OperationFailedException
+ public void kickParticipant(final ChatRoomMember chatRoomMember,
+ final String reason) throws OperationFailedException
{
this.parentProvider.getIrcStack().kickParticipant(this,
chatRoomMember, reason);
@@ -399,12 +410,14 @@ public class ChatRoomIrcImpl
* @param listener ChatRoomChangeListener
*/
public void addPropertyChangeListener(
- ChatRoomPropertyChangeListener listener)
+ final ChatRoomPropertyChangeListener listener)
{
synchronized (propertyChangeListeners)
{
if (!propertyChangeListeners.contains(listener))
+ {
propertyChangeListeners.add(listener);
+ }
}
}
@@ -415,7 +428,7 @@ public class ChatRoomIrcImpl
* @param listener the <tt>ChatRoomChangeListener</tt> to remove.
*/
public void removePropertyChangeListener(
- ChatRoomPropertyChangeListener listener)
+ final ChatRoomPropertyChangeListener listener)
{
synchronized (propertyChangeListeners)
{
@@ -432,12 +445,14 @@ public class ChatRoomIrcImpl
* that is to be registered for <tt>ChatRoomMemberPropertyChangeEvent</tt>s.
*/
public void addMemberPropertyChangeListener(
- ChatRoomMemberPropertyChangeListener listener)
+ final ChatRoomMemberPropertyChangeListener listener)
{
- synchronized(memberPropChangeListeners)
+ synchronized (memberPropChangeListeners)
{
if (!memberPropChangeListeners.contains(listener))
+ {
memberPropChangeListeners.add(listener);
+ }
}
}
@@ -449,9 +464,9 @@ public class ChatRoomIrcImpl
* remove.
*/
public void removeMemberPropertyChangeListener(
- ChatRoomMemberPropertyChangeListener listener)
+ final ChatRoomMemberPropertyChangeListener listener)
{
- synchronized(memberPropChangeListeners)
+ synchronized (memberPropChangeListeners)
{
memberPropChangeListeners.remove(listener);
}
@@ -463,12 +478,14 @@ public class ChatRoomIrcImpl
*
* @param listener a member role listener.
*/
- public void addMemberRoleListener(ChatRoomMemberRoleListener listener)
+ public void addMemberRoleListener(final ChatRoomMemberRoleListener listener)
{
synchronized (memberRoleListeners)
{
if (!memberRoleListeners.contains(listener))
+ {
memberRoleListeners.add(listener);
+ }
}
}
@@ -478,12 +495,15 @@ public class ChatRoomIrcImpl
*
* @param listener a member role listener.
*/
- public void removeMemberRoleListener(ChatRoomMemberRoleListener listener)
+ public void removeMemberRoleListener(
+ final ChatRoomMemberRoleListener listener)
{
synchronized (memberRoleListeners)
{
if (memberRoleListeners.contains(listener))
+ {
memberRoleListeners.remove(listener);
+ }
}
}
@@ -493,12 +513,15 @@ public class ChatRoomIrcImpl
*
* @param listener a local user role listener.
*/
- public void addLocalUserRoleListener(ChatRoomLocalUserRoleListener listener)
+ public void addLocalUserRoleListener(
+ final ChatRoomLocalUserRoleListener listener)
{
synchronized (localUserRoleListeners)
{
if (!localUserRoleListeners.contains(listener))
+ {
localUserRoleListeners.add(listener);
+ }
}
}
@@ -509,12 +532,14 @@ public class ChatRoomIrcImpl
* @param listener a local user role listener.
*/
public void removelocalUserRoleListener(
- ChatRoomLocalUserRoleListener listener)
+ final ChatRoomLocalUserRoleListener listener)
{
synchronized (localUserRoleListeners)
{
if (localUserRoleListeners.contains(listener))
+ {
localUserRoleListeners.remove(listener);
+ }
}
}
@@ -547,7 +572,7 @@ public class ChatRoomIrcImpl
* channel or if he/she doesn't have enough privileges to change the
* topic or if the topic is null.
*/
- public void setSubject(String subject)
+ public void setSubject(final String subject)
throws OperationFailedException
{
parentProvider.getIrcStack().setSubject(this, subject);
@@ -576,7 +601,7 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException if the setting the new nickname changes
* for some reason.
*/
- public void setUserNickname(String nickName)
+ public void setUserNickname(final String nickName)
throws OperationFailedException
{
parentProvider.getIrcStack().setUserNickname(nickName);
@@ -589,12 +614,14 @@ public class ChatRoomIrcImpl
* @param listener a participant status listener.
*/
public void addMemberPresenceListener(
- ChatRoomMemberPresenceListener listener)
+ final ChatRoomMemberPresenceListener listener)
{
synchronized (memberListeners)
{
if (!memberListeners.contains(listener))
+ {
memberListeners.add(listener);
+ }
}
}
@@ -606,7 +633,7 @@ public class ChatRoomIrcImpl
* @param listener a participant status listener.
*/
public void removeMemberPresenceListener(
- ChatRoomMemberPresenceListener listener)
+ final ChatRoomMemberPresenceListener listener)
{
synchronized (memberListeners)
{
@@ -621,12 +648,14 @@ public class ChatRoomIrcImpl
* @param listener a <tt>MessageListener</tt> that would be notified every
* time a new message is received on this chat room.
*/
- public void addMessageListener(ChatRoomMessageListener listener)
+ public void addMessageListener(final ChatRoomMessageListener listener)
{
synchronized (messageListeners)
{
if (!messageListeners.contains(listener))
+ {
messageListeners.add(listener);
+ }
}
}
@@ -636,12 +665,14 @@ public class ChatRoomIrcImpl
*
* @param listener the <tt>MessageListener</tt> to remove from this room
*/
- public void removeMessageListener(ChatRoomMessageListener listener)
+ public void removeMessageListener(final ChatRoomMessageListener listener)
{
synchronized (messageListeners)
{
if (messageListeners.contains(listener))
+ {
messageListeners.remove(messageListeners.indexOf(listener));
+ }
}
}
@@ -653,7 +684,7 @@ public class ChatRoomIrcImpl
* @param memberID the identifier of the member
* @return the <tt>ChatRoomMember</tt> corresponding to the given member id.
*/
- public ChatRoomMember getChatRoomMember(String memberID)
+ public ChatRoomMember getChatRoomMember(final String memberID)
{
return chatRoomMembers.get(memberID);
}
@@ -679,7 +710,7 @@ public class ChatRoomIrcImpl
* the user why they are being invited.
*/
@Override
- public void invite(String userAddress, String reason)
+ public void invite(final String userAddress, final String reason)
{
// TODO Check if channel status is invite-only (+i). If this is the
// case, user has to be channel operator in order to be able to invite
@@ -720,15 +751,12 @@ public class ChatRoomIrcImpl
* subject.
* @return the newly created message.
*/
- public Message createMessage( byte[] content,
- String contentType,
- String contentEncoding,
- String subject)
+ public Message createMessage(final byte[] content, final String contentType,
+ final String contentEncoding, final String subject)
{
- Message msg = new MessageIrcImpl( new String(content),
- contentType,
- contentEncoding,
- subject);
+ Message msg =
+ new MessageIrcImpl(new String(content), contentType,
+ contentEncoding, subject);
return msg;
}
@@ -740,7 +768,7 @@ public class ChatRoomIrcImpl
* @param messageText the string content of the message.
* @return Message the newly created message
*/
- public Message createMessage(String messageText)
+ public Message createMessage(final String messageText)
{
Message mess = new MessageIrcImpl(
messageText,
@@ -759,22 +787,24 @@ public class ChatRoomIrcImpl
* @throws OperationFailedException if the underlying stack is not
* registered or initialized or if the chat room is not joined.
*/
- public void sendMessage(Message message) throws OperationFailedException
+ public void sendMessage(final Message message)
+ throws OperationFailedException
{
assertConnected();
String[] splitMessages = message.getContent().split("\n");
String messagePortion = null;
- for (int i = 0; i < splitMessages.length; i ++)
+ for (int i = 0; i < splitMessages.length; i++)
{
messagePortion = splitMessages[i];
// As we only send one message per line, we ignore empty lines in
// the incoming multi line message.
- if(messagePortion.equals("\n")
- || messagePortion.matches("[\\ ]*"))
+ if (messagePortion.equals("\n") || messagePortion.matches("[\\ ]*"))
+ {
continue;
+ }
if (((MessageIrcImpl) message).isCommand())
{
@@ -785,11 +815,9 @@ public class ChatRoomIrcImpl
parentProvider.getIrcStack().message(this, messagePortion);
}
- this.fireMessageDeliveredEvent(
- new MessageIrcImpl( messagePortion,
- message.getContentType(),
- message.getEncoding(),
- message.getSubject()));
+ this.fireMessageDeliveredEvent(new MessageIrcImpl(messagePortion,
+ message.getContentType(), message.getEncoding(), message
+ .getSubject()));
}
}
@@ -806,19 +834,24 @@ public class ChatRoomIrcImpl
/**
* Utility method throwing an exception if the stack is not properly
* initialized.
- * @throws java.lang.IllegalStateException if the underlying stack is
- * not registered and initialized.
+ *
+ * @throws java.lang.IllegalStateException if the underlying stack is not
+ * registered and initialized.
*/
private void assertConnected() throws IllegalStateException
{
if (parentProvider == null)
+ {
throw new IllegalStateException(
"The provider must be non-null and signed on the "
- +"service before being able to communicate.");
+ + "service before being able to communicate.");
+ }
if (!parentProvider.isRegistered())
+ {
throw new IllegalStateException(
"The provider must be signed on the service before "
- +"being able to communicate.");
+ + "being able to communicate.");
+ }
}
/**
@@ -827,7 +860,7 @@ public class ChatRoomIrcImpl
*
* @param message the delivered message
*/
- private void fireMessageDeliveredEvent(Message message)
+ private void fireMessageDeliveredEvent(final Message message)
{
int eventType
= ChatRoomMessageDeliveredEvent.CONVERSATION_MESSAGE_DELIVERED;
@@ -839,9 +872,11 @@ public class ChatRoomIrcImpl
eventType = ChatRoomMessageDeliveredEvent.ACTION_MESSAGE_DELIVERED;
if (msg.getContent().indexOf(' ') != -1)
+ {
msg.setContent(
msg.getContent()
.substring(message.getContent().indexOf(' ')));
+ }
}
ChatRoomMessageDeliveredEvent msgDeliveredEvt
@@ -858,7 +893,9 @@ public class ChatRoomIrcImpl
}
for (ChatRoomMessageListener listener : listeners)
+ {
listener.messageDelivered(msgDeliveredEvt);
+ }
}
/**
@@ -873,17 +910,12 @@ public class ChatRoomIrcImpl
* XXX_MESSAGE_RECEIVED constants declared in the
* <tt>ChatRoomMessageReceivedEvent</tt> class.
*/
- public void fireMessageReceivedEvent( Message message,
- ChatRoomMember fromMember,
- Date date,
- int eventType)
+ public void fireMessageReceivedEvent(final Message message,
+ final ChatRoomMember fromMember, final Date date, final int eventType)
{
- ChatRoomMessageReceivedEvent event
- = new ChatRoomMessageReceivedEvent( this,
- fromMember,
- date,
- message,
- eventType);
+ ChatRoomMessageReceivedEvent event =
+ new ChatRoomMessageReceivedEvent(this, fromMember, date, message,
+ eventType);
Iterable<ChatRoomMessageListener> listeners;
synchronized (messageListeners)
@@ -893,7 +925,9 @@ public class ChatRoomIrcImpl
}
for (ChatRoomMessageListener listener : listeners)
+ {
listener.messageReceived(event);
+ }
}
/**
@@ -902,9 +936,8 @@ public class ChatRoomIrcImpl
* @param evt the <tt>PropertyChangeEvent</tt> that we'd like delivered to
* all registered property change listeners.
*/
- public void firePropertyChangeEvent(PropertyChangeEvent evt)
+ public void firePropertyChangeEvent(final PropertyChangeEvent evt)
{
-
Iterable<ChatRoomPropertyChangeListener> listeners;
synchronized (propertyChangeListeners)
{
@@ -935,7 +968,7 @@ public class ChatRoomIrcImpl
* deliver to all registered member property change listeners.
*/
public void fireMemberPropertyChangeEvent(
- ChatRoomMemberPropertyChangeEvent evt)
+ final ChatRoomMemberPropertyChangeEvent evt)
{
Iterable<ChatRoomMemberPropertyChangeListener> listeners;
synchronized (memberPropChangeListeners)
@@ -946,7 +979,9 @@ public class ChatRoomIrcImpl
}
for (ChatRoomMemberPropertyChangeListener listener : listeners)
+ {
listener.chatRoomPropertyChanged(evt);
+ }
}
/**
@@ -960,10 +995,9 @@ public class ChatRoomIrcImpl
* @param eventID the identifier of the event
* @param eventReason the reason of the event
*/
- public void fireMemberPresenceEvent(ChatRoomMember member,
- ChatRoomMember actorMember,
- String eventID,
- String eventReason)
+ public void fireMemberPresenceEvent(final ChatRoomMember member,
+ final ChatRoomMember actorMember, final String eventID,
+ final String eventReason)
{
// First update local state w.r.t. member presence change
if (eventID == ChatRoomMemberPresenceChangeEvent.MEMBER_JOINED)
@@ -974,17 +1008,23 @@ public class ChatRoomIrcImpl
{
removeChatRoomMember(member.getContactAddress());
}
-
+
ChatRoomMemberPresenceChangeEvent evt;
- if(actorMember != null)
+ if (actorMember != null)
+ {
evt = new ChatRoomMemberPresenceChangeEvent(
this, member, actorMember, eventID, eventReason);
+ }
else
+ {
evt = new ChatRoomMemberPresenceChangeEvent(
this, member, eventID, eventReason);
+ }
if (LOGGER.isTraceEnabled())
+ {
LOGGER.trace("Will dispatch the following ChatRoom event: " + evt);
+ }
Iterable<ChatRoomMemberPresenceListener> listeners;
synchronized (memberListeners)
@@ -994,7 +1034,9 @@ public class ChatRoomIrcImpl
memberListeners);
}
for (ChatRoomMemberPresenceListener listener : listeners)
+ {
listener.memberPresenceChanged(evt);
+ }
}
/**
@@ -1005,8 +1047,8 @@ public class ChatRoomIrcImpl
* @param member the <tt>ChatRoomMember</tt> that this event is about
* @param newRole the new role of the given member
*/
- public void fireMemberRoleEvent( ChatRoomMember member,
- ChatRoomMemberRole newRole)
+ public void fireMemberRoleEvent(final ChatRoomMember member,
+ final ChatRoomMemberRole newRole)
{
member.setRole(newRole);
ChatRoomMemberRole previousRole = member.getRole();
@@ -1018,7 +1060,9 @@ public class ChatRoomIrcImpl
newRole);
if (LOGGER.isTraceEnabled())
+ {
LOGGER.trace("Will dispatch the following ChatRoom event: " + evt);
+ }
Iterable<ChatRoomMemberRoleListener> listeners;
synchronized (memberRoleListeners)
@@ -1029,17 +1073,19 @@ public class ChatRoomIrcImpl
}
for (ChatRoomMemberRoleListener listener : listeners)
+ {
listener.memberRoleChanged(evt);
+ }
}
-
+
/**
* Notify all <tt>ChatRoomLocalUserRoleListener</tt>s that the local user's
* role has been changed in this <tt>ChatRoom</tt>.
- *
+ *
* @param event the event that describes the local user's role change
*/
public void fireLocalUserRoleChangedEvent(
- ChatRoomLocalUserRoleChangeEvent event)
+ final ChatRoomLocalUserRoleChangeEvent event)
{
ArrayList<ChatRoomLocalUserRoleListener> listeners;
synchronized (localUserRoleListeners)
@@ -1074,7 +1120,7 @@ public class ChatRoomIrcImpl
* @param isSystem <code>true</code> to indicate that this chat room is
* corresponding to a server channel, <code>false</code> - otherwise.
*/
- protected void setSystem(boolean isSystem)
+ protected void setSystem(final boolean isSystem)
{
this.isSystem = isSystem;
}
@@ -1084,7 +1130,7 @@ public class ChatRoomIrcImpl
*
* @param subject the subject to set
*/
- protected void setSubjectFromServer(String subject)
+ protected void setSubjectFromServer(final String subject)
{
this.chatSubject = subject;
}
@@ -1117,13 +1163,13 @@ public class ChatRoomIrcImpl
}
return this.user.getRole();
}
-
+
/**
* Method for setting chat room member instance representing the user.
- *
+ *
* @param user instance representing the user. This instance cannot be null.
*/
- void setLocalUser(ChatRoomMemberIrcImpl user)
+ void setLocalUser(final ChatRoomMemberIrcImpl user)
{
if (user == null)
{
@@ -1134,23 +1180,25 @@ public class ChatRoomIrcImpl
/**
* Sets the local user role.
+ *
+ * No implementation is necessary for this. IRC server manages permissions.
+ * If a new chat room is created then user will automatically receive the
+ * appropriate role.
+ *
* @param role the role to set
* @throws OperationFailedException if the operation don't succeed
*/
@Override
- public void setLocalUserRole(ChatRoomMemberRole role)
+ public void setLocalUserRole(final ChatRoomMemberRole role)
throws OperationFailedException
{
- // No implementation necessary. IRC server manages permissions. If a new
- // chat room is created then user will automatically receive the
- // appropriate role.
}
/**
* Grants admin role to the participant given by <tt>address</tt>.
* @param address the address of the participant to grant admin role to
*/
- public void grantAdmin(String address)
+ public void grantAdmin(final String address)
{
this.parentProvider.getIrcStack().grant(this, address, Mode.OPERATOR);
}
@@ -1159,7 +1207,7 @@ public class ChatRoomIrcImpl
* Grants membership role to the participant given by <tt>address</tt>.
* @param address the address of the participant to grant membership role to
*/
- public void grantMembership(String address)
+ public void grantMembership(final String address)
{
// TODO currently Voice == Membership.
this.parentProvider.getIrcStack().grant(this, address, Mode.VOICE);
@@ -1169,7 +1217,7 @@ public class ChatRoomIrcImpl
* Grants moderator role to the participant given by <tt>address</tt>.
* @param address the address of the participant to grant moderator role to
*/
- public void grantModerator(String address)
+ public void grantModerator(final String address)
{
this.parentProvider.getIrcStack().grant(this, address, Mode.HALFOP);
}
@@ -1178,7 +1226,7 @@ public class ChatRoomIrcImpl
* Grants ownership role to the participant given by <tt>address</tt>.
* @param address the address of the participant to grant ownership role to
*/
- public void grantOwnership(String address)
+ public void grantOwnership(final String address)
{
this.parentProvider.getIrcStack().grant(this, address, Mode.OWNER);
}
@@ -1187,7 +1235,7 @@ public class ChatRoomIrcImpl
* Grants voice to the participant given by <tt>address</tt>.
* @param address the address of the participant to grant voice to
*/
- public void grantVoice(String address)
+ public void grantVoice(final String address)
{
// TODO currently Voice == Membership.
this.parentProvider.getIrcStack().grant(this, address, Mode.VOICE);
@@ -1197,7 +1245,7 @@ public class ChatRoomIrcImpl
* Revokes the admin role for the participant given by <tt>address</tt>.
* @param address the address of the participant to revoke admin role for
*/
- public void revokeAdmin(String address)
+ public void revokeAdmin(final String address)
{
this.parentProvider.getIrcStack().revoke(this, address, Mode.OPERATOR);
}
@@ -1205,11 +1253,11 @@ public class ChatRoomIrcImpl
/**
* Revokes the membership role for the participant given by <tt>address</tt>
* .
- *
+ *
* @param address the address of the participant to revoke membership role
* for
*/
- public void revokeMembership(String address)
+ public void revokeMembership(final String address)
{
this.parentProvider.getIrcStack().revoke(this, address, Mode.VOICE);
}
@@ -1219,7 +1267,7 @@ public class ChatRoomIrcImpl
* @param address the address of the participant to revoke moderator role
* for
*/
- public void revokeModerator(String address)
+ public void revokeModerator(final String address)
{
this.parentProvider.getIrcStack().revoke(this, address, Mode.HALFOP);
}
@@ -1229,7 +1277,7 @@ public class ChatRoomIrcImpl
* @param address the address of the participant to revoke ownership role
* for
*/
- public void revokeOwnership(String address)
+ public void revokeOwnership(final String address)
{
this.parentProvider.getIrcStack().revoke(this, address, Mode.OWNER);
}
@@ -1238,7 +1286,7 @@ public class ChatRoomIrcImpl
* Revokes the voice for the participant given by <tt>address</tt>.
* @param address the address of the participant to revoke voice for
*/
- public void revokeVoice(String address)
+ public void revokeVoice(final String address)
{
this.parentProvider.getIrcStack().revoke(this, address, Mode.VOICE);
}
@@ -1248,17 +1296,23 @@ public class ChatRoomIrcImpl
*
* Not implemented.
*/
- public ConferenceDescription publishConference(ConferenceDescription cd,
- String name)
+ public ConferenceDescription publishConference(
+ final ConferenceDescription cd, final String name)
{
return null;
}
/**
- * {@inheritDoc}
+ * Find the Contact instance corresponding to the specified chat room
+ * member. Since every chat room member is also a private contact, we will
+ * create an instance if it cannot be found.
+ *
+ * @param name nick name of the chat room member
+ * @return returns Contact instance corresponding to specified chat room
+ * member
*/
@Override
- public Contact getPrivateContactByNickname(String name)
+ public Contact getPrivateContactByNickname(final String name)
{
LOGGER.debug("Getting private contact for nick name '" + name + "'.");
return this.parentProvider.getPersistentPresence()
@@ -1266,40 +1320,44 @@ public class ChatRoomIrcImpl
}
/**
- * {@inheritDoc}
+ * IRC does not provide continuous presence status updates, so no
+ * implementation is necessary.
+ *
+ * @param nickname nick name to look up
*/
@Override
- public void updatePrivateContactPresenceStatus(String nickname)
+ public void updatePrivateContactPresenceStatus(final String nickname)
{
- // IRC does not provide continuous presence status updates.
}
/**
- * {@inheritDoc}
+ * IRC does not provide continuous presence status updates, so no
+ * implementation is necessary.
+ *
+ * @param sourceContact contact to look up
*/
@Override
- public void updatePrivateContactPresenceStatus(Contact sourceContact)
+ public void updatePrivateContactPresenceStatus(final Contact sourceContact)
{
- // IRC does not provide continuous presence status updates.
}
/**
- * Destroys the chat room.
- *
+ * IRC chat rooms cannot be destroyed. That is the way IRC works and there
+ * is no need to cause a panic, so just return true.
+ *
* @param reason the reason for destroying.
* @param alternateAddress the alternate address
* @return <tt>true</tt> if the room is destroyed.
*/
- public boolean destroy(String reason, String alternateAddress)
+ public boolean destroy(final String reason, final String alternateAddress)
{
- // IRC chat rooms cannot be destroyed
return true;
}
/**
* Returns the ids of the users that has the member role in the room. When
* the room is member only, this are the users allowed to join.
- *
+ *
* @return the ids of the users that has the member role in the room.
*/
@Override
@@ -1314,15 +1372,16 @@ public class ChatRoomIrcImpl
* @param members the ids of user to have member role.
*/
@Override
- public void setMembersWhiteList(List<String> members)
- {}
-
+ public void setMembersWhiteList(final List<String> members)
+ {
+ }
+
/**
* Update the subject for this chat room.
- *
+ *
* @param subject the subject
*/
- public void updateSubject(String subject)
+ public void updateSubject(final String subject)
{
if (!this.chatSubject.equals(subject))
{
@@ -1333,22 +1392,24 @@ public class ChatRoomIrcImpl
firePropertyChangeEvent(topicChangeEvent);
}
}
-
+
/**
* Update the ChatRoomMember instance. When the nick changes, the chat room
* member is still stored under the old nick. Find the instance under its
* old nick and reinsert it into the map according to the current nick name.
- *
+ *
* @param oldName The old nick name under which the member instance is
* currently stored.
*/
- public void updateChatRoomMemberName(String oldName)
+ public void updateChatRoomMemberName(final String oldName)
{
- synchronized(this.chatRoomMembers)
+ synchronized (this.chatRoomMembers)
{
ChatRoomMember member = this.chatRoomMembers.remove(oldName);
if (member != null)
+ {
this.chatRoomMembers.put(member.getContactAddress(), member);
+ }
}
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ContactGroupIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ContactGroupIrcImpl.java
index 715319b..ac43ea3 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/ContactGroupIrcImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/ContactGroupIrcImpl.java
@@ -1,7 +1,8 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license. See terms of license at gnu.org.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.irc;
@@ -9,6 +10,11 @@ import java.util.*;
import net.java.sip.communicator.service.protocol.*;
+/**
+ * Contact group for IRC.
+ *
+ * @author Danny van Heumen
+ */
public class ContactGroupIrcImpl
implements ContactGroup
{
@@ -16,58 +22,65 @@ public class ContactGroupIrcImpl
* The protocol provider service instance.
*/
private final ProtocolProviderServiceIrcImpl provider;
-
+
/**
* Group name.
*/
- private final String name;
-
+ private String name;
+
/**
- * Subgroups
+ * Subgroups.
*/
- private final List<ContactGroupIrcImpl> subgroups = new ArrayList<ContactGroupIrcImpl>();
-
+ private final List<ContactGroupIrcImpl> subgroups =
+ new ArrayList<ContactGroupIrcImpl>();
+
/**
* Contacts in this group.
*/
- private final List<ContactIrcImpl> contacts = new ArrayList<ContactIrcImpl>();
+ private final List<ContactIrcImpl> contacts =
+ new ArrayList<ContactIrcImpl>();
/**
* Parent contact group.
*/
private ContactGroup parent;
-
+
/**
* Contact Group IRC implementation.
- *
+ *
* @param provider IRC protocol provider service instance.
*/
- public ContactGroupIrcImpl(ProtocolProviderServiceIrcImpl provider)
+ public ContactGroupIrcImpl(final ProtocolProviderServiceIrcImpl provider)
{
this(provider, null, "root");
}
-
+
/**
* Contact Group IRC implementation.
- *
+ *
* @param provider IRC protocol provider service instance.
+ * @param parentGroup Parent group
* @param name Group name
*/
- public ContactGroupIrcImpl(ProtocolProviderServiceIrcImpl provider,
- ContactGroupIrcImpl parentGroup, String name)
+ public ContactGroupIrcImpl(final ProtocolProviderServiceIrcImpl provider,
+ final ContactGroupIrcImpl parentGroup, final String name)
{
if (provider == null)
+ {
throw new IllegalArgumentException("provider cannot be null");
+ }
this.provider = provider;
this.parent = parentGroup;
if (name == null)
+ {
throw new IllegalArgumentException("name cannot be null");
+ }
this.name = name;
}
/**
* Get subgroups of this group.
- *
+ *
* @return returns subgroups iterator
*/
@Override
@@ -78,7 +91,7 @@ public class ContactGroupIrcImpl
/**
* Get number of subgroups.
- *
+ *
* @return returns number of subgroups
*/
@Override
@@ -89,27 +102,29 @@ public class ContactGroupIrcImpl
/**
* Get subgroup by index.
- *
+ *
* @param index index of subgroup
* @return returns subgroup
*/
@Override
- public ContactGroup getGroup(int index)
+ public ContactGroup getGroup(final int index)
{
return this.subgroups.get(index);
}
/**
* Get subgroup by name.
- *
+ *
* @param groupName Name of subgroup.
* @return returns subgroup or null if no group exists with that name
*/
@Override
- public ContactGroup getGroup(String groupName)
+ public ContactGroup getGroup(final String groupName)
{
if (groupName == null)
+ {
return null;
+ }
for (ContactGroupIrcImpl group : this.subgroups)
{
if (groupName.equals(group.getGroupName()))
@@ -122,7 +137,7 @@ public class ContactGroupIrcImpl
/**
* Get contacts in group.
- *
+ *
* @return returns group's contacts
*/
@Override
@@ -133,7 +148,7 @@ public class ContactGroupIrcImpl
/**
* Get number of contacts in group.
- *
+ *
* @return returns number of contacts in group
*/
@Override
@@ -144,15 +159,17 @@ public class ContactGroupIrcImpl
/**
* Get group contact by id.
- *
+ *
* @param id contact ID
* @return returns contact or null if contact cannot be found
*/
@Override
- public Contact getContact(String id)
+ public Contact getContact(final String id)
{
if (id == null)
+ {
return null;
+ }
for (ContactIrcImpl contact : this.contacts)
{
if (id.equals(contact.getAddress()))
@@ -165,7 +182,7 @@ public class ContactGroupIrcImpl
/**
* Check if group can contain subgroups.
- *
+ *
* @return returns true if group can contain subgroups, or false otherwise.
*/
@Override
@@ -176,7 +193,7 @@ public class ContactGroupIrcImpl
/**
* Get name of the group.
- *
+ *
* @return returns group name
*/
@Override
@@ -186,8 +203,22 @@ public class ContactGroupIrcImpl
}
/**
+ * Set name of the group.
+ *
+ * @param name new name
+ */
+ public void setGroupName(final String name)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException("name cannot be null");
+ }
+ this.name = name;
+ }
+
+ /**
* Get protocol provider service implementation.
- *
+ *
* @return returns protocol provider service implementation
*/
@Override
@@ -198,7 +229,7 @@ public class ContactGroupIrcImpl
/**
* Get parent contact group.
- *
+ *
* @return returns parent contact group or null if no parent group exists
*/
@Override
@@ -209,7 +240,7 @@ public class ContactGroupIrcImpl
/**
* Is persistent group.
- *
+ *
* @return returns true if group is persistent, or false if not.
*/
@Override
@@ -220,18 +251,19 @@ public class ContactGroupIrcImpl
/**
* Get group UUID.
- *
+ *
* @return returns group UUID
*/
@Override
public String getUID()
{
+ // FIXME Generate unique ID for contact group.
return null;
}
/**
* Is group resolved.
- *
+ *
* @return returns true if group is resolved, or false otherwise
*/
@Override
@@ -242,7 +274,7 @@ public class ContactGroupIrcImpl
/**
* Get group persistent data.
- *
+ *
* @return returns persistent data
*/
@Override
@@ -253,25 +285,29 @@ public class ContactGroupIrcImpl
/**
* Add contact to the group.
- *
+ *
* @param contact Contact to be added.
*/
- public void addContact(ContactIrcImpl contact)
+ public void addContact(final ContactIrcImpl contact)
{
if (contact == null)
+ {
throw new IllegalArgumentException("contact cannot be null");
+ }
this.contacts.add(contact);
}
/**
* Add group as subgroup to this group.
- *
+ *
* @param group the group
*/
- public void addSubGroup(ContactGroupIrcImpl group)
+ public void addSubGroup(final ContactGroupIrcImpl group)
{
if (group == null)
+ {
throw new IllegalArgumentException("group cannot be null");
+ }
this.subgroups.add(group);
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ControlChar.java b/src/net/java/sip/communicator/impl/protocol/irc/ControlChar.java
index 3c3f32d..b50a891 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/ControlChar.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/ControlChar.java
@@ -1,13 +1,14 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license. See terms of license at gnu.org.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.irc;
/**
- * Enum with available IRC control characters.
- *
+ * Available IRC control characters.
+ *
* @author Danny van Heumen
*/
public abstract class ControlChar
@@ -19,17 +20,17 @@ public abstract class ControlChar
/**
* Constructor.
- *
- * @param code the control code
+ *
+ * @param htmlTag the control code
*/
private ControlChar(final String htmlTag)
{
this.tag = htmlTag;
}
-
+
/**
* The specified HTML tag.
- *
+ *
* @return returns the HTML tag.
*/
public String getTag()
@@ -39,7 +40,7 @@ public abstract class ControlChar
/**
* Get the HTML start tag.
- *
+ *
* @return returns HTML start tag.
*/
public String getHtmlStart()
@@ -49,44 +50,105 @@ public abstract class ControlChar
/**
* Get the HTML end tag.
- *
+ *
* @return returns the HTML end tag
*/
public String getHtmlEnd()
{
return "</" + this.tag + ">";
}
-
+
+ /**
+ * Control char representation for 'bold' formatting.
+ *
+ * @author Danny van Heumen
+ */
static class Bold extends ControlChar
{
+ /**
+ * IRC control code.
+ */
+ public static final char CODE = '\u0002';
+
+ /**
+ * Constructor.
+ */
Bold()
{
super("b");
}
}
-
+
+ /**
+ * Control char representation for 'italics' formatting.
+ *
+ * @author Danny van Heumen
+ */
static class Italics extends ControlChar
{
+ /**
+ * IRC control code.
+ */
+ public static final char CODE = '\u0016';
+
+ /**
+ * Constructor.
+ */
Italics()
{
super("i");
}
}
-
+
+ /**
+ * Control char representation for underlining.
+ *
+ * @author Danny van Heumen
+ */
static class Underline extends ControlChar
{
+ /**
+ * IRC control code.
+ */
+ public static final char CODE = '\u001F';
+
+ /**
+ * Constructor.
+ */
Underline()
{
super("u");
}
}
-
+
+ /**
+ * Control char representation for colored text.
+ *
+ * @author Danny van Heumen
+ */
static class ColorFormat extends ControlChar
{
+ /**
+ * IRC control code.
+ */
+ public static final char CODE = '\u0003';
+
+ /**
+ * Foreground color.
+ */
private final Color foreground;
+ /**
+ * Background color.
+ */
private final Color background;
+ /**
+ * Constructor.
+ *
+ * @param foreground foreground color
+ * @param background background color
+ */
ColorFormat(final Color foreground, final Color background)
{
super("font");
@@ -94,6 +156,13 @@ public abstract class ControlChar
this.background = background;
}
+ /**
+ * Get HTML start tag with foreground and background color codes
+ * embedded.
+ *
+ * @return Returns string containing html start tag including foreground
+ * and background colors.
+ */
public String getHtmlStart()
{
StringBuilder result = new StringBuilder("<");
@@ -114,4 +183,30 @@ public abstract class ControlChar
return result.toString();
}
}
+
+ /**
+ * Control char representation for the cancellation of all active formatting
+ * options, i.e. return to normal.
+ *
+ * In the current implementation, you cannot instantiate this control char.
+ * Its use is purely symbolic, since it doesn't actually translate in
+ * additional HTML formatting tags.
+ *
+ * @author Danny van Heumen
+ */
+ abstract static class Normal extends ControlChar
+ {
+ /**
+ * IRC control code.
+ */
+ public static final char CODE = '\u000F';
+
+ /**
+ * Private constructor since it should not be instantiated.
+ */
+ private Normal()
+ {
+ super(null);
+ }
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/FormattedTextBuilder.java b/src/net/java/sip/communicator/impl/protocol/irc/FormattedTextBuilder.java
index e01f38f..ed36cb0 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/FormattedTextBuilder.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/FormattedTextBuilder.java
@@ -1,7 +1,8 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license. See terms of license at gnu.org.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.irc;
@@ -9,79 +10,80 @@ import java.util.*;
/**
* Builder for constructing a formatted text.
- *
+ *
* @author Danny van Heumen
*/
public class FormattedTextBuilder
{
/**
- * stack with formatting control chars
+ * stack with formatting control chars.
*/
private final Stack<ControlChar> formatting = new Stack<ControlChar>();
/**
- * formatted text container
+ * formatted text container.
*/
private final StringBuilder text = new StringBuilder();
-
+
/**
* Append a string of text.
- *
- * @param text
+ *
+ * @param text string of text
*/
- public void append(String text)
+ public void append(final String text)
{
this.text.append(text);
}
-
+
/**
* Append a character.
- *
+ *
* @param c character
*/
- public void append(char c)
+ public void append(final char c)
{
this.text.append(c);
}
/**
* Apply a control char for formatting.
- *
- * TODO Explicitly deny handling ControlChar.NORMAL?
- *
+ *
* @param c the control char
*/
- public void apply(ControlChar c)
+ public void apply(final ControlChar c)
{
// start control char formatting
this.formatting.add(c);
this.text.append(c.getHtmlStart());
}
-
+
/**
* Test whether or not a control character is already active.
- *
- * @param c the control char
- * @return returns true if control char's kind of formatting is active, or
+ *
+ * @param controlClass the class of control char
+ * @return returns true if control char's class of formatting is active, or
* false otherwise.
*/
- public boolean isActive(Class<? extends ControlChar> controlClass)
+ public boolean isActive(final Class<? extends ControlChar> controlClass)
{
for (ControlChar c : this.formatting)
{
if (c.getClass() == controlClass)
+ {
return true;
+ }
}
return false;
}
-
+
/**
- * Cancel the specified control char.
- *
- * @param c the control char
+ * Cancel the active control char of the specified class.
+ *
+ * @param controlClass the class of control char
+ * @param stopAfterFirst stop after the first occurrence
*/
- public void cancel(Class<? extends ControlChar> controlClass,
- boolean stopAfterFirst)
+ public void cancel(final Class<? extends ControlChar> controlClass,
+ final boolean stopAfterFirst)
{
final Stack<ControlChar> rewind = new Stack<ControlChar>();
while (!this.formatting.empty())
@@ -92,7 +94,9 @@ public class FormattedTextBuilder
if (current.getClass() == controlClass)
{
if (stopAfterFirst)
+ {
break;
+ }
}
else
{
@@ -118,10 +122,12 @@ public class FormattedTextBuilder
this.text.append(c.getHtmlEnd());
}
}
-
+
/**
* Finish building the text string. Close outstanding control char
* formatting and returns the result.
+ *
+ * @return returns the complete string as it is built
*/
public String done()
{
@@ -133,6 +139,8 @@ public class FormattedTextBuilder
* Return the formatted string in its current state. (This means that if
* {@link #done()} was not yet called, it will print an intermediate state
* of the formatted text.)
+ *
+ * @return returns current state of the formatted text
*/
public String toString()
{
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcAccountID.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcAccountID.java
index 0560295..b71e65d 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/IrcAccountID.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcAccountID.java
@@ -24,11 +24,12 @@ public class IrcAccountID
* IRC account server host.
*/
private final String host;
+
/**
* IRC account server port.
*/
private final int port;
-
+
/**
* Creates an account id from the specified id and account properties.
*
@@ -55,15 +56,33 @@ public class IrcAccountID
}
/**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + host.hashCode();
+ result = prime * result + port;
+ return result;
+ }
+
+ /**
* Equality extended with checking IRC server host and port, since different
* IRC networks can have users with similar names.
+ *
+ * @param obj other object
+ * @return returns true if equal or false otherwise
*/
@Override
- public boolean equals(Object obj)
+ public boolean equals(final Object obj)
{
if (this == obj)
+ {
return true;
-
+ }
+
// TODO if available, base equality on NETWORK=<identifier> in
// RPL_ISUPPORT.
@@ -71,10 +90,10 @@ public class IrcAccountID
&& this.host.equals(((IrcAccountID) obj).host)
&& this.port == ((IrcAccountID) obj).port;
}
-
+
/**
* Get the IRC server host.
- *
+ *
* @return returns IRC server host
*/
public String getHost()
@@ -84,7 +103,7 @@ public class IrcAccountID
/**
* Get the IRC server port.
- *
+ *
* @return returns IRC server port
*/
public int getPort()
@@ -96,12 +115,13 @@ public class IrcAccountID
* Returns the service name - the server we are logging to if it is null
* which is not supposed to be - we return for compatibility the string we
* used in the first release for creating AccountID (Using this string is
- * wrong, but used for compatibility for now)
+ * wrong, but used for compatibility for now).
*
* @param accountProperties Map the properties table configuring the account
* @return String the service name
*/
- private static String getServiceName(Map<String, String> accountProperties)
+ private static String getServiceName(
+ final Map<String, String> accountProperties)
{
String serviceName =
accountProperties.get(ProtocolProviderFactory.SERVER_ADDRESS);
@@ -119,7 +139,7 @@ public class IrcAccountID
/**
* Get display name for this account instance.
- *
+ *
* @return returns the display name for this AccountID instance
*/
@Override
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java
index 6d09c1f..47cc740 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java
@@ -53,7 +53,7 @@ public class IrcActivator
/**
* Certificate Service instance.
*/
- private static CertificateService certiticateService;
+ private static CertificateService certificateService;
/**
* MultiUserChat Service instance.
@@ -191,18 +191,11 @@ public class IrcActivator
*/
public static CertificateService getCertificateService()
{
- if (certiticateService == null)
+ if (certificateService == null)
{
- ServiceReference<?> guiVerifyReference
- = IrcActivator.getBundleContext().getServiceReference(
- CertificateService.class.getName());
- if (guiVerifyReference != null)
- {
- certiticateService = (CertificateService)
- IrcActivator.getBundleContext().getService(
- guiVerifyReference);
- }
+ certificateService =
+ ServiceUtils.getService(bundleContext, CertificateService.class);
}
- return certiticateService;
+ return certificateService;
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java
index f367241..fa1446f 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java
@@ -1259,7 +1259,7 @@ public class IrcStack
public void onUserPrivMessage(final UserPrivMsg msg)
{
final String user = msg.getSource().getNick();
- final String text = Utils.formatMessage(Utils.parse(msg.getText()));
+ final String text = Utils.formatMessage(Utils.parseIrcMessage(msg.getText()));
final MessageIrcImpl message =
new MessageIrcImpl(text,
OperationSetBasicInstantMessaging.HTML_MIME_TYPE,
@@ -1302,7 +1302,7 @@ public class IrcStack
// Jitsi set up.
final String user = msg.getSource().getNick();
final String text =
- Utils.formatNotice(Utils.parse(msg.getText()), user);
+ Utils.formatNotice(Utils.parseIrcMessage(msg.getText()), user);
final MessageIrcImpl message =
new MessageIrcImpl(text,
OperationSetBasicInstantMessaging.HTML_MIME_TYPE,
@@ -1326,7 +1326,7 @@ public class IrcStack
{
final String user = msg.getSource().getNick();
final String text =
- Utils.formatAction(Utils.parse(msg.getText()), user);
+ Utils.formatAction(Utils.parseIrcMessage(msg.getText()), user);
final MessageIrcImpl message =
new MessageIrcImpl(text,
OperationSetBasicInstantMessaging.HTML_MIME_TYPE,
@@ -1707,7 +1707,7 @@ public class IrcStack
return;
}
- String text = Utils.formatMessage(Utils.parse(msg.getText()));
+ String text = Utils.formatMessage(Utils.parseIrcMessage(msg.getText()));
MessageIrcImpl message =
new MessageIrcImpl(text, "text/html", "UTF-8", null);
ChatRoomMemberIrcImpl member =
@@ -1736,7 +1736,7 @@ public class IrcStack
new ChatRoomMemberIrcImpl(IrcStack.this.provider,
this.chatroom, userNick, ChatRoomMemberRole.MEMBER);
String text =
- Utils.formatAction(Utils.parse(msg.getText()), userNick);
+ Utils.formatAction(Utils.parseIrcMessage(msg.getText()), userNick);
MessageIrcImpl message =
new MessageIrcImpl(text, "text/html", "UTF-8", null);
this.chatroom.fireMessageReceivedEvent(message, member, new Date(),
@@ -1761,7 +1761,7 @@ public class IrcStack
new ChatRoomMemberIrcImpl(IrcStack.this.provider,
this.chatroom, userNick, ChatRoomMemberRole.MEMBER);
final String text =
- Utils.formatNotice(Utils.parse(msg.getText()), userNick);
+ Utils.formatNotice(Utils.parseIrcMessage(msg.getText()), userNick);
final MessageIrcImpl message =
new MessageIrcImpl(text, "text/html", "UTF-8", null);
this.chatroom.fireMessageReceivedEvent(message, member, new Date(),
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStatusEnum.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStatusEnum.java
index 9defea7..69c3fcb 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStatusEnum.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStatusEnum.java
@@ -17,8 +17,9 @@ import net.java.sip.communicator.service.protocol.*;
* @author Stephane Remy
* @author Loic Kempf
* @author Lubomir Marinov
+ * @author Danny van Heumen
*/
-public class IrcStatusEnum
+public final class IrcStatusEnum
extends PresenceStatus
{
@@ -54,13 +55,15 @@ public class IrcStatusEnum
/**
* Initialize the list of supported status states.
*/
- private static final List<IrcStatusEnum> supportedStatusSet
+ private static final List<IrcStatusEnum> SUPPORTED_STATUS_SET
= new LinkedList<IrcStatusEnum>();
+
static
{
- supportedStatusSet.add(OFFLINE);
- supportedStatusSet.add(AWAY);
- supportedStatusSet.add(ONLINE);
+ SUPPORTED_STATUS_SET.add(OFFLINE);
+ // TODO implement support for presence status AWAY
+ //supportedStatusSet.add(AWAY);
+ SUPPORTED_STATUS_SET.add(ONLINE);
}
/**
@@ -70,9 +73,8 @@ public class IrcStatusEnum
* @param statusName the name of the presence status.
* @param statusIcon the icon associated with this status
*/
- private IrcStatusEnum(int status,
- String statusName,
- byte[] statusIcon)
+ private IrcStatusEnum(final int status, final String statusName,
+ final byte[] statusIcon)
{
super(status, statusName, statusIcon);
}
@@ -85,7 +87,7 @@ public class IrcStatusEnum
*/
static Iterator<IrcStatusEnum> supportedStatusSet()
{
- return supportedStatusSet.iterator();
+ return SUPPORTED_STATUS_SET.iterator();
}
/**
@@ -96,7 +98,7 @@ public class IrcStatusEnum
* @return the byte representation of the image corresponding to the given
* identifier.
*/
- private static byte[] getImageInBytes(String imageID)
+ private static byte[] getImageInBytes(final String imageID)
{
return ProtocolIconIrcImpl.getImageInBytes(imageID);
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetMultiUserChatIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetMultiUserChatIrcImpl.java
index fa6bf1a..a69aac0 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetMultiUserChatIrcImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetMultiUserChatIrcImpl.java
@@ -53,7 +53,7 @@ public class OperationSetMultiUserChatIrcImpl
* ProtocolProviderServiceIrcImpl.
*/
public OperationSetMultiUserChatIrcImpl(
- ProtocolProviderServiceIrcImpl provider)
+ final ProtocolProviderServiceIrcImpl provider)
{
this.ircProvider = provider;
}
@@ -83,7 +83,7 @@ public class OperationSetMultiUserChatIrcImpl
*/
public List<ChatRoom> getCurrentlyJoinedChatRooms()
{
- synchronized(chatRoomCache)
+ synchronized (chatRoomCache)
{
List<ChatRoom> joinedRooms
= new LinkedList<ChatRoom>(this.chatRoomCache.values());
@@ -93,7 +93,9 @@ public class OperationSetMultiUserChatIrcImpl
while (joinedRoomsIter.hasNext())
{
if (!joinedRoomsIter.next().isJoined())
+ {
joinedRoomsIter.remove();
+ }
}
return joinedRooms;
@@ -110,25 +112,25 @@ public class OperationSetMultiUserChatIrcImpl
* and is currently active in.
*/
public List<String> getCurrentlyJoinedChatRooms(
- ChatRoomMember chatRoomMember)
+ final ChatRoomMember chatRoomMember)
{
// Implement "who is" for the IRC stack.
// (currently not in use)
/*
* According to the RFC:
- *
+ *
* 311 RPL_WHOISUSER "<nick> <user> <host> * :<real name>"
- *
+ *
* 312 RPL_WHOISSERVER "<nick> <server> :<server info>"
- *
+ *
* 313 RPL_WHOISOPERATOR "<nick> :is an IRC operator"
- *
+ *
* 317 RPL_WHOISIDLE "<nick> <integer> :seconds idle"
- *
+ *
* 318 RPL_ENDOFWHOIS "<nick> :End of /WHOIS list"
- *
+ *
* 319 RPL_WHOISCHANNELS "<nick> :{[@|+]<channel><space>}"
- *
+ *
* - Replies 311 - 313, 317 - 319 are all replies generated in response
* to a WHOIS message. Given that there are enough parameters present,
* the answering server must either formulate a reply out of the above
@@ -141,7 +143,7 @@ public class OperationSetMultiUserChatIrcImpl
* moderated channel. The RPL_ENDOFWHOIS reply is used to mark the end
* of processing a WHOIS message.
*/
- return null;
+ return Collections.emptyList();
}
/**
@@ -163,8 +165,8 @@ public class OperationSetMultiUserChatIrcImpl
* @return the newly created <tt>ChatRoom</tt> named <tt>roomName</tt>.
*/
public ChatRoom createChatRoom(
- String roomName,
- Map<String, Object> roomProperties)
+ final String roomName,
+ final Map<String, Object> roomProperties)
throws OperationFailedException,
OperationNotSupportedException
{
@@ -173,28 +175,28 @@ public class OperationSetMultiUserChatIrcImpl
/**
* Returns a reference to a chatRoom named <tt>roomName</tt>.
- *
+ *
* Originally, this method would create the room if it doesn't exist. This
* is not acceptable anymore, since rebuilding the chat room list would
* create new instances without the IRC stack being prepared for this or
* having corresponding instances.
- *
+ *
* @param roomName the name of the <tt>ChatRoom</tt> that we're looking for.
* @return the <tt>ChatRoom</tt> named <tt>roomName</tt>.
*/
- public ChatRoomIrcImpl findRoom(String roomName)
+ public ChatRoomIrcImpl findRoom(final String roomName)
{
return chatRoomCache.get(roomName);
}
-
+
/**
* Find an existing room with the provided name, or create a new room with
* this name.
- *
+ *
* @param roomName name of the chat room
* @return returns a chat room
*/
- public ChatRoomIrcImpl findOrCreateRoom(String roomName)
+ public ChatRoomIrcImpl findOrCreateRoom(final String roomName)
{
synchronized (this.chatRoomCache)
{
@@ -213,9 +215,10 @@ public class OperationSetMultiUserChatIrcImpl
* @param invitation the invitation we are rejecting.
* @param reason the reason of rejecting
*/
- public void rejectInvitation(ChatRoomInvitation invitation, String reason)
+ public void rejectInvitation(final ChatRoomInvitation invitation,
+ final String reason)
{
- //TODO: Implement reject invitation.
+ //TODO Implement reject invitation.
}
/**
@@ -226,7 +229,7 @@ public class OperationSetMultiUserChatIrcImpl
* @return a boolean indicating whether <tt>contact</tt> supports chat
* rooms.
*/
- public boolean isMultiChatSupportedByContact(Contact contact)
+ public boolean isMultiChatSupportedByContact(final Contact contact)
{
return true;
}
@@ -240,21 +243,22 @@ public class OperationSetMultiUserChatIrcImpl
* @return the <tt>ChatRoomJabberImpl</tt> instance that has been cached
* for <tt>chatRoomName</tt> or null if no such room has been cached so far.
*/
- protected ChatRoomIrcImpl getChatRoom(String chatRoomName)
+ protected ChatRoomIrcImpl getChatRoom(final String chatRoomName)
{
- return (ChatRoomIrcImpl)this.chatRoomCache.get(chatRoomName);
+ return (ChatRoomIrcImpl) this.chatRoomCache.get(chatRoomName);
}
/**
* Creates a <tt>ChatRoom</tt> from the specified chat room name.
- *
+ *
* Must be used in SYNCHRONIZED context.
*
* @param chatRoomName the name of the chat room to add
*
* @return ChatRoom the chat room that we've just created.
*/
- private ChatRoomIrcImpl createLocalChatRoomInstance(String chatRoomName)
+ private ChatRoomIrcImpl createLocalChatRoomInstance(
+ final String chatRoomName)
{
ChatRoomIrcImpl chatRoom =
new ChatRoomIrcImpl(chatRoomName, ircProvider);
@@ -263,13 +267,13 @@ public class OperationSetMultiUserChatIrcImpl
return chatRoom;
}
-
+
/**
* Register chat room instance in case it is not yet registered.
- *
+ *
* @param chatroom the chatroom
*/
- public void registerChatRoomInstance(ChatRoomIrcImpl chatroom)
+ public void registerChatRoomInstance(final ChatRoomIrcImpl chatroom)
{
synchronized (this.chatRoomCache)
{
@@ -286,10 +290,10 @@ public class OperationSetMultiUserChatIrcImpl
* @param reason the reason why the inviter sent the invitation
* @param password the password to use when joining the room
*/
- protected void fireInvitationEvent(ChatRoom targetChatRoom,
- String inviter,
- String reason,
- byte[] password)
+ protected void fireInvitationEvent(final ChatRoom targetChatRoom,
+ final String inviter,
+ final String reason,
+ final byte[] password)
{
ChatRoomInvitationIrcImpl invitation
= new ChatRoomInvitationIrcImpl(targetChatRoom,
@@ -307,7 +311,7 @@ public class OperationSetMultiUserChatIrcImpl
*/
protected ChatRoomIrcImpl findSystemRoom()
{
- if(serverChatRoom == null)
+ if (serverChatRoom == null)
{
serverChatRoom = new ChatRoomIrcImpl(
ircProvider.getAccountID().getService(),
@@ -331,13 +335,17 @@ public class OperationSetMultiUserChatIrcImpl
protected ChatRoomMemberIrcImpl findSystemMember()
{
if (serverChatRoom.getMembers().size() > 0)
+ {
return (ChatRoomMemberIrcImpl) serverChatRoom.getMembers().get(0);
+ }
else
+ {
return new ChatRoomMemberIrcImpl(
ircProvider,
serverChatRoom,
ircProvider.getAccountID().getService(),
ChatRoomMemberRole.GUEST);
+ }
}
/**
@@ -346,22 +354,22 @@ public class OperationSetMultiUserChatIrcImpl
* Always returns <tt>true</tt>.
*/
@Override
- public boolean isPrivateMessagingContact(String contactAddress)
+ public boolean isPrivateMessagingContact(final String contactAddress)
{
return true;
}
/**
* Open a chat room window.
- *
+ *
* In IRC a situation may occur where the user gets joined to a channel
* without Jitsi initiating the joining activity. This "unannounced" join
* event, must also be handled and we should display the chat room window in
* that case, to alert the user that this happened.
- *
+ *
* @param chatRoom the chat room
*/
- void openChatRoomWindow(ChatRoomIrcImpl chatRoom)
+ void openChatRoomWindow(final ChatRoomIrcImpl chatRoom)
{
MUCService mucService = IrcActivator.getMUCService();
UIService uiService = IrcActivator.getUIService();
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java
index 2d4d09e..f5a6272 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java
@@ -110,70 +110,126 @@ public class OperationSetPersistentPresenceIrcImpl
return rootGroup;
}
+ /**
+ * IRC currently does not implement subscribing.
+ *
+ * @param contactIdentifier contact
+ * @throws OperationFailedException if not implemented
+ */
@Override
public void subscribe(final String contactIdentifier)
throws IllegalArgumentException,
IllegalStateException,
OperationFailedException
{
- System.out.println("subscribe(\"" + contactIdentifier + "\") called");
- // TODO Auto-generated method stub
+ LOGGER.trace("subscribe(\"" + contactIdentifier + "\") called");
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * IRC currently does not implement subscribing.
+ *
+ * @param parent contact group
+ * @param contactIdentifier contact
+ * @throws OperationFailedException if not implemented
+ */
@Override
- public void subscribe(ContactGroup parent, String contactIdentifier)
+ public void subscribe(final ContactGroup parent,
+ final String contactIdentifier)
throws IllegalArgumentException,
IllegalStateException,
OperationFailedException
{
- System.out.println("subscribe(\"" + parent.getGroupName() + "\", \""
+ LOGGER.trace("subscribe(\"" + parent.getGroupName() + "\", \""
+ contactIdentifier + "\") called");
- // TODO Auto-generated method stub
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * IRC currently does not implement unsubscribing.
+ *
+ * @param contact contact to unsubscribe
+ * @throws OperationFailedException if not implemented
+ */
@Override
- public void unsubscribe(Contact contact)
+ public void unsubscribe(final Contact contact)
throws IllegalArgumentException,
IllegalStateException,
OperationFailedException
{
- System.out.println("unsubscribe(\"" + contact.getAddress()
- + "\") called");
- // TODO Auto-generated method stub
+ LOGGER.trace("unsubscribe(\"" + contact.getAddress() + "\") called");
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Creating a contact group is currently not implemented.
+ *
+ * @param parent parent contact group
+ * @param groupName new group's name
+ * @throws OperationFailedException if not implemented
+ */
@Override
- public void createServerStoredContactGroup(ContactGroup parent,
- String groupName) throws OperationFailedException
+ public void createServerStoredContactGroup(final ContactGroup parent,
+ final String groupName) throws OperationFailedException
{
- // TODO Auto-generated method stub
-
+ LOGGER.trace("createServerStoredContactGroup(...) called");
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Removing a contact group is currently not implemented.
+ *
+ * @param group contact group to remove
+ * @throws OperationFailedException if not implemented
+ */
@Override
- public void removeServerStoredContactGroup(ContactGroup group)
+ public void removeServerStoredContactGroup(final ContactGroup group)
throws OperationFailedException
{
- // TODO Auto-generated method stub
-
+ LOGGER.trace("removeServerStoredContactGroup called");
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Rename contact group.
+ *
+ * @param group contact group to rename
+ * @param newName new name
+ */
@Override
- public void renameServerStoredContactGroup(ContactGroup group,
- String newName)
+ public void renameServerStoredContactGroup(final ContactGroup group,
+ final String newName)
{
- // TODO Auto-generated method stub
-
+ LOGGER.trace("renameServerStoredContactGroup called");
+ ((ContactGroupIrcImpl) group).setGroupName(newName);
}
+ /**
+ * Moving contacts to a different group is currently not implemented.
+ *
+ * @param contactToMove contact to move
+ * @param newParent new parent group
+ * @throws OperationFailedException if not implemented
+ */
@Override
- public void moveContactToGroup(Contact contactToMove, ContactGroup newParent)
- throws OperationFailedException
+ public void moveContactToGroup(final Contact contactToMove,
+ final ContactGroup newParent) throws OperationFailedException
{
- // TODO Auto-generated method stub
-
+ LOGGER.trace("moveContactToGroup called");
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Get group of contacts that have been discovered while using IRC.
+ *
+ * @return returns root contact group
+ */
@Override
public ContactGroup getServerStoredContactListRoot()
{
@@ -184,43 +240,77 @@ public class OperationSetPersistentPresenceIrcImpl
}
@Override
- public Contact createUnresolvedContact(String address,
- String persistentData, ContactGroup parentGroup)
+ public Contact createUnresolvedContact(final String address,
+ final String persistentData, final ContactGroup parentGroup)
{
LOGGER.warn("Unresolved contact: " + address + " " + persistentData
+ " group: " + parentGroup.getGroupName());
- // TODO Auto-generated method stub
+ // FIXME implement createUnresolvedContact
return null;
}
@Override
- public ContactGroup createUnresolvedContactGroup(String groupUID,
- String persistentData, ContactGroup parentGroup)
+ public Contact createUnresolvedContact(final String address,
+ final String persistentData)
+ {
+ LOGGER.warn("Unresolved contact: " + address + " " + persistentData);
+ // FIXME implement createUnresolvedContact
+ return null;
+ }
+
+ @Override
+ public ContactGroup createUnresolvedContactGroup(final String groupUID,
+ final String persistentData, final ContactGroup parentGroup)
{
LOGGER.warn("Unresolved contactgroup: " + groupUID + " "
+ persistentData + " parent: " + parentGroup.getGroupName());
- // TODO Auto-generated method stub
+ // TODO implement createUnresolvedContactGroup
return null;
}
+ /**
+ * Get current IRC presence status.
+ *
+ * The presence status currently is ONLINE if we are connected or OFFLINE if
+ * we aren't connected.
+ *
+ * @return returns status ONLINE if connected or OFFLINE if not connected
+ */
@Override
public PresenceStatus getPresenceStatus()
{
- // TODO determine current Presence Status
- return null;
+ // TODO implement AWAY presence if available in irc-api
+ if (this.parentProvider.getIrcStack().isConnected())
+ {
+ return IrcStatusEnum.ONLINE;
+ }
+ else
+ {
+ return IrcStatusEnum.OFFLINE;
+ }
}
+ /**
+ * "Publishing" presence status in IRC is currently not implemented.
+ */
@Override
- public void publishPresenceStatus(PresenceStatus status,
- String statusMessage)
+ public void publishPresenceStatus(final PresenceStatus status,
+ final String statusMessage)
throws IllegalArgumentException,
IllegalStateException,
OperationFailedException
{
- // TODO Auto-generated method stub
-
+ // TODO implement publishPresenceStatus (we might be able to do
+ // something with modes invisible and away (IIRC) in IRC.
+ throw new OperationFailedException("Not implemented.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Get set of statuses supported in IRC.
+ *
+ * @return returns iterator for supported statuses
+ */
@Override
public Iterator<PresenceStatus> getSupportedStatusSet()
{
@@ -235,10 +325,11 @@ public class OperationSetPersistentPresenceIrcImpl
}
/**
- * {@inheritDoc}
+ * IRC currently does not implement querying presence status.
*
* @param contactIdentifier contact id
* @return returns current presence status
+ * @throws OperationFailedException for not supporting this feature
*/
@Override
public PresenceStatus queryContactStatus(final String contactIdentifier)
@@ -246,52 +337,71 @@ public class OperationSetPersistentPresenceIrcImpl
IllegalStateException,
OperationFailedException
{
- return IrcStatusEnum.ONLINE;
+ // TODO implement querying presence status of contact
+ throw new OperationFailedException("Not supported.",
+ OperationFailedException.NOT_SUPPORTED_OPERATION);
}
+ /**
+ * Find a contact by its ID.
+ *
+ * @param contactID ID to look up
+ * @return contact instance if found or null if nothing found
+ */
@Override
- public Contact findContactByID(String contactID)
+ public Contact findContactByID(final String contactID)
{
LOGGER.trace("Finding contact for nick name '" + contactID + "'");
if (contactID == null)
+ {
return null;
+ }
Contact contact = this.rootGroup.getContact(contactID);
if (contact != null)
+ {
return contact;
+ }
Iterator<ContactGroup> groups = this.rootGroup.subgroups();
while (groups.hasNext())
{
ContactGroup group = groups.next();
contact = group.getContact(contactID);
if (contact != null)
+ {
return contact;
+ }
}
LOGGER.trace("No contact found for nick name '" + contactID + "'");
return null;
}
+ /**
+ * IRC does not support authorization handling, so this is not supported.
+ *
+ * @param handler authorization handler
+ */
@Override
- public void setAuthorizationHandler(AuthorizationHandler handler)
+ public void setAuthorizationHandler(final AuthorizationHandler handler)
{
}
+ /**
+ * IRC does not have a status message, so it will always return an empty
+ * string.
+ *
+ * @return returns empty string
+ */
@Override
public String getCurrentStatusMessage()
{
- return null;
- }
-
- @Override
- public Contact createUnresolvedContact(String address, String persistentData)
- {
- return null;
+ return "";
}
/**
* Find or create contact by ID.
*
- * Try to find a contact by its ID. If a contact cannot be found, then
- * create one.
+ * In IRC every chat room member is also a contact. Try to find a contact by
+ * its ID. If a contact cannot be found, then create one.
*
* @param id id of the contact
* @return returns instance of contact
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/Utils.java b/src/net/java/sip/communicator/impl/protocol/irc/Utils.java
index dd5ec6d..b748c55 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/Utils.java
+++ b/src/net/java/sip/communicator/impl/protocol/irc/Utils.java
@@ -41,7 +41,7 @@ public final class Utils
* @return returns the processed message or null if text message was null,
* since there is nothing to modify there
*/
- public static String parse(final String text)
+ public static String parseIrcMessage(final String text)
{
if (text == null)
{
@@ -54,7 +54,7 @@ public final class Utils
char val = text.charAt(i);
switch (val)
{
- case '\u0002':
+ case ControlChar.Bold.CODE:
if (builder.isActive(ControlChar.Bold.class))
{
builder.cancel(ControlChar.Bold.class, true);
@@ -64,7 +64,7 @@ public final class Utils
builder.apply(new ControlChar.Bold());
}
break;
- case '\u0016':
+ case ControlChar.Italics.CODE:
if (builder.isActive(ControlChar.Italics.class))
{
builder.cancel(ControlChar.Italics.class, true);
@@ -74,7 +74,7 @@ public final class Utils
builder.apply(new ControlChar.Italics());
}
break;
- case '\u001F':
+ case ControlChar.Underline.CODE:
if (builder.isActive(ControlChar.Underline.class))
{
builder.cancel(ControlChar.Underline.class, true);
@@ -84,30 +84,27 @@ public final class Utils
builder.apply(new ControlChar.Underline());
}
break;
- case '\u0003':
- Color background = null;
+ case ControlChar.ColorFormat.CODE:
// first parse foreground color code
Color foreground = parseForegroundColor(text.substring(i + 1));
if (foreground != null)
{
i += 2;
- background = parseBackgroundColor(text.substring(i + 1));
+ Color background =
+ parseBackgroundColor(text.substring(i + 1));
if (background != null)
{
i += INDEX_END_COLOR_CODE;
}
- }
- if (foreground == null && background == null)
- {
- builder.cancel(ControlChar.ColorFormat.class, false);
+ builder.apply(new ControlChar.ColorFormat(foreground,
+ background));
}
else
{
- builder.apply(new ControlChar.ColorFormat(foreground,
- background));
+ builder.cancel(ControlChar.ColorFormat.class, false);
}
break;
- case '\u000F':
+ case ControlChar.Normal.CODE:
builder.cancelAll();
break;
default:
@@ -191,6 +188,7 @@ public final class Utils
*/
public static String formatMessage(final String message)
{
+ // FIXME html entity encoding
return message;
}
@@ -203,6 +201,7 @@ public final class Utils
*/
public static String formatNotice(final String message, final String user)
{
+ // FIXME html entity encoding
return "<i>" + user + "</i>: " + message;
}
@@ -215,6 +214,7 @@ public final class Utils
*/
public static String formatAction(final String message, final String user)
{
+ // FIXME html entity encoding
return "<b>*" + user + "</b> " + message;
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf b/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf
index 7498da9..341d3ad 100644
--- a/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf
+++ b/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf
@@ -21,4 +21,4 @@ Import-Package: org.osgi.framework,
com.ircclouds.irc.api.domain.messages,
com.ircclouds.irc.api.domain.messages.interfaces,
com.ircclouds.irc.api.listeners,
- com.ircclouds.irc.api.state \ No newline at end of file
+ com.ircclouds.irc.api.state
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java
index c5990e4..4284cec 100644
--- a/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java
@@ -39,8 +39,10 @@ public class FirstWizardPage
*/
public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
+ // FIXME create resource string
public static final String USER_NAME_EXAMPLE = "Ex: ircuser";
+ // FIXME create resource string
public static final String SERVER_EXAMPLE = "Ex: chat.freenode.net";
private static final String DEFAULT_PLAINTEXT_PORT = "6667";
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java
index 0f154d6..ae678be 100644
--- a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java
@@ -24,19 +24,29 @@ public class IrcAccRegWizzActivator
{
private static Logger logger = Logger.getLogger(
IrcAccRegWizzActivator.class.getName());
-
+
+ /**
+ * OSGi bundle context.
+ */
static BundleContext bundleContext;
-
+
private static UIService uiService;
-
+
private static WizardContainer wizardContainer;
private IrcAccountRegistrationWizard ircWizard;
- public void start(Object dependentService)
+ /**
+ * Start the IRC account registration wizard.
+ *
+ * @param dependentService dependent service
+ */
+ public void start(final Object dependentService)
{
if (logger.isInfoEnabled())
+ {
logger.info("Loading irc account wizard.");
+ }
uiService = (UIService) dependentService;
@@ -54,26 +64,44 @@ public class IrcAccRegWizzActivator
containerFilter);
if (logger.isInfoEnabled())
+ {
logger.info("IRC account registration wizard [STARTED].");
+ }
}
-
+
+ /**
+ * Returns dependent service class.
+ *
+ * @return returns dependent service class
+ */
public Class<?> getDependentServiceClass()
{
return UIService.class;
}
-
+
+ /**
+ * Set the bundle context.
+ *
+ * @param context bundle context
+ */
@Override
- public void setBundleContext(BundleContext context)
+ public void setBundleContext(final BundleContext context)
{
- bundleContext = context;
+ this.bundleContext = context;
}
-
- public void stop(BundleContext bundleContext)
+
+ /**
+ * Stop the IRC account registration wizard.
+ *
+ * @param bundleContext bundle context
+ */
+ public void stop(final BundleContext bundleContext)
{
}
/**
* Returns the <tt>ProtocolProviderFactory</tt> for the IRC protocol.
+ *
* @return the <tt>ProtocolProviderFactory</tt> for the IRC protocol
*/
public static ProtocolProviderFactory getIrcProtocolProviderFactory()
@@ -96,7 +124,12 @@ public class IrcAccRegWizzActivator
return (ProtocolProviderFactory) bundleContext.getService(serRefs[0]);
}
-
+
+ /**
+ * Get UI Service instance.
+ *
+ * @return returns UIService instance
+ */
public static UIService getUIService()
{
return uiService;
diff --git a/test/net/java/sip/communicator/impl/protocol/irc/UtilsTest.java b/test/net/java/sip/communicator/impl/protocol/irc/UtilsTest.java
index 5ca18a9..b38454e 100644
--- a/test/net/java/sip/communicator/impl/protocol/irc/UtilsTest.java
+++ b/test/net/java/sip/communicator/impl/protocol/irc/UtilsTest.java
@@ -26,18 +26,18 @@ public class UtilsTest
public void testNullText()
{
- Assert.assertEquals(null, Utils.parse(null));
+ Assert.assertEquals(null, Utils.parseIrcMessage(null));
}
public void testParseEmptyString()
{
- Assert.assertEquals("", Utils.parse(""));
+ Assert.assertEquals("", Utils.parseIrcMessage(""));
}
public void testParseStringWithoutControlCodes()
{
final String message = "My normal message without any control codes.";
- Assert.assertEquals(message, Utils.parse(message));
+ Assert.assertEquals(message, Utils.parseIrcMessage(message));
}
public void testParseStringWithBoldCode()
@@ -45,7 +45,7 @@ public class UtilsTest
final String ircMessage =
"My \u0002bold\u0002 message \u0002BOLD!\u0002.";
final String htmlMessage = "My <b>bold</b> message <b>BOLD!</b>.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithItalicsCode()
@@ -53,7 +53,7 @@ public class UtilsTest
final String ircMessage =
"My \u0016italics\u0016 message \u0016ITALICS!\u0016.";
final String htmlMessage = "My <i>italics</i> message <i>ITALICS!</i>.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithUnderlineCode()
@@ -62,14 +62,14 @@ public class UtilsTest
"My \u001Funderlined\u001F message \u001FUNDERLINED!!!\u001F.";
final String htmlMessage =
"My <u>underlined</u> message <u>UNDERLINED!!!</u>.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithForegroundColorCode()
{
final String ircMessage = "My \u000304RED\u0003 message.";
final String htmlMessage = "My <font color=\"Red\">RED</font> message.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithForegroundAndBackgroundColorCode()
@@ -78,7 +78,7 @@ public class UtilsTest
"My \u000304,12RED on Light Blue\u0003 message.";
final String htmlMessage =
"My <font color=\"Red\" bgcolor=\"RoyalBlue\">RED on Light Blue</font> message.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithInvalidBgColorCode()
@@ -87,7 +87,7 @@ public class UtilsTest
"My \u000304,BRIGHT RED on Light Blue\u0003 message.";
final String htmlMessage =
"My <font color=\"Red\">,BRIGHT RED on Light Blue</font> message.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithInvalidColorControlCode()
@@ -96,7 +96,7 @@ public class UtilsTest
"My \u0003BRIGHT RED on Light Blue\u0003 message.";
final String htmlMessage =
"My BRIGHT RED on Light Blue message.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithInvalidSecondControlCode()
@@ -105,21 +105,21 @@ public class UtilsTest
"My \u000304,12RED on Light Blue\u000304,12 message.";
final String htmlMessage =
"My <font color=\"Red\" bgcolor=\"RoyalBlue\">RED on Light Blue<font color=\"Red\" bgcolor=\"RoyalBlue\"> message.</font></font>";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithIncompleteForegroundColorControlCode()
{
final String ircMessage = "My \u0003";
final String htmlMessage = "My ";
- Assert.assertTrue(Utils.parse(ircMessage).startsWith(htmlMessage));
+ Assert.assertTrue(Utils.parseIrcMessage(ircMessage).startsWith(htmlMessage));
}
public void testParseStringWithIncompleteBackgroundColorControlCode()
{
final String ircMessage = "My \u000310,";
final String htmlMessage = "My <font color=\"Teal\">,";
- Assert.assertTrue(Utils.parse(ircMessage).startsWith(htmlMessage));
+ Assert.assertTrue(Utils.parseIrcMessage(ircMessage).startsWith(htmlMessage));
}
public void testParseSringAndNeutralizeWithNormalControlCode()
@@ -128,7 +128,7 @@ public class UtilsTest
"My \u0002\u0016\u001F\u000304,12RED on Light Blue\u000F message.";
final String htmlMessage =
"My <b><i><u><font color=\"Red\" bgcolor=\"RoyalBlue\">RED on Light Blue</font></u></i></b> message.";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseStringWithUnclosedFormattingI()
@@ -137,14 +137,14 @@ public class UtilsTest
"My \u0002\u0016\u001F\u000304,12RED on Light Blue message.";
final String htmlMessage =
"My <b><i><u><font color=\"Red\" bgcolor=\"RoyalBlue\">RED on Light Blue message.</font></u></i></b>";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseUnknownForegroundColor()
{
final String ircMessage = "\u000399TEST";
final String htmlMessage = "<font color=\"Green\">TEST</font>";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testParseUnknownBackgroundColor()
@@ -152,21 +152,21 @@ public class UtilsTest
final String ircMessage = "\u000300,99TEST";
final String htmlMessage =
"<font color=\"White\" bgcolor=\"Green\">TEST</font>";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testStackIncompatibleFormatToggling()
{
final String ircMessage = "\u0002\u0016\u001FHello\u0002 W\u0016orld\u001F!";
final String htmlMessage = "<b><i><u>Hello</u></i></b><i><u> W</u></i><u>orld</u>!";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testColorSwitch()
{
final String ircMessage = "\u000302,03Hello \u000308,09World\u000F!";
final String htmlMessage = "<font color=\"Navy\" bgcolor=\"Green\">Hello <font color=\"Yellow\" bgcolor=\"Lime\">World</font></font>!";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testForegroundColorChange()
@@ -174,7 +174,14 @@ public class UtilsTest
// If only a foreground color is specified, leave the background color active/as is.
final String ircMessage = "\u000302,03Hello \u000308World\u000F!";
final String htmlMessage = "<font color=\"Navy\" bgcolor=\"Green\">Hello <font color=\"Yellow\">World</font></font>!";
- Assert.assertEquals(htmlMessage, Utils.parse(ircMessage));
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
+ }
+
+ public void testCancelColorFormat()
+ {
+ final String ircMessage = "\u000302With color\u0003 and without color.";
+ final String htmlMessage = "<font color=\"Navy\">With color</font> and without color.";
+ Assert.assertEquals(htmlMessage, Utils.parseIrcMessage(ircMessage));
}
public void testFormatMessage()