diff --git a/src/main/java/com/openshift/client/IOpenShiftResource.java b/src/main/java/com/openshift/client/IOpenShiftResource.java index 05586afc..8575644a 100644 --- a/src/main/java/com/openshift/client/IOpenShiftResource.java +++ b/src/main/java/com/openshift/client/IOpenShiftResource.java @@ -1,9 +1,19 @@ package com.openshift.client; - +import java.util.Map; public interface IOpenShiftResource { + /** + * Returns + * true if there is log about the creation of this resource. + * Creation logs are only available at creation time. So resources that were retrieved + * while they already existed wont have a creation log. + * + * @return true if there's cretion log for this resource + */ + public boolean hasCreationLog(); + /** * Returns the log that was created when the resource was created. * @@ -12,17 +22,32 @@ public interface IOpenShiftResource { public String getCreationLog(); /** - * Returns - * true if there is log about the creation of this resource. - * Creation logs are only available at creation time. So resources that were retrieved - * while they already existed wont have a creation log. + * Returns all the (creation log) messages. These messages only exist at + * creation time. Existing cartridges, that were added in a prior session + * dont have any messages any more. * - * @return true if there's cretion log for this resource + * @return all messages by field + * + * @see #getCreationLog() */ - public boolean hasCreationLog(); - + public Map getMessages(); + /** - * Refresh the resource and its list of children resources that were previously loaded + * Returns the message of the given field type. These messages only exist + * at creation time. See {@link #getCreationLog()} for further details. + * + * @param field the field type + * @return + * + * @see Message#FIELD_APPINFO + * @see Message#FIELD_RESULT + */ + public Message getMessage(String field); + + /** + * Refresh the resource and its list of children resources that were + * previously loaded + * * @throws OpenShiftException */ public void refresh() throws OpenShiftException; diff --git a/src/main/java/com/openshift/internal/client/response/Message.java b/src/main/java/com/openshift/client/Message.java similarity index 92% rename from src/main/java/com/openshift/internal/client/response/Message.java rename to src/main/java/com/openshift/client/Message.java index 68a14a87..acf04b6f 100644 --- a/src/main/java/com/openshift/internal/client/response/Message.java +++ b/src/main/java/com/openshift/client/Message.java @@ -8,7 +8,7 @@ * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ -package com.openshift.internal.client.response; +package com.openshift.client; import java.text.MessageFormat; @@ -20,6 +20,9 @@ */ public class Message { + public static final String FIELD_RESULT = "result"; + public static final String FIELD_APPINFO = "appinfo"; + public enum Severity { INFO, ERROR, UNKNOWN; @@ -48,7 +51,7 @@ public Message(String text, String field, String severity, int exitCode) { this.exitCode = exitCode; } - public String getParameter() { + public String getField() { return field; } diff --git a/src/main/java/com/openshift/client/OpenShiftEndpointException.java b/src/main/java/com/openshift/client/OpenShiftEndpointException.java index 62f4a97b..7e1ab6b6 100644 --- a/src/main/java/com/openshift/client/OpenShiftEndpointException.java +++ b/src/main/java/com/openshift/client/OpenShiftEndpointException.java @@ -10,12 +10,11 @@ ******************************************************************************/ package com.openshift.client; -import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.openshift.internal.client.response.Message; import com.openshift.internal.client.response.ResourceDTOFactory; import com.openshift.internal.client.response.RestResponse; @@ -52,7 +51,7 @@ public RestResponse getRestResponse() throws OpenShiftException { /** * @return the server response messages after converting the response into a {@link RestResponse}. If the unmarshalling fails, the returned list is null. */ - public List getRestResponseMessages() { + public Map getRestResponseMessages() { if (response == null) { return null; } diff --git a/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java b/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java index e43f9223..017a9375 100755 --- a/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java +++ b/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java @@ -10,14 +10,13 @@ ******************************************************************************/ package com.openshift.internal.client; -import java.util.List; import java.util.Map; import com.openshift.client.IOpenShiftResource; +import com.openshift.client.Message; import com.openshift.client.OpenShiftException; import com.openshift.client.OpenShiftRequestException; import com.openshift.internal.client.response.Link; -import com.openshift.internal.client.response.Message; import com.openshift.internal.client.response.RestResponse; /** @@ -34,7 +33,7 @@ public abstract class AbstractOpenShiftResource implements IOpenShiftResource { /** The service. */ private final IRestService service; - private List creationLog; + private Map messagesByField; /** * Instantiates a new abstract open shift resource. @@ -54,10 +53,10 @@ public AbstractOpenShiftResource(final IRestService service) { * @param links * the links */ - public AbstractOpenShiftResource(final IRestService service, final Map links, final List creationLog) { + public AbstractOpenShiftResource(final IRestService service, final Map links, final Map messages) { this.service = service; this.links = links; - this.creationLog = creationLog; + this.messagesByField = messages; } /** @@ -132,20 +131,30 @@ protected DTO execute(ServiceParameter... parameters) throws OpenShiftExce } } + public boolean hasCreationLog() { + return messagesByField != null + && messagesByField.size() > 0; + } + public String getCreationLog() { if (!hasCreationLog()) { return null; } StringBuilder builder = new StringBuilder(); - for (Message message : creationLog) { + for (Message message : messagesByField.values()) { builder.append(message.getText()); } return builder.toString(); } - public boolean hasCreationLog() { - return creationLog != null - && creationLog.size() > 0; + public Map getMessages() { + return messagesByField; } + public Message getMessage(String field) { + if (messagesByField == null) { + return null; + } + return messagesByField.get(field); + } } diff --git a/src/main/java/com/openshift/internal/client/ApplicationResource.java b/src/main/java/com/openshift/internal/client/ApplicationResource.java index 9d1f8cda..783effdc 100755 --- a/src/main/java/com/openshift/internal/client/ApplicationResource.java +++ b/src/main/java/com/openshift/internal/client/ApplicationResource.java @@ -42,6 +42,7 @@ import com.openshift.client.IGearGroup; import com.openshift.client.IGearProfile; import com.openshift.client.IOpenShiftConnection; +import com.openshift.client.Message; import com.openshift.client.OpenShiftException; import com.openshift.client.OpenShiftSSHOperationException; import com.openshift.client.cartridge.IEmbeddableCartridge; @@ -53,7 +54,6 @@ import com.openshift.internal.client.response.CartridgeResourceDTO; import com.openshift.internal.client.response.GearGroupResourceDTO; import com.openshift.internal.client.response.Link; -import com.openshift.internal.client.response.Message; import com.openshift.internal.client.ssh.ApplicationPortForwarding; import com.openshift.internal.client.utils.Assert; import com.openshift.internal.client.utils.CollectionUtils; @@ -146,7 +146,7 @@ public class ApplicationResource extends AbstractOpenShiftResource implements IA * @param domain */ protected ApplicationResource(ApplicationResourceDTO dto, IStandaloneCartridge cartridge, DomainResource domain) { - this(dto.getName(), dto.getUuid(), dto.getCreationTime(), dto.getCreationLog(), dto.getApplicationUrl(), dto + this(dto.getName(), dto.getUuid(), dto.getCreationTime(), dto.getMessages(), dto.getApplicationUrl(), dto .getGitUrl(), dto.getGearProfile(), dto.getGearGroups(), dto.getApplicationScale(), cartridge, dto .getAliases(), dto.getEmbeddedCartridgeInfos(), dto.getLinks(), domain); } @@ -177,7 +177,7 @@ protected ApplicationResource(ApplicationResourceDTO dto, IStandaloneCartridge c * @throws DatatypeConfigurationException */ protected ApplicationResource(final String name, final String uuid, final String creationTime, - final List creationLog, final String applicationUrl, final String gitUrl, + final Map creationLog, final String applicationUrl, final String gitUrl, final IGearProfile gearProfile, final List gearGroups, final ApplicationScale scale, final IStandaloneCartridge cartridge, final List aliases, final Map embeddedCartridgesInfos, final Map links, final DomainResource domain) { diff --git a/src/main/java/com/openshift/internal/client/DomainResource.java b/src/main/java/com/openshift/internal/client/DomainResource.java index 8f61d2b1..f3df2fff 100755 --- a/src/main/java/com/openshift/internal/client/DomainResource.java +++ b/src/main/java/com/openshift/internal/client/DomainResource.java @@ -20,13 +20,13 @@ import com.openshift.client.IDomain; import com.openshift.client.IGearProfile; import com.openshift.client.IUser; +import com.openshift.client.Message; import com.openshift.client.OpenShiftException; import com.openshift.client.cartridge.IStandaloneCartridge; import com.openshift.internal.client.response.ApplicationResourceDTO; import com.openshift.internal.client.response.DomainResourceDTO; import com.openshift.internal.client.response.Link; import com.openshift.internal.client.response.LinkParameter; -import com.openshift.internal.client.response.Message; import com.openshift.internal.client.utils.Assert; import com.openshift.internal.client.utils.CollectionUtils; import com.openshift.internal.client.utils.IOpenShiftJsonConstants; @@ -50,16 +50,16 @@ public class DomainResource extends AbstractOpenShiftResource implements IDomain private List applications = null; protected DomainResource(final String namespace, final String suffix, final Map links, - final List creationLog, + final Map messages, final APIResource api) { - super(api.getService(), links, creationLog); + super(api.getService(), links, messages); this.id = namespace; this.suffix = suffix; this.connectionResource = api; } protected DomainResource(DomainResourceDTO domainDTO, final APIResource api) { - this(domainDTO.getId(), domainDTO.getSuffix(), domainDTO.getLinks(), domainDTO.getCreationLog(), api); + this(domainDTO.getId(), domainDTO.getSuffix(), domainDTO.getLinks(), domainDTO.getMessages(), api); } public String getId() { diff --git a/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java b/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java index a87fe5e1..2f5bd1f2 100755 --- a/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java +++ b/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java @@ -10,18 +10,18 @@ ******************************************************************************/ package com.openshift.internal.client; -import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.openshift.client.IApplication; +import com.openshift.client.Message; import com.openshift.client.OpenShiftException; +import com.openshift.client.cartridge.EmbeddableCartridge; import com.openshift.client.cartridge.IEmbeddableCartridge; import com.openshift.client.cartridge.IEmbeddedCartridge; import com.openshift.internal.client.response.CartridgeResourceDTO; import com.openshift.internal.client.response.Link; -import com.openshift.internal.client.response.Message; /** * A cartridge that may be embedded into an application. This class is no enum @@ -43,19 +43,19 @@ public class EmbeddedCartridgeResource extends AbstractOpenShiftResource impleme private final ApplicationResource application; protected EmbeddedCartridgeResource(String info, final CartridgeResourceDTO dto, final ApplicationResource application) { - this(dto.getName(), dto.getDisplayName(), dto.getDescription(), dto.getType(), info, dto.getLinks(), dto.getCreationLog(), application); + this(dto.getName(), dto.getDisplayName(), dto.getDescription(), dto.getType(), info, dto.getLinks(), dto.getMessages(), application); } protected EmbeddedCartridgeResource(final String name, final String displayName, final String description, final CartridgeType type, String info, final Map links, - final List creationLog, final ApplicationResource application) { - super(application.getService(), links, creationLog); + final Map messages, final ApplicationResource application) { + super(application.getService(), links, messages); this.name = name; this.displayName = displayName; this.description = description; this.type = type; // TODO: fix this workaround once // https://bugzilla.redhat.com/show_bug.cgi?id=812046 is fixed - this.url = extractUrl(info, creationLog); + this.url = extractUrl(info, messages); this.application = application; } @@ -79,7 +79,7 @@ public IApplication getApplication() { return application; } - private String extractUrl(String info, List messages) { + private String extractUrl(String info, Map messages) { if (info != null) { return extractUrl(info); } else { @@ -100,11 +100,11 @@ private String extractUrl(String string) { return matcher.group(1); } - private String extractUrl(List messages) { + private String extractUrl(Map messages) { if (messages == null) { return null; } - for (Message message : messages) { + for (Message message : messages.values()) { String url = extractUrl(message.getText()); if (url != null) { return url; diff --git a/src/main/java/com/openshift/internal/client/IRestService.java b/src/main/java/com/openshift/internal/client/IRestService.java index f2e47f66..6bf9220d 100755 --- a/src/main/java/com/openshift/internal/client/IRestService.java +++ b/src/main/java/com/openshift/internal/client/IRestService.java @@ -10,14 +10,11 @@ ******************************************************************************/ package com.openshift.internal.client; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.util.Map; import com.openshift.client.HttpMethod; import com.openshift.client.OpenShiftException; -import com.openshift.internal.client.httpclient.HttpClientException; import com.openshift.internal.client.response.Link; import com.openshift.internal.client.response.RestResponse; @@ -26,15 +23,14 @@ */ public interface IRestService { + public static final String SERVICE_VERSION = "1.2"; + public abstract RestResponse request(Link link) throws OpenShiftException, SocketTimeoutException; public RestResponse request(Link link, ServiceParameter... serviceParameters) throws OpenShiftException; - public String request(Link link, String acceptedMediaType, ServiceParameter... serviceParameters) - throws MalformedURLException, HttpClientException, SocketTimeoutException, OpenShiftException, UnsupportedEncodingException; - public abstract RestResponse request(Link link, Map parameters) throws OpenShiftException; diff --git a/src/main/java/com/openshift/internal/client/RestService.java b/src/main/java/com/openshift/internal/client/RestService.java index dbf47fbb..99534399 100755 --- a/src/main/java/com/openshift/internal/client/RestService.java +++ b/src/main/java/com/openshift/internal/client/RestService.java @@ -23,6 +23,7 @@ import com.openshift.client.HttpMethod; import com.openshift.client.IHttpClient; import com.openshift.client.InvalidCredentialsOpenShiftException; +import com.openshift.client.Message; import com.openshift.client.NotFoundOpenShiftException; import com.openshift.client.OpenShiftEndpointException; import com.openshift.client.OpenShiftException; @@ -34,7 +35,6 @@ import com.openshift.internal.client.response.Link; import com.openshift.internal.client.response.LinkParameter; import com.openshift.internal.client.response.LinkParameterType; -import com.openshift.internal.client.response.Message; import com.openshift.internal.client.response.ResourceDTOFactory; import com.openshift.internal.client.response.RestResponse; import com.openshift.internal.client.utils.StringUtils; @@ -52,8 +52,6 @@ public class RestService implements IRestService { private static final String SERVICE_PATH = "/broker/rest/"; private static final char SLASH = '/'; - private static final String SERVICE_VERSION = "1.2"; - private String baseUrl; private IHttpClient client; @@ -129,8 +127,8 @@ private String getResponseMessage(HttpClientException clientException) { if (restResponse == null) { return null; } - for (Message message : restResponse.getMessages()) { - builder.append(message.toString()).append('\n'); + for (Map.Entry entry : restResponse.getMessages().entrySet()) { + builder.append(entry.toString()).append('\n'); } return builder.toString(); } catch (OpenShiftException e) { @@ -164,25 +162,6 @@ private String request(URL url, HttpMethod httpMethod, Map param } - public String request(Link link, String acceptedMediaType, ServiceParameter... serviceParameters) - throws MalformedURLException, HttpClientException, SocketTimeoutException, OpenShiftException, UnsupportedEncodingException { - String save = client.getAcceptedMediaType(); - client.setAcceptedMediaType(acceptedMediaType); - - HttpMethod httpMethod = link.getHttpMethod(); - URL url = getUrl(link.getHref()); - Map parameters = toMap(serviceParameters); - - LOGGER.trace("Requesting {} on {}", httpMethod.name(), url); - LOGGER.info("Requesting {} on {}", httpMethod.name(), url); - - String response = client.get(url); - - client.setAcceptedMediaType(save); - - return response; - } - private URL getUrl(String href) throws OpenShiftException { try { if (href == null) { diff --git a/src/main/java/com/openshift/internal/client/SSHKeyResource.java b/src/main/java/com/openshift/internal/client/SSHKeyResource.java index 650398b0..6129d8da 100644 --- a/src/main/java/com/openshift/internal/client/SSHKeyResource.java +++ b/src/main/java/com/openshift/internal/client/SSHKeyResource.java @@ -29,7 +29,7 @@ public class SSHKeyResource extends AbstractOpenShiftResource implements IOpenSh private UserResource user; protected SSHKeyResource(KeyResourceDTO dto, UserResource user) throws OpenShiftUnknonwSSHKeyTypeException { - super(user.getService(), dto.getLinks(), dto.getCreationLog()); + super(user.getService(), dto.getLinks(), dto.getMessages()); this.name = dto.getName(); this.type = SSHKeyType.getByTypeId(dto.getType()); this.publicKey = dto.getContent(); diff --git a/src/main/java/com/openshift/internal/client/UserResource.java b/src/main/java/com/openshift/internal/client/UserResource.java index e427ad0c..0e937858 100755 --- a/src/main/java/com/openshift/internal/client/UserResource.java +++ b/src/main/java/com/openshift/internal/client/UserResource.java @@ -42,7 +42,7 @@ public class UserResource extends AbstractOpenShiftResource implements IUser { private List sshKeys; public UserResource(final APIResource api, final UserResourceDTO dto, final String password) { - super(api.getService(), dto.getLinks(), dto.getCreationLog()); + super(api.getService(), dto.getLinks(), dto.getMessages()); this.api = api; this.rhLogin = dto.getRhLogin(); this.maxGears = dto.getMaxGears(); diff --git a/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java b/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java index 502f4a56..ed56aea5 100755 --- a/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java @@ -16,6 +16,7 @@ import com.openshift.client.ApplicationScale; import com.openshift.client.IGearGroup; import com.openshift.client.IGearProfile; +import com.openshift.client.Message; /** * The Class ApplicationDTO. @@ -71,8 +72,8 @@ public class ApplicationResourceDTO extends BaseResourceDTO { public ApplicationResourceDTO(final String framework, final String domainId, final String creationTime, final String name, final IGearProfile gearProfile, final ApplicationScale scale, final String uuid, final String applicationUrl, final String gitUrl, final List aliases, - final Map embeddedCartridgeInfos, final Map links, List creationLog) { - super(links, creationLog); + final Map embeddedCartridgeInfos, final Map links, Map messages) { + super(links, messages); this.framework = framework; this.domainId = domainId; this.creationTime = creationTime; diff --git a/src/main/java/com/openshift/internal/client/response/BaseResourceDTO.java b/src/main/java/com/openshift/internal/client/response/BaseResourceDTO.java index f78e151d..68f90b0a 100644 --- a/src/main/java/com/openshift/internal/client/response/BaseResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/BaseResourceDTO.java @@ -11,9 +11,10 @@ package com.openshift.internal.client.response; import java.util.HashMap; -import java.util.List; import java.util.Map; +import com.openshift.client.Message; + /** * The Class BaseResourceDTO. * @@ -24,7 +25,7 @@ public abstract class BaseResourceDTO { /** the indexed map of links to perform operations from this resource. */ private final Map links; - private final List creationLog; + private final Map messages; protected BaseResourceDTO() { this(new HashMap(), null); @@ -36,9 +37,9 @@ protected BaseResourceDTO() { * @param links * the links */ - protected BaseResourceDTO(final Map links, List creationLog) { + protected BaseResourceDTO(final Map links, Map messages) { this.links = links; - this.creationLog = creationLog; + this.messages = messages; } /** @@ -62,18 +63,13 @@ public final Link getLink(String name) { } /** - * Returns the creationLog that were reported when this resource was created. + * Returns the messages that were reported when this resource was created. * May be null if retrieved in a session in which we did not * create this resource. * - * @return the creationLog that were reported when this resource was created + * @return the messages that were reported when this resource was created */ - public List getCreationLog() { - return creationLog; - } - - public boolean hasCreationLog() { - return creationLog != null - && creationLog.size() > 0; + public Map getMessages() { + return messages; } } diff --git a/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java b/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java index 795db0b0..96b9b28c 100755 --- a/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java @@ -10,9 +10,9 @@ ******************************************************************************/ package com.openshift.internal.client.response; -import java.util.List; import java.util.Map; +import com.openshift.client.Message; import com.openshift.internal.client.CartridgeType; /** @@ -28,8 +28,8 @@ public class CartridgeResourceDTO extends BaseResourceDTO { private String description; CartridgeResourceDTO(final String name, final String displayName, final String description, - final String type, final Map links, final List creationLog) { - super(links, creationLog); + final String type, final Map links, final Map messages) { + super(links, messages); this.name = name; this.displayName = displayName; this.description = description; diff --git a/src/main/java/com/openshift/internal/client/response/DomainResourceDTO.java b/src/main/java/com/openshift/internal/client/response/DomainResourceDTO.java index fe294072..f700879d 100644 --- a/src/main/java/com/openshift/internal/client/response/DomainResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/DomainResourceDTO.java @@ -10,9 +10,10 @@ ******************************************************************************/ package com.openshift.internal.client.response; -import java.util.List; import java.util.Map; +import com.openshift.client.Message; + /** * @author Xavier Coulon */ @@ -23,8 +24,8 @@ public class DomainResourceDTO extends BaseResourceDTO { /** the domain's configured suffix (cannot be configured by user, returned by platform). */ private String suffix; - DomainResourceDTO(final String id, final String suffix, final Map links, final List creationLog) { - super(links, creationLog); + DomainResourceDTO(final String id, final String suffix, final Map links, final Map messages) { + super(links, messages); this.id = id; this.suffix = suffix; } diff --git a/src/main/java/com/openshift/internal/client/response/GearDTO.java b/src/main/java/com/openshift/internal/client/response/GearDTO.java index 788d3d02..da54d70e 100755 --- a/src/main/java/com/openshift/internal/client/response/GearDTO.java +++ b/src/main/java/com/openshift/internal/client/response/GearDTO.java @@ -11,12 +11,9 @@ package com.openshift.internal.client.response; import java.util.HashMap; -import java.util.List; import java.util.Map; -import com.openshift.client.ApplicationScale; -import com.openshift.client.IGearGroup; -import com.openshift.client.IGearProfile; +import com.openshift.client.Message; /** * The Class ApplicationDTO. @@ -33,8 +30,8 @@ public class GearDTO extends BaseResourceDTO { String uuid; String state; - public GearDTO(String uuid, String state, List creationLog) { - super(new HashMap(), creationLog); + public GearDTO(String uuid, String state, Map messages) { + super(new HashMap(), messages); this.uuid = uuid; this.state = state; } diff --git a/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java b/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java index 8642c00d..03ec09be 100644 --- a/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java @@ -10,9 +10,10 @@ ******************************************************************************/ package com.openshift.internal.client.response; -import java.util.List; import java.util.Map; +import com.openshift.client.Message; + /** * The Class KeyResourceDTO. */ @@ -39,8 +40,8 @@ public class KeyResourceDTO extends BaseResourceDTO { * @param links * the links */ - public KeyResourceDTO(final String name, final String type, final String content, final Map links, final List creationLog) { - super(links, creationLog); + public KeyResourceDTO(final String name, final String type, final String content, final Map links, final Map messages) { + super(links, messages); this.name = name; this.type = type; this.content = content; diff --git a/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java b/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java index dcb88c15..f9cacaf5 100755 --- a/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java +++ b/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java @@ -58,6 +58,7 @@ import com.openshift.client.GearState; import com.openshift.client.IGear; import com.openshift.client.IGearProfile; +import com.openshift.client.Message; import com.openshift.client.OpenShiftException; import com.openshift.client.OpenShiftRequestException; import com.openshift.internal.client.Gear; @@ -92,7 +93,7 @@ public static RestResponse get(final String content) throws OpenShiftException { final ModelNode rootNode = getModelNode(content); final String type = rootNode.get(IOpenShiftJsonConstants.PROPERTY_TYPE).asString(); final String status = rootNode.get(IOpenShiftJsonConstants.PROPERTY_STATUS).asString(); - final List messages = createMessages(rootNode.get(IOpenShiftJsonConstants.PROPERTY_MESSAGES)); + final Map messages = createMessages(rootNode.get(IOpenShiftJsonConstants.PROPERTY_MESSAGES)); final EnumDataType dataType = EnumDataType.safeValueOf(type); // the response is after an error, only the messages are relevant @@ -138,11 +139,12 @@ public static RestResponse get(final String content) throws OpenShiftException { * the messages node * @return the list< string> */ - private static List createMessages(ModelNode messagesNode) { - List messages = new ArrayList(); + private static Map createMessages(ModelNode messagesNode) { + Map messages = new HashMap(); if (messagesNode.getType() == ModelType.LIST) { for (ModelNode messageNode : messagesNode.asList()) { - messages.add(createMessage(messageNode)); + Message message = createMessage(messageNode); + messages.put(message.getField(), message); } } return messages; @@ -243,16 +245,16 @@ private static List createKeys(ModelNode rootNode) throws OpenSh * @return the key resource dto * @throws OpenShiftException */ - private static KeyResourceDTO createKey(ModelNode keyNode, List creationLog) throws OpenShiftException { + private static KeyResourceDTO createKey(ModelNode keyNode, Map messages) throws OpenShiftException { if (keyNode.has(PROPERTY_DATA)) { // loop inside 'data' node - return createKey(keyNode.get(PROPERTY_DATA), creationLog); + return createKey(keyNode.get(PROPERTY_DATA), messages); } final String name = getAsString(keyNode, IOpenShiftJsonConstants.PROPERTY_NAME); final String type = getAsString(keyNode, IOpenShiftJsonConstants.PROPERTY_TYPE); final String content = getAsString(keyNode, IOpenShiftJsonConstants.PROPERTY_CONTENT); final Map links = createLinks(keyNode.get(PROPERTY_LINKS)); - return new KeyResourceDTO(name, type, content, links, creationLog); + return new KeyResourceDTO(name, type, content, links, messages); } /** @@ -332,16 +334,16 @@ private static List createDomains(final ModelNode rootNode) t * @return the domain dto * @throws OpenShiftException */ - private static DomainResourceDTO createDomain(final ModelNode domainNode, List creationLog) + private static DomainResourceDTO createDomain(final ModelNode domainNode, Map messages) throws OpenShiftException { if (domainNode.has(PROPERTY_DATA)) { // recurse into "data" node - return createDomain(domainNode.get(PROPERTY_DATA), creationLog); + return createDomain(domainNode.get(PROPERTY_DATA), messages); } final String namespace = getAsString(domainNode, PROPERTY_ID); final String suffix = getAsString(domainNode, PROPERTY_SUFFIX); final Map links = createLinks(domainNode.get(PROPERTY_LINKS)); - return new DomainResourceDTO(namespace, suffix, links, creationLog); + return new DomainResourceDTO(namespace, suffix, links, messages); } /** @@ -371,11 +373,11 @@ private static List createApplications(final ModelNode r * @return the application dto * @throws OpenShiftException */ - private static ApplicationResourceDTO createApplication(ModelNode appNode, List creationLog) + private static ApplicationResourceDTO createApplication(ModelNode appNode, Map messages) throws OpenShiftException { if (appNode.has(PROPERTY_DATA)) { // recurse into 'data' node - return createApplication(appNode.get(PROPERTY_DATA), creationLog); + return createApplication(appNode.get(PROPERTY_DATA), messages); } final String framework = getAsString(appNode, PROPERTY_FRAMEWORK); final String creationTime = getAsString(appNode, PROPERTY_CREATION_TIME); @@ -403,7 +405,7 @@ private static ApplicationResourceDTO createApplication(ModelNode appNode, List< aliases, embeddedCartridgesInfos, links, - creationLog); + messages); } private static GearProfile createGearProfile(ModelNode appNode) { @@ -491,11 +493,11 @@ private static List createCartridges(ModelNode rootNode) t * @return the cartridge resource dto * @throws OpenShiftException */ - private static CartridgeResourceDTO createCartridge(ModelNode cartridgeNode, List creationLog) + private static CartridgeResourceDTO createCartridge(ModelNode cartridgeNode, Map messages) throws OpenShiftException { if (cartridgeNode.has(PROPERTY_DATA)) { // recurse into 'data' node - return createCartridge(cartridgeNode.get(PROPERTY_DATA), creationLog); + return createCartridge(cartridgeNode.get(PROPERTY_DATA), messages); } final String name = getAsString(cartridgeNode, PROPERTY_NAME); @@ -503,7 +505,7 @@ private static CartridgeResourceDTO createCartridge(ModelNode cartridgeNode, Lis final String description = getAsString(cartridgeNode, PROPERTY_DESCRIPTION); final String type = getAsString(cartridgeNode, PROPERTY_TYPE); final Map links = createLinks(cartridgeNode.get(PROPERTY_LINKS)); - return new CartridgeResourceDTO(name, displayName, description, type, links, creationLog); + return new CartridgeResourceDTO(name, displayName, description, type, links, messages); } /** diff --git a/src/main/java/com/openshift/internal/client/response/RestResponse.java b/src/main/java/com/openshift/internal/client/response/RestResponse.java index e22b314b..c889e138 100755 --- a/src/main/java/com/openshift/internal/client/response/RestResponse.java +++ b/src/main/java/com/openshift/internal/client/response/RestResponse.java @@ -10,7 +10,9 @@ ******************************************************************************/ package com.openshift.internal.client.response; -import java.util.List; +import java.util.Map; + +import com.openshift.client.Message; /** * The Class Response. @@ -21,7 +23,7 @@ public class RestResponse { final String status; /** The messages in which the service reports errors. */ - final List messages; + final Map messages; /** The type of the payload (data) in this response. */ final EnumDataType dataType; @@ -37,7 +39,7 @@ public class RestResponse { * @param data the data * @param dataType the data type */ - protected RestResponse(final String status, final List messages, final Object data, final EnumDataType dataType) { + protected RestResponse(final String status, final Map messages, final Object data, final EnumDataType dataType) { this.status = status; this.messages = messages; this.data = data; @@ -58,7 +60,7 @@ public final String getStatus() { * * @return the messages */ - public final List getMessages() { + public final Map getMessages() { return messages; } diff --git a/src/test/java/com/openshift/client/utils/MessageAssert.java b/src/test/java/com/openshift/client/utils/MessageAssert.java index 78dd833f..8f32c8ce 100644 --- a/src/test/java/com/openshift/client/utils/MessageAssert.java +++ b/src/test/java/com/openshift/client/utils/MessageAssert.java @@ -14,8 +14,8 @@ import org.fest.assertions.AssertExtension; -import com.openshift.internal.client.response.Message; -import com.openshift.internal.client.response.Message.Severity; +import com.openshift.client.Message; +import com.openshift.client.Message.Severity; /** * @author Andre Dietisheim @@ -43,8 +43,8 @@ public MessageAssert hasExitCode(int exitCode) { return this; } - public MessageAssert hasParameter(String parameter) { - assertEquals(parameter, message.getParameter()); + public MessageAssert hasField(String parameter) { + assertEquals(parameter, message.getField()); return this; } } diff --git a/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java b/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java index 78f2634d..843317d6 100644 --- a/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java +++ b/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java @@ -35,13 +35,13 @@ import com.openshift.client.IHttpClient; import com.openshift.client.IOpenShiftConnection; import com.openshift.client.IUser; +import com.openshift.client.Message; import com.openshift.client.OpenShiftConnectionFactory; import com.openshift.client.cartridge.EmbeddableCartridge; import com.openshift.client.cartridge.IEmbeddedCartridge; import com.openshift.client.utils.Samples; import com.openshift.internal.client.httpclient.HttpClientException; import com.openshift.internal.client.response.Link; -import com.openshift.internal.client.response.Message; /** * @author Andre Dietisheim @@ -154,7 +154,7 @@ private IEmbeddedCartridge createEmbeddedCartridgeMock(String name) { CartridgeType.EMBEDDED, "embedded-info", Collections. emptyMap(), - Collections. emptyList(), + Collections. emptyMap(), applicationResourceMock); } } diff --git a/src/test/java/com/openshift/internal/client/RestServiceTest.java b/src/test/java/com/openshift/internal/client/RestServiceTest.java index 06ff7d7f..02fa6348 100644 --- a/src/test/java/com/openshift/internal/client/RestServiceTest.java +++ b/src/test/java/com/openshift/internal/client/RestServiceTest.java @@ -27,6 +27,7 @@ import java.net.URL; import java.util.Arrays; import java.util.HashMap; +import java.util.Map; import java.util.Properties; import org.junit.Before; @@ -34,8 +35,10 @@ import com.openshift.client.HttpMethod; import com.openshift.client.IHttpClient; +import com.openshift.client.Message; import com.openshift.client.OpenShiftEndpointException; import com.openshift.client.OpenShiftException; +import com.openshift.client.Message.Severity; import com.openshift.client.utils.MessageAssert; import com.openshift.client.utils.OpenShiftTestConfiguration; import com.openshift.client.utils.Samples; @@ -44,8 +47,6 @@ import com.openshift.internal.client.response.Link; import com.openshift.internal.client.response.LinkParameter; import com.openshift.internal.client.response.LinkParameterType; -import com.openshift.internal.client.response.Message; -import com.openshift.internal.client.response.Message.Severity; import com.openshift.internal.client.response.RestResponse; /** @@ -53,7 +54,7 @@ */ public class RestServiceTest { - protected static final Object KEY_PROTOCOL_VERSION = "protocol_version"; + protected static final String KEY_PROTOCOL_VERSION = "protocol_version"; private IRestService service; private IHttpClient clientMock; @@ -61,6 +62,7 @@ public class RestServiceTest { public void setUp() throws FileNotFoundException, IOException, OpenShiftException, HttpClientException { this.clientMock = mock(IHttpClient.class); String jsonResponse = "{}"; + when(clientMock.getAcceptVersion()).thenReturn(IRestService.SERVICE_VERSION); when(clientMock.get(any(URL.class))).thenReturn(jsonResponse); when(clientMock.post(anyForm(), any(URL.class))).thenReturn(jsonResponse); when(clientMock.put(anyForm(), any(URL.class))).thenReturn(jsonResponse); @@ -183,13 +185,14 @@ public void shouldHaveMessageIfErrors() throws Throwable { RestResponse restResponse = e.getRestResponse(); assertThat(restResponse).isNotNull(); assertThat(restResponse.getMessages()).hasSize(1); - Message message = restResponse.getMessages().get(0); + Map messages = restResponse.getMessages(); + Message message = messages.values().iterator().next(); assertThat(message).isNotNull(); assertThat(new MessageAssert(message)) .hasText("Namespace 'foobar' is already in use. Please choose another.") .hasSeverity(Severity.ERROR) .hasExitCode(103) - .hasParameter("id"); + .hasField("id"); } }