/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.connectors.jira;
import org.jboss.seam.wiki.connectors.cache.ConnectorCache;
import org.jboss.seam.wiki.connectors.cache.ConnectorCacheKey;
import org.jboss.seam.wiki.connectors.cache.ConnectorCacheAsyncUpdater;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.async.Asynchronous;
import java.util.List;
import java.io.Serializable;
/**
* @author Christian Bauer
*/
@Name("jiraIssueListCache")
@AutoCreate
public class JiraIssueListCache
extends ConnectorCache<JiraIssue, JiraIssueListCache.JiraIssueListCacheKey>
implements JiraIssueListConnector {
@In("#{preferences.get('JiraConnector')}")
JiraConnectorPreferences prefs;
public List<JiraIssue> getIssues(String url, String username, String password, String filterId) {
JiraIssueListCacheKey newKey = new JiraIssueListCacheKey(url, username, password, filterId);
return lookup( new ConnectorCacheKey<JiraIssueListCacheKey>(newKey));
}
protected long getUpdateTimeoutSeconds() {
return prefs.getIssueListCacheUpdateTimeoutSeconds();
}
protected long getIdleTimeoutSeconds() {
return prefs.getIssueListCacheIdleTimeoutSeconds();
}
protected Class<? extends ConnectorCacheAsyncUpdater<JiraIssue, JiraIssueListCacheKey>> getAsyncUpdaterClass() {
return JiraIssueListCacheAsyncUpdater.class;
}
@Name("jiraIssueListCacheAsyncUpdater")
@AutoCreate
public static class JiraIssueListCacheAsyncUpdater
extends ConnectorCacheAsyncUpdater<JiraIssue, JiraIssueListCacheKey> {
@In
JiraIssueListConnector jiraIssueListConnector;
@Asynchronous
public void updateCacheAsynchronously(ConnectorCache<JiraIssue, JiraIssueListCacheKey> cache,
ConnectorCacheKey<JiraIssueListCacheKey> key) {
List<JiraIssue> result =
jiraIssueListConnector.getIssues(
key.getKeyValue().getUrl(),
key.getKeyValue().getUsername(),
key.getKeyValue().getPassword(),
key.getKeyValue().getFilterId()
);
if (result.size() >0)
super.writeIntoCache(cache, key, result);
}
}
public static class JiraIssueListCacheKey implements Serializable {
private String url;
private String username;
private String password;
private String filterId;
public JiraIssueListCacheKey(String url, String username, String password, String filterId) {
this.url = url;
this.username = username;
this.password = password;
this.filterId = filterId;
}
public String getUrl() {
return url;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getFilterId() {
return filterId;
}
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JiraIssueListCacheKey that = (JiraIssueListCacheKey ) o;
if (!filterId.equals(that.filterId)) return false;
if (!password.equals(that.password)) return false;
if (!url.equals(that.url)) return false;
if (!username.equals(that.username)) return false;
return true;
}
public int hashCode() {
int result;
result = url.hashCode();
result = 31 * result + username.hashCode();
result = 31 * result + password.hashCode();
result = 31 * result + filterId.hashCode();
return result;
}
}
}