Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
Openfire
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Openfire
Commits
5e2f097a
Commit
5e2f097a
authored
Oct 30, 2015
by
Dave Cridland
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #345 from sco0ter/enum
Use real Java enums for presence subscription states.
parents
336313bb
8744e981
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
115 additions
and
258 deletions
+115
-258
Roster.java
src/java/org/jivesoftware/openfire/roster/Roster.java
+2
-2
RosterItem.java
src/java/org/jivesoftware/openfire/roster/RosterItem.java
+113
-27
Enum.java
src/java/org/jivesoftware/util/Enum.java
+0
-68
IntEnum.java
src/java/org/jivesoftware/util/IntEnum.java
+0
-107
IntEnumTest.java
src/test/java/org/jivesoftware/util/IntEnumTest.java
+0
-54
No files found.
src/java/org/jivesoftware/openfire/roster/Roster.java
View file @
5e2f097a
...
...
@@ -563,10 +563,10 @@ public class Roster implements Cacheable, Externalizable {
}
private
org
.
xmpp
.
packet
.
Roster
.
Ask
getAskStatus
(
RosterItem
.
AskType
askType
)
{
if
(
askType
==
null
||
""
.
equals
(
askType
.
getName
())
)
{
if
(
askType
==
null
||
askType
==
RosterItem
.
AskType
.
NONE
)
{
return
null
;
}
return
org
.
xmpp
.
packet
.
Roster
.
Ask
.
valueOf
(
askType
.
getNam
e
());
return
org
.
xmpp
.
packet
.
Roster
.
Ask
.
valueOf
(
askType
.
name
().
toLowerCas
e
());
}
/**
...
...
src/java/org/jivesoftware/openfire/roster/RosterItem.java
View file @
5e2f097a
...
...
@@ -26,7 +26,6 @@ import org.jivesoftware.openfire.group.GroupManager;
import
org.jivesoftware.openfire.group.GroupNotFoundException
;
import
org.jivesoftware.openfire.user.UserNameManager
;
import
org.jivesoftware.openfire.user.UserNotFoundException
;
import
org.jivesoftware.util.IntEnum
;
import
org.jivesoftware.util.cache.CacheSizes
;
import
org.jivesoftware.util.cache.Cacheable
;
import
org.jivesoftware.util.cache.CannotCalculateSizeException
;
...
...
@@ -55,87 +54,174 @@ import java.util.*;
*/
public
class
RosterItem
implements
Cacheable
,
Externalizable
{
public
static
class
SubType
extends
IntEnum
{
protected
SubType
(
String
name
,
int
value
)
{
super
(
name
,
value
);
register
(
this
);
public
enum
SubType
{
/**
* Indicates the roster item should be removed.
*/
REMOVE
(-
1
),
/**
* No subscription is established.
*/
NONE
(
0
),
/**
* The roster owner has a subscription to the roster item's presence.
*/
TO
(
1
),
/**
* The roster item has a subscription to the roster owner's presence.
*/
FROM
(
2
),
/**
* The roster item and owner have a mutual subscription.
*/
BOTH
(
3
);
private
final
int
value
;
SubType
(
int
value
)
{
this
.
value
=
value
;
}
public
int
getValue
()
{
return
value
;
}
public
String
getName
()
{
return
name
().
toLowerCase
();
}
public
static
SubType
getTypeFromInt
(
int
value
)
{
return
(
SubType
)
getEnumFromInt
(
SubType
.
class
,
value
);
for
(
SubType
subType
:
values
())
{
if
(
subType
.
value
==
value
)
{
return
subType
;
}
}
return
null
;
}
}
public
static
class
AskType
extends
IntEnum
{
protected
AskType
(
String
name
,
int
value
)
{
super
(
name
,
value
);
register
(
this
);
public
enum
AskType
{
/**
* The roster item has no pending subscription requests.
*/
NONE
(-
1
),
/**
* The roster item has been asked for permission to subscribe to their presence
* but no response has been received.
*/
SUBSCRIBE
(
0
),
/**
* The roster owner has asked to the roster item to unsubscribe from it's
* presence but has not received confirmation.
*/
UNSUBSCRIBE
(
1
);
private
final
int
value
;
AskType
(
int
value
)
{
this
.
value
=
value
;
}
public
int
getValue
()
{
return
value
;
}
public
static
AskType
getTypeFromInt
(
int
value
)
{
return
(
AskType
)
getEnumFromInt
(
AskType
.
class
,
value
);
for
(
AskType
askType
:
values
())
{
if
(
askType
.
value
==
value
)
{
return
askType
;
}
}
return
null
;
}
}
public
static
class
RecvType
extends
IntEnum
{
protected
RecvType
(
String
name
,
int
value
)
{
super
(
name
,
value
);
register
(
this
);
public
enum
RecvType
{
/**
* There are no subscriptions that have been received but not presented to the user.
*/
NONE
(-
1
),
/**
* The server has received a subscribe request, but has not forwarded it to the user.
*/
SUBSCRIBE
(
1
),
/**
* The server has received an unsubscribe request, but has not forwarded it to the user.
*/
UNSUBSCRIBE
(
2
);
private
final
int
value
;
RecvType
(
int
value
)
{
this
.
value
=
value
;
}
public
int
getValue
()
{
return
value
;
}
public
static
RecvType
getTypeFromInt
(
int
value
)
{
return
(
RecvType
)
getEnumFromInt
(
RecvType
.
class
,
value
);
for
(
RecvType
recvType
:
values
())
{
if
(
recvType
.
value
==
value
)
{
return
recvType
;
}
}
return
null
;
}
}
/**
* <p>Indicates the roster item should be removed.</p>
*/
public
static
final
SubType
SUB_REMOVE
=
new
SubType
(
"remove"
,
-
1
)
;
public
static
final
SubType
SUB_REMOVE
=
SubType
.
REMOVE
;
/**
* <p>No subscription is established.</p>
*/
public
static
final
SubType
SUB_NONE
=
new
SubType
(
"none"
,
0
)
;
public
static
final
SubType
SUB_NONE
=
SubType
.
NONE
;
/**
* <p>The roster owner has a subscription to the roster item's presence.</p>
*/
public
static
final
SubType
SUB_TO
=
new
SubType
(
"to"
,
1
)
;
public
static
final
SubType
SUB_TO
=
SubType
.
TO
;
/**
* <p>The roster item has a subscription to the roster owner's presence.</p>
*/
public
static
final
SubType
SUB_FROM
=
new
SubType
(
"from"
,
2
)
;
public
static
final
SubType
SUB_FROM
=
SubType
.
FROM
;
/**
* <p>The roster item and owner have a mutual subscription.</p>
*/
public
static
final
SubType
SUB_BOTH
=
new
SubType
(
"both"
,
3
)
;
public
static
final
SubType
SUB_BOTH
=
SubType
.
BOTH
;
/**
* <p>The roster item has no pending subscription requests.</p>
*/
public
static
final
AskType
ASK_NONE
=
new
AskType
(
""
,
-
1
)
;
public
static
final
AskType
ASK_NONE
=
AskType
.
NONE
;
/**
* <p>The roster item has been asked for permission to subscribe to their presence
* but no response has been received.</p>
*/
public
static
final
AskType
ASK_SUBSCRIBE
=
new
AskType
(
"subscribe"
,
0
)
;
public
static
final
AskType
ASK_SUBSCRIBE
=
AskType
.
SUBSCRIBE
;
/**
* <p>The roster owner has asked to the roster item to unsubscribe from it's
* presence but has not received confirmation.</p>
*/
public
static
final
AskType
ASK_UNSUBSCRIBE
=
new
AskType
(
"unsubscribe"
,
1
)
;
public
static
final
AskType
ASK_UNSUBSCRIBE
=
AskType
.
UNSUBSCRIBE
;
/**
* <p>There are no subscriptions that have been received but not presented to the user.</p>
*/
public
static
final
RecvType
RECV_NONE
=
new
RecvType
(
""
,
-
1
)
;
public
static
final
RecvType
RECV_NONE
=
RecvType
.
NONE
;
/**
* <p>The server has received a subscribe request, but has not forwarded it to the user.</p>
*/
public
static
final
RecvType
RECV_SUBSCRIBE
=
new
RecvType
(
"sub"
,
1
)
;
public
static
final
RecvType
RECV_SUBSCRIBE
=
RecvType
.
SUBSCRIBE
;
/**
* <p>The server has received an unsubscribe request, but has not forwarded it to the user.</p>
*/
public
static
final
RecvType
RECV_UNSUBSCRIBE
=
new
RecvType
(
"unsub"
,
2
)
;
public
static
final
RecvType
RECV_UNSUBSCRIBE
=
RecvType
.
UNSUBSCRIBE
;
protected
RecvType
recvStatus
;
protected
JID
jid
;
...
...
src/java/org/jivesoftware/util/Enum.java
deleted
100644 → 0
View file @
336313bb
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
jivesoftware
.
util
;
/**
* A type safe enumeration object. Used for indicating distinct states
* in a generic manner. Most child classes should extend Enum and
* create static instances.
*
* @author Iain Shigeoka
*/
public
class
Enum
{
private
String
name
;
protected
Enum
(
String
name
)
{
this
.
name
=
name
;
}
/**
* Returns the name of the enum.
*
* @return the name of the enum.
*/
public
String
getName
()
{
return
name
;
}
@Override
public
boolean
equals
(
Object
object
)
{
if
(
this
==
object
)
{
return
true
;
}
else
if
((
this
.
getClass
().
isInstance
(
object
))
&&
name
.
equals
(((
Enum
)
object
).
name
))
{
return
true
;
}
else
{
return
false
;
}
}
@Override
public
int
hashCode
()
{
return
name
.
hashCode
();
}
@Override
public
String
toString
()
{
return
name
;
}
}
src/java/org/jivesoftware/util/IntEnum.java
deleted
100644 → 0
View file @
336313bb
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
jivesoftware
.
util
;
import
java.util.*
;
/**
* <p>A type safe enumeration object that is keyed by an Int
* value for switch statements and storage in DBs.</p>
* <p>
* Used for indicating distinct states in a generic manner
* where each enum should have an associated int value. The
* given int should be unique for each enum value as hashCode
* and equals depends solely on the int value given. Most
* child classes should extend IntEnum and create static instances.</p>
*
* @author Iain Shigeoka
*/
public
class
IntEnum
extends
Enum
{
private
int
value
;
protected
static
Hashtable
<
Class
<?>,
Map
<
Integer
,
IntEnum
>>
enumTypes
=
new
Hashtable
<>();
protected
IntEnum
(
String
name
,
int
val
)
{
super
(
name
);
this
.
value
=
val
;
}
/**
* Returns the int value associated with the enum.
*
* @return the int value of the enum.
*/
public
int
getValue
()
{
return
value
;
}
@Override
public
boolean
equals
(
Object
object
)
{
if
(
this
==
object
)
{
return
true
;
}
else
if
((
this
.
getClass
().
isInstance
(
object
))
&&
value
==
(((
IntEnum
)
object
).
value
))
{
return
true
;
}
else
{
return
false
;
}
}
/**
* <p>Checks in an enum for use in the getEnumFromInt() method.</p>
*
* @param enumeration The enum to be registered
*/
protected
static
void
register
(
IntEnum
enumeration
)
{
Map
<
Integer
,
IntEnum
>
enums
=
enumTypes
.
get
(
enumeration
.
getClass
());
if
(
enums
==
null
)
{
enums
=
new
HashMap
<>();
enumTypes
.
put
(
enumeration
.
getClass
(),
enums
);
}
enums
.
put
(
enumeration
.
getValue
(),
enumeration
);
}
/**
* <p>Obtain the enum associated with the given value.</p>
* <p>Values must be registered earlier using the register() method.</p>
*
* @param value the value to lookup the enum for
* @return The associated enum or null if no matching enum exists
*/
protected
static
IntEnum
getEnumFromInt
(
Class
enumClass
,
int
value
)
{
Map
enums
=
(
Map
)
enumTypes
.
get
(
enumClass
);
if
(
enums
!=
null
)
{
return
(
IntEnum
)
enums
.
get
(
value
);
}
return
null
;
}
@Override
public
int
hashCode
()
{
return
value
;
}
@Override
public
String
toString
()
{
return
Integer
.
toString
(
value
)
+
" "
+
super
.
toString
();
}
}
\ No newline at end of file
src/test/java/org/jivesoftware/util/IntEnumTest.java
deleted
100644 → 0
View file @
336313bb
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
jivesoftware
.
util
;
import
org.junit.Test
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
/**
* Simple test of the int enum class.
*
* @author Iain Shigeoka
*/
public
class
IntEnumTest
{
/**
* Tests the IntEnum's enforcement of unique int values for each enum type
*/
@Test
public
void
testStaticEnumUniqueEnforcement
(){
IntEnum
e
=
new
IntEnum
(
"plain"
,
1
);
IntEnum
.
register
(
e
);
new
TestIntEnum
(
"test"
,
1
);
// auto registers the same value - does it clash with super class?
assertEquals
(
"plain"
,
IntEnum
.
getEnumFromInt
(
IntEnum
.
class
,
1
).
getName
());
assertEquals
(
"test"
,
TestIntEnum
.
getTypeFromInt
(
1
).
getName
());
}
static
public
class
TestIntEnum
extends
IntEnum
{
public
TestIntEnum
(
String
name
,
int
value
){
super
(
name
,
value
);
register
(
this
);
}
public
static
TestIntEnum
getTypeFromInt
(
int
value
){
return
(
TestIntEnum
)
getEnumFromInt
(
TestIntEnum
.
class
,
value
);
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment