diff --git a/src/main/java/com/silverpop/api/client/command/GetContactScoresCommand.java b/src/main/java/com/silverpop/api/client/command/GetContactScoresCommand.java index 6d48a46..8a122f0 100644 --- a/src/main/java/com/silverpop/api/client/command/GetContactScoresCommand.java +++ b/src/main/java/com/silverpop/api/client/command/GetContactScoresCommand.java @@ -11,18 +11,18 @@ public class GetContactScoresCommand implements ApiCommand { @XStreamAlias("CONTACT_ID") - private Integer contactId; + private Long contactId; @Override public Class getResultType() { return GetContactScoresResult.class; } - public void setContactId(Integer contactId) { + public void setContactId(Long contactId) { this.contactId = contactId; } - public Integer getContactId() { + public Long getContactId() { return contactId; } } diff --git a/src/main/java/com/silverpop/api/client/command/LogoutCommand.java b/src/main/java/com/silverpop/api/client/command/LogoutCommand.java new file mode 100644 index 0000000..e6dcdbc --- /dev/null +++ b/src/main/java/com/silverpop/api/client/command/LogoutCommand.java @@ -0,0 +1,19 @@ +package com.silverpop.api.client.command; + +import com.silverpop.api.client.ApiCommand; +import com.silverpop.api.client.XmlApiProperties; +import com.silverpop.api.client.result.LogoutResult; + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +@XmlApiProperties("Logout") +public class LogoutCommand implements ApiCommand { + + public LogoutCommand() {} + + @Override + public Class getResultType() { + return LogoutResult.class; + } + +} \ No newline at end of file diff --git a/src/main/java/com/silverpop/api/client/converters/ApiDateConverter.java b/src/main/java/com/silverpop/api/client/converters/ApiDateConverter.java index c930e4b..4d0e203 100644 --- a/src/main/java/com/silverpop/api/client/converters/ApiDateConverter.java +++ b/src/main/java/com/silverpop/api/client/converters/ApiDateConverter.java @@ -5,9 +5,9 @@ public class ApiDateConverter extends DateConverter { public static final String DEFAULT_FORMAT = "MM/dd/yy hh:mm a"; public static final String[] ACCEPTABLE_FORMATS = { - - }; - + "yyyy-MM-dd HH:mm:ss.SSS" + }; + public ApiDateConverter() { super(DEFAULT_FORMAT, ACCEPTABLE_FORMATS); } diff --git a/src/main/java/com/silverpop/api/client/result/GetContactScoresResult.java b/src/main/java/com/silverpop/api/client/result/GetContactScoresResult.java index ef69b0d..7812944 100644 --- a/src/main/java/com/silverpop/api/client/result/GetContactScoresResult.java +++ b/src/main/java/com/silverpop/api/client/result/GetContactScoresResult.java @@ -1,19 +1,33 @@ package com.silverpop.api.client.result; +import java.util.ArrayList; import java.util.List; +import com.silverpop.api.client.result.elements.GetContactScoresModelScoreComponent; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.silverpop.api.client.ApiResult; import com.silverpop.api.client.result.elements.GetContactScoresModel; public class GetContactScoresResult implements ApiResult { - - @XStreamAlias("MODELS") - private List models; - - public List getModels() { - return models; - } - + + @XStreamAlias("MODELS") + private List models = new ArrayList(); + + public List getModels() { + return models; + } + + public void setModels(List models) { + this.models = models; + } + + @Override + public String toString() { + StringBuffer stringBuffer = new StringBuffer(); + for (GetContactScoresModel model : models) { + stringBuffer.append(model + "\n"); + } + return stringBuffer.toString(); + } } diff --git a/src/main/java/com/silverpop/api/client/result/LogoutResult.java b/src/main/java/com/silverpop/api/client/result/LogoutResult.java new file mode 100644 index 0000000..8eef737 --- /dev/null +++ b/src/main/java/com/silverpop/api/client/result/LogoutResult.java @@ -0,0 +1,11 @@ +package com.silverpop.api.client.result; + +import com.silverpop.api.client.ApiResult; + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +@XStreamAlias("RESULT") +public class LogoutResult implements ApiResult { + + +} \ No newline at end of file diff --git a/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModel.java b/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModel.java index 1bf1607..66edc30 100644 --- a/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModel.java +++ b/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModel.java @@ -6,33 +6,46 @@ @XStreamAlias("MODEL") public class GetContactScoresModel { - - @XStreamAlias("ID") - private Integer id; - - @XStreamAlias("NAME") - private String name; - - @XStreamAlias("SCORE_COMPONENETS") - private List scoreComponents; - - public void setId(Integer id){ - this.id = id; - } - - public Integer getId(){ - return id; - } - - public void setName(String name){ - this.name = name; - } - - public String getName(){ - return name; - } - - public List getScoreComponents() { - return scoreComponents; - } + + @XStreamAlias("ID") + private Integer id; + + @XStreamAlias("NAME") + private String name; + + @XStreamAlias("SCORE_COMPONENTS") + private List scoreComponents; + + public void setId(Integer id) { + this.id = id; + } + + public Integer getId() { + return id; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public List getScoreComponents() { + return scoreComponents; + } + + public void setScoreComponents(List scoreComponents) { + this.scoreComponents = scoreComponents; + } + + @Override + public String toString() { + StringBuffer stringBuffer = new StringBuffer(this.getName() + ": "); + for (GetContactScoresModelScoreComponent score : scoreComponents) { + stringBuffer.append(score + ", "); + } + return stringBuffer.substring(0, stringBuffer.length() - 2); + } } diff --git a/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModelScoreComponent.java b/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModelScoreComponent.java index e343f01..94f17e6 100644 --- a/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModelScoreComponent.java +++ b/src/main/java/com/silverpop/api/client/result/elements/GetContactScoresModelScoreComponent.java @@ -4,19 +4,31 @@ @XStreamAlias("SCORE_COMPONENT") public class GetContactScoresModelScoreComponent { - - @XStreamAlias("KEY") - private String key; - - @XStreamAlias("VALUE") - private Integer value; - - public String getKey(){ - return key; - } - - public Integer getValue(){ - return value; - } + @XStreamAlias("KEY") + private String key; + + @XStreamAlias("VALUE") + private String value; + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + + public void setKey(String key) { + this.key = key; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public String toString() { + return key + "=" + value; + } } diff --git a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModel.java b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModel.java index 215fdbc..7264be9 100644 --- a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModel.java +++ b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModel.java @@ -10,68 +10,68 @@ @XStreamAlias("MODEL") public class GetScoringModelsModel { - - @XStreamAlias("ID") - private Integer id; - - @XStreamAlias("NAME") - private String name; - - @XStreamAlias("DESCRIPTION") - private String description; - - @XStreamAlias("CREATED") - @XStreamConverter(ApiDateConverter.class) - private Date created; - - @XStreamAlias("LAST_MODIFIED") - @XStreamConverter(ApiDateConverter.class) - private Date lastModified; - - @XStreamAlias("SCORE_COMPONENTS") - private List scoreComponents; - - public void setId(Integer id){ - this.id = id; - } - - public Integer getId(){ - return id; - } - - public void setName(String name){ - this.name = name; - } - - public String getName(){ - return name; - } - - public void setDescription(String description){ - this.description = description; - } - - public String getDescription(){ - return description; - } - - public void setCreated(Date created){ - this.created = created; - } - - public Date getCreated(){ - return created; - } - - public void setLastModified(Date lastModified){ - this.lastModified = lastModified; - } - - public Date getLastModified(){ - return lastModified; - } - - public List getScoreComponents() { - return scoreComponents; - } + + @XStreamAlias("ID") + private Integer id; + + @XStreamAlias("NAME") + private String name; + + @XStreamAlias("DESCRIPTION") + private String description; + + @XStreamAlias("CREATED") + @XStreamConverter(ApiDateConverter.class) + private Date created; + + @XStreamAlias("LAST_MODIFIED") + @XStreamConverter(ApiDateConverter.class) + private Date lastModified; + + @XStreamAlias("SCORE_COMPONENT_TYPES") + private List scoreComponents; + + public void setId(Integer id){ + this.id = id; + } + + public Integer getId(){ + return id; + } + + public void setName(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public void setDescription(String description){ + this.description = description; + } + + public String getDescription(){ + return description; + } + + public void setCreated(Date created){ + this.created = created; + } + + public Date getCreated(){ + return created; + } + + public void setLastModified(Date lastModified){ + this.lastModified = lastModified; + } + + public Date getLastModified(){ + return lastModified; + } + + public List getScoreComponents() { + return scoreComponents; + } } diff --git a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponent.java b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponent.java index 9808474..9aedcac 100644 --- a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponent.java +++ b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponent.java @@ -1,21 +1,21 @@ package com.silverpop.api.client.result.elements; import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamImplicit; -@XStreamAlias("SCORE_COMPONENT") +@XStreamAlias("SCORE_COMPONENT_TYPE") public class GetScoringModelsModelScoreComponent { @XStreamAlias("KEY") private String key; - + @XStreamAlias("DESCRIPTION") private String description; - @XStreamAlias("VALUES") - private GetScoringModelsModelScoreComponentValues values; + @XStreamAlias("VALUES") + private GetScoringModelsModelScoreComponentValues values; - public String getKey() { return key; } diff --git a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponentValues.java b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponentValues.java index e57238a..564b26f 100644 --- a/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponentValues.java +++ b/src/main/java/com/silverpop/api/client/result/elements/GetScoringModelsModelScoreComponentValues.java @@ -2,8 +2,10 @@ import java.util.List; +import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; +@XStreamAlias("VALUES") public class GetScoringModelsModelScoreComponentValues { @XStreamImplicit(itemFieldName="VALUE") diff --git a/src/main/java/com/silverpop/api/client/xmlapi/UnauthenticatedXmlApiSession.java b/src/main/java/com/silverpop/api/client/xmlapi/UnauthenticatedXmlApiSession.java index c8286da..df781a4 100644 --- a/src/main/java/com/silverpop/api/client/xmlapi/UnauthenticatedXmlApiSession.java +++ b/src/main/java/com/silverpop/api/client/xmlapi/UnauthenticatedXmlApiSession.java @@ -4,7 +4,7 @@ public class UnauthenticatedXmlApiSession extends XmlApiSession { public UnauthenticatedXmlApiSession(String url) { - super(url, null, null, false); + super(url, null, null); } @Override @@ -18,6 +18,11 @@ public void close() { @Override public void open() { - + } + + @Override + public boolean isReAuthenticate() { + return false; + } } diff --git a/src/main/java/com/silverpop/api/client/xmlapi/XmlApiClient.java b/src/main/java/com/silverpop/api/client/xmlapi/XmlApiClient.java index ebded3c..ee13733 100644 --- a/src/main/java/com/silverpop/api/client/xmlapi/XmlApiClient.java +++ b/src/main/java/com/silverpop/api/client/xmlapi/XmlApiClient.java @@ -7,7 +7,7 @@ public class XmlApiClient extends ApiClient{ public XmlApiClient(String url, String username, String password) { - this(new XmlApiSession(url, new LoginCommand(username, password), new XmlApiClient(url))); + this(new XmlApiSession(url, new LoginCommand(username, password))); } public XmlApiClient(String url) { diff --git a/src/main/java/com/silverpop/api/client/xmlapi/XmlApiSession.java b/src/main/java/com/silverpop/api/client/xmlapi/XmlApiSession.java index 5a9e360..a2eb800 100644 --- a/src/main/java/com/silverpop/api/client/xmlapi/XmlApiSession.java +++ b/src/main/java/com/silverpop/api/client/xmlapi/XmlApiSession.java @@ -4,40 +4,43 @@ import com.silverpop.api.client.ApiResultException; import com.silverpop.api.client.ApiSession; import com.silverpop.api.client.command.LoginCommand; +import com.silverpop.api.client.command.LogoutCommand; import com.silverpop.api.client.result.LoginResult; +import com.silverpop.api.client.xmlapi.util.XmlApiClientFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; public class XmlApiSession implements ApiSession { + private Log log = LogFactory.getLog(this.getClass()); + private boolean open; private LoginCommand loginCommand; - private XmlApiClient loginClient; + private XmlApiClientFactory clientFactory; private String url; - private boolean reauthenticate; - + private String organizationId; private String sessionId; private String sessionEncoding; - public XmlApiSession(String url, LoginCommand loginCommand, XmlApiClient loginClient) { - this(url, loginCommand, loginClient, true); + public XmlApiSession(String url, LoginCommand loginCommand) { + this(url, loginCommand, new XmlApiClientFactory()); } - - public XmlApiSession(String url, LoginCommand loginCommand, XmlApiClient loginClient, boolean reauthenticate) { + + public XmlApiSession(String url, LoginCommand loginCommand, XmlApiClientFactory clientFactory) { this.url = url; this.loginCommand = loginCommand; - this.loginClient = loginClient; - this.reauthenticate = reauthenticate; - clearState(); + this.clientFactory = clientFactory; + clearState(); } - private void clearState() { sessionId = ""; organizationId = ""; sessionEncoding = ""; open = false; } - + @Override public String getUrl() { return url; @@ -45,7 +48,7 @@ public String getUrl() { @Override public boolean isReAuthenticate() { - return reauthenticate; + return true; } @Override @@ -55,8 +58,11 @@ public boolean isOpen() { @Override public void close() { - clearState(); - } + if (isOpen()) { + executeLogout(); + } + clearState(); + } @Override public void open() { @@ -66,34 +72,43 @@ public void open() { open = true; } } - + private LoginResult executeLogin() { try { - return (LoginResult) loginClient.executeCommand(loginCommand); + XmlApiClient client = clientFactory.createClient(url); + return (LoginResult) client.executeCommand(loginCommand); } catch (ApiResultException e) { throw new ApiException("Unable to login: " + e.getErrorResult().getMessage()); } } + private void executeLogout() { + try { + XmlApiClient client = clientFactory.createClient(this); + client.executeCommand(new LogoutCommand()); + } catch (ApiResultException e) { + log.error("Client logout failed for session: " + sessionId, e); + } + } + private void setSessionValues(LoginResult result) { sessionId = result.getSessionId(); organizationId = result.getOrganizationId(); sessionEncoding = result.getSessionEncoding(); } - - + public String getSessionId() { return sessionId; } - + public String getOrganizationId() { return organizationId; } - + public String getSessionEncoding() { return sessionEncoding; } - + public String getUserName() { return loginCommand == null ? null : loginCommand.getUsername(); } diff --git a/src/main/java/com/silverpop/api/client/xmlapi/util/XmlApiClientFactory.java b/src/main/java/com/silverpop/api/client/xmlapi/util/XmlApiClientFactory.java new file mode 100644 index 0000000..d91a188 --- /dev/null +++ b/src/main/java/com/silverpop/api/client/xmlapi/util/XmlApiClientFactory.java @@ -0,0 +1,15 @@ +package com.silverpop.api.client.xmlapi.util; + +import com.silverpop.api.client.xmlapi.XmlApiClient; +import com.silverpop.api.client.xmlapi.XmlApiSession; + +public class XmlApiClientFactory { + + public XmlApiClient createClient(String url) { + return new XmlApiClient(url); + } + + public XmlApiClient createClient(XmlApiSession session) { + return new XmlApiClient(session); + } +}