package com.revolsys.webservice; import java.util.Map; import com.revolsys.collection.map.LinkedHashMapEx; import com.revolsys.collection.map.MapEx; import com.revolsys.properties.BaseObjectWithProperties; import com.revolsys.spring.resource.UrlResource; import com.revolsys.util.PasswordUtil; import com.revolsys.util.Property; public abstract class AbstractWebService<V> extends BaseObjectWithProperties implements WebService<V> { private String name; private UrlResource serviceUrl; private String username; private String password; public AbstractWebService() { } public AbstractWebService(final String serviceUrl) { this(new UrlResource(serviceUrl)); } public AbstractWebService(final UrlResource serviceUrl) { this.username = serviceUrl.getUsername(); this.password = serviceUrl.getPassword(); this.serviceUrl = serviceUrl; } public AbstractWebService(final UrlResource serviceUrl, final String username, final String password) { this.username = username; this.password = PasswordUtil.decrypt(password); this.serviceUrl = serviceUrl.newUrlResourceAuthorization(username, password); } public MapEx getConnectionProperties() { return new LinkedHashMapEx().add("name", this.name); } @Override public String getName() { return this.name; } @Override public String getPassword() { return this.password; } @Override public UrlResource getServiceUrl() { return this.serviceUrl; } @Override public String getUsername() { return this.username; } @Override public WebService<?> getWebService() { return this; } public abstract String getWebServiceTypeName(); protected UrlResource newServiceUrlResource(final Map<String, Object> parameters) { return this.serviceUrl.newUrlResource(parameters); } @Override public void setName(final String name) { this.name = name; } public void setPassword(final String password) { this.password = PasswordUtil.decrypt(password); final UrlResource serviceUrl = this.serviceUrl; if (serviceUrl != null) { String username = this.username; if (username == null) { username = serviceUrl.getUsername(); } this.serviceUrl = serviceUrl.newUrlResourceAuthorization(username, this.password); } } public void setServiceUrl(final UrlResource serviceUrl) { final String username = serviceUrl.getUsername(); if (Property.hasValue(username)) { this.username = username; } final String password = serviceUrl.getPassword(); if (Property.hasValue(password)) { this.password = password; } this.serviceUrl = serviceUrl.newUrlResourceAuthorization(this.username, this.password); } public void setServiceUrl(final UrlResource serviceUrl, final String username, final String password) { this.username = username; this.password = PasswordUtil.decrypt(password); this.serviceUrl = serviceUrl.newUrlResourceAuthorization(username, password); } public void setUsername(final String username) { this.username = username; final UrlResource serviceUrl = this.serviceUrl; if (serviceUrl != null) { String password = this.password; if (password == null) { password = serviceUrl.getPassword(); } this.serviceUrl = serviceUrl.newUrlResourceAuthorization(username, password); } } @Override public MapEx toMap() { final MapEx map = newTypeMap(getWebServiceTypeName()); final String name = getName(); addToMap(map, "name", name); map.put("serviceUrl", this.serviceUrl); addToMap(map, "username", this.username); addToMap(map, "password", PasswordUtil.encrypt(this.password)); return map; } @Override public String toString() { return this.name + " " + this.serviceUrl; } }