Commit fe5c66ce authored by Christian Schudt's avatar Christian Schudt

OF-343 Add @Override annotations

There were still ~1500 missing annotations! This time fixed with IntelliJ ;-)
parent 0412ffc1
......@@ -66,11 +66,13 @@ public class MINAStatCollector {
private final IoServiceListener serviceListener = new IoServiceListener()
{
@Override
public void sessionCreated( IoSession session )
{
addSession( session );
}
@Override
public void sessionDestroyed( IoSession session )
{
removeSession( session );
......
......@@ -66,6 +66,7 @@ public class AdminConsole {
// then rebuild the model to add the Clearspace tab
// This is to add the tab after Openfire setup
PropertyEventListener propListener = new PropertyEventListener() {
@Override
public void propertySet(String property, Map params) {
if ("provider.auth.className".equals(property)) {
String value = (String) params.get("value");
......@@ -75,12 +76,15 @@ public class AdminConsole {
}
}
@Override
public void propertyDeleted(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertySet(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
//Ignore
}
......
......@@ -113,6 +113,7 @@ public class AuthCheckFilter implements Filter {
return false;
}
@Override
public void init(FilterConfig config) throws ServletException {
context = config.getServletContext();
defaultLoginPage = config.getInitParameter("defaultLoginPage");
......@@ -126,6 +127,7 @@ public class AuthCheckFilter implements Filter {
}
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException
{
......@@ -160,6 +162,7 @@ public class AuthCheckFilter implements Filter {
chain.doFilter(req, res);
}
@Override
public void destroy() {
}
......
......@@ -58,9 +58,11 @@ public class PluginFilter implements Filter {
pluginFilters.remove(filter);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException
{
......@@ -79,6 +81,7 @@ public class PluginFilter implements Filter {
}
}
@Override
public void destroy() {
// If the destroy method is being called, the Openfire instance is being shutdown.
// Therefore, clear out the list of plugin filters.
......
......@@ -76,10 +76,12 @@ public class DefaultConnectionProvider implements ConnectionProvider {
System.setProperty("org.apache.commons.logging.LogFactory", "org.jivesoftware.util.log.util.CommonsLogFactory");
}
@Override
public boolean isPooled() {
return true;
}
@Override
public Connection getConnection() throws SQLException {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
......@@ -90,6 +92,7 @@ public class DefaultConnectionProvider implements ConnectionProvider {
}
}
@Override
public void start() {
proxoolURL = "proxool.openfire:"+getDriver()+":"+getServerURL();
settings = new Properties();
......@@ -104,9 +107,11 @@ public class DefaultConnectionProvider implements ConnectionProvider {
settings.setProperty("password", (getPassword() != null ? getPassword() : ""));
}
@Override
public void restart() {
}
@Override
public void destroy() {
settings = null;
}
......
......@@ -53,10 +53,12 @@ public class EmbeddedConnectionProvider implements ConnectionProvider {
System.setProperty("org.apache.commons.logging.LogFactory", "org.jivesoftware.util.log.util.CommonsLogFactory");
}
@Override
public boolean isPooled() {
return true;
}
@Override
public Connection getConnection() throws SQLException {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
......@@ -67,6 +69,7 @@ public class EmbeddedConnectionProvider implements ConnectionProvider {
}
}
@Override
public void start() {
File databaseDir = new File(JiveGlobals.getHomeDirectory(), File.separator + "embedded-db");
// If the database doesn't exist, create it.
......@@ -89,6 +92,7 @@ public class EmbeddedConnectionProvider implements ConnectionProvider {
settings.setProperty("password", "");
}
@Override
public void restart() {
// Kill off pool.
destroy();
......@@ -96,6 +100,7 @@ public class EmbeddedConnectionProvider implements ConnectionProvider {
start();
}
@Override
public void destroy() {
// Shutdown the database.
Connection con = null;
......
......@@ -79,10 +79,12 @@ public class JNDIDataSourceProvider implements ConnectionProvider {
dataSourceName = JiveGlobals.getXMLProperty("database.JNDIProvider.name");
}
@Override
public boolean isPooled() {
return true;
}
@Override
public void start() {
if (dataSourceName == null || dataSourceName.equals("")) {
Log.error("No name specified for DataSource. JNDI lookup will fail", new Throwable());
......@@ -110,15 +112,18 @@ public class JNDIDataSourceProvider implements ConnectionProvider {
}
}
@Override
public void restart() {
destroy();
start();
}
@Override
public void destroy() {
}
@Override
public Connection getConnection() throws SQLException {
if (dataSource == null) {
throw new SQLException("DataSource has not been initialized.");
......
......@@ -89,6 +89,7 @@ public class Channel<T extends Packet> {
*/
public void add(final T packet) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
channelHandler.process(packet);
......
......@@ -53,6 +53,7 @@ public class FlashCrossDomainHandler extends BasicModule {
@Override
public void start() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
startServer();
......
......@@ -111,7 +111,8 @@ public class JMXManager {
Map<String, Object> env = new HashMap<String, Object>();
if (JMXManager.isSecure()) {
env.put("jmx.remote.authenticator", new JMXAuthenticator() {
public Subject authenticate(Object credentials) {
@Override
public Subject authenticate(Object credentials) {
if (!(credentials instanceof String[])) {
if (credentials == null) {
throw new SecurityException("Credentials required");
......
......@@ -286,6 +286,7 @@ public class MulticastRouter extends BasicModule implements ServerFeaturesProvid
}
}
@Override
public void receivedAnswer(IQ packet) {
// Look for the root node being discovered
String domain = packet.getFrom().toString();
......@@ -392,10 +393,12 @@ public class MulticastRouter extends BasicModule implements ServerFeaturesProvid
}
}
@Override
public void answerTimeout(String packetId) {
Log.warn("An answer to a previously sent IQ stanza was never received. Packet id: " + packetId);
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton(NAMESPACE).iterator();
}
......
......@@ -436,15 +436,18 @@ public class OfflineMessageStore extends BasicModule implements UserEventListene
return size;
}
@Override
public void userCreated(User user, Map params) {
//Do nothing
}
@Override
public void userDeleting(User user, Map params) {
// Delete all offline messages of the user
deleteMessages(user.getUsername());
}
@Override
public void userModified(User user, Map params) {
//Do nothing
}
......
......@@ -196,10 +196,12 @@ public class PrivateStorage extends BasicModule implements UserEventListener {
return data;
}
@Override
public void userCreated(User user, Map params) {
//Do nothing
}
@Override
public void userDeleting(User user, Map params) {
// Delete all private properties of the user
Connection con = null;
......@@ -218,6 +220,7 @@ public class PrivateStorage extends BasicModule implements UserEventListener {
}
}
@Override
public void userModified(User user, Map params) {
//Do nothing
}
......
......@@ -1232,6 +1232,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
*
* @param handback The session that just closed
*/
@Override
public void onConnectionClose(Object handback) {
try {
LocalClientSession session = (LocalClientSession) handback;
......@@ -1285,6 +1286,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
*
* @param handback The session that just closed
*/
@Override
public void onConnectionClose(Object handback) {
LocalComponentSession session = (LocalComponentSession)handback;
try {
......@@ -1317,6 +1319,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
*
* @param handback The session that just closed
*/
@Override
public void onConnectionClose(Object handback) {
IncomingServerSession session = (IncomingServerSession)handback;
// Remove all the hostnames that were registered for this server session
......@@ -1332,6 +1335,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
*
* @param handback The session that just closed
*/
@Override
public void onConnectionClose(Object handback) {
OutgoingServerSession session = (OutgoingServerSession)handback;
// Remove all the hostnames that were registered for this server session
......@@ -1348,6 +1352,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
*
* @param handback The session that just closed
*/
@Override
public void onConnectionClose(Object handback) {
ConnectionMultiplexerSession session = (ConnectionMultiplexerSession)handback;
// Remove all the hostnames that were registered for this server session
......@@ -1557,6 +1562,7 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
return sessionInfoCache;
}
@Override
public void joinedCluster() {
restoreCacheContent();
// Track information about local sessions and share it with other cluster nodes
......@@ -1565,10 +1571,12 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
}
}
@Override
public void joinedCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void leftCluster() {
if (!XMPPServer.getInstance().isShuttingDown()) {
// Add local sessions to caches
......@@ -1576,10 +1584,12 @@ public class SessionManager extends BasicModule implements ClusterEventListener/
}
}
@Override
public void leftCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void markedAsSeniorClusterMember() {
// Do nothing
}
......
......@@ -87,6 +87,7 @@ public class SessionPacketRouter implements PacketRouter {
}
}
@Override
public void route(Packet packet) {
// Security: Don't allow users to send packets on behalf of other users
packet.setFrom(session.getAddress());
......@@ -101,18 +102,21 @@ public class SessionPacketRouter implements PacketRouter {
}
}
@Override
public void route(IQ packet) {
packet.setFrom(session.getAddress());
router.route(packet);
session.incrementClientPacketCount();
}
@Override
public void route(Message packet) {
packet.setFrom(session.getAddress());
router.route(packet);
session.incrementClientPacketCount();
}
@Override
public void route(Presence packet) {
packet.setFrom(session.getAddress());
router.route(packet);
......
......@@ -216,6 +216,7 @@ public class SessionResultFilter {
*/
private class SessionComparator implements Comparator<ClientSession> {
@Override
public int compare(ClientSession lhs, ClientSession rhs) {
int comparison;
switch (sortField) {
......
......@@ -33,6 +33,7 @@ public class XMPPContextListener implements ServletContextListener {
protected String XMPP_KEY = "XMPP_SERVER";
@Override
public void contextInitialized(ServletContextEvent event) {
if (XMPPServer.getInstance() != null) {
// Running in standalone mode so do nothing
......@@ -42,6 +43,7 @@ public class XMPPContextListener implements ServletContextListener {
event.getServletContext().setAttribute(XMPP_KEY, server);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
XMPPServer server = (XMPPServer) event.getServletContext().getAttribute(XMPP_KEY);
if (null != server) {
......
......@@ -805,6 +805,7 @@ public class XMPPServer {
*/
private class Terminator extends TimerTask {
private BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
@Override
public void run() {
try {
if (stdin.ready()) {
......
......@@ -87,20 +87,24 @@ public class AdminManager {
// Detect when a new admin provider class is set
PropertyEventListener propListener = new PropertyEventListener() {
@Override
public void propertySet(String property, Map<String, Object> params) {
if ("provider.admin.className".equals(property)) {
initProvider();
}
}
@Override
public void propertyDeleted(String property, Map<String, Object> params) {
//Ignore
}
@Override
public void xmlPropertySet(String property, Map<String, Object> params) {
//Ignore
}
@Override
public void xmlPropertyDeleted(String property, Map<String, Object> params) {
//Ignore
}
......
......@@ -53,6 +53,7 @@ public class DefaultAdminProvider implements AdminProvider {
// Detect when the list of admin users is changed.
PropertyEventListener propListener = new PropertyEventListener() {
@Override
public void propertySet(String property, Map params) {
Log.debug("DefaultAdminProvider: Property was set: "+property);
if ("admin.authorizedJIDs".equals(property)) {
......@@ -60,6 +61,7 @@ public class DefaultAdminProvider implements AdminProvider {
}
}
@Override
public void propertyDeleted(String property, Map params) {
Log.debug("DefaultAdminProvider: Property was deleted: "+property);
if ("admin.authorizedJIDs".equals(property)) {
......@@ -67,11 +69,13 @@ public class DefaultAdminProvider implements AdminProvider {
}
}
@Override
public void xmlPropertySet(String property, Map params) {
Log.debug("DefaultAdminProvider: XML Property was set: "+property);
//Ignore
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
Log.debug("DefaultAdminProvider: XML Property was deleted: "+property);
//Ignore
......@@ -86,6 +90,7 @@ public class DefaultAdminProvider implements AdminProvider {
* <tt>admin.authorizedJIDs</tt>
* @see org.jivesoftware.openfire.admin.AdminProvider#getAdmins()
*/
@Override
public List<JID> getAdmins() {
List<JID> adminList = new ArrayList<JID>();
......@@ -116,6 +121,7 @@ public class DefaultAdminProvider implements AdminProvider {
* <tt>admin.authorizedJIDs</tt>
* @see org.jivesoftware.openfire.admin.AdminProvider#setAdmins(java.util.List)
*/
@Override
public void setAdmins(List<JID> admins) {
Collection<String> adminList = new ArrayList<String>();
for (JID admin : admins) {
......@@ -128,6 +134,7 @@ public class DefaultAdminProvider implements AdminProvider {
* The default provider is not read only
* @see org.jivesoftware.openfire.admin.AdminProvider#isReadOnly()
*/
@Override
public boolean isReadOnly() {
return false;
}
......
......@@ -38,6 +38,7 @@ public class AuditStreamIDFactory implements StreamIDFactory {
public AuditStreamIDFactory() {
}
@Override
public StreamID createStreamID() {
return factory.createStreamID();
}
......
......@@ -74,10 +74,12 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
super("Audit Manager");
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
JiveGlobals.setProperty("xmpp.audit.active", enabled ? "true" : "false");
......@@ -90,6 +92,7 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
}
}
@Override
public Auditor getAuditor() {
if (auditor == null) {
throw new IllegalStateException("Must initialize audit manager first");
......@@ -97,30 +100,36 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
return auditor;
}
@Override
public int getMaxTotalSize() {
return maxTotalSize;
}
@Override
public void setMaxTotalSize(int size) {
maxTotalSize = size;
auditor.setMaxValues(maxTotalSize, maxFileSize, maxDays);
JiveGlobals.setProperty("xmpp.audit.totalsize", Integer.toString(size));
}
@Override
public int getMaxFileSize() {
return maxFileSize;
}
@Override
public void setMaxFileSize(int size) {
maxFileSize = size;
auditor.setMaxValues(maxTotalSize, maxFileSize, maxDays);
JiveGlobals.setProperty("xmpp.audit.filesize", Integer.toString(size));
}
@Override
public int getMaxDays() {
return maxDays;
}
@Override
public void setMaxDays(int count) {
if (count < -1) {
count = -1;
......@@ -133,67 +142,81 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
JiveGlobals.setProperty("xmpp.audit.days", Integer.toString(count));
}
@Override
public int getLogTimeout() {
return logTimeout;
}
@Override
public void setLogTimeout(int logTimeout) {
this.logTimeout = logTimeout;
auditor.setLogTimeout(logTimeout);
JiveGlobals.setProperty("xmpp.audit.logtimeout", Integer.toString(logTimeout));
}
@Override
public String getLogDir() {
return logDir;
}
@Override
public void setLogDir(String logDir) {
this.logDir = logDir;
auditor.setLogDir(logDir);
JiveGlobals.setProperty("xmpp.audit.logdir", logDir);
}
@Override
public boolean isAuditMessage() {
return auditMessage;
}
@Override
public void setAuditMessage(boolean auditMessage) {
this.auditMessage = auditMessage;
JiveGlobals.setProperty("xmpp.audit.message", auditMessage ? "true" : "false");
}
@Override
public boolean isAuditPresence() {
return auditPresence;
}
@Override
public void setAuditPresence(boolean auditPresence) {
this.auditPresence = auditPresence;
JiveGlobals.setProperty("xmpp.audit.presence", auditPresence ? "true" : "false");
}
@Override
public boolean isAuditIQ() {
return auditIQ;
}
@Override
public void setAuditIQ(boolean auditIQ) {
this.auditIQ = auditIQ;
JiveGlobals.setProperty("xmpp.audit.iq", Boolean.toString(auditIQ));
}
@Override
public boolean isAuditXPath() {
return auditXPath;
}
@Override
public void setAuditXPath(boolean auditXPath) {
this.auditXPath = auditXPath;
JiveGlobals.setProperty("xmpp.audit.xpath", Boolean.toString(auditXPath));
}
@Override
public void addXPath(String xpathExpression) {
xpath.add(xpathExpression);
saveXPath();
}
@Override
public void removeXPath(String xpathExpression) {
xpath.remove(xpathExpression);
saveXPath();
......@@ -205,10 +228,12 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
//filters = (String[]) xpath.toArray(filters);
}
@Override
public Iterator getXPathFilters() {
return xpath.iterator();
}
@Override
public void setIgnoreList(Collection<String> usernames) {
if (ignoreList.equals(usernames)) {
return;
......@@ -227,6 +252,7 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
JiveGlobals.setProperty("xmpp.audit.ignore", ignoreString.toString());
}
@Override
public Collection<String> getIgnoreList() {
return Collections.unmodifiableCollection(ignoreList);
}
......@@ -282,6 +308,7 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
private class AuditorInterceptor implements PacketInterceptor {
@Override
public void interceptPacket(Packet packet, Session session, boolean read, boolean processed) {
if (!processed) {
// Ignore packets sent or received by users that are present in the ignore list
......
......@@ -151,10 +151,12 @@ public class AuditorImpl implements Auditor {
}
}
@Override
public int getQueuedPacketsNumber() {
return logQueue.size();
}
@Override
public void audit(Packet packet, Session session) {
if (auditManager.isEnabled()) {
if (packet instanceof Message) {
......@@ -182,6 +184,7 @@ public class AuditorImpl implements Auditor {
}
}
@Override
public void stop() {
// Stop queuing packets since we are being stopped
closed = true;
......@@ -224,6 +227,7 @@ public class AuditorImpl implements Auditor {
private void ensureMaxTotalSize() {
// Get list of existing audit files
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("jive.audit-") && name.endsWith(".log");
}
......@@ -238,6 +242,7 @@ public class AuditorImpl implements Auditor {
// Sort files by name (chronological order)
List<File> sortedFiles = new ArrayList<File>(Arrays.asList(files));
Collections.sort(sortedFiles, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
......@@ -274,6 +279,7 @@ public class AuditorImpl implements Auditor {
// Get list of audit files to delete
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("jive.audit-") && name.endsWith(".log") &&
name.compareTo(oldestFile) < 0;
......@@ -320,7 +326,8 @@ public class AuditorImpl implements Auditor {
}
// Get list of existing audit files
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
@Override
public boolean accept(File dir, String name) {
return name.startsWith(filePrefix) && name.endsWith(".log");
}
};
......
......@@ -68,20 +68,24 @@ public class AuthFactory {
// Detect when a new auth provider class is set
PropertyEventListener propListener = new PropertyEventListener() {
@Override
public void propertySet(String property, Map params) {
if ("provider.auth.className".equals(property)) {
initProvider();
}
}
@Override
public void propertyDeleted(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertySet(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
//Ignore
}
......
......@@ -68,6 +68,7 @@ public class DefaultAuthProvider implements AuthProvider {
}
@Override
public void authenticate(String username, String password) throws UnauthorizedException {
if (username == null || password == null) {
throw new UnauthorizedException();
......@@ -95,6 +96,7 @@ public class DefaultAuthProvider implements AuthProvider {
// Got this far, so the user must be authorized.
}
@Override
public void authenticate(String username, String token, String digest) throws UnauthorizedException {
if (username == null || token == null || digest == null) {
throw new UnauthorizedException();
......@@ -124,15 +126,18 @@ public class DefaultAuthProvider implements AuthProvider {
// Got this far, so the user must be authorized.
}
@Override
public boolean isPlainSupported() {
return true;
}
@Override
public boolean isDigestSupported() {
boolean scramOnly = JiveGlobals.getBooleanProperty("user.scramHashedPasswordOnly");
return !scramOnly;
}
@Override
public String getPassword(String username) throws UserNotFoundException {
if (!supportsPasswordRetrieval()) {
// Reject the operation since the provider is read-only
......@@ -253,6 +258,7 @@ public class DefaultAuthProvider implements AuthProvider {
}
}
@Override
public void setPassword(String username, String password) throws UserNotFoundException {
// Determine if the password should be stored as plain text or encrypted.
boolean usePlainPassword = JiveGlobals.getBooleanProperty("user.usePlainPassword");
......@@ -346,6 +352,7 @@ public class DefaultAuthProvider implements AuthProvider {
}
}
@Override
public boolean supportsPasswordRetrieval() {
boolean scramOnly = JiveGlobals.getBooleanProperty("user.scramHashedPasswordOnly");
return !scramOnly;
......
......@@ -59,6 +59,7 @@ public class DefaultAuthorizationMapping implements AuthorizationMapping {
* @param principal The autheticated principal requesting authorization.
* @return The name of the default username to use.
*/
@Override
public String map(String principal) {
if(principal.contains("@")) {
String realm = principal.substring(principal.lastIndexOf('@')+1);
......@@ -97,6 +98,7 @@ public class DefaultAuthorizationMapping implements AuthorizationMapping {
*
* @return The short name of the Policy
*/
@Override
public String name() {
return "Default Mapping";
}
......@@ -106,6 +108,7 @@ public class DefaultAuthorizationMapping implements AuthorizationMapping {
*
* @return The description of the Policy.
*/
@Override
public String description() {
return "Simply remove's the realm of the requesting principal if and only if "+
"the realm matches the server's realm or the server's xmpp domain name. "+
......
......@@ -86,6 +86,7 @@ public class DefaultAuthorizationPolicy implements AuthorizationPolicy {
* @param authenID The authenticated ID (principal) requesting the username.
* @return true if the authenticated ID is authorized to the requested user.
*/
@Override
public boolean authorize(String username, String authenID) {
boolean authorized = false;
......@@ -181,6 +182,7 @@ public class DefaultAuthorizationPolicy implements AuthorizationPolicy {
*
* @return The short name of the Policy
*/
@Override
public String name() {
return "Default Policy";
}
......@@ -190,6 +192,7 @@ public class DefaultAuthorizationPolicy implements AuthorizationPolicy {
*
* @return The description of the Policy.
*/
@Override
public String description() {
return "Different clients perform authentication differently, so this policy "+
"will authorize any principal to a requested user that match specific "+
......
......@@ -188,14 +188,17 @@ public class HybridAuthProvider implements AuthProvider {
}
}
@Override
public boolean isPlainSupported() {
return true;
}
@Override
public boolean isDigestSupported() {
return false;
}
@Override
public void authenticate(String username, String password) throws UnauthorizedException, ConnectionException, InternalUnauthenticatedException {
// Check overrides first.
if (primaryOverrides.contains(username.toLowerCase())) {
......@@ -235,24 +238,28 @@ public class HybridAuthProvider implements AuthProvider {
}
}
@Override
public void authenticate(String username, String token, String digest)
throws UnauthorizedException
{
throw new UnauthorizedException("Digest authentication not supported.");
}
@Override
public String getPassword(String username)
throws UserNotFoundException, UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
@Override
public void setPassword(String username, String password)
throws UserNotFoundException, UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
@Override
public boolean supportsPasswordRetrieval() {
return false;
}
......
......@@ -130,6 +130,7 @@ public class JDBCAuthProvider implements AuthProvider {
}
}
@Override
public void authenticate(String username, String password) throws UnauthorizedException {
if (username == null || password == null) {
throw new UnauthorizedException();
......@@ -175,6 +176,7 @@ public class JDBCAuthProvider implements AuthProvider {
createUser(username);
}
@Override
public void authenticate(String username, String token, String digest)
throws UnauthorizedException
{
......@@ -213,16 +215,19 @@ public class JDBCAuthProvider implements AuthProvider {
createUser(username);
}
@Override
public boolean isPlainSupported() {
// If the auth SQL is defined, plain text authentication is supported.
return (passwordSQL != null);
}
@Override
public boolean isDigestSupported() {
// The auth SQL must be defined and the password type is supported.
return (passwordSQL != null && passwordType == PasswordType.plain);
}
@Override
public String getPassword(String username) throws UserNotFoundException,
UnsupportedOperationException
{
......@@ -244,6 +249,7 @@ public class JDBCAuthProvider implements AuthProvider {
return getPasswordValue(username);
}
@Override
public void setPassword(String username, String password)
throws UserNotFoundException, UnsupportedOperationException
{
......@@ -254,6 +260,7 @@ public class JDBCAuthProvider implements AuthProvider {
}
}
@Override
public boolean supportsPasswordRetrieval() {
return (passwordSQL != null && passwordType == PasswordType.plain);
}
......
......@@ -105,24 +105,29 @@ public class NativeAuthProvider implements AuthProvider {
// Configure Shaj to log output to the Openfire logger.
com.cenqua.shaj.log.Log.Factory.setInstance(new com.cenqua.shaj.log.Log() {
@Override
public boolean isDebug() {
return Log.isDebugEnabled();
}
@Override
public void error(String string) {
Log.error(string);
}
@Override
public void error(String string, Throwable throwable) {
Log.error(string, throwable);
}
@Override
public void debug(String string) {
Log.debug("NativeAuthProvider: "+string);
}
});
}
@Override
public void authenticate(String username, String password) throws UnauthorizedException {
if (username.contains("@")) {
// Check that the specified domain matches the server's domain
......@@ -177,30 +182,36 @@ public class NativeAuthProvider implements AuthProvider {
}
}
@Override
public void authenticate(String username, String token, String digest)
throws UnauthorizedException
{
throw new UnsupportedOperationException();
}
@Override
public boolean isPlainSupported() {
return true;
}
@Override
public boolean isDigestSupported() {
return false;
}
@Override
public String getPassword(String username)
throws UserNotFoundException, UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
@Override
public void setPassword(String username, String password) throws UserNotFoundException {
throw new UnsupportedOperationException();
}
@Override
public boolean supportsPasswordRetrieval() {
return false;
}
......
......@@ -130,6 +130,7 @@ public class POP3AuthProvider implements AuthProvider {
}
}
@Override
public void authenticate(String username, String password) throws UnauthorizedException {
if (username == null || password == null) {
throw new UnauthorizedException();
......@@ -218,34 +219,41 @@ public class POP3AuthProvider implements AuthProvider {
}
}
@Override
public void authenticate(String username, String token, String digest)
throws UnauthorizedException
{
throw new UnauthorizedException("Digest authentication not supported.");
}
@Override
public boolean isPlainSupported() {
return true;
}
@Override
public boolean isDigestSupported() {
return false;
}
@Override
public String getPassword(String username)
throws UserNotFoundException, UnsupportedOperationException
{
throw new UnsupportedOperationException();
}
@Override
public void setPassword(String username, String password) throws UserNotFoundException {
throw new UnsupportedOperationException();
}
@Override
public boolean supportsPasswordRetrieval() {
return false;
}
@Override
public boolean isScramSupported() {
return false;
}
......
......@@ -54,6 +54,7 @@ public class ClearspaceAdminProvider implements AdminProvider {
* The clearspace provider pulls the admin list from the userPermissions web service
* @see org.jivesoftware.openfire.admin.AdminProvider#getAdmins()
*/
@Override
public List<JID> getAdmins() {
try {
String path = PERMISSION_URL_PREFIX + "userPermissions/"+SYSTEM_ADMIN_PERM+"/true";
......@@ -89,6 +90,7 @@ public class ClearspaceAdminProvider implements AdminProvider {
* The clearspace provider does not allow setting admin lists from this interface
* @see org.jivesoftware.openfire.admin.AdminProvider#setAdmins(java.util.List)
*/
@Override
public void setAdmins(List<JID> admins) {
// Silently do nothing. This shouldn't come up, but more inportantly, we don't want to bother Clearspace.
}
......@@ -97,6 +99,7 @@ public class ClearspaceAdminProvider implements AdminProvider {
* The clearspace provider is read only
* @see org.jivesoftware.openfire.admin.AdminProvider#isReadOnly()
*/
@Override
public boolean isReadOnly() {
return true;
}
......
......@@ -48,6 +48,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
*
* @return true
*/
@Override
public boolean isPlainSupported() {
return true;
}
......@@ -57,6 +58,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
*
* @return false
*/
@Override
public boolean isDigestSupported() {
return false;
}
......@@ -69,6 +71,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
* @param password the password.
* @throws UnauthorizedException if the username of password are incorrect.
*/
@Override
public void authenticate(String username, String password) throws UnauthorizedException,
ConnectionException, InternalUnauthenticatedException {
try {
......@@ -101,6 +104,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
* @throws UnauthorizedException never throws it
* @throws UnsupportedOperationException always throws it
*/
@Override
public void authenticate(String username, String token, String digest) throws UnauthorizedException {
throw new UnsupportedOperationException("Digest not supported");
}
......@@ -110,6 +114,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
*
* @throws UnsupportedOperationException always throws it
*/
@Override
public String getPassword(String username) throws UserNotFoundException, UnsupportedOperationException {
throw new UnsupportedOperationException("Password retrieval not supported");
}
......@@ -119,6 +124,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
*
* @throws UnsupportedOperationException always throws it
*/
@Override
public void setPassword(String username, String password) throws UserNotFoundException, UnsupportedOperationException {
throw new UnsupportedOperationException("Change Password not supported");
}
......@@ -128,6 +134,7 @@ public class ClearspaceAuthProvider implements AuthProvider {
*
* @throws UnsupportedOperationException always throws it
*/
@Override
public boolean supportsPasswordRetrieval() {
return false;
}
......
......@@ -51,10 +51,12 @@ public class ClearspaceGroupProvider extends AbstractGroupProvider {
public ClearspaceGroupProvider() {
}
@Override
public Group getGroup(String name) throws GroupNotFoundException {
return translateGroup(getGroupByName(name));
}
@Override
public int getGroupCount() {
try {
String path = URL_PREFIX + "socialGroupCount";
......@@ -66,12 +68,14 @@ public class ClearspaceGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> getSharedGroupNames() {
// Return all social group names since every social group is a shared group
return getGroupNames();
}
public Collection<String> getSharedGroupNames(JID user) {
@Override
public Collection<String> getSharedGroupNames(JID user) {
// TODO: is there a better way to get the shared Clearspace groups for a given user?
Collection<String> result = new ArrayList<String>();
Iterator<Group> sharedGroups = new GroupCollection(getGroupNames()).iterator();
......@@ -84,7 +88,8 @@ public class ClearspaceGroupProvider extends AbstractGroupProvider {
return result;
}
public Collection<String> getGroupNames() {
@Override
public Collection<String> getGroupNames() {
try {
String path = URL_PREFIX + "socialGroupNames";
Element element = ClearspaceManager.getInstance().executeRequest(GET, path);
......@@ -96,6 +101,7 @@ public class ClearspaceGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> getGroupNames(int startIndex, int numResults) {
try {
String path = URL_PREFIX + "socialGroupNamesBounded/" + startIndex + "/" + numResults;
......@@ -108,6 +114,7 @@ public class ClearspaceGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> getGroupNames(JID user) {
try {
long userID = ClearspaceManager.getInstance().getUserID(user);
......
......@@ -59,6 +59,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* The ClearspaceLockOutProvider will retrieve lockout information from Clearspace's user properties.
* @see org.jivesoftware.openfire.lockout.LockOutProvider#getDisabledStatus(String)
*/
@Override
public LockOutFlag getDisabledStatus(String username) {
try {
// Retrieve the disabled status, translate it into a LockOutFlag, and return it.
......@@ -75,6 +76,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* The ClearspaceLockOutProvider will set lockouts in Clearspace itself.
* @see org.jivesoftware.openfire.lockout.LockOutProvider#setDisabledStatus(org.jivesoftware.openfire.lockout.LockOutFlag)
*/
@Override
public void setDisabledStatus(LockOutFlag flag) {
setEnabledStatus(flag.getUsername(), false);
}
......@@ -83,6 +85,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* The ClearspaceLockOutProvider will set lockouts in Clearspace itself.
* @see org.jivesoftware.openfire.lockout.LockOutProvider#unsetDisabledStatus(String)
*/
@Override
public void unsetDisabledStatus(String username) {
setEnabledStatus(username, true);
}
......@@ -91,6 +94,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* The ClearspaceLockOutProvider will set lockouts in Clearspace itself.
* @see org.jivesoftware.openfire.lockout.LockOutProvider#isReadOnly()
*/
@Override
public boolean isReadOnly() {
return false;
}
......@@ -99,6 +103,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* Clearspace only supports a strict "are you disabled or not".
* @see org.jivesoftware.openfire.lockout.LockOutProvider#isDelayedStartSupported()
*/
@Override
public boolean isDelayedStartSupported() {
return false;
}
......@@ -107,6 +112,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* Clearspace only supports a strict "are you disabled or not".
* @see org.jivesoftware.openfire.lockout.LockOutProvider#isTimeoutSupported()
*/
@Override
public boolean isTimeoutSupported() {
return false;
}
......@@ -115,6 +121,7 @@ public class ClearspaceLockOutProvider implements LockOutProvider {
* Clearspace needs to always be queried for disabled status.
* @see org.jivesoftware.openfire.lockout.LockOutProvider#shouldNotBeCached()
*/
@Override
public boolean shouldNotBeCached() {
return true;
}
......
......@@ -233,30 +233,36 @@ public class ClearspaceMUCTranscriptManager implements MUCEventListener {
MUCEventDispatcher.removeListener(this);
}
@Override
public void roomCreated(JID roomJID) {
// Do nothing
}
@Override
public void roomDestroyed(JID roomJID) {
// Do nothing
}
@Override
public void occupantJoined(JID roomJID, JID user, String nickname) {
if (isClearspaceRoom(roomJID) && !isRoomOwner(roomJID, user)) {
addGroupChatEvent(ClearspaceMUCTranscriptEvent.occupantJoined(roomJID, user, new Date().getTime()));
}
}
@Override
public void occupantLeft(JID roomJID, JID user) {
if (isClearspaceRoom(roomJID) && !isRoomOwner(roomJID, user)) {
addGroupChatEvent(ClearspaceMUCTranscriptEvent.occupantLeft(roomJID, user, new Date().getTime()));
}
}
@Override
public void nicknameChanged(JID roomJID, JID user, String oldNickname, String newNickname) {
// Do nothing
}
@Override
public void messageReceived(JID roomJID, JID user, String nickname, Message message) {
if (isClearspaceRoom(roomJID) && !isRoomOwner(roomJID, user)) {
addGroupChatEvent(ClearspaceMUCTranscriptEvent.messageReceived(roomJID, user, message.getBody(),
......@@ -264,9 +270,11 @@ public class ClearspaceMUCTranscriptManager implements MUCEventListener {
}
}
@Override
public void privateMessageRecieved(JID fromJID, JID toJID, Message message) {
}
@Override
public void roomSubjectChanged(JID roomJID, JID user, String newSubject) {
if (isClearspaceRoom(roomJID) && !isRoomOwner(roomJID, user)) {
addGroupChatEvent(ClearspaceMUCTranscriptEvent.roomSubjectChanged(roomJID, user, newSubject,
......
......@@ -233,16 +233,19 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
// makes it easier to perform LdapManager testing.
this.properties = new Map<String, String>() {
@Override
public String get(Object key) {
return JiveGlobals.getProperty((String) key);
}
@Override
public String put(String key, String value) {
JiveGlobals.setProperty(key, value);
// Always return null since XMLProperties doesn't support the normal semantics.
return null;
}
@Override
public String remove(Object key) {
JiveGlobals.deleteProperty((String) key);
// Always return null since XMLProperties doesn't support the normal semantics.
......@@ -250,36 +253,45 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean containsKey(Object key) {
return false;
}
@Override
public boolean containsValue(Object value) {
return false;
}
@Override
public void putAll(Map<? extends String, ? extends String> t) {
}
@Override
public void clear() {
}
@Override
public Set<String> keySet() {
return null;
}
@Override
public Collection<String> values() {
return null;
}
@Override
public Set<Entry<String, String>> entrySet() {
return null;
}
......@@ -804,6 +816,7 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
@Override
public void serviceEnabled(boolean enabled) throws ModificationNotAllowedException {
// Do not let admins shutdown the external component service
if (!enabled) {
......@@ -811,19 +824,23 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
}
@Override
public void portChanged(int newPort) throws ModificationNotAllowedException {
startClearspaceConfig();
}
@Override
public void defaultSecretChanged(String newSecret) throws ModificationNotAllowedException {
// Do nothing
}
@Override
public void permissionPolicyChanged(ExternalComponentManager.PermissionPolicy newPolicy)
throws ModificationNotAllowedException {
// Do nothing
}
@Override
public void componentAllowed(String subdomain, ExternalComponentConfiguration configuration)
throws ModificationNotAllowedException {
if (subdomain.startsWith("clearspace")) {
......@@ -831,18 +848,21 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
}
@Override
public void componentBlocked(String subdomain) throws ModificationNotAllowedException {
if (subdomain.startsWith("clearspace")) {
throw new ModificationNotAllowedException("Communication with Clearspace cannot be blocked.");
}
}
@Override
public void componentSecretUpdated(String subdomain, String newSecret) throws ModificationNotAllowedException {
if (subdomain.startsWith("clearspace")) {
updateClearspaceSharedSecret(newSecret);
}
}
@Override
public void componentConfigurationDeleted(String subdomain) throws ModificationNotAllowedException {
// Do not let admins delete configuration of Clearspace component
if (subdomain.startsWith("clearspace")) {
......@@ -1207,10 +1227,12 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
final LinkedBlockingQueue<IQ> answer = new LinkedBlockingQueue<IQ>(8);
final IQRouter router = XMPPServer.getInstance().getIQRouter();
router.addIQResultListener(packet.getID(), new IQResultListener() {
@Override
public void receivedAnswer(IQ packet) {
answer.offer(packet);
}
@Override
public void answerTimeout(String packetId) {
Log.warn("No answer from Clearspace was received for IQ stanza: " + packet);
}
......@@ -1225,15 +1247,18 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
return reply;
}
@Override
public void componentRegistered(JID componentJID) {
// Do nothing
}
@Override
public void componentUnregistered(JID componentJID) {
// Remove stored information about this component
clearspaces.remove(componentJID.getDomain());
}
@Override
public void componentInfoReceived(IQ iq) {
// Check if it's a Clearspace component
boolean isClearspace = false;
......@@ -1296,6 +1321,7 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
return System.currentTimeMillis() - time < JiveConstants.MINUTE;
}
@Override
public void propertySet(String property, Map params) {
if (property.equalsIgnoreCase(HttpBindManager.HTTP_BIND_ENABLED) ||
property.equalsIgnoreCase(HttpBindManager.HTTP_BIND_PORT) ||
......@@ -1305,6 +1331,7 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
}
@Override
public void propertyDeleted(String property, Map params) {
if (property.equalsIgnoreCase(HttpBindManager.HTTP_BIND_ENABLED) ||
property.equalsIgnoreCase(HttpBindManager.HTTP_BIND_PORT) ||
......@@ -1314,20 +1341,25 @@ public class ClearspaceManager extends BasicModule implements ExternalComponentM
}
}
@Override
public void xmlPropertySet(String property, Map params) {
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
}
@Override
public void certificateCreated(KeyStore keyStore, String alias, X509Certificate cert) {
updateClearspaceClientSettings();
}
@Override
public void certificateDeleted(KeyStore keyStore, String alias) {
updateClearspaceClientSettings();
}
@Override
public void certificateSigned(KeyStore keyStore, String alias, List<X509Certificate> certificates) {
}
......
......@@ -51,6 +51,7 @@ public class ClearspaceSaslServer implements SaslServer {
*
* @return A non-null string representing the mechanism name.
*/
@Override
public String getMechanismName() {
return "CLEARSPACE";
}
......@@ -78,6 +79,7 @@ public class ClearspaceSaslServer implements SaslServer {
* If an error occurred while processing
* the response or generating a challenge.
*/
@Override
public byte[] evaluateResponse(byte[] response) throws SaslException {
ClearspaceManager csManager = ClearspaceManager.getInstance();
String responseStr = new String(response);
......@@ -128,6 +130,7 @@ public class ClearspaceSaslServer implements SaslServer {
*
* @return true if the authentication exchange has completed; false otherwise.
*/
@Override
public boolean isComplete() {
return completed;
}
......@@ -140,6 +143,7 @@ public class ClearspaceSaslServer implements SaslServer {
* @return The authorization ID of the client.
* @throws IllegalStateException if this authentication session has not completed
*/
@Override
public String getAuthorizationID() {
if (completed) {
return jid;
......@@ -174,6 +178,7 @@ public class ClearspaceSaslServer implements SaslServer {
* not completed, or if the negotiated quality of protection
* has neither integrity nor privacy
*/
@Override
public byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException {
return new byte[0];
}
......@@ -202,6 +207,7 @@ public class ClearspaceSaslServer implements SaslServer {
* not completed, or if the negotiated quality of protection has
* neither integrity nor privacy.
*/
@Override
public byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException {
return new byte[0];
}
......@@ -218,6 +224,7 @@ public class ClearspaceSaslServer implements SaslServer {
* @throws IllegalStateException if this authentication exchange has not completed
*/
@Override
public Object getNegotiatedProperty(String propName) {
return null;
}
......@@ -231,6 +238,7 @@ public class ClearspaceSaslServer implements SaslServer {
* If a problem was encountered while disposing
* the resources.
*/
@Override
public void dispose() throws SaslException {
completed = false;
}
......
......@@ -57,6 +57,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* web service, provided by Clearspace.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#logEvent(String, String, String)
*/
@Override
public void logEvent(String username, String summary, String details) {
try {
// Request to log event
......@@ -99,6 +100,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* it refers the admin to a URL where they can read the logs.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#getEvents(String, Integer, Integer, java.util.Date, java.util.Date)
*/
@Override
public List<SecurityAuditEvent> getEvents(String username, Integer skipEvents, Integer numEvents, Date startTime, Date endTime) {
// This is not used.
return null;
......@@ -109,6 +111,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* it refers the admin to a URL where they can read the logs.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#getEvent(Integer)
*/
@Override
public SecurityAuditEvent getEvent(Integer msgID) throws EventNotFoundException {
// This is not used.
return null;
......@@ -119,6 +122,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* it refers the admin to a URL where they can read the logs.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#getEventCount()
*/
@Override
public Integer getEventCount() {
// This is not used.
return null;
......@@ -129,6 +133,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* it refers the admin to a URL where they can read the logs.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#isWriteOnly()
*/
@Override
public boolean isWriteOnly() {
return true;
}
......@@ -138,6 +143,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* it refers the admin to a URL where they can read the logs.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#getAuditURL()
*/
@Override
public String getAuditURL() {
String url = ClearspaceManager.getInstance().getConnectionURI();
if (url != null) {
......@@ -153,6 +159,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* Clearspace handles logging it's own user events.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#blockUserEvents()
*/
@Override
public boolean blockUserEvents() {
return true;
}
......@@ -161,6 +168,7 @@ public class ClearspaceSecurityAuditProvider implements SecurityAuditProvider {
* Clearspace handles logging it's own group events.
* @see org.jivesoftware.openfire.security.SecurityAuditProvider#blockGroupEvents()
*/
@Override
public boolean blockGroupEvents() {
return true;
}
......
......@@ -75,6 +75,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @return a user instance with the user information
* @throws UserNotFoundException if the user could not be found
*/
@Override
public User loadUser(String username) throws UserNotFoundException {
// Translate the response
......@@ -94,6 +95,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @throws UserAlreadyExistsException If there is already a user with the username
* @throws UnsupportedOperationException If Clearspace is a read only provider
*/
@Override
public User createUser(String username, String password, String name, String email) throws UserAlreadyExistsException {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -152,6 +154,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @param username the username of the user to delete
*/
@Override
public void deleteUser(String username) {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -175,6 +178,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return the user count
*/
@Override
public int getUserCount() {
try {
String path = USER_URL_PREFIX + "users/count";
......@@ -191,6 +195,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return a list of all users
*/
@Override
public Collection<User> getUsers() {
Collection<String> usernames = getUsernames();
return new UserCollection(usernames.toArray(new String[usernames.size()]));
......@@ -201,6 +206,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return a list of all the usernames
*/
@Override
public Collection<String> getUsernames() {
try {
String path = USER_URL_PREFIX + "userNames";
......@@ -220,6 +226,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @param numResults the number of result
* @return a bounded list of users
*/
@Override
public Collection<User> getUsers(int startIndex, int numResults) {
String[] usernamesAll = getUsernames().toArray(new String[0]);
Collection<String> usernames = new ArrayList<String>();
......@@ -239,6 +246,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @param name the new name of the user
* @throws UserNotFoundException if there is no user with that username
*/
@Override
public void setName(String username, String name) throws UserNotFoundException {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -269,6 +277,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @param email the new email of the user
* @throws UserNotFoundException if the user could not be found
*/
@Override
public void setEmail(String username, String email) throws UserNotFoundException {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -300,6 +309,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @param creationDate the new email of the user
* @throws UserNotFoundException if the user could not be found
*/
@Override
public void setCreationDate(String username, Date creationDate) throws UserNotFoundException {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -331,6 +341,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @param modificationDate the new modificationDate of the user
* @throws UserNotFoundException if the user could not be found
*/
@Override
public void setModificationDate(String username, Date modificationDate) throws UserNotFoundException {
if (isReadOnly()) {
// Reject the operation since the provider is read-only
......@@ -403,6 +414,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @return a list of username, name and email
* @throws UnsupportedOperationException
*/
@Override
public Set<String> getSearchFields() throws UnsupportedOperationException {
return new LinkedHashSet<String>(Arrays.asList("Username", "Name", "Email"));
}
......@@ -416,6 +428,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @throws UnsupportedOperationException if the provider does not
* support the operation (this is an optional operation).
*/
@Override
public Collection<User> findUsers(Set<String> fields, String query) throws UnsupportedOperationException {
// Creates the XML with the data
Element paramsE = DocumentHelper.createDocument().addElement("search");
......@@ -462,6 +475,7 @@ public class ClearspaceUserProvider implements UserProvider {
* @throws UnsupportedOperationException if the provider does not
* support the operation (this is an optional operation).
*/
@Override
public Collection<User> findUsers(Set<String> fields, String query, int startIndex, int numResults) throws UnsupportedOperationException {
// Creates the XML with the data
Element paramsE = DocumentHelper.createDocument().addElement("searchBounded");
......@@ -506,6 +520,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return true if Clearspace is a read only user provider
*/
@Override
public boolean isReadOnly() {
if (readOnly == null) {
synchronized (this) {
......@@ -523,6 +538,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return false
*/
@Override
public boolean isNameRequired() {
return false;
}
......@@ -532,6 +548,7 @@ public class ClearspaceUserProvider implements UserProvider {
*
* @return true
*/
@Override
public boolean isEmailRequired() {
return true;
}
......
......@@ -66,6 +66,7 @@ public class ClearspaceVCardProvider implements VCardProvider {
* @param username username of user to load VCard of
* @return the user's VCard
*/
@Override
public Element loadVCard(String username) {
// if the fields id are not loaded
if (!fieldsIDLoaded) {
......@@ -117,6 +118,7 @@ public class ClearspaceVCardProvider implements VCardProvider {
* @throws UnsupportedOperationException if the provider does not support the
* operation.
*/
@Override
public Element createVCard(String username, Element vCardElement) throws AlreadyExistsException {
return saveVCard(username, vCardElement);
}
......@@ -132,6 +134,7 @@ public class ClearspaceVCardProvider implements VCardProvider {
* @throws UnsupportedOperationException if the provider does not support the
* operation.
*/
@Override
public Element updateVCard(String username, Element vCardElement) throws NotFoundException {
return saveVCard(username, vCardElement);
}
......@@ -141,6 +144,7 @@ public class ClearspaceVCardProvider implements VCardProvider {
*
* @return true
*/
@Override
public boolean isReadOnly() {
// Return always false, since some changes are always allowed
return false;
......@@ -256,6 +260,7 @@ public class ClearspaceVCardProvider implements VCardProvider {
*
* @param username the username.
*/
@Override
public void deleteVCard(String username) {
ClearspaceUserProvider userProvider = (ClearspaceUserProvider) UserManager.getUserProvider();
if (userProvider.isReadOnly() || isAvatarReadOnly()) {
......
......@@ -63,6 +63,7 @@ public class ClearspaceX509TrustManager implements X509TrustManager {
/**
* @see javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[],String authType)
*/
@Override
public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
// Do nothing. We are the client so we are not testing certificates from clients
}
......@@ -70,6 +71,7 @@ public class ClearspaceX509TrustManager implements X509TrustManager {
/**
* @see javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[],String authType)
*/
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String authType) throws CertificateException {
// Flag that indicates if certificates of the remote server should be validated. Disabling
// certificate validation is not recommended for production environments.
......@@ -172,6 +174,7 @@ public class ClearspaceX509TrustManager implements X509TrustManager {
/**
* @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
*/
@Override
public X509Certificate[] getAcceptedIssuers() {
if (getBooleanProperty("clearspace.certificate.accept-selfsigned", false)) {
// Answer an empty list since we accept any issuer
......
......@@ -90,6 +90,7 @@ public class SSLProtocolSocketFactory implements SecureProtocolSocketFactory {
/**
* @see SecureProtocolSocketFactory#createSocket(java.lang.String,int,java.net.InetAddress,int)
*/
@Override
public Socket createSocket(
String host,
int port,
......@@ -124,6 +125,7 @@ public class SSLProtocolSocketFactory implements SecureProtocolSocketFactory {
* @throws UnknownHostException if the IP address of the host cannot be
* determined
*/
@Override
public Socket createSocket(
final String host,
final int port,
......@@ -152,6 +154,7 @@ public class SSLProtocolSocketFactory implements SecureProtocolSocketFactory {
/**
* @see org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory#createSocket(java.lang.String,int)
*/
@Override
public Socket createSocket(String host, int port)
throws IOException, UnknownHostException {
return getSSLContext(host).getSocketFactory().createSocket(
......@@ -163,6 +166,7 @@ public class SSLProtocolSocketFactory implements SecureProtocolSocketFactory {
/**
* @see org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory#createSocket(java.net.Socket,java.lang.String,int,boolean)
*/
@Override
public Socket createSocket(
Socket socket,
String host,
......
......@@ -54,9 +54,13 @@ public class ClusterManager {
static {
// Listen for clustering property changes (e.g. enabled/disabled)
PropertyEventDispatcher.addListener(new PropertyEventListener() {
@Override
public void propertySet(String property, Map<String, Object> params) { /* ignore */ }
@Override
public void propertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
@Override
public void xmlPropertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
@Override
public void xmlPropertySet(String property, Map<String, Object> params) {
if (ClusterManager.CLUSTER_PROPERTY_NAME.equals(property)) {
if (Boolean.parseBoolean((String) params.get("value"))) {
......
......@@ -47,10 +47,12 @@ public class GetBasicStatistics implements ClusterTask {
private Map<String, Object> values;
@Override
public Object getResult() {
return values;
}
@Override
public void run() {
SessionManager manager = SessionManager.getInstance();
values = new HashMap<String, Object>();
......@@ -71,10 +73,12 @@ public class GetBasicStatistics implements ClusterTask {
values.put(MEMORY_MAX, maxMemory);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
// Ignore
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
// Ignore
}
......
......@@ -104,10 +104,12 @@ public class NodeID implements Externalizable {
return nodeID;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeByteArray(out, nodeID);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
nodeID = ExternalizableUtil.getInstance().readByteArray(in);
}
......
......@@ -95,10 +95,12 @@ public class AdHocCommandHandler extends IQHandler
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton(NAMESPACE).iterator();
}
@Override
public Iterator<Element> getIdentities(String name, String node, JID senderJID) {
Element identity = DocumentHelper.createElement("identity");
identity.addAttribute("category", "automation");
......@@ -106,14 +108,17 @@ public class AdHocCommandHandler extends IQHandler
return Collections.singleton(identity).iterator();
}
@Override
public Iterator<String> getFeatures(String name, String node, JID senderJID) {
return Arrays.asList(NAMESPACE, "jabber:x:data").iterator();
}
@Override
public DataForm getExtendedInfo(String name, String node, JID senderJID) {
return null;
}
@Override
public boolean hasInfo(String name, String node, JID senderJID) {
if (NAMESPACE.equals(node)) {
return true;
......@@ -125,6 +130,7 @@ public class AdHocCommandHandler extends IQHandler
}
}
@Override
public Iterator<DiscoItem> getItems(String name, String node, JID senderJID) {
List<DiscoItem> answer = new ArrayList<DiscoItem>();
if (!NAMESPACE.equals(node)) {
......
......@@ -127,6 +127,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
}
}
@Override
public void addComponent(String subdomain, Component component) throws ComponentException {
synchronized (routables) {
RoutableComponents routable = routables.get(subdomain);
......@@ -205,6 +206,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
*
* @param subdomain the subdomain of the component's address.
*/
@Override
public void removeComponent(String subdomain) {
RoutableComponents components = null;
if (routables == null || (components = routables.get(subdomain)) == null) {
......@@ -275,6 +277,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
componentInfo.remove(componentJID.getDomain());
}
@Override
public void sendPacket(Component component, Packet packet) {
if (packet != null && packet.getFrom() == null) {
throw new IllegalArgumentException("Packet with no FROM address was received from component.");
......@@ -286,13 +289,16 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
}
}
@Override
public IQ query(Component component, IQ packet, long timeout) throws ComponentException {
final LinkedBlockingQueue<IQ> answer = new LinkedBlockingQueue<IQ>(8);
XMPPServer.getInstance().getIQRouter().addIQResultListener(packet.getID(), new IQResultListener() {
@Override
public void receivedAnswer(IQ packet) {
answer.offer(packet);
}
@Override
public void answerTimeout(String packetId) {
Log.warn("An answer to a previously sent IQ stanza was never received. Packet id: " + packetId);
}
......@@ -307,6 +313,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
return reply;
}
@Override
public void query(Component component, IQ packet, IQResultListener listener) throws ComponentException {
XMPPServer.getInstance().getIQRouter().addIQResultListener(packet.getID(), listener);
sendPacket(component, packet);
......@@ -343,14 +350,17 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
listeners.remove(listener);
}
@Override
public String getProperty(String name) {
return JiveGlobals.getProperty(name);
}
@Override
public void setProperty(String name, String value) {
//Ignore
}
@Override
public String getServerName() {
return serverDomain;
}
......@@ -359,6 +369,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
return JiveGlobals.getHomeDirectory();
}
@Override
public boolean isExternalMode() {
return false;
}
......@@ -462,6 +473,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
component.processPacket(iq);
}
@Override
public JID getAddress() {
return serviceAddress;
}
......@@ -474,6 +486,7 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
*
* @param packet the packet to process.
*/
@Override
public void process(Packet packet) throws PacketException {
List<Component> components = getComponents(packet.getFrom());
// Only process packets that were sent by registered components
......@@ -582,10 +595,12 @@ public class InternalComponentManager extends BasicModule implements ComponentMa
return component;
}
@Override
public JID getAddress() {
return jid;
}
@Override
public void process(Packet packet) throws PacketException {
Component component = getNextComponent();
component.processPacket(packet);
......
......@@ -46,20 +46,24 @@ public class NotifyComponentInfo implements ClusterTask {
this.iq = iq;
}
@Override
public Object getResult() {
return null;
}
@Override
public void run() {
final InternalComponentManager manager = InternalComponentManager.getInstance();
manager.addComponentInfo(iq);
manager.notifyComponentInfo(iq);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSerializable(out, (DefaultElement) iq.getElement());
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
Element packetElement = (Element) ExternalizableUtil.getInstance().readSerializable(in);
iq = new IQ(packetElement, true);
......
......@@ -44,18 +44,22 @@ public class NotifyComponentRegistered implements ClusterTask {
this.componentJID = componentJID;
}
@Override
public Object getResult() {
return null;
}
@Override
public void run() {
InternalComponentManager.getInstance().notifyComponentRegistered(componentJID);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSerializable(out, componentJID);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
componentJID = (JID) ExternalizableUtil.getInstance().readSerializable(in);
}
......
......@@ -44,20 +44,24 @@ public class NotifyComponentUnregistered implements ClusterTask {
this.componentJID = componentJID;
}
@Override
public Object getResult() {
return null;
}
@Override
public void run() {
final InternalComponentManager manager = InternalComponentManager.getInstance();
manager.removeComponentInfo(componentJID);
manager.notifyComponentUnregistered(componentJID);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSerializable(out, componentJID);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
componentJID = (JID) ExternalizableUtil.getInstance().readSerializable(in);
}
......
......@@ -42,9 +42,9 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;
import org.jivesoftware.openfire.JMXManager;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.keystore.IdentityStoreConfig;
import org.jivesoftware.openfire.keystore.Purpose;
import org.jivesoftware.openfire.keystore.CertificateStoreConfig;
import org.jivesoftware.openfire.keystore.IdentityStoreConfig;
import org.jivesoftware.openfire.keystore.Purpose;
import org.jivesoftware.openfire.keystore.CertificateStoreConfig;
import org.jivesoftware.openfire.net.SSLConfig;
import org.jivesoftware.util.CertificateEventListener;
import org.jivesoftware.util.CertificateManager;
......@@ -118,12 +118,12 @@ public class AdminConsolePlugin implements Plugin {
// Create connector for http traffic if it's enabled.
if (adminPort > 0) {
final HttpConfiguration httpConfig = new HttpConfiguration();
final HttpConfiguration httpConfig = new HttpConfiguration();
// Do not send Jetty info in HTTP headers
httpConfig.setSendServerVersion( false );
final ServerConnector httpConnector = new ServerConnector(adminServer, null, null, null, -1, serverThreads, new HttpConnectionFactory(httpConfig));
final ServerConnector httpConnector = new ServerConnector(adminServer, null, null, null, -1, serverThreads, new HttpConnectionFactory(httpConfig));
// Listen on a specific network interface if it has been set.
String bindInterface = getBindInterface();
......@@ -135,29 +135,29 @@ public class AdminConsolePlugin implements Plugin {
// Create a connector for https traffic if it's enabled.
sslEnabled = false;
try {
final IdentityStoreConfig identityStoreConfig = (IdentityStoreConfig) SSLConfig.getInstance().getStoreConfig( Purpose.WEBADMIN_IDENTITYSTORE );
if (adminSecurePort > 0 && identityStoreConfig.getStore().aliases().hasMoreElements() )
final IdentityStoreConfig identityStoreConfig = (IdentityStoreConfig) SSLConfig.getInstance().getStoreConfig( Purpose.WEBADMIN_IDENTITYSTORE );
if (adminSecurePort > 0 && identityStoreConfig.getStore().aliases().hasMoreElements() )
{
if ( !identityStoreConfig.containsDomainCertificate( "RSA" )) {
if ( !identityStoreConfig.containsDomainCertificate( "RSA" )) {
Log.warn("Admin console: Using RSA certificates but they are not valid for the hosted domain");
}
final CertificateStoreConfig trustStoreConfig = SSLConfig.getInstance().getStoreConfig( Purpose.WEBADMIN_TRUSTSTORE );
final CertificateStoreConfig trustStoreConfig = SSLConfig.getInstance().getStoreConfig( Purpose.WEBADMIN_TRUSTSTORE );
final SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setTrustStorePath( trustStoreConfig.getCanonicalPath() );
sslContextFactory.setTrustStorePassword( trustStoreConfig.getPassword() );
sslContextFactory.setTrustStoreType( trustStoreConfig.getType() );
sslContextFactory.setKeyStorePath( identityStoreConfig.getCanonicalPath() );
sslContextFactory.setKeyStorePassword( identityStoreConfig.getPassword() );
sslContextFactory.setKeyStoreType( identityStoreConfig.getType() );
sslContextFactory.addExcludeProtocols( "SSLv3" );
sslContextFactory.setNeedClientAuth( false );
sslContextFactory.setWantClientAuth( false );
final ServerConnector httpsConnector;
if ("npn".equals(JiveGlobals.getXMLProperty("spdy.protocol", "")))
sslContextFactory.setTrustStorePath( trustStoreConfig.getCanonicalPath() );
sslContextFactory.setTrustStorePassword( trustStoreConfig.getPassword() );
sslContextFactory.setTrustStoreType( trustStoreConfig.getType() );
sslContextFactory.setKeyStorePath( identityStoreConfig.getCanonicalPath() );
sslContextFactory.setKeyStorePassword( identityStoreConfig.getPassword() );
sslContextFactory.setKeyStoreType( identityStoreConfig.getType() );
sslContextFactory.addExcludeProtocols( "SSLv3" );
sslContextFactory.setNeedClientAuth( false );
sslContextFactory.setWantClientAuth( false );
final ServerConnector httpsConnector;
if ("npn".equals(JiveGlobals.getXMLProperty("spdy.protocol", "")))
{
httpsConnector = new HTTPSPDYServerConnector(adminServer, sslContextFactory);
......@@ -230,6 +230,7 @@ public class AdminConsolePlugin implements Plugin {
adminServer = null;
}
@Override
public void initializePlugin(PluginManager manager, File pluginDir) {
this.pluginDir = pluginDir;
......@@ -238,6 +239,7 @@ public class AdminConsolePlugin implements Plugin {
startup();
}
@Override
public void destroyPlugin() {
shutdown();
}
......@@ -388,6 +390,7 @@ public class AdminConsolePlugin implements Plugin {
*/
private class CertificateListener implements CertificateEventListener {
@Override
public void certificateCreated(KeyStore keyStore, String alias, X509Certificate cert) {
// If new certificate is RSA then (re)start the HTTPS service
if ("RSA".equals(cert.getPublicKey().getAlgorithm())) {
......@@ -395,10 +398,12 @@ public class AdminConsolePlugin implements Plugin {
}
}
@Override
public void certificateDeleted(KeyStore keyStore, String alias) {
restartNeeded = true;
}
@Override
public void certificateSigned(KeyStore keyStore, String alias,
List<X509Certificate> certificates) {
// If new certificate is RSA then (re)start the HTTPS service
......
......@@ -54,6 +54,7 @@ public class BasicModule implements Module {
*
* @return The name of the module
*/
@Override
public String getName() {
return name;
}
......@@ -65,6 +66,7 @@ public class BasicModule implements Module {
*
* @param server the server hosting this module.
*/
@Override
public void initialize(XMPPServer server) {
}
......@@ -76,6 +78,7 @@ public class BasicModule implements Module {
* @throws IllegalStateException If start is called before initialize
* successfully returns
*/
@Override
public void start() throws IllegalStateException {
}
......@@ -84,6 +87,7 @@ public class BasicModule implements Module {
* <p>Inheriting classes that choose to override this method MUST
* call this stop() method before accessing BasicModule resources.</p>
*/
@Override
public void stop() {
}
......@@ -91,6 +95,7 @@ public class BasicModule implements Module {
* <p>Destroys the module.</p>
* <p>Does nothing in the basic module.</p>
*/
@Override
public void destroy() {
}
}
\ No newline at end of file
......@@ -48,10 +48,12 @@ public class GetAdminConsoleInfoTask implements ClusterTask {
private String adminSecret;
@Override
public Object getResult() {
return this;
}
@Override
public void run() {
PluginManager pluginManager = XMPPServer.getInstance().getPluginManager();
AdminConsolePlugin adminConsolePlugin = ((AdminConsolePlugin) pluginManager.getPlugin("admin"));
......@@ -110,6 +112,7 @@ public class GetAdminConsoleInfoTask implements ClusterTask {
return adminSecret;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeInt(out, adminPort);
ExternalizableUtil.getInstance().writeInt(out, adminSecurePort);
......@@ -120,6 +123,7 @@ public class GetAdminConsoleInfoTask implements ClusterTask {
ExternalizableUtil.getInstance().writeSafeUTF(out, adminSecret);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
adminPort = ExternalizableUtil.getInstance().readInt(in);
adminSecurePort = ExternalizableUtil.getInstance().readInt(in);
......
......@@ -47,18 +47,22 @@ public class IsPluginInstalledTask implements ClusterTask {
this.pluginName = pluginName;
}
@Override
public Object getResult() {
return installed;
}
@Override
public void run() {
installed = XMPPServer.getInstance().getPluginManager().getPlugin(pluginName) != null;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSafeUTF(out, pluginName);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
pluginName = ExternalizableUtil.getInstance().readSafeUTF(in);
}
......
......@@ -534,6 +534,7 @@ public class PluginClassLoader extends URLClassLoader {
// Add lib directory to classpath.
File libDir = new File(directory, "lib");
File[] jars = libDir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jar") || name.endsWith(".zip");
}
......
......@@ -946,6 +946,7 @@ public class PluginManager {
*/
private boolean firstRun = true;
@Override
public void run() {
// If the task is already running, return.
synchronized (this) {
......@@ -970,6 +971,7 @@ public class PluginManager {
}
File[] jars = pluginDirectory.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String fileName = pathname.getName().toLowerCase();
return (fileName.endsWith(".jar") || fileName.endsWith(".war"));
......@@ -1014,6 +1016,7 @@ public class PluginManager {
}
File[] dirs = pluginDirectory.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
......@@ -1022,6 +1025,7 @@ public class PluginManager {
// Sort the list of directories so that the "admin" plugin is always
// first in the list.
Arrays.sort(dirs, new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
if (file1.getName().equals("admin")) {
return -1;
......@@ -1148,6 +1152,7 @@ public class PluginManager {
// first.
List<String> children = new ArrayList<String>(Arrays.asList(childDirs));
Collections.sort(children, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.equals("lib")) {
return -1;
......
......@@ -37,6 +37,7 @@ public class CrowdAdminProvider implements AdminProvider {
private static final Logger LOG = LoggerFactory.getLogger(CrowdAdminProvider.class);
private static final String JIVE_AUTHORIZED_GROUPS = "admin.authorizedGroups";
@Override
public List<JID> getAdmins() {
List<JID> results = new ArrayList<JID>();
......@@ -76,10 +77,12 @@ public class CrowdAdminProvider implements AdminProvider {
return results;
}
@Override
public void setAdmins(List<JID> admins) {
return;
}
@Override
public boolean isReadOnly() {
return true;
}
......
......@@ -43,10 +43,12 @@ public class CrowdAuthProvider implements AuthProvider {
}
}
@Override
public boolean isPlainSupported() {
return true;
}
@Override
public boolean isDigestSupported() {
return false;
}
......@@ -65,6 +67,7 @@ public class CrowdAuthProvider implements AuthProvider {
* @throws ConnectionException it there is a problem connecting to user and group sytem
* @throws InternalUnauthenticatedException if there is a problem authentication Openfire itself into the user and group system
*/
@Override
public void authenticate(String username, String password) throws UnauthorizedException, ConnectionException, InternalUnauthenticatedException {
if (manager == null) {
throw new ConnectionException("Unable to connect to Crowd");
......@@ -83,28 +86,32 @@ public class CrowdAuthProvider implements AuthProvider {
} else {
// Unknown domain. Return authentication failed.
throw new UnauthorizedException();
}
}
try {
manager.authenticate(username, password);
} catch (RemoteException re) {
throw new UnauthorizedException();
}
}
}
try {
manager.authenticate(username, password);
} catch (RemoteException re) {
throw new UnauthorizedException();
}
}
@Override
public void authenticate(String username, String token, String digest) throws UnauthorizedException, ConnectionException, InternalUnauthenticatedException {
throw new UnsupportedOperationException("XMPP digest authentication not supported by this version of authentication provider");
}
@Override
public String getPassword(String username) throws UserNotFoundException, UnsupportedOperationException {
throw new UnsupportedOperationException("Retrieve password not supported by this version of authentication provider");
}
@Override
public void setPassword(String username, String password) throws UserNotFoundException, UnsupportedOperationException {
throw new UnsupportedOperationException("Setting password not implemented by this version of authentication provider");
}
@Override
public boolean supportsPasswordRetrieval() {
return false;
}
......
......@@ -78,14 +78,15 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
Cache<JID, Collection<String>> userMembershipCache = CacheFactory.createLocalCache(USER_MEMBERSHIP_CACHE_NAME);
userMembershipCache.setMaxCacheSize(-1);
userMembershipCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
groupCache.setMaxCacheSize(-1);
groupCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
}
public Group getGroup(String name) throws GroupNotFoundException {
userMembershipCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
groupCache.setMaxCacheSize(-1);
groupCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
}
@Override
public Group getGroup(String name) throws GroupNotFoundException {
try {
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
org.jivesoftware.openfire.crowd.jaxb.Group group = groupCache.get(name);
......@@ -113,13 +114,13 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
try {
List<String> users = manager.getGroupMembers(groupName);
Collection<JID> results = new ArrayList<JID>();
for (String username : users) {
results.add(server.createJID(username, null));
}
groupMembershipCache.put(groupName, results);
Collection<JID> results = new ArrayList<JID>();
for (String username : users) {
results.add(server.createJID(username, null));
}
groupMembershipCache.put(groupName, results);
return results;
} catch (RemoteException re) {
......@@ -130,6 +131,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
return Collections.emptyList();
}
@Override
public Collection<String> getGroupNames(JID user) {
Cache<JID, Collection<String>> userMembershipCache = CacheFactory.createCache(USER_MEMBERSHIP_CACHE_NAME);
Collection<String> groups = userMembershipCache.get(user);
......@@ -149,6 +151,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
return Collections.emptyList();
}
@Override
public int getGroupCount() {
lock.readLock().lock();
try {
......@@ -158,6 +161,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> getGroupNames() {
lock.readLock().lock();
try {
......@@ -167,6 +171,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> getGroupNames(int startIndex, int numResults) {
lock.readLock().lock();
try {
......@@ -182,6 +187,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> search(String query) {
lock.readLock().lock();
try {
......@@ -211,6 +217,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
}
}
@Override
public Collection<String> search(String query, int startIndex, int numResults) {
lock.readLock().lock();
try {
......@@ -232,10 +239,12 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
/**
* Modifying group not implemented - read-only for now
*/
@Override
public boolean isReadOnly() {
return true;
}
@Override
public boolean isSearchSupported() {
return true;
}
......@@ -257,6 +266,7 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
static class GroupSynch implements Runnable {
@Override
public void run() {
LOG.info("running synch with crowd...");
CrowdManager manager = null;
......
......@@ -72,6 +72,7 @@ public class CrowdUserProvider implements UserProvider {
new CrowdGroupProvider();
}
@Override
public User loadUser(String username) throws UserNotFoundException {
lock.readLock().lock();
try {
......@@ -96,6 +97,7 @@ public class CrowdUserProvider implements UserProvider {
}
@Override
public int getUserCount() {
lock.readLock().lock();
try {
......@@ -105,6 +107,7 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public Collection<User> getUsers() {
lock.readLock().lock();
try {
......@@ -118,6 +121,7 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public Collection<String> getUsernames() {
lock.readLock().lock();
try {
......@@ -127,6 +131,7 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public Collection<User> getUsers(int startIndex, int numResults) {
lock.readLock().lock();
try {
......@@ -142,10 +147,12 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public Set<String> getSearchFields() throws UnsupportedOperationException {
return SEARCH_FIELDS;
}
@Override
public Collection<User> findUsers(Set<String> fields, String query) throws UnsupportedOperationException {
lock.readLock().lock();
try {
......@@ -194,6 +201,7 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public Collection<User> findUsers(Set<String> fields, String query, int startIndex, int numResults) throws UnsupportedOperationException {
lock.readLock().lock();
try {
......@@ -212,14 +220,17 @@ public class CrowdUserProvider implements UserProvider {
}
}
@Override
public boolean isReadOnly() {
return true;
}
@Override
public boolean isNameRequired() {
return false;
}
@Override
public boolean isEmailRequired() {
return false;
}
......@@ -233,26 +244,32 @@ public class CrowdUserProvider implements UserProvider {
* Not implemented methods
*/
@Override
public User createUser(String username, String password, String name, String email) throws UserAlreadyExistsException {
throw new UnsupportedOperationException("Create new user not implemented by this version of user provider");
}
@Override
public void deleteUser(String username) {
throw new UnsupportedOperationException("Delete a user not implemented by this version of user provider");
}
@Override
public void setName(String username, String name) throws UserNotFoundException {
throw new UnsupportedOperationException("Setting user name not implemented by this version of user provider");
}
@Override
public void setEmail(String username, String email) throws UserNotFoundException {
throw new UnsupportedOperationException("Setting user email not implemented by this version of user provider");
}
@Override
public void setCreationDate(String username, Date creationDate) throws UserNotFoundException {
throw new UnsupportedOperationException("Setting user creation date unsupported by this version of user provider");
}
@Override
public void setModificationDate(String username, Date modificationDate) throws UserNotFoundException {
throw new UnsupportedOperationException("Setting user modification date unsupported by this version of user provider");
}
......@@ -268,6 +285,7 @@ public class CrowdUserProvider implements UserProvider {
this.userProvider = userProvider;
}
@Override
public void run() {
LOG.info("running synch with crowd...");
CrowdManager manager = null;
......
......@@ -167,6 +167,7 @@ public class DiscoItem implements Result {
*
* @see org.jivesoftware.util.resultsetmanager.Result#getUID()
*/
@Override
public String getUID() {
final StringBuilder sb = new StringBuilder(jid.toString());
if (name != null) {
......
......@@ -344,20 +344,24 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
ClusterManager.addListener(this);
}
@Override
public void joinedCluster() {
restoreCacheContent();
}
@Override
public void joinedCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void leftCluster() {
if (!XMPPServer.getInstance().isShuttingDown()) {
restoreCacheContent();
}
}
@Override
public void leftCluster(byte[] nodeID) {
if (ClusterManager.isSeniorClusterMember()) {
NodeID leftNode = NodeID.getInstance(nodeID);
......@@ -384,6 +388,7 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
}
}
@Override
public void markedAsSeniorClusterMember() {
// Do nothing
}
......@@ -417,6 +422,7 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
return new DiscoInfoProvider() {
final ArrayList<Element> identities = new ArrayList<Element>();
@Override
public Iterator<Element> getIdentities(String name, String node, JID senderJID) {
if (node != null && serverNodeProviders.get(node) != null) {
// Redirect the request to the disco info provider of the specified node
......@@ -455,6 +461,7 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
}
}
@Override
public Iterator<String> getFeatures(String name, String node, JID senderJID) {
if (node != null && serverNodeProviders.get(node) != null) {
// Redirect the request to the disco info provider of the specified node
......@@ -470,6 +477,7 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
}
}
@Override
public boolean hasInfo(String name, String node, JID senderJID) {
if (node != null) {
if (serverNodeProviders.get(node) != null) {
......@@ -490,6 +498,7 @@ public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListene
}
}
@Override
public DataForm getExtendedInfo(String name, String node, JID senderJID) {
if (node != null && serverNodeProviders.get(node) != null) {
// Redirect the request to the disco info provider of the specified node
......
......@@ -412,24 +412,29 @@ public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProv
}
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton(NAMESPACE_DISCO_ITEMS).iterator();
}
@Override
public void joinedCluster() {
restoreCacheContent();
}
@Override
public void joinedCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void leftCluster() {
if (!XMPPServer.getInstance().isShuttingDown()) {
restoreCacheContent();
}
}
@Override
public void leftCluster(byte[] nodeID) {
if (ClusterManager.isSeniorClusterMember()) {
NodeID leftNode = NodeID.getInstance(nodeID);
......@@ -456,6 +461,7 @@ public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProv
}
}
@Override
public void markedAsSeniorClusterMember() {
// Do nothing
}
......@@ -485,6 +491,7 @@ public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProv
private DiscoItemsProvider getServerItemsProvider() {
return new DiscoItemsProvider() {
@Override
public Iterator<DiscoItem> getItems(String name, String node, JID senderJID) {
if (node != null) {
// Check if there is a provider for the requested node
......@@ -538,17 +545,20 @@ public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProv
public ClusteredServerItem() {
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSerializable(out, (DefaultElement) element);
ExternalizableUtil.getInstance().writeExternalizableCollection(out, nodes);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
element = (Element) ExternalizableUtil.getInstance().readSerializable(in);
ExternalizableUtil.getInstance().readExternalizableCollection(in, nodes, getClass().getClassLoader());
}
}
@Override
public Iterator<Element> getUserItems(String name, JID senderJID) {
List<Element> answer = new ArrayList<Element>();
try {
......
......@@ -125,18 +125,21 @@ public class EntityCapabilities implements Cacheable, Externalizable {
return this.hashAttribute;
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
ExternalizableUtil.getInstance().readStrings(in, identities);
ExternalizableUtil.getInstance().readStrings(in, features);
verAttribute = ExternalizableUtil.getInstance().readSafeUTF(in);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeStrings(out, identities);
ExternalizableUtil.getInstance().writeStrings(out, features);
ExternalizableUtil.getInstance().writeSafeUTF(out, verAttribute);
}
@Override
public int getCachedSize() throws CannotCalculateSizeException {
int size = CacheSizes.sizeOfCollection(identities);
size += CacheSizes.sizeOfCollection(features);
......
......@@ -277,12 +277,14 @@ public class EntityCapabilitiesManager implements IQResultListener, UserEventLis
return StringUtils.encodeBase64(StringUtils.decodeHex(hashed));
}
@Override
public void answerTimeout(String packetId) {
// If we never received an answer, we can discard the cached
// 'ver' attribute.
verAttributes.remove(packetId);
}
@Override
public void receivedAnswer(IQ packet) {
String packetId = packet.getID();
......@@ -451,6 +453,7 @@ public class EntityCapabilitiesManager implements IQResultListener, UserEventLis
return results;
}
@Override
public void userDeleting(User user, Map<String, Object> params) {
// Delete this user's association in entityCapabilitiesUserMap.
JID jid = XMPPServer.getInstance().createJID(user.getUsername(), null, true);
......@@ -470,10 +473,12 @@ public class EntityCapabilitiesManager implements IQResultListener, UserEventLis
entityCapabilitiesMap.remove(verHashOfUser);
}
@Override
public void userCreated(User user, Map<String, Object> params) {
// Do nothing.
}
@Override
public void userModified(User user, Map<String, Object> params) {
// Do nothing.
}
......
......@@ -28,12 +28,15 @@ import java.util.Map;
* The methods in this class are empty. This class exists as convenience for creating listener objects.
*/
public class UserEventAdapter implements UserEventListener {
@Override
public void userCreated(User user, Map params) {
}
@Override
public void userDeleting(User user, Map params) {
}
@Override
public void userModified(User user, Map params) {
}
}
......@@ -99,6 +99,7 @@ public class DefaultFileTransferManager extends BasicModule implements FileTrans
return null;
}
@Override
public boolean acceptIncomingFileTransferRequest(FileTransfer transfer)
throws FileTransferRejectedException
{
......@@ -113,6 +114,7 @@ public class DefaultFileTransferManager extends BasicModule implements FileTrans
return false;
}
@Override
public void registerProxyTransfer(String transferDigest, ProxyTransfer proxyTransfer)
throws UnauthorizedException
{
......@@ -210,6 +212,7 @@ public class DefaultFileTransferManager extends BasicModule implements FileTrans
* Interceptor to grab and validate file transfer meta information.
*/
private class MetaFileTransferInterceptor implements PacketInterceptor {
@Override
public void interceptPacket(Packet packet, Session session, boolean incoming,
boolean processed)
throws PacketRejectedException
......
......@@ -111,6 +111,7 @@ public class FileTransfer implements Cacheable, Serializable {
this.progress = progress;
}
@Override
public int getCachedSize() {
// Approximate the size of the object in bytes by calculating the size
// of each field.
......
......@@ -57,59 +57,73 @@ public class DefaultProxyTransfer implements ProxyTransfer {
public DefaultProxyTransfer() { }
@Override
public String getInitiator() {
return initiator;
}
@Override
public void setInitiator(String initiator) {
this.initiator = initiator;
}
@Override
public InputStream getInputStream() {
return inputStream;
}
@Override
public void setInputStream(InputStream initiatorInputStream) {
this.inputStream = initiatorInputStream;
}
@Override
public OutputStream getOutputStream() {
return outputStream;
}
@Override
public void setOutputStream(OutputStream outputStream) {
this.outputStream = outputStream;
}
@Override
public String getTarget() {
return target;
}
@Override
public void setTarget(String target) {
this.target = target;
}
@Override
public String getTransferDigest() {
return transferDigest;
}
@Override
public void setTransferDigest(String transferDigest) {
this.transferDigest = transferDigest;
}
@Override
public String getSessionID() {
return streamID;
}
@Override
public void setSessionID(String streamID) {
this.streamID = streamID;
}
@Override
public boolean isActivatable() {
return ((inputStream != null) && (outputStream != null));
}
@Override
public synchronized void setTransferFuture(Future<?> future) {
if(this.future != null) {
throw new IllegalStateException("Transfer is already in progress, or has completed.");
......@@ -117,10 +131,12 @@ public class DefaultProxyTransfer implements ProxyTransfer {
this.future = future;
}
@Override
public long getAmountTransferred() {
return amountWritten;
}
@Override
public void doTransfer() throws IOException {
if (!isActivatable()) {
throw new IOException("Transfer missing party");
......@@ -146,6 +162,7 @@ public class DefaultProxyTransfer implements ProxyTransfer {
}
}
@Override
public int getCachedSize() {
// Approximate the size of the object in bytes by calculating the size
// of each field.
......
......@@ -301,10 +301,12 @@ public class FileTransferProxy extends BasicModule
return proxyServiceName + "." + XMPPServer.getInstance().getServerInfo().getXMPPDomain();
}
@Override
public JID getAddress() {
return new JID(null, getServiceDomain(), null);
}
@Override
public Iterator<DiscoServerItem> getItems() {
if(!isEnabled()) {
return Collections.emptyIterator();
......@@ -317,6 +319,7 @@ public class FileTransferProxy extends BasicModule
return Collections.singleton(item).iterator();
}
@Override
public Iterator<Element> getIdentities(String name, String node, JID senderJID) {
// Answer the identity of the proxy
Element identity = DocumentHelper.createElement("identity");
......@@ -327,24 +330,29 @@ public class FileTransferProxy extends BasicModule
return Collections.singleton(identity).iterator();
}
@Override
public Iterator<String> getFeatures(String name, String node, JID senderJID) {
return Arrays.asList(FileTransferManager.NAMESPACE_BYTESTREAMS,
"http://jabber.org/protocol/disco#info").iterator();
}
@Override
public DataForm getExtendedInfo(String name, String node, JID senderJID) {
return null;
}
@Override
public boolean hasInfo(String name, String node, JID senderJID) {
return true;
}
@Override
public Iterator<DiscoItem> getItems(String name, String node, JID senderJID) {
// A proxy server has no items
return new ArrayList<DiscoItem>().iterator();
}
@Override
public void process(Packet packet) throws UnauthorizedException, PacketException {
// Check if the packet is a disco request or a packet with namespace iq:register
if (packet instanceof IQ) {
......@@ -361,6 +369,7 @@ public class FileTransferProxy extends BasicModule
}
private class FileTransferPropertyListener implements PropertyEventListener {
@Override
public void propertySet(String property, Map params) {
if(JIVEPROPERTY_PROXY_ENABLED.equalsIgnoreCase(property)) {
Object value = params.get("value");
......@@ -370,15 +379,18 @@ public class FileTransferProxy extends BasicModule
}
}
@Override
public void propertyDeleted(String property, Map params) {
if(JIVEPROPERTY_PROXY_ENABLED.equalsIgnoreCase(property)) {
setEnabled(DEFAULT_IS_PROXY_ENABLED);
}
}
@Override
public void xmlPropertySet(String property, Map params) {
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
}
}
......
......@@ -100,6 +100,7 @@ public class ProxyConnectionManager {
}
reset();
socketProcess = executor.submit(new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port, -1, bindInterface);
......@@ -123,6 +124,7 @@ public class ProxyConnectionManager {
}
}
executor.submit(new Runnable() {
@Override
public void run() {
try {
processConnection(socket);
......@@ -301,6 +303,7 @@ public class ProxyConnectionManager {
transfer.setTarget(target.toString());
transfer.setSessionID(sid);
transfer.setTransferFuture(executor.submit(new Runnable() {
@Override
public void run() {
try {
transferManager.fireFileTransferStart( transfer.getSessionID(), true );
......@@ -375,10 +378,12 @@ public class ProxyConnectionManager {
super("filetransferproxy.transfered", Statistic.Type.rate);
}
@Override
public double sample() {
return (ProxyOutputStream.amountTransferred.getAndSet(0) / 1000d);
}
@Override
public boolean isPartialSample() {
return true;
}
......
......@@ -118,6 +118,7 @@ public class XFormFieldImpl implements FormField {
return field;
}
@Override
public void addValue(String value) {
if (value == null) {
value = "";
......@@ -127,48 +128,58 @@ public class XFormFieldImpl implements FormField {
}
}
@Override
public void clearValues() {
synchronized (values) {
values.clear();
}
}
@Override
public void addOption(String label, String value) {
synchronized (options) {
options.add(new Option(label, value));
}
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public void setRequired(boolean required) {
this.required = required;
}
@Override
public void setLabel(String label) {
this.label = label;
}
@Override
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean isRequired() {
return required;
}
@Override
public String getVariable() {
return variable;
}
@Override
public Iterator<String> getValues() {
synchronized (values) {
return Collections.unmodifiableList(new ArrayList<String>(values)).iterator();
}
}
@Override
public String getType() {
return type;
}
......@@ -185,10 +196,12 @@ public class XFormFieldImpl implements FormField {
}
}
@Override
public String getLabel() {
return label;
}
@Override
public String getDescription() {
return description;
}
......
......@@ -54,6 +54,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void addMember(String groupName, JID user, boolean administrator)
{
throw new UnsupportedOperationException("Cannot add members to read-only groups");
......@@ -62,6 +63,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void updateMember(String groupName, JID user, boolean administrator)
{
throw new UnsupportedOperationException("Cannot update members for read-only groups");
......@@ -70,6 +72,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void deleteMember(String groupName, JID user)
{
throw new UnsupportedOperationException("Cannot remove members from read-only groups");
......@@ -78,6 +81,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* Always true for a read-only provider
*/
@Override
public boolean isReadOnly() {
return true;
}
......@@ -85,6 +89,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public Group createGroup(String name) {
throw new UnsupportedOperationException("Cannot create groups via read-only provider");
}
......@@ -92,6 +97,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void deleteGroup(String name) {
throw new UnsupportedOperationException("Cannot remove groups via read-only provider");
}
......@@ -99,6 +105,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void setName(String oldName, String newName) throws GroupAlreadyExistsException {
throw new UnsupportedOperationException("Cannot modify read-only groups");
}
......@@ -106,6 +113,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
/**
* @throws UnsupportedOperationException
*/
@Override
public void setDescription(String name, String description) throws GroupNotFoundException {
throw new UnsupportedOperationException("Cannot modify read-only groups");
}
......@@ -116,6 +124,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
* Returns true if the provider supports group search capability. This implementation
* always returns false.
*/
@Override
public boolean isSearchSupported() {
return false;
}
......@@ -124,6 +133,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
* Returns a collection of group search results. This implementation
* returns an empty collection.
*/
@Override
public Collection<String> search(String query) {
return Collections.emptyList();
}
......@@ -132,6 +142,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
* Returns a collection of group search results. This implementation
* returns an empty collection.
*/
@Override
public Collection<String> search(String query, int startIndex, int numResults) {
return Collections.emptyList();
}
......@@ -143,6 +154,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
*
* @return the name of the groups that are shared groups.
*/
@Override
public Collection<String> getSharedGroupNames() {
Collection<String> groupNames = new HashSet<String>();
Connection con = null;
......@@ -165,6 +177,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
return groupNames;
}
@Override
public Collection<String> getSharedGroupNames(JID user) {
Set<String> answer = new HashSet<String>();
Collection<String> userGroups = getGroupNames(user);
......@@ -176,6 +189,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
return answer;
}
@Override
public Collection<String> getVisibleGroupNames(String userGroup) {
Set<String> groupNames = new HashSet<String>();
Connection con = null;
......@@ -199,6 +213,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
return groupNames;
}
@Override
public Collection<String> search(String key, String value) {
Set<String> groupNames = new HashSet<String>();
Connection con = null;
......@@ -223,6 +238,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
return groupNames;
}
@Override
public Collection<String> getPublicSharedGroupNames() {
Set<String> groupNames = new HashSet<String>();
Connection con = null;
......@@ -245,6 +261,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
return groupNames;
}
@Override
public boolean isSharingSupported() {
return true;
}
......@@ -256,6 +273,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
* @param group The target group
* @return The properties for the given group
*/
@Override
public PersistableMap<String,String> loadProperties(Group group) {
// custom map implementation persists group property changes
// whenever one of the standard mutator methods are called
......
......@@ -35,6 +35,7 @@ public class ConcurrentGroupMap<K, V> extends ConcurrentHashMap<K, V> implement
* @param key The target, presumably a JID
* @return True if the target is in the key list, or in any groups in the key list
*/
@Override
public boolean includesKey(Object key) {
boolean found = false;
if (containsKey(key)) {
......@@ -59,6 +60,7 @@ public class ConcurrentGroupMap<K, V> extends ConcurrentHashMap<K, V> implement
* @param value The target, presumably a JID
* @return True if the target is in the value set, or in any groups in the value set
*/
@Override
public boolean includesValue(Object value) {
boolean found = false;
if (containsValue(value)) {
......
......@@ -65,6 +65,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* @param persist True if the changes should be persisted to the database
* @return The original value or null if the property did not exist
*/
@Override
public V put(K key, V value, boolean persist) {
V originalValue = super.put(key, value);
// we only support persistence for <String, String>
......@@ -168,6 +169,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Iterator}
*/
@Override
public boolean hasNext() {
return delegate.hasNext();
}
......@@ -175,6 +177,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Iterator}
*/
@Override
public K next() {
current = delegate.next();
return current;
......@@ -184,6 +187,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* Removes the property corresponding to the current key from
* the underlying map. Also applies update to the database.
*/
@Override
public void remove() {
delegate.remove();
if (current instanceof String) {
......@@ -211,6 +215,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Returns a custom iterator for the entries in the backing map
*/
@Override
public Iterator<Entry<K, V>> iterator() {
return new EntryIterator<Entry<K,V>>(delegate.iterator());
}
......@@ -222,6 +227,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* @param o A {@link Map.Entry} within this set
* @return True if the set contained the given key
*/
@Override
public boolean remove(Object o) {
boolean propertyExists = delegate.remove(o);
if (propertyExists) {
......@@ -234,6 +240,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* Removes all the elements in the set, and applies the
* corresponding update to the database.
*/
@Override
public void clear() {
delegate.clear();
deleteAllProperties();
......@@ -245,6 +252,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean removeAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
......@@ -252,6 +260,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean retainAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
......@@ -261,6 +270,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean add(Entry<K, V> o) {
return delegate.add(o);
}
......@@ -268,6 +278,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* @throws UnsupportedOperationException
*/
@Override
public boolean addAll(Collection<? extends Entry<K, V>> c) {
return delegate.addAll(c);
}
......@@ -277,6 +288,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public int size() {
return delegate.size();
}
......@@ -284,6 +296,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
......@@ -291,6 +304,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public boolean contains(Object o) {
return delegate.contains(o);
}
......@@ -298,6 +312,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public Object[] toArray() {
return delegate.toArray();
}
......@@ -305,6 +320,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public <T> T[] toArray(T[] a) {
return delegate.toArray(a);
}
......@@ -312,6 +328,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Set}
*/
@Override
public boolean containsAll(Collection<?> c) {
return delegate.containsAll(c);
}
......@@ -350,6 +367,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Iterator}
*/
@Override
public boolean hasNext() {
return delegate.hasNext();
}
......@@ -357,6 +375,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Iterator}
*/
@Override
public Entry<K,V> next() {
current = new EntryWrapper<E>(delegate.next());
return current;
......@@ -366,6 +385,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* Removes the property corresponding to the current key from
* the underlying map. Also applies update to the database.
*/
@Override
public void remove() {
delegate.remove();
K key = current.getKey();
......@@ -393,6 +413,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Map.Entry}
*/
@Override
public K getKey() {
return delegate.getKey();
}
......@@ -400,6 +421,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
/**
* Delegated to corresponding method in the backing {@link Map.Entry}
*/
@Override
public V getValue() {
return delegate.getValue();
}
......@@ -413,6 +435,7 @@ public class DefaultGroupPropertyMap<K,V> extends PersistableMap<K,V> {
* @param value The new property value
* @return The old value of the corresponding property
*/
@Override
public V setValue(V value) {
V oldValue = delegate.setValue(value);
K key = delegate.getKey();
......
......@@ -80,6 +80,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
private XMPPServer server = XMPPServer.getInstance();
@Override
public Group createGroup(String name) {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -101,6 +102,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return new Group(name, "", members, administrators);
}
@Override
public Group getGroup(String name) throws GroupNotFoundException {
String description = null;
......@@ -129,6 +131,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return new Group(name, description, members, administrators);
}
@Override
public void setDescription(String name, String description) throws GroupNotFoundException {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -148,6 +151,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public void setName(String oldName, String newName) throws GroupAlreadyExistsException
{
Connection con = null;
......@@ -182,6 +186,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public void deleteGroup(String groupName) {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -215,6 +220,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public int getGroupCount() {
int count = 0;
Connection con = null;
......@@ -237,6 +243,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return count;
}
@Override
public Collection<String> getGroupNames() {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......@@ -258,6 +265,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public Collection<String> getGroupNames(int startIndex, int numResults) {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......@@ -283,6 +291,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public Collection<String> getGroupNames(JID user) {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......@@ -306,6 +315,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public void addMember(String groupName, JID user, boolean administrator) {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -325,6 +335,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public void updateMember(String groupName, JID user, boolean administrator) {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -344,6 +355,7 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public void deleteMember(String groupName, JID user) {
Connection con = null;
PreparedStatement pstmt = null;
......@@ -362,14 +374,17 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
}
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public Collection<String> search(String query) {
return search(query, 0, Integer.MAX_VALUE);
}
@Override
public Collection<String> search(String query, int startIndex, int numResults) {
if (query == null || "".equals(query)) {
return Collections.emptyList();
......@@ -420,10 +435,12 @@ public class DefaultGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public boolean isSearchSupported() {
return true;
}
@Override
public boolean isSharingSupported() {
return true;
}
......
......@@ -314,7 +314,8 @@ public class Group implements Cacheable, Externalizable {
}
}
public int getCachedSize()
@Override
public int getCachedSize()
throws CannotCalculateSizeException {
// Approximate the size of the object in bytes by calculating the size
// of each field.
......@@ -372,15 +373,18 @@ public class Group implements Cacheable, Externalizable {
Iterator<JID> iter = users.iterator();
JID current = null;
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public JID next() {
current = iter.next();
return current;
}
@Override
public void remove() {
if (current == null) {
throw new IllegalStateException();
......@@ -482,6 +486,7 @@ public class Group implements Cacheable, Externalizable {
}
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeSafeUTF(out, name);
ExternalizableUtil.getInstance().writeBoolean(out, description != null);
......@@ -492,6 +497,7 @@ public class Group implements Cacheable, Externalizable {
ExternalizableUtil.getInstance().writeSerializableCollection(out, administrators);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
groupManager = GroupManager.getInstance();
provider = groupManager.getProvider();
......
......@@ -64,6 +64,7 @@ public class GroupCollection extends AbstractCollection<Group> {
private int currentIndex = -1;
private Group nextElement = null;
@Override
public boolean hasNext() {
// If we are at the end of the list, there can't be any more elements
// to iterate through.
......@@ -81,6 +82,7 @@ public class GroupCollection extends AbstractCollection<Group> {
return true;
}
@Override
public Group next() throws java.util.NoSuchElementException {
Group element;
if (nextElement != null) {
......@@ -96,6 +98,7 @@ public class GroupCollection extends AbstractCollection<Group> {
return element;
}
@Override
public void remove() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
......
......@@ -84,6 +84,7 @@ public class GroupManager {
initProvider();
GroupEventDispatcher.addListener(new GroupEventListener() {
@Override
public void groupCreated(Group group, Map params) {
// Adds default properties if they don't exists, since the creator of
......@@ -110,6 +111,7 @@ public class GroupManager {
evictCachedPaginatedGroupNames();
}
@Override
public void groupDeleting(Group group, Map params) {
// Since the group could be deleted by the provider, remove it possible again
groupCache.remove(group.getName());
......@@ -127,6 +129,7 @@ public class GroupManager {
evictCachedPaginatedGroupNames();
}
@Override
public void groupModified(Group group, Map params) {
String type = (String)params.get("type");
// If shared group settings changed, expire the cache.
......@@ -164,6 +167,7 @@ public class GroupManager {
groupCache.put(group.getName(), group);
}
@Override
public void memberAdded(Group group, Map params) {
// Set object again in cache. This is done so that other cluster nodes
// get refreshed with latest version of the object
......@@ -176,6 +180,7 @@ public class GroupManager {
}
}
@Override
public void memberRemoved(Group group, Map params) {
// Set object again in cache. This is done so that other cluster nodes
// get refreshed with latest version of the object
......@@ -188,6 +193,7 @@ public class GroupManager {
}
}
@Override
public void adminAdded(Group group, Map params) {
// Set object again in cache. This is done so that other cluster nodes
// get refreshed with latest version of the object
......@@ -200,6 +206,7 @@ public class GroupManager {
}
}
@Override
public void adminRemoved(Group group, Map params) {
// Set object again in cache. This is done so that other cluster nodes
// get refreshed with latest version of the object
......@@ -215,14 +222,17 @@ public class GroupManager {
});
UserEventDispatcher.addListener(new UserEventListener() {
@Override
public void userCreated(User user, Map<String, Object> params) {
// ignore
}
@Override
public void userDeleting(User user, Map<String, Object> params) {
deleteUser(user);
}
@Override
public void userModified(User user, Map<String, Object> params) {
// ignore
}
......@@ -230,20 +240,24 @@ public class GroupManager {
// Detect when a new auth provider class is set
PropertyEventListener propListener = new PropertyEventListener() {
@Override
public void propertySet(String property, Map params) {
if ("provider.group.className".equals(property)) {
initProvider();
}
}
@Override
public void propertyDeleted(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertySet(String property, Map params) {
//Ignore
}
@Override
public void xmlPropertyDeleted(String property, Map params) {
//Ignore
}
......
......@@ -128,6 +128,7 @@ public class JDBCGroupProvider extends AbstractGroupProvider {
return DriverManager.getConnection(connectionString);
}
@Override
public Group getGroup(String name) throws GroupNotFoundException {
String description = null;
......@@ -199,6 +200,7 @@ public class JDBCGroupProvider extends AbstractGroupProvider {
return members;
}
@Override
public int getGroupCount() {
int count = 0;
Connection con = null;
......@@ -221,6 +223,7 @@ public class JDBCGroupProvider extends AbstractGroupProvider {
return count;
}
@Override
public Collection<String> getGroupNames() {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......@@ -243,6 +246,7 @@ public class JDBCGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public Collection<String> getGroupNames(int start, int num) {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......@@ -268,6 +272,7 @@ public class JDBCGroupProvider extends AbstractGroupProvider {
return groupNames;
}
@Override
public Collection<String> getGroupNames(JID user) {
List<String> groupNames = new ArrayList<String>();
Connection con = null;
......
......@@ -94,12 +94,14 @@ public class DirectedPresence implements Externalizable {
return receivers.isEmpty();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
ExternalizableUtil.getInstance().writeByteArray(out, nodeID);
ExternalizableUtil.getInstance().writeSerializable(out, handler);
ExternalizableUtil.getInstance().writeStrings(out, receivers);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
nodeID = ExternalizableUtil.getInstance().readByteArray(in);
handler = (JID) ExternalizableUtil.getInstance().readSerializable(in);
......
......@@ -380,10 +380,12 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
return response;
}
@Override
public boolean isAnonymousAllowed() {
return anonymousAllowed;
}
@Override
public void setAllowAnonymous(boolean isAnonymous) throws UnauthorizedException {
anonymousAllowed = isAnonymous;
JiveGlobals.setProperty("xmpp.auth.anonymous", Boolean.toString(anonymousAllowed));
......
......@@ -59,6 +59,7 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler {
super(moduleName);
}
@Override
public void process(Packet packet) throws PacketException {
IQ iq = (IQ) packet;
try {
......
......@@ -115,6 +115,7 @@ public class IQLastActivityHandler extends IQHandler implements ServerFeaturesPr
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:last").iterator();
}
......
......@@ -140,10 +140,12 @@ public class IQOfflineMessagesHandler extends IQHandler implements ServerFeature
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton(NAMESPACE).iterator();
}
@Override
public Iterator<Element> getIdentities(String name, String node, JID senderJID) {
Element identity = DocumentHelper.createElement("identity");
identity.addAttribute("category", "automation");
......@@ -151,10 +153,12 @@ public class IQOfflineMessagesHandler extends IQHandler implements ServerFeature
return Collections.singleton(identity).iterator();
}
@Override
public Iterator<String> getFeatures(String name, String node, JID senderJID) {
return Collections.singleton(NAMESPACE).iterator();
}
@Override
public DataForm getExtendedInfo(String name, String node, JID senderJID) {
// Mark that offline messages shouldn't be sent when the user becomes available
stopOfflineFlooding(senderJID);
......@@ -173,10 +177,12 @@ public class IQOfflineMessagesHandler extends IQHandler implements ServerFeature
return dataForm;
}
@Override
public boolean hasInfo(String name, String node, JID senderJID) {
return NAMESPACE.equals(node) && userManager.isRegisteredUser(senderJID.getNode());
}
@Override
public Iterator<DiscoItem> getItems(String name, String node, JID senderJID) {
// Mark that offline messages shouldn't be sent when the user becomes available
stopOfflineFlooding(senderJID);
......
......@@ -73,6 +73,7 @@ public class IQPingHandler extends IQHandler implements ServerFeaturesProvider {
/*
* @see org.jivesoftware.openfire.disco.ServerFeaturesProvider#getFeatures()
*/
@Override
public Iterator<String> getFeatures() {
return Collections.singleton(NAMESPACE).iterator();
}
......
......@@ -415,19 +415,23 @@ public class IQPrivacyHandler extends IQHandler
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:privacy").iterator();
}
@Override
public void userCreated(User user, Map params) {
//Do nothing
}
@Override
public void userDeleting(User user, Map params) {
// Delete privacy lists owned by the user being deleted
manager.deletePrivacyLists(user.getUsername());
}
@Override
public void userModified(User user, Map params) {
//Do nothing
}
......
......@@ -115,6 +115,7 @@ public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvide
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:private").iterator();
}
......
......@@ -469,6 +469,7 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:register").iterator();
}
......
......@@ -95,6 +95,7 @@ public class IQTimeHandler extends IQHandler implements ServerFeaturesProvider {
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:time").iterator();
}
......
......@@ -90,6 +90,7 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide
return info;
}
@Override
public Iterator<String> getFeatures() {
return Collections.singleton("jabber:iq:version").iterator();
}
......
......@@ -105,6 +105,7 @@ public class PresenceSubscribeHandler extends BasicModule implements ChannelHand
super("Presence subscription handler");
}
@Override
public void process(Presence presence) throws PacketException {
if (presence == null) {
throw new IllegalArgumentException("Argument 'presence' cannot be null.");
......
......@@ -133,6 +133,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
localDirectedPresences = new ConcurrentHashMap<String, Collection<DirectedPresence>>();
}
@Override
public void process(Packet packet) throws UnauthorizedException, PacketException {
process((Presence) packet, sessionManager.getSession(packet.getFrom()));
}
......@@ -549,6 +550,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
ClusterManager.addListener(this);
}
@Override
public void joinedCluster() {
// Populate directedPresencesCache with local content since when not in a cluster
// we could still send directed presences to entities that when connected to a cluster
......@@ -575,10 +577,12 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
}
}
@Override
public void joinedCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void leftCluster() {
if (!XMPPServer.getInstance().isShuttingDown()) {
// Populate directedPresencesCache with local content
......@@ -607,10 +611,12 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
}
}
@Override
public void leftCluster(byte[] nodeID) {
// Do nothing
}
@Override
public void markedAsSeniorClusterMember() {
// Do nothing
}
......
......@@ -57,9 +57,9 @@ import org.eclipse.jetty.webapp.WebAppContext;
import org.jivesoftware.openfire.Connection;
import org.jivesoftware.openfire.JMXManager;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.keystore.IdentityStoreConfig;
import org.jivesoftware.openfire.keystore.Purpose;
import org.jivesoftware.openfire.keystore.CertificateStoreConfig;
import org.jivesoftware.openfire.keystore.IdentityStoreConfig;
import org.jivesoftware.openfire.keystore.Purpose;
import org.jivesoftware.openfire.keystore.CertificateStoreConfig;
import org.jivesoftware.openfire.net.SSLConfig;
import org.jivesoftware.openfire.session.ConnectionSettings;
import org.jivesoftware.util.CertificateEventListener;
......@@ -246,26 +246,26 @@ public final class HttpBindManager {
private void createSSLConnector(int securePort, int bindThreads) {
httpsConnector = null;
try {
final IdentityStoreConfig identityStoreConfig = (IdentityStoreConfig) SSLConfig.getInstance().getStoreConfig( Purpose.BOSHBASED_IDENTITYSTORE );
final KeyStore keyStore = identityStoreConfig.getStore();
if (securePort > 0 && identityStoreConfig.getStore().aliases().hasMoreElements() ) {
if ( !identityStoreConfig.containsDomainCertificate( "RSA" ) ) {
final IdentityStoreConfig identityStoreConfig = (IdentityStoreConfig) SSLConfig.getInstance().getStoreConfig( Purpose.BOSHBASED_IDENTITYSTORE );
final KeyStore keyStore = identityStoreConfig.getStore();
if (securePort > 0 && identityStoreConfig.getStore().aliases().hasMoreElements() ) {
if ( !identityStoreConfig.containsDomainCertificate( "RSA" ) ) {
Log.warn("HTTP binding: Using RSA certificates but they are not valid for " +
"the hosted domain");
}
final CertificateStoreConfig trustStoreConfig = SSLConfig.getInstance().getStoreConfig( Purpose.BOSHBASED_C2S_TRUSTSTORE );
final CertificateStoreConfig trustStoreConfig = SSLConfig.getInstance().getStoreConfig( Purpose.BOSHBASED_C2S_TRUSTSTORE );
final SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setTrustStorePath( trustStoreConfig.getCanonicalPath() );
sslContextFactory.setTrustStorePassword( trustStoreConfig.getPassword() );
sslContextFactory.setTrustStoreType( trustStoreConfig.getType() );
sslContextFactory.setKeyStorePath( identityStoreConfig.getCanonicalPath() );
sslContextFactory.setKeyStorePassword( identityStoreConfig.getPassword() );
sslContextFactory.setKeyStoreType( identityStoreConfig.getType() );
sslContextFactory.addExcludeProtocols( "SSLv3" );
sslContextFactory.setTrustStorePath( trustStoreConfig.getCanonicalPath() );
sslContextFactory.setTrustStorePassword( trustStoreConfig.getPassword() );
sslContextFactory.setTrustStoreType( trustStoreConfig.getType() );
sslContextFactory.setKeyStorePath( identityStoreConfig.getCanonicalPath() );
sslContextFactory.setKeyStorePassword( identityStoreConfig.getPassword() );
sslContextFactory.setKeyStoreType( identityStoreConfig.getType() );
sslContextFactory.addExcludeProtocols( "SSLv3" );
// Set policy for checking client certificates
String certPol = JiveGlobals.getProperty(HTTP_BIND_AUTH_PER_CLIENTCERT_POLICY, "disabled");
......@@ -694,6 +694,7 @@ public final class HttpBindManager {
/** Listens for changes to Jive properties that affect the HTTP server manager. */
private class HttpServerPropertyListener implements PropertyEventListener {
@Override
public void propertySet(String property, Map<String, Object> params) {
if (property.equalsIgnoreCase(HTTP_BIND_ENABLED)) {
doEnableHttpBind(Boolean.valueOf(params.get("value").toString()));
......@@ -725,6 +726,7 @@ public final class HttpBindManager {
}
}
@Override
public void propertyDeleted(String property, Map<String, Object> params) {
if (property.equalsIgnoreCase(HTTP_BIND_ENABLED)) {
doEnableHttpBind(HTTP_BIND_ENABLED_DEFAULT);
......@@ -740,15 +742,18 @@ public final class HttpBindManager {
}
}
@Override
public void xmlPropertySet(String property, Map<String, Object> params) {
}
@Override
public void xmlPropertyDeleted(String property, Map<String, Object> params) {
}
}
private class CertificateListener implements CertificateEventListener {
@Override
public void certificateCreated(KeyStore keyStore, String alias, X509Certificate cert) {
// If new certificate is RSA then (re)start the HTTPS service
if ("RSA".equals(cert.getPublicKey().getAlgorithm())) {
......@@ -756,10 +761,12 @@ public final class HttpBindManager {
}
}
@Override
public void certificateDeleted(KeyStore keyStore, String alias) {
restartServer();
}
@Override
public void certificateSigned(KeyStore keyStore, String alias,
List<X509Certificate> certificates) {
// If new certificate is RSA then (re)start the HTTPS service
......
......@@ -124,6 +124,7 @@ public class HttpSession extends LocalClientSession {
private static final Comparator<HttpConnection> connectionComparator
= new Comparator<HttpConnection>() {
@Override
public int compare(HttpConnection o1, HttpConnection o2) {
return (int) (o1.getRequestId() - o2.getRequestId());
}
......@@ -665,6 +666,7 @@ public class HttpSession extends LocalClientSession {
*
* @return the X509Certificate associated with this session.
*/
@Override
public X509Certificate[] getPeerCertificates() {
return sslCertificates;
}
......@@ -960,6 +962,7 @@ public class HttpSession extends LocalClientSession {
deliver(new Deliverable(text));
}
@Override
public void deliver(Packet stanza) {
deliver(new Deliverable(Arrays.asList(stanza)));
}
......@@ -1071,6 +1074,7 @@ public class HttpSession extends LocalClientSession {
}
// use a separate thread to schedule backup delivery
TaskEngine.getInstance().submit(new Runnable() {
@Override
public void run() {
for (Packet packet : packets) {
try {
......@@ -1124,26 +1128,32 @@ public class HttpSession extends LocalClientSession {
((HttpSession) session).closeSession();
}
@Override
public byte[] getAddress() throws UnknownHostException {
return address.getAddress();
}
@Override
public String getHostAddress() throws UnknownHostException {
return address.getHostAddress();
}
@Override
public String getHostName() throws UnknownHostException {
return address.getHostName();
}
@Override
public void systemShutdown() {
close();
}
@Override
public void deliver(Packet packet) throws UnauthorizedException {
((HttpSession) session).deliver(packet);
}
@Override
public void deliverRawText(String text) {
((HttpSession) session).deliver(text);
}
......@@ -1265,6 +1275,7 @@ public class HttpSession extends LocalClientSession {
this.session = session;
}
@Override
public void run() {
session.sendPendingPackets();
}
......
......@@ -56,12 +56,15 @@ public class HttpSessionManager {
private TimerTask inactivityTask;
private ThreadPoolExecutor sendPacketPool;
private SessionListener sessionListener = new SessionListener() {
@Override
public void connectionOpened(HttpSession session, HttpConnection connection) {
}
@Override
public void connectionClosed(HttpSession session, HttpConnection connection) {
}
@Override
public void sessionClosed(HttpSession session) {
sessionMap.remove(session.getStreamID().getID());
}
......@@ -98,6 +101,7 @@ public class HttpSessionManager {
new LinkedBlockingQueue<Runnable>(), // unbounded task queue
new ThreadFactory() { // custom thread factory for BOSH workers
final AtomicInteger counter = new AtomicInteger(1);
@Override
public Thread newThread(Runnable runnable) {
Thread thread = new Thread(Thread.currentThread().getThreadGroup(), runnable,
"httpbind-worker-" + counter.getAndIncrement());
......
......@@ -127,6 +127,7 @@ public class PacketCopier implements PacketInterceptor, ComponentEventListener {
subscribers.remove(componentJID.toString());
}
@Override
public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed)
throws PacketRejectedException {
// Queue intercepted packet only if there are subscribers interested
......@@ -151,14 +152,17 @@ public class PacketCopier implements PacketInterceptor, ComponentEventListener {
}
}
@Override
public void componentInfoReceived(IQ iq) {
//Ignore
}
@Override
public void componentRegistered(JID componentJID) {
//Ignore
}
@Override
public void componentUnregistered(JID componentJID) {
//Remove component from the list of subscribers (if subscribed)
removeSubscriber(componentJID);
......
......@@ -49,34 +49,44 @@ public class DroppableFrame extends JFrame implements DropTargetListener, DragSo
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
}
@Override
public void dragDropEnd(DragSourceDropEvent DragSourceDropEvent) {
}
@Override
public void dragEnter(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dragExit(DragSourceEvent DragSourceEvent) {
}
@Override
public void dragOver(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dropActionChanged(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dragEnter(DropTargetDragEvent dropTargetDragEvent) {
dropTargetDragEvent.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
@Override
public void dragExit(DropTargetEvent dropTargetEvent) {
}
@Override
public void dragOver(DropTargetDragEvent dropTargetDragEvent) {
}
@Override
public void dropActionChanged(DropTargetDragEvent dropTargetDragEvent) {
}
@Override
public void drop(DropTargetDropEvent dropTargetDropEvent) {
try {
Transferable transferable = dropTargetDropEvent.getTransferable();
......@@ -110,6 +120,7 @@ public class DroppableFrame extends JFrame implements DropTargetListener, DragSo
}
}
@Override
public void dragGestureRecognized(DragGestureEvent dragGestureEvent) {
}
......
......@@ -49,34 +49,44 @@ public abstract class DroppableTextPane extends JTextPane implements DropTargetL
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
}
@Override
public void dragDropEnd(DragSourceDropEvent DragSourceDropEvent) {
}
@Override
public void dragEnter(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dragExit(DragSourceEvent DragSourceEvent) {
}
@Override
public void dragOver(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dropActionChanged(DragSourceDragEvent DragSourceDragEvent) {
}
@Override
public void dragEnter(DropTargetDragEvent dropTargetDragEvent) {
dropTargetDragEvent.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
@Override
public void dragExit(DropTargetEvent dropTargetEvent) {
}
@Override
public void dragOver(DropTargetDragEvent dropTargetDragEvent) {
}
@Override
public void dropActionChanged(DropTargetDragEvent dropTargetDragEvent) {
}
@Override
public void drop(DropTargetDropEvent dropTargetDropEvent) {
try {
Transferable transferable = dropTargetDropEvent.getTransferable();
......@@ -110,6 +120,7 @@ public abstract class DroppableTextPane extends JTextPane implements DropTargetL
}
}
@Override
public void dragGestureRecognized(DragGestureEvent dragGestureEvent) {
}
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment