From 1d9c5308e421b464dc5a07c625c3472cd35c356f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Dietisheim?= Date: Mon, 9 Sep 2013 16:54:55 +0200 Subject: [PATCH] [JBIDE-14514] loading embedded cartridges only when needed Removed the workaround for https://bugzilla.redhat.com/show_bug.cgi?id=812046 and implemented new cartridge loading strategy where they're being loaded only when details are needed --- .../client/cartridge/IEmbeddedCartridge.java | 8 + .../internal/client/APIResource.java | 6 +- .../client/AbstractOpenShiftResource.java | 4 + .../internal/client/ApplicationResource.java | 135 +-- .../internal/client/DomainResource.java | 5 +- .../client/EmbeddedCartridgeResource.java | 136 ++- .../internal/client/GearProfile.java | 25 + .../internal/client/StandaloneCartridge.java | 13 +- .../response/ApplicationResourceDTO.java | 23 +- .../client/response/CartridgeResourceDTO.java | 45 +- .../internal/client/response/GearDTO.java | 2 +- .../client/response/GearGroupResourceDTO.java | 2 +- .../internal/client/response/ILinkNames.java | 68 -- .../client/response/KeyResourceDTO.java | 2 +- .../client/response/ResourceDTOFactory.java | 146 ++- .../client/response/ResourceProperties.java | 65 ++ .../client/response/ResourceProperty.java | 90 ++ .../client/response/UserResourceDTO.java | 2 +- .../client/utils/CollectionUtils.java | 7 +- .../client/utils/IOpenShiftJsonConstants.java | 5 +- .../client/utils/AbstractCartridgeAssert.java | 2 +- .../client/utils/EmbeddedCartridgeAssert.java | 6 + .../client/utils/ResourcePropertyAssert.java | 50 + .../com/openshift/client/utils/Samples.java | 8 +- .../client/ApplicationResourceTest.java | 155 +++- .../internal/client/DomainResourceTest.java | 16 +- .../client/EmbeddedCartridgeTest.java | 159 +++- .../client/GearGroupsResourceTest.java | 8 +- .../client/HttpClientMockDirector.java | 28 +- .../client/OpenShiftExceptionTest.java | 4 +- .../response/ResourceDTOFactoryTest.java | 80 +- ...tions-springeap6-cartridges_3embedded.json | 825 +++++++++++++++++ ...rz-applications-springeap6_1embedded.json} | 2 +- ...arz-applications-springeap6_2embedded.json | 440 +++++++++ ...mains-foobarz-applications_1embedded.json} | 0 ...omains-foobarz-applications_2embedded.json | 856 ++++++++++++++++++ ...omains-foobarz-applications_3embedded.json | 506 +++++++++++ ...mains-foobarz-applications_3embedded.json~ | 506 +++++++++++ 38 files changed, 4052 insertions(+), 388 deletions(-) delete mode 100644 src/main/java/com/openshift/internal/client/response/ILinkNames.java create mode 100644 src/main/java/com/openshift/internal/client/response/ResourceProperties.java create mode 100644 src/main/java/com/openshift/internal/client/response/ResourceProperty.java create mode 100644 src/test/java/com/openshift/client/utils/ResourcePropertyAssert.java create mode 100644 src/test/resources/samples/get-domains-foobarz-applications-springeap6-cartridges_3embedded.json rename src/test/resources/samples/{get-domains-foobarz-applications-springeap6.json => get-domains-foobarz-applications-springeap6_1embedded.json} (99%) create mode 100644 src/test/resources/samples/get-domains-foobarz-applications-springeap6_2embedded.json rename src/test/resources/samples/{get-domains-foobarz-applications.json => get-domains-foobarz-applications_1embedded.json} (100%) create mode 100644 src/test/resources/samples/get-domains-foobarz-applications_2embedded.json create mode 100644 src/test/resources/samples/get-domains-foobarz-applications_3embedded.json create mode 100644 src/test/resources/samples/get-domains-foobarz-applications_3embedded.json~ diff --git a/src/main/java/com/openshift/client/cartridge/IEmbeddedCartridge.java b/src/main/java/com/openshift/client/cartridge/IEmbeddedCartridge.java index 99160805..6fa356f8 100755 --- a/src/main/java/com/openshift/client/cartridge/IEmbeddedCartridge.java +++ b/src/main/java/com/openshift/client/cartridge/IEmbeddedCartridge.java @@ -13,6 +13,7 @@ import com.openshift.client.IApplication; import com.openshift.client.IOpenShiftResource; import com.openshift.client.OpenShiftException; +import com.openshift.internal.client.response.ResourceProperties; /** * Interface to designate a cartridge that has been added and configured @@ -42,4 +43,11 @@ public interface IEmbeddedCartridge extends IOpenShiftResource, IEmbeddableCartr * @return application this is embedded into */ public IApplication getApplication(); + + /** + * Returns the properties for this embedded cartridge + * + * @return the resource properties + */ + public ResourceProperties getProperties(); } \ No newline at end of file diff --git a/src/main/java/com/openshift/internal/client/APIResource.java b/src/main/java/com/openshift/internal/client/APIResource.java index 6f8142d4..30b42a9e 100755 --- a/src/main/java/com/openshift/internal/client/APIResource.java +++ b/src/main/java/com/openshift/internal/client/APIResource.java @@ -162,8 +162,8 @@ public List getEmbeddableCartridges() throws OpenShiftExce } private void retrieveCartridges() throws OpenShiftException { - final List cartridgeDTOs = new GetCartridgesRequest().execute(); - for (CartridgeResourceDTO cartridgeDTO : cartridgeDTOs) { + final Map cartridgeDTOsByName = new GetCartridgesRequest().execute(); + for (CartridgeResourceDTO cartridgeDTO : cartridgeDTOsByName.values()) { // TODO replace by enum (standalone, embedded) switch (cartridgeDTO.getType()) { case STANDALONE: @@ -250,7 +250,7 @@ public GetCartridgesRequest() throws OpenShiftException { super("LIST_CARTRIDGES"); } - public List execute() throws OpenShiftException { + public Map execute() throws OpenShiftException { return super.execute(); } } diff --git a/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java b/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java index 70ee7a37..528bd122 100755 --- a/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java +++ b/src/main/java/com/openshift/internal/client/AbstractOpenShiftResource.java @@ -69,6 +69,10 @@ protected AbstractOpenShiftResource(final IRestService service, final Map links) { + this.links = links; + } /** * Gets the links. diff --git a/src/main/java/com/openshift/internal/client/ApplicationResource.java b/src/main/java/com/openshift/internal/client/ApplicationResource.java index 3b982ab1..bf361d85 100755 --- a/src/main/java/com/openshift/internal/client/ApplicationResource.java +++ b/src/main/java/com/openshift/internal/client/ApplicationResource.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; @@ -56,7 +57,6 @@ import com.openshift.internal.client.response.Link; import com.openshift.internal.client.ssh.ApplicationPortForwarding; import com.openshift.internal.client.utils.Assert; -import com.openshift.internal.client.utils.CollectionUtils; import com.openshift.internal.client.utils.IOpenShiftJsonConstants; /** @@ -70,7 +70,6 @@ public class ApplicationResource extends AbstractOpenShiftResource implements IA private static final long APPLICATION_WAIT_RETRY_DELAY = 2 * 1024; - private static final String LINK_GET_APPLICATION = "GET"; private static final String LINK_DELETE_APPLICATION = "DELETE"; private static final String LINK_START_APPLICATION = "START"; private static final String LINK_STOP_APPLICATION = "STOP"; @@ -120,11 +119,9 @@ public class ApplicationResource extends AbstractOpenShiftResource implements IA private final List aliases; /** - * List of configured embedded cartridges. null means list if - * not loaded yet. + * List of configured embedded cartridges. */ - // TODO: replace by a map indexed by cartridge names ? - private List embeddedCartridges = null; + private Map embeddedCartridgesByName = new LinkedHashMap(); /** * SSH Fowardable ports for the current application. @@ -136,23 +133,13 @@ public class ApplicationResource extends AbstractOpenShiftResource implements IA * operations. */ private Session session; - - private Map embeddedCartridgesInfos; private Collection gearGroups; - /** - * Constructor... - * - * @param dto - * @param cartridge - * @param domain - */ protected ApplicationResource(ApplicationResourceDTO dto, IStandaloneCartridge cartridge, DomainResource domain) { this(dto.getName(), dto.getUuid(), dto.getCreationTime(), dto.getMessages(), dto.getApplicationUrl(), - dto.getGitUrl(), dto.getInitialGitUrl(), dto.getGearProfile(), dto.getGearGroups(), - dto.getApplicationScale(), cartridge, dto.getAliases(), dto.getEmbeddedCartridgeInfos(), - dto.getLinks(), domain); + dto.getGitUrl(), dto.getInitialGitUrl(), dto.getGearProfile(), dto.getApplicationScale(), cartridge, + dto.getAliases(), dto.getEmbeddedCartridges(), dto.getLinks(), domain); } /** @@ -182,9 +169,9 @@ protected ApplicationResource(ApplicationResourceDTO dto, IStandaloneCartridge c */ protected ApplicationResource(final String name, final String uuid, final String creationTime, final Messages messages, final String applicationUrl, final String gitUrl, - final String initialGitUrl, final IGearProfile gearProfile, final List gearGroups, - final ApplicationScale scale, final IStandaloneCartridge cartridge, final List aliases, - final Map embeddedCartridgesInfos, final Map links, + final String initialGitUrl, final IGearProfile gearProfile, final ApplicationScale scale, + final IStandaloneCartridge cartridge, final List aliases, + final List embeddedCartridges, final Map links, final DomainResource domain) { super(domain.getService(), links, messages); this.name = name; @@ -192,18 +179,22 @@ protected ApplicationResource(final String name, final String uuid, final String this.creationTime = RFC822DateUtils.safeGetDate(creationTime); this.scale = scale; this.gearProfile = gearProfile; - this.gearGroups = gearGroups; this.cartridge = cartridge; this.applicationUrl = applicationUrl; this.gitUrl = gitUrl; this.initialGitUrl = initialGitUrl; this.domain = domain; this.aliases = aliases; - // TODO: fix this workaround once - // https://bugzilla.redhat.com/show_bug.cgi?id=812046 is fixed - this.embeddedCartridgesInfos = embeddedCartridgesInfos; + createEmbeddedCartridges(embeddedCartridges); } + protected void createEmbeddedCartridges(List cartridges) { + for (CartridgeResourceDTO cartridgeDTO : cartridges) { + EmbeddedCartridgeResource embeddedCartridgeResource = new EmbeddedCartridgeResource(cartridgeDTO, this); + embeddedCartridgesByName.put(cartridgeDTO.getName(), embeddedCartridgeResource); + } + } + public String getName() { return name; } @@ -326,16 +317,10 @@ public String getApplicationUrl() { public IEmbeddedCartridge addEmbeddableCartridge(IEmbeddableCartridge cartridge) throws OpenShiftException { Assert.notNull(cartridge); - if (this.embeddedCartridges == null) { - loadEmbeddedCartridges(); - } final CartridgeResourceDTO embeddedCartridgeDTO = new AddEmbeddedCartridgeRequest().execute(cartridge.getName()); - final EmbeddedCartridgeResource embeddedCartridge = - new EmbeddedCartridgeResource( - embeddedCartridgesInfos.get(embeddedCartridgeDTO.getName()), - embeddedCartridgeDTO, this); - this.embeddedCartridges.add(embeddedCartridge); + final EmbeddedCartridgeResource embeddedCartridge = new EmbeddedCartridgeResource(embeddedCartridgeDTO, this); + this.embeddedCartridgesByName.put(embeddedCartridge.getName(), embeddedCartridge); return embeddedCartridge; } @@ -361,31 +346,49 @@ public List addEmbeddableCartridges(Collection loadEmbeddedCartridges() throws OpenShiftException { + /** + * Queries the backend to list the embedded cartridges and adds the new ones + * & update the ones that are already present + * + * @throws OpenShiftException + */ + protected void refreshEmbeddedCartridges() throws OpenShiftException { // load collection if necessary - this.embeddedCartridges = new ArrayList(); - List cartridgeDTOs = new ListEmbeddableCartridgesRequest().execute(); - for (CartridgeResourceDTO cartridgeDTO : cartridgeDTOs) { + Map cartridgeDTOByName = new ListCartridgesRequest().execute(); + updateAndAddCartridges(cartridgeDTOByName); + removeCartridges(cartridgeDTOByName); + } + + private void updateAndAddCartridges(Map cartridgeDTOByName) { + for (CartridgeResourceDTO cartridgeDTO : cartridgeDTOByName.values()) { if (cartridgeDTO.getType() != CartridgeType.EMBEDDED) { continue; } - IEmbeddedCartridge embeddableCartridge = - new EmbeddedCartridgeResource( - embeddedCartridgesInfos.get(cartridgeDTO.getName()), - cartridgeDTO, this); - embeddedCartridges.add(embeddableCartridge); + String name = cartridgeDTO.getName(); + EmbeddedCartridgeResource embeddedCartridge = embeddedCartridgesByName.get(name); + if (embeddedCartridge != null) { + embeddedCartridge.update(cartridgeDTO); + } else { + embeddedCartridgesByName.put(name, new EmbeddedCartridgeResource(cartridgeDTO, this)); + } } - return embeddedCartridges; } - public List getEmbeddedCartridges() throws OpenShiftException { - if (this.embeddedCartridges == null) { - this.embeddedCartridges = loadEmbeddedCartridges(); + private void removeCartridges(Map cartridgeDTOsByName) { + for (EmbeddedCartridgeResource cartridge : embeddedCartridgesByName.values()) { + String name = cartridge.getName(); + if (!cartridgeDTOsByName.containsKey(name)) { + // not present in updated collection + embeddedCartridgesByName.remove(name); + } } - return CollectionUtils.toUnmodifiableCopy(this.embeddedCartridges); + } + + public List getEmbeddedCartridges() throws OpenShiftException { + return Collections.unmodifiableList(new ArrayList(this.embeddedCartridgesByName.values())); } public boolean hasEmbeddedCartridge(String cartridgeName) throws OpenShiftException { @@ -495,10 +498,9 @@ private boolean isTimeouted(long timeout, long startTime) { return !(System.currentTimeMillis() < (startTime + timeout)); } + @Override public void refresh() throws OpenShiftException { - if (this.embeddedCartridges != null) { - this.embeddedCartridges = loadEmbeddedCartridges(); - } + refreshEmbeddedCartridges(); if (this.gearGroups != null) { this.gearGroups = loadGearGroups(); } @@ -697,9 +699,23 @@ public boolean equals(Object object) { return true; } + @Override public String toString() { - return name; + return "ApplicationResource [" + + "uuid=" + uuid + + ", name=" + name + + ", creationTime=" + creationTime + + ", cartridge=" + cartridge + + ", scale=" + scale + + ", gearProfile=" + gearProfile + + ", domain=" + domain + + ", applicationUrl=" + applicationUrl + + ", gitUrl=" + gitUrl + + ", initialGitUrl=" + initialGitUrl + + ", aliases=" + aliases + + ", gearGroups=" + gearGroups + + "]"; } protected enum SshStreams { @@ -729,13 +745,6 @@ public List getLines(Channel channel) throws IOException { } - private class RefreshApplicationRequest extends ServiceRequest { - - protected RefreshApplicationRequest() { - super(LINK_GET_APPLICATION); - } - } - private class DeleteApplicationRequest extends ServiceRequest { protected DeleteApplicationRequest() { @@ -853,11 +862,15 @@ public DTO execute(String embeddedCartridgeName) throws OpenShiftException } } - private class ListEmbeddableCartridgesRequest extends ServiceRequest { + private class ListCartridgesRequest extends ServiceRequest { - protected ListEmbeddableCartridgesRequest() { + protected ListCartridgesRequest() { super(LINK_LIST_CARTRIDGES); } + + public Map execute() throws OpenShiftException { + return super.execute(); + } } private class GetGearGroupsRequest extends ServiceRequest { diff --git a/src/main/java/com/openshift/internal/client/DomainResource.java b/src/main/java/com/openshift/internal/client/DomainResource.java index a3dc80f9..e7b28149 100755 --- a/src/main/java/com/openshift/internal/client/DomainResource.java +++ b/src/main/java/com/openshift/internal/client/DomainResource.java @@ -44,9 +44,10 @@ public class DomainResource extends AbstractOpenShiftResource implements IDomain private static final String LINK_ADD_APPLICATION = "ADD_APPLICATION"; private static final String LINK_UPDATE = "UPDATE"; private static final String LINK_DELETE = "DELETE"; + private String id; private String suffix; - /** root node in the business domain. */ + private final APIResource connectionResource; /** Applications for the domain. */ // TODO: replace by a map indexed by application names ? @@ -280,7 +281,7 @@ public GetDomainRequest() throws OpenShiftException { } protected DomainResourceDTO execute() throws OpenShiftException { - return (DomainResourceDTO)(super.execute()); + return (DomainResourceDTO) super.execute(); } diff --git a/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java b/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java index b9821747..0c9a05ee 100755 --- a/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java +++ b/src/main/java/com/openshift/internal/client/EmbeddedCartridgeResource.java @@ -10,123 +10,122 @@ ******************************************************************************/ package com.openshift.internal.client; -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.Messages; 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.ResourceProperties; +import com.openshift.internal.client.response.ResourceProperty; /** - * A cartridge that may be embedded into an application. This class is no enum - * since we dont know all available types and they may change at any time. + * A cartridge that is embedded into an application. The cartridge is added when + * the application resource is loaded. The cartridge resource is only loaded + * from backend when detail informations are needed (see #getDisplayName, + * {@link #getDescription()}. * * @author André Dietisheim */ public class EmbeddedCartridgeResource extends AbstractOpenShiftResource implements IEmbeddedCartridge { - private static final Pattern INFO_URL_PATTERN = Pattern.compile("URL: (.+)\\n*"); - + private static final Pattern NAME_URL_PATTERN = Pattern.compile("url", Pattern.CASE_INSENSITIVE); + private static final String LINK_DELETE_CARTRIDGE = "DELETE"; private final String name; - private final String displayName; - private final String description; + private String displayName; + private String description; private final CartridgeType type; - private String url; 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.getMessages(), application); + private ResourceProperties properties; + + protected EmbeddedCartridgeResource(final CartridgeResourceDTO dto, final ApplicationResource application) { + super(application.getService(), dto.getLinks(), dto.getMessages()); + this.name = dto.getName(); + this.type = CartridgeType.EMBEDDED; + this.displayName = dto.getDisplayName(); + this.description = dto.getDescription(); + this.properties = dto.getProperties(); + this.application = application; } - protected EmbeddedCartridgeResource(final String name, final String displayName, final String description, final CartridgeType type, String info, final Map links, - final Messages 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, getMessages()); - this.application = application; + protected void update(CartridgeResourceDTO dto) { + this.description = dto.getDescription(); + this.displayName = dto.getDisplayName(); + this.properties = dto.getProperties(); + setLinks(dto.getLinks()); } - + public String getName() { return name; } public String getDisplayName() { + // only available in resource, not in embedded block within application + if (!isResourceLoaded()) { + refresh(); + } return displayName; } - + public String getDescription() { + // only available in resource, not in embedded block within application + if (!isResourceLoaded()) { + refresh(); + } return description; } - + protected CartridgeType getType() { return type; } - public IApplication getApplication() { - return application; - } - - private String extractUrl(String info, Messages messages) { - if (info != null) { - return extractUrl(info); - } else { - return extractUrl(messages); - } - } - - private String extractUrl(String string) { - if (string == null) { - return null; - } - Matcher matcher = INFO_URL_PATTERN.matcher(string); - if (!matcher.find() - || matcher.groupCount() < 1) { - return null; - } - - return matcher.group(1); - } - - private String extractUrl(Messages messages) { - if (messages == null) { - return null; - } - for (Message message : messages.getAll()) { - String url = extractUrl(message.getText()); - if (url != null) { - return url; + public String getUrl() throws OpenShiftException { + for (ResourceProperty property : properties.getAll()) { + if (NAME_URL_PATTERN.matcher(property.getName()).find()) { + return property.getValue(); } } return null; } - public String getUrl() throws OpenShiftException { - return url; + public IApplication getApplication() { + return application; } + /** + * Refreshes the content of this embedded cartridge. Causes all embedded + * cartridges of the same application to get updated. + * + * @see #update(CartridgeResourceDTO) + * @see ApplicationResource#refreshEmbeddedCartridges() + */ @Override public void refresh() throws OpenShiftException { + // tell application to refresh all embedded cartridges + application.refreshEmbeddedCartridges(); } - + public void destroy() throws OpenShiftException { + if (!isResourceLoaded()) { + application.refreshEmbeddedCartridges(); + } new DeleteCartridgeRequest().execute(); application.removeEmbeddedCartridge(this); } + protected boolean isResourceLoaded() { + return areLinksLoaded(); + } + + @Override + public ResourceProperties getProperties() { + return properties; + } + private class DeleteCartridgeRequest extends ServiceRequest { protected DeleteCartridgeRequest() { @@ -167,10 +166,9 @@ public boolean equals(Object obj) { @Override public String toString() { return "EmbeddedCartridgeResource [" + - "name=" + name - + ", url=" + url - + ", type=" + type + ", url=" + url - + ", application=" + application + "name=" + name + + ", type=" + type + + ", application=" + application.getName() + "]"; } diff --git a/src/main/java/com/openshift/internal/client/GearProfile.java b/src/main/java/com/openshift/internal/client/GearProfile.java index 8d9d97c1..de756978 100644 --- a/src/main/java/com/openshift/internal/client/GearProfile.java +++ b/src/main/java/com/openshift/internal/client/GearProfile.java @@ -30,6 +30,31 @@ public String getName() { return name; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + GearProfile other = (GearProfile) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + @Override public String toString() { return "GearProfile [name=" + name + "]"; diff --git a/src/main/java/com/openshift/internal/client/StandaloneCartridge.java b/src/main/java/com/openshift/internal/client/StandaloneCartridge.java index 7b216fe5..3e6c0c08 100755 --- a/src/main/java/com/openshift/internal/client/StandaloneCartridge.java +++ b/src/main/java/com/openshift/internal/client/StandaloneCartridge.java @@ -12,7 +12,6 @@ import com.openshift.client.cartridge.IStandaloneCartridge; - /** * A cartridge that is available on the openshift server. This class is no enum * since we dont know all available types and they may change at any time. @@ -20,7 +19,7 @@ * @author André Dietisheim */ public class StandaloneCartridge implements IStandaloneCartridge { - + private final String name; private String displayName; private String description; @@ -32,17 +31,17 @@ public StandaloneCartridge(String name) { public StandaloneCartridge(String name, String version) { this(name + NAME_VERSION_DELIMITER + version, null, null); } - + public StandaloneCartridge(String name, String displayName, String description) { this.name = name; this.displayName = displayName; this.description = description; } - + public String getName() { return name; } - + public String getDisplayName() { return displayName; } @@ -75,6 +74,8 @@ public boolean equals(Object obj) { } public String toString() { - return "StandaloneCartridge [name=" + name + "]"; + return "StandaloneCartridge [ " + + "name=" + name + + " ]"; } } \ No newline at end of file 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 e2797c26..253ed34f 100755 --- a/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/ApplicationResourceDTO.java @@ -58,10 +58,10 @@ public class ApplicationResourceDTO extends BaseResourceDTO { /** the url for the git repo with the initial code for this application. */ private final String initialGitUrl; - private Map embeddedCartridgeInfos; - private List gearGroups; + private List embeddedCartridges; + /** * Instantiates a new application dto. * @@ -72,10 +72,10 @@ public class ApplicationResourceDTO extends BaseResourceDTO { * @param uuid the uuid * @param links the links */ - public ApplicationResourceDTO(final String framework, final String domainId, final String creationTime, + 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 String initialGitUrl, final List aliases, - final Map embeddedCartridgeInfos, final Map links, Messages messages) { + final List embeddedCartridges, final Map links, Messages messages) { super(links, messages); this.framework = framework; this.domainId = domainId; @@ -88,7 +88,7 @@ public ApplicationResourceDTO(final String framework, final String domainId, fin this.gitUrl = gitUrl; this.initialGitUrl = initialGitUrl; this.aliases = aliases; - this.embeddedCartridgeInfos = embeddedCartridgeInfos; + this.embeddedCartridges = embeddedCartridges; } /** @@ -140,10 +140,6 @@ public final ApplicationScale getApplicationScale() { public final IGearProfile getGearProfile() { return gearProfile; } - - public final List getGearGroups() { - return gearGroups; - } /** * Gets the uuid. @@ -182,13 +178,16 @@ public List getAliases() { return aliases; } - public Map getEmbeddedCartridgeInfos() { - return embeddedCartridgeInfos; + public List getEmbeddedCartridges() { + return embeddedCartridges; } @Override public String toString() { - return "ApplicationResourceDTO [name=" + name + ", framework=" + framework + "]"; + return "ApplicationResourceDTO [" + + " name=" + name + + ", framework=" + framework + + "]"; } } 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 6e24c7ee..7e11ece1 100755 --- a/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/CartridgeResourceDTO.java @@ -26,14 +26,43 @@ public class CartridgeResourceDTO extends BaseResourceDTO { private final CartridgeType type; private String displayName; private String description; + private ResourceProperties properties; + + /** + * Constructor used when a cartridge is constructed form the embedded + * property within the application. + *

+ * ex. + * + *

+	 * "embedded":{
+	 *            "switchyard-0":{
+	 * 
+	 *           },
+	 * 
+ */ + protected CartridgeResourceDTO(final String name, final CartridgeType type, final ResourceProperties properties) { + this(name, null, null, type, properties, null, null); + } + + /** + * Constructor used when a cartridge is constructed from the cartridges + * ("/cartridges") resource. + */ + protected CartridgeResourceDTO(final String name, final String displayName, final String description, + final String type, ResourceProperties properties, final Map links, final Messages messages) { + this(name, displayName, description, CartridgeType.safeValueOf(type), properties, links, messages); + } CartridgeResourceDTO(final String name, final String displayName, final String description, - final String type, final Map links, final Messages messages) { + final CartridgeType type, ResourceProperties properties, final Map links, + final Messages messages) { super(links, messages); this.name = name; this.displayName = displayName; this.description = description; - this.type = CartridgeType.safeValueOf(type); + this.type = type; + this.properties = properties; } public String getName() { @@ -43,19 +72,25 @@ public String getName() { public String getDisplayName() { return displayName; } - + public String getDescription() { return description; } - + public CartridgeType getType() { return type; } + public ResourceProperties getProperties() { + return properties; + } + @Override public String toString() { return "CartridgeResourceDTO [" - + "name=" + name + + " name=" + name + + ", description=" + description + + ", displayName=" + displayName + ", type=" + type + "]"; } 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 fbcd6e05..92dd187f 100755 --- a/src/main/java/com/openshift/internal/client/response/GearDTO.java +++ b/src/main/java/com/openshift/internal/client/response/GearDTO.java @@ -29,7 +29,7 @@ public class GearDTO extends BaseResourceDTO { String uuid; String state; - public GearDTO(String uuid, String state, Messages messages) { + GearDTO(String uuid, String state, Messages messages) { super(new HashMap(), messages); this.uuid = uuid; this.state = state; diff --git a/src/main/java/com/openshift/internal/client/response/GearGroupResourceDTO.java b/src/main/java/com/openshift/internal/client/response/GearGroupResourceDTO.java index bda71f16..ef1e1ae2 100644 --- a/src/main/java/com/openshift/internal/client/response/GearGroupResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/GearGroupResourceDTO.java @@ -39,7 +39,7 @@ public class GearGroupResourceDTO extends BaseResourceDTO { * @param gitUrl * the git url */ - public GearGroupResourceDTO(final String uuid, final String name, Collection gears) { + GearGroupResourceDTO(final String uuid, final String name, Collection gears) { super(); this.uuid = uuid; this.name = name; diff --git a/src/main/java/com/openshift/internal/client/response/ILinkNames.java b/src/main/java/com/openshift/internal/client/response/ILinkNames.java deleted file mode 100644 index 5d927bfe..00000000 --- a/src/main/java/com/openshift/internal/client/response/ILinkNames.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Red Hat, Inc. - * Distributed under license by Red Hat, Inc. All rights reserved. - * This program is made available under the terms of the - * Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package com.openshift.internal.client.response; - -/** - * The Interface ILinkNames. - */ -public interface ILinkNames { - - /** The Constant GET. */ - public static final String GET = "GET"; - - /** The Constant UPDATE. */ - public static final String UPDATE = "UPDATE"; - - /** The Constant CREATE. */ - public static final String CREATE = "CREATE"; - - /** The Constant DELETE. */ - public static final String DELETE = "DELETE"; - - /** The Constant LIST_APPLICATIONS. */ - public static final String LIST_APPLICATIONS = "LIST_APPLICATIONS"; - - /** The Constant ADD_APPLICATION. */ - public static final String ADD_APPLICATION = "ADD_APPLICATION"; - - /** The Constant ADD_APPLICATION_FROM_TEMPLATE. */ - public static final String ADD_APPLICATION_FROM_TEMPLATE = "ADD_APPLICATION_FROM_TEMPLATE"; - - /** The Constant ADD_ALIAS. */ - public static final String ADD_ALIAS = "ADD_ALIAS"; - - /** The Constant REMOVE_ALIAS. */ - public static final String REMOVE_ALIAS = "REMOVE_ALIAS"; - - /** The Constant START. */ - public static final String START = "START"; - - /** The Constant STOP. */ - public static final String STOP = "STOP"; - - /** The Constant FORCE_STOP. */ - public static final String FORCE_STOP = "FORCE_STOP"; - - /** The Constant RESTART. */ - public static final String RESTART = "RESTART"; - - /** The Constant LIST_CARTRIDGES. */ - public static final String LIST_CARTRIDGES = "LIST_CARTRIDGES"; - - /** The Constant ADD_CARTRIDGE. */ - public static final String ADD_CARTRIDGE = "ADD_CARTRIDGE"; - - /** The Constant GET_DESCRIPTOR. */ - public static final String GET_DESCRIPTOR = "GET_DESCRIPTOR"; - - /** The Constant GET_GEARS. */ - public static final String GET_GEARS = "GET_GEARS"; -} 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 f3e2c700..0b6f4250 100644 --- a/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java +++ b/src/main/java/com/openshift/internal/client/response/KeyResourceDTO.java @@ -40,7 +40,7 @@ public class KeyResourceDTO extends BaseResourceDTO { * @param links * the links */ - public KeyResourceDTO(final String name, final String type, final String content, final Map links, final Messages messages) { + KeyResourceDTO(final String name, final String type, final String content, final Map links, final Messages messages) { super(links, messages); this.name = name; this.type = type; 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 f27fac20..4abe4cfd 100755 --- a/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java +++ b/src/main/java/com/openshift/internal/client/response/ResourceDTOFactory.java @@ -27,7 +27,6 @@ import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_GIT_URL; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_HREF; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_ID; -import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_INFO; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_INITIAL_GIT_URL; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_LINKS; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_LOGIN; @@ -35,6 +34,7 @@ import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_METHOD; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_NAME; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_OPTIONAL_PARAMS; +import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_PROPERTIES; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_REL; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_REQUIRED_PARAMS; import static com.openshift.internal.client.utils.IOpenShiftJsonConstants.PROPERTY_SCALABLE; @@ -52,7 +52,6 @@ import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelType; -import org.jboss.dmr.Property; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +64,7 @@ import com.openshift.client.Messages; import com.openshift.client.OpenShiftException; import com.openshift.client.OpenShiftRequestException; +import com.openshift.internal.client.CartridgeType; import com.openshift.internal.client.Gear; import com.openshift.internal.client.GearProfile; import com.openshift.internal.client.utils.IOpenShiftJsonConstants; @@ -296,7 +296,7 @@ private static Map createLinks(final ModelNode linksNode) throws O } private static Link createLink(final ModelNode valueNode) { - final String rel = valueNode.get(PROPERTY_REL).asString(); + final String rel = getAsString(valueNode, PROPERTY_REL); final String href = valueNode.get(PROPERTY_HREF).asString(); final String method = valueNode.get(PROPERTY_METHOD).asString(); final List requiredParams = @@ -406,7 +406,7 @@ private static ApplicationResourceDTO createApplication(ModelNode appNode, Messa final String domainId = getAsString(appNode, PROPERTY_DOMAIN_ID); final Map links = createLinks(appNode.get(PROPERTY_LINKS)); final List aliases = createAliases(appNode.get(PROPERTY_ALIASES)); - final Map embeddedCartridgesInfos = createEmbeddedCartridgesInfos(appNode.get(PROPERTY_EMBEDDED)); + final List embeddedCartridges = createEmbeddedCartridges(appNode.get(PROPERTY_EMBEDDED)); return new ApplicationResourceDTO( framework, @@ -420,7 +420,7 @@ private static ApplicationResourceDTO createApplication(ModelNode appNode, Messa gitUrl, initialGitUrl, aliases, - embeddedCartridgesInfos, + embeddedCartridges, links, messages); } @@ -433,30 +433,6 @@ private static GearProfile createGearProfile(ModelNode appNode) { return new GearProfile(gearProfileName); } - /** - * TODO: fix this workaround once - * https://bugzilla.redhat.com/show_bug.cgi?id=812046 is fixed - */ - private static Map createEmbeddedCartridgesInfos(ModelNode embeddedNode) { - HashMap infos = new HashMap(); - for (Property embeddedCartridgeProperty : embeddedNode.asPropertyList()) { - String embeddedCartridgeInfo = getEmbeddedCartridgeInfo(embeddedCartridgeProperty.getValue()); - if (embeddedCartridgeInfo != null) { - infos.put(embeddedCartridgeProperty.getName(), embeddedCartridgeInfo); - } - } - return infos; - } - - private static String getEmbeddedCartridgeInfo(ModelNode embeddedCartridgeNode) { - if (embeddedCartridgeNode == null - || !embeddedCartridgeNode.has(PROPERTY_INFO) - || !embeddedCartridgeNode.get(PROPERTY_INFO).isDefined()) { - return null; - } - return embeddedCartridgeNode.get(PROPERTY_INFO).asString(); - } - private static Collection createGearGroups(ModelNode dataNode) { Collection gearGroupDTOs = new ArrayList(); for(ModelNode gearGroupNode : dataNode.get(PROPERTY_DATA).asList()) { @@ -485,25 +461,78 @@ private static Collection createGears(ModelNode gearsNode) { } /** - * Creates a new ResourceDTO object. + * Creates a new CartridgeResourceDTO for a given root node. * * @param rootNode * the root node * @return the list< cartridge resource dt o> * @throws OpenShiftException */ - private static List createCartridges(ModelNode rootNode) throws OpenShiftException { - final List cartridges = new ArrayList(); + private static Map createCartridges(ModelNode rootNode) throws OpenShiftException { + final Map cartridgesByName = new LinkedHashMap(); if (rootNode.has(PROPERTY_DATA)) { for (ModelNode cartridgeNode : rootNode.get(PROPERTY_DATA).asList()) { - cartridges.add(createCartridge(cartridgeNode, null)); + CartridgeResourceDTO cartridgeResourceDTO = createCartridge(cartridgeNode, null); + cartridgesByName.put(cartridgeResourceDTO.getName(), cartridgeResourceDTO); } } - return cartridges; + return cartridgesByName; + } + + /** + * Creates a map of cartridge resource dtos for a given embedded node (within an application) + * + * @param embeddedNode the "embedded" node in the application response + * @return the map of cartridges (by name) for the given node + * @throws OpenShiftException + */ + private static List createEmbeddedCartridges(ModelNode embeddedNode) + throws OpenShiftException { + List embeddedCartridges = new ArrayList(); + for (String name : embeddedNode.keys()) { + ModelNode cartridgeNode = embeddedNode.get(name); + CartridgeResourceDTO cartridgeDTO = createEmbeddedCartridge(name, cartridgeNode); + embeddedCartridges.add(cartridgeDTO); + } + return embeddedCartridges; + } + + private static CartridgeResourceDTO createEmbeddedCartridge(String name, ModelNode embeddedCartridgeNode) { + ResourceProperties properties = createEmbeddedProperties(embeddedCartridgeNode); + return new CartridgeResourceDTO(name, CartridgeType.EMBEDDED, properties); } /** - * Creates a new ResourceDTO object. + * Creates ResourceProperties for a given embedded cartridge node + *

+ * ex. + * + *

+	 * "embedded":{
+	 *       "metrics-0.1":{
+	 *          "connection_url":"https://eap6-foobarz.rhcloud.com/metrics/",
+	 *          "info":"Connection URL: https://eap6-foobarz.rhcloud.com/metrics/"
+	 *       }
+	 * 
+ * + * @param embeddedCartridgeNode + * @return + */ + private static ResourceProperties createEmbeddedProperties(ModelNode embeddedCartridgeNode) { + ResourceProperties properties = new ResourceProperties(); + if (embeddedCartridgeNode == null + || !embeddedCartridgeNode.isDefined()) { + return properties; + } + for(String propertyName : embeddedCartridgeNode.keys()) { + String value = getAsString(embeddedCartridgeNode, propertyName); + properties.add(propertyName, new ResourceProperty(propertyName, value)); + } + return properties; + } + + /** + * Creates a new CartridgeResourceDTO object for a given cartridge node and messages. * * @param cartridgeNode * the cartridge node @@ -521,8 +550,9 @@ private static CartridgeResourceDTO createCartridge(ModelNode cartridgeNode, Mes final String displayName = getAsString(cartridgeNode, PROPERTY_DISPLAY_NAME); final String description = getAsString(cartridgeNode, PROPERTY_DESCRIPTION); final String type = getAsString(cartridgeNode, PROPERTY_TYPE); + final ResourceProperties properties = createProperties(cartridgeNode.get(PROPERTY_PROPERTIES)); final Map links = createLinks(cartridgeNode.get(PROPERTY_LINKS)); - return new CartridgeResourceDTO(name, displayName, description, type, links, messages); + return new CartridgeResourceDTO(name, displayName, description, type, properties, links, messages); } /** @@ -625,6 +655,50 @@ private static String getAsString(final ModelNode node, String propertyName) { return propertyNode.isDefined() ? propertyNode.asString() : null; } + /** + * Creates ResourceProperties for a given propertiesNode + *

+ * ex. + * + *

+	 * "properties":[
+	 *       {
+	 *          "name":"connection_url",
+	 *          "type":"cart_data",
+	 *          "description":"Application metrics URL",
+	 *          "value":"https://eap6-foobarz.rhcloud.com/metrics/"
+	 *       },
+	 * 
+ * + * @param propertiesNode + * @return + */ + private static ResourceProperties createProperties(ModelNode propertiesNode) { + if (propertiesNode == null + || !propertiesNode.isDefined()) { + return null; + } + + ResourceProperties properties = new ResourceProperties(); + for(ModelNode propertyNode : propertiesNode.asList()) { + ResourceProperty property = createProperty(propertyNode); + String name = property.getName(); + if (StringUtils.isEmpty(name)) { + continue; + } + properties.add(name, property); + } + return properties; + } + + private static ResourceProperty createProperty(ModelNode propertyNode) { + String name = getAsString(propertyNode, IOpenShiftJsonConstants.PROPERTY_NAME); + String description = getAsString(propertyNode, IOpenShiftJsonConstants.PROPERTY_DESCRIPTION); + String type = getAsString(propertyNode, IOpenShiftJsonConstants.PROPERTY_TYPE); + String value = getAsString(propertyNode, IOpenShiftJsonConstants.PROPERTY_VALUE); + return new ResourceProperty(name, type, description, value); + } + /** * Returns the property identified by the given name in the given model node, or null if the named property is * undefined. diff --git a/src/main/java/com/openshift/internal/client/response/ResourceProperties.java b/src/main/java/com/openshift/internal/client/response/ResourceProperties.java new file mode 100644 index 00000000..dc5324aa --- /dev/null +++ b/src/main/java/com/openshift/internal/client/response/ResourceProperties.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 Red Hat, Inc. + * Distributed under license by Red Hat, Inc. All rights reserved. + * This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + ******************************************************************************/ +package com.openshift.internal.client.response; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import com.openshift.internal.client.utils.CollectionUtils; + +/** + * Properties that hold informations available in cartridges + * + * @author Andre Dietisheim + */ +public class ResourceProperties { + + public static final String CONNECTION_URL = "connection_url"; + public static final String JOB_URL = "job_url"; + public static final String USERNAME = "username"; + public static final String PASSWORD = "password"; + public static final String DATABASE_NAME = "database_name"; + + private Map properties = new LinkedHashMap(); + + public String getPropertyValue(String name) { + ResourceProperty property = properties.get(name); + if (property == null) { + return null; + } + return property.getValue(); + } + + public void add(String name, ResourceProperty property) { + properties.put(name, property); + } + + public ResourceProperty getProperty(String name) { + return properties.get(name); + } + + public List getAll() { + return CollectionUtils.toUnmodifiableCopy(properties.values()); + } + + public int size() { + return properties.size(); + } + + @Override + public String toString() { + return "ResourceProperties [ " + + "properties=" + properties + + " ]"; + } + +} diff --git a/src/main/java/com/openshift/internal/client/response/ResourceProperty.java b/src/main/java/com/openshift/internal/client/response/ResourceProperty.java new file mode 100644 index 00000000..8e7059e6 --- /dev/null +++ b/src/main/java/com/openshift/internal/client/response/ResourceProperty.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2013 Red Hat, Inc. + * Distributed under license by Red Hat, Inc. All rights reserved. + * This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + ******************************************************************************/ +package com.openshift.internal.client.response; + + +/** + * @author Andre Dietisheim + */ +public class ResourceProperty { + + private String name; + private String type; + private String description; + private String value; + + /** + * Constructor called when embedded cartridges are listed within an + * application. + *

+ * ex. + *

+	 * "metrics-0.1":{
+	 *          "connection_url":"https://eap6-foobarz.rhcloud.com/metrics/",
+	 *          "info":"Connection URL: https://eap6-foobarz.rhcloud.com/metrics/"
+	 * }
+	 * 
+	 * 
+	 */
+	protected ResourceProperty(String name, String value) {
+		this(name, null, null, value);
+	}
+	
+	/**
+	 * Constructor called when embedded cartridges are listed on their own (when
+	 * /cartridges resource is queried.
+	 * 

+ * ex. + * + *

+	 * "properties":[
+	 *  {
+	 *          "name":"connection_url",
+	 *          "type":"cart_data",
+	 *          "description":"Application metrics URL",
+	 *          "value":"https://eap6-foobarz.rhcloud.com/metrics/"
+	 * }
+	 * 
+	 */
+	protected ResourceProperty(String name, String type, String description, String value) {
+		this.name = name;
+		this.type = type;
+		this.description = description;
+		this.value = value;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	@Override
+	public String toString() {
+		return "ResourceProperty ["
+				+ " name=" + name 
+				+ ", type=" + type 
+				+ ", description=" + description 
+				+ ", value=" + value 
+				+ " ]";
+	}
+
+}
diff --git a/src/main/java/com/openshift/internal/client/response/UserResourceDTO.java b/src/main/java/com/openshift/internal/client/response/UserResourceDTO.java
index db953e87..db21ed7f 100755
--- a/src/main/java/com/openshift/internal/client/response/UserResourceDTO.java
+++ b/src/main/java/com/openshift/internal/client/response/UserResourceDTO.java
@@ -20,7 +20,7 @@ public class UserResourceDTO extends BaseResourceDTO {
 	private final int maxGears;
 	private final int consumedGears;
 	
-	public UserResourceDTO(final String rhLogin, final int maxGears, final int consumedGears, final Map links) {
+	UserResourceDTO(final String rhLogin, final int maxGears, final int consumedGears, final Map links) {
 		super(links, null);
 		this.rhLogin = rhLogin;
 		this.maxGears = maxGears;
diff --git a/src/main/java/com/openshift/internal/client/utils/CollectionUtils.java b/src/main/java/com/openshift/internal/client/utils/CollectionUtils.java
index 93a4b8d7..0d6828d8 100644
--- a/src/main/java/com/openshift/internal/client/utils/CollectionUtils.java
+++ b/src/main/java/com/openshift/internal/client/utils/CollectionUtils.java
@@ -11,6 +11,7 @@
 package com.openshift.internal.client.utils;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -19,8 +20,8 @@
  */
 public class CollectionUtils {
 
-	public static  List toUnmodifiableCopy(List list) {
-		return Collections.unmodifiableList(new ArrayList(list));
+	public static  List toUnmodifiableCopy(Collection collection) {
+		return Collections.unmodifiableList(new ArrayList(collection));
 	}
-	
+
 }
diff --git a/src/main/java/com/openshift/internal/client/utils/IOpenShiftJsonConstants.java b/src/main/java/com/openshift/internal/client/utils/IOpenShiftJsonConstants.java
index 67916422..98e8652a 100755
--- a/src/main/java/com/openshift/internal/client/utils/IOpenShiftJsonConstants.java
+++ b/src/main/java/com/openshift/internal/client/utils/IOpenShiftJsonConstants.java
@@ -21,6 +21,7 @@ public class IOpenShiftJsonConstants {
 	public static final String PROPERTY_ALTER = "alter";
 	public static final String PROPERTY_APP_INFO = "app_info";
 	public static final String PROPERTY_APP_NAME = "app_name";
+	public static final String PROPERTY_APP_URL = "app_url";
 	public static final String PROPERTY_CREATION_TIME = "creation_time";
 	public static final String PROPERTY_CARTRIDGE = "cartridge";
 	public static final String PROPERTY_CARTRIDGES = "cartridges";
@@ -44,6 +45,7 @@ public class IOpenShiftJsonConstants {
 	public static final String PROPERTY_GEARS = "gears";
 	public static final String PROPERTY_GEAR_PROFILE = "gear_profile";
 	public static final String PROPERTY_GEAR_STATE = "state";
+	public static final String PROPERTY_GIT_URL = "git_url";
 	public static final String PROPERTY_HEALTH_CHECK_PATH = "health_check_path";
 	public static final String PROPERTY_HREF = "href";
 	public static final String PROPERTY_ID = "id";
@@ -82,8 +84,7 @@ public class IOpenShiftJsonConstants {
 	public static final String PROPERTY_USER_INFO = "user_info";
 	public static final String PROPERTY_UUID = "uuid";
 	public static final String PROPERTY_VALID_OPTIONS = "valid_options";
-	public static final String PROPERTY_APP_URL = "app_url";
-	public static final String PROPERTY_GIT_URL = "git_url";
+	public static final String PROPERTY_VALUE = "value";
 	
 	public static final String VALUE_STATUS_OK = "ok";
 	public static final String VALUE_STATUS_CREATED = "created";
diff --git a/src/test/java/com/openshift/client/utils/AbstractCartridgeAssert.java b/src/test/java/com/openshift/client/utils/AbstractCartridgeAssert.java
index 705369a3..83e7295d 100644
--- a/src/test/java/com/openshift/client/utils/AbstractCartridgeAssert.java
+++ b/src/test/java/com/openshift/client/utils/AbstractCartridgeAssert.java
@@ -69,7 +69,7 @@ public AbstractCartridgeAssert isEqualsTo(C otherCartridge) throws OpenShiftE
 		assertThat(cartridge.equals(otherCartridge));
 		return this;
 	}
-
+	
 	protected C getCartridge() {
 		return cartridge;
 	}
diff --git a/src/test/java/com/openshift/client/utils/EmbeddedCartridgeAssert.java b/src/test/java/com/openshift/client/utils/EmbeddedCartridgeAssert.java
index b8dbe0af..51fe027e 100644
--- a/src/test/java/com/openshift/client/utils/EmbeddedCartridgeAssert.java
+++ b/src/test/java/com/openshift/client/utils/EmbeddedCartridgeAssert.java
@@ -33,4 +33,10 @@ public EmbeddedCartridgeAssert hasUrl() throws OpenShiftException, URISyntaxExce
 		new URI(cartridge.getUrl());
 		return this;
 	}
+	
+	public EmbeddedCartridgeAssert hasMessages() {
+		assertThat(getCartridge().getMessages()).isNotNull();
+		assertThat(getCartridge().getMessages().getAll()).isNotEmpty();
+		return this;
+	}
 }
diff --git a/src/test/java/com/openshift/client/utils/ResourcePropertyAssert.java b/src/test/java/com/openshift/client/utils/ResourcePropertyAssert.java
new file mode 100644
index 00000000..070db537
--- /dev/null
+++ b/src/test/java/com/openshift/client/utils/ResourcePropertyAssert.java
@@ -0,0 +1,50 @@
+/******************************************************************************* 
+ * Copyright (c) 2013 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is made available under the terms of the 
+ * Eclipse Public License v1.0 which accompanies this distribution, 
+ * and is available at http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
+package com.openshift.client.utils;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+import org.fest.assertions.AssertExtension;
+
+import com.openshift.internal.client.response.ResourceProperty;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class ResourcePropertyAssert implements AssertExtension {
+
+	private ResourceProperty property;
+
+	public ResourcePropertyAssert(ResourceProperty property) {
+		assertThat(property).isNotNull();
+		this.property = property;
+	}
+
+	public ResourcePropertyAssert hasName(String name) {
+		assertThat(property.getName()).isEqualTo(name);
+		return this;
+	}
+
+	public ResourcePropertyAssert hasDescription(String description) {
+		assertThat(property.getDescription()).isEqualTo(description);
+		return this;
+	}
+
+	public ResourcePropertyAssert hasType(String type) {
+		assertThat(property.getType()).isEqualTo(type);
+		return this;
+	}
+
+	public ResourcePropertyAssert hasValue(String value) {
+		assertThat(property.getValue()).isEqualTo(value);
+		return this;
+	}
+}
diff --git a/src/test/java/com/openshift/client/utils/Samples.java b/src/test/java/com/openshift/client/utils/Samples.java
index 590cff56..39ad92c9 100644
--- a/src/test/java/com/openshift/client/utils/Samples.java
+++ b/src/test/java/com/openshift/client/utils/Samples.java
@@ -25,13 +25,17 @@ public enum Samples {
 	// cartridges
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_1EMBEDDED("get-domains-foobarz-applications-springeap6-cartridges_1embedded.json"), // 1.2
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED("get-domains-foobarz-applications-springeap6-cartridges_2embedded.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_3EMBEDDED("get-domains-foobarz-applications-springeap6-cartridges_3embedded.json"), // 1.2
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_MYSQL("get-domains-foobarz-applications-springeap6-cartridges-mysql.json"), //1.2
 	POST_MYSQL_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES("post-mysql-domains-foobarz-applications-springeap6-cartridges.json"), // 1.2
 	
 	// application
-	GET_DOMAINS_FOOBARZ_APPLICATIONS("get-domains-foobarz-applications.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED("get-domains-foobarz-applications_1embedded.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED("get-domains-foobarz-applications_2embedded.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_3EMBEDDED("get-domains-foobarz-applications_3embedded.json"), // 1.2
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_NOAPPS("get-domains-foobarz-applications_noapps.json"), // 1.2
-	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6("get-domains-foobarz-applications-springeap6.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_1EMBEDDED("get-domains-foobarz-applications-springeap6_1embedded.json"), // 1.2
+	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2EMBEDDED("get-domains-foobarz-applications-springeap6_2embedded.json"), // 1.2
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2ALIAS("get-domains-foobarz-applications-springeap6_2alias.json"), // 1.2
 	GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_0ALIAS("get-domains-foobarz-applications-springeap6_0alias.json"), // 1.2
 	POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT("post-stop-domains-foobarz-applications-springeap6-events.json"), // 1.2
diff --git a/src/test/java/com/openshift/internal/client/ApplicationResourceTest.java b/src/test/java/com/openshift/internal/client/ApplicationResourceTest.java
index adac7f1b..f9949cdf 100644
--- a/src/test/java/com/openshift/internal/client/ApplicationResourceTest.java
+++ b/src/test/java/com/openshift/internal/client/ApplicationResourceTest.java
@@ -11,10 +11,12 @@
 package com.openshift.internal.client;
 
 import static com.openshift.client.utils.Samples.GET_DOMAINS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_0ALIAS;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_1EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2ALIAS;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_1EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED;
 import static com.openshift.client.utils.Samples.POST_MYSQL_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES;
@@ -42,6 +44,7 @@
 import com.openshift.client.OpenShiftEndpointException;
 import com.openshift.client.OpenShiftTimeoutException;
 import com.openshift.client.cartridge.EmbeddableCartridge;
+import com.openshift.client.cartridge.IEmbeddableCartridge;
 import com.openshift.client.cartridge.IEmbeddedCartridge;
 import com.openshift.client.utils.EmbeddedCartridgeAssert;
 import com.openshift.client.utils.MessageAssert;
@@ -56,6 +59,8 @@
  */
 public class ApplicationResourceTest {
 
+	private static final IEmbeddableCartridge EMBEDDABLE_CARTRIDGE_MYSQL = new EmbeddableCartridge("mysql-5.1");
+
 	private IDomain domain;
 	private IHttpClient mockClient;
 	private HttpClientMockDirector mockDirector;
@@ -65,9 +70,10 @@ public void setup() throws Throwable {
 		this.mockDirector = new HttpClientMockDirector();
 		this.mockClient = mockDirector
 				.mockGetDomains(GET_DOMAINS)
-				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS)
-				.mockGetApplication("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6)
-				.mockGetEmbeddableCartridges("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_1EMBEDDED)
+				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED)
+				.mockGetApplication("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_1EMBEDDED)
+				.mockGetApplicationCartridges("foobarz", "springeap6",
+						GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_1EMBEDDED)
 				.client();
 		IUser user = new TestConnectionFactory().getConnection(mockClient).getUser();
 		this.domain = user.getDomain("foobarz");
@@ -79,8 +85,10 @@ public void shouldDestroyApplication() throws Throwable {
 		assertThat(domain).isNotNull();
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app).isNotNull();
+
 		// operation
 		app.destroy();
+
 		// verifications
 		assertThat(domain.getApplications()).hasSize(1).excludes(app);
 	}
@@ -89,10 +97,12 @@ public void shouldDestroyApplication() throws Throwable {
 	public void shouldStopApplication() throws Throwable {
 		// pre-conditions
 		mockDirector.mockPostApplicationEvent(
-						"foobarz", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT);
+				"foobarz", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT);
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		app.stop();
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -104,8 +114,10 @@ public void shouldForceStopApplication() throws Throwable {
 				.mockPostApplicationEvent(
 						"honkabonka2", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT);
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		app.stop(true);
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -117,8 +129,10 @@ public void shouldStartApplication() throws Throwable {
 				.mockPostApplicationEvent(
 						"honkabonka2", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT);
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		app.start();
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -130,8 +144,10 @@ public void shouldRestartApplication() throws Throwable {
 				.mockPostApplicationEvent(
 						"honkabonka2", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT);
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		app.restart();
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -144,18 +160,24 @@ public void shouldScaleDownApplication() throws Throwable {
 	@Test
 	public void shouldNotScaleDownApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockPostApplicationEvent("foobarz", "springeap6",
+		mockDirector
+				.mockPostApplicationEvent(
+						"foobarz",
+						"springeap6",
 						new InternalServerErrorException(
 								"Failed to add event scale-down to application springeap6 due to: Cannot scale a non-scalable application"));
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		try {
 			app.scaleDown();
 			fail("Expected an exception here..");
 		} catch (OpenShiftEndpointException e) {
+
+		// verifications
 			assertThat(e.getCause()).isInstanceOf(InternalServerErrorException.class);
 		}
-		// verifications
+
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
 
@@ -167,20 +189,26 @@ public void shouldScaleUpApplication() throws Throwable {
 	@Test
 	public void shouldNotScaleUpApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockPostApplicationEvent(
+		mockDirector
+				.mockPostApplicationEvent(
 						"foobarz", "springeap6", POST_STOP_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_EVENT)
-		.mockPostApplicationEvent("foobarz","springeap6",
-				new InternalServerErrorException(
+				.mockPostApplicationEvent(
+						"foobarz",
+						"springeap6",
+						new InternalServerErrorException(
 								"Failed to add event scale-up to application springeap6 due to: Cannot scale a non-scalable application"));
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		try {
 			app.scaleUp();
 			fail("Expected an exception here..");
 		} catch (OpenShiftEndpointException e) {
+
+		// verifications
 			assertThat(e.getCause()).isInstanceOf(InternalServerErrorException.class);
 		}
-		// verifications
+
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
 
@@ -188,11 +216,13 @@ public void shouldNotScaleUpApplication() throws Throwable {
 	public void shouldAddAliasToApplication() throws Throwable {
 		// pre-conditions
 		mockDirector.mockPostApplicationEvent(
-						"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2ALIAS);
+				"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2ALIAS);
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app.getAliases()).hasSize(1).contains("jbosstools.org");
+
 		// operation
 		app.addAlias("redhat.com");
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 		assertThat(app.getAliases()).hasSize(2).contains("jbosstools.org", "redhat.com");
@@ -201,19 +231,24 @@ public void shouldAddAliasToApplication() throws Throwable {
 	@Test
 	public void shouldNotAddExistingAliasToApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockPostApplicationEvent("foobarz","springeap6",
+		mockDirector
+				.mockPostApplicationEvent(
+						"foobarz",
+						"springeap6",
 						new InternalServerErrorException(
 								"Failed to add event add-alias to application springeap6 due to: Alias 'jbosstools.org' already exists for 'springeap6'"));
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app.getAliases()).hasSize(1).contains("jbosstools.org");
+
 		// operation
 		try {
 			app.addAlias("jbosstools.org");
 			fail("Expected an exception..");
 		} catch (OpenShiftEndpointException e) {
+
+		// verifications
 			assertThat(e.getCause()).isInstanceOf(InternalServerErrorException.class);
 		}
-		// verifications
 		assertThat(app.getAliases()).hasSize(1).contains("jbosstools.org");
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -226,8 +261,10 @@ public void shouldRemoveAliasFromApplication() throws Throwable {
 						"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_0ALIAS);
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app.getAliases()).hasSize(1).contains("jbosstools.org");
+
 		// operation
 		app.removeAlias("jbosstools.org");
+
 		// verifications
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 		assertThat(app.getAliases()).hasSize(0);
@@ -237,7 +274,9 @@ public void shouldRemoveAliasFromApplication() throws Throwable {
 	public void shouldNotRemoveAliasFromApplication() throws Throwable {
 		// pre-conditions
 		mockDirector
-				.mockPostApplicationEvent("foobarz","springeap6",
+				.mockPostApplicationEvent(
+						"foobarz",
+						"springeap6",
 						new InternalServerErrorException(
 								"Failed to add event remove-alias to application springeap6 due to: Alias 'openshift-origin.org' does not exist for 'springeap6'"));
 		final IApplication app = domain.getApplicationByName("springeap6");
@@ -248,9 +287,10 @@ public void shouldNotRemoveAliasFromApplication() throws Throwable {
 			app.removeAlias("openshift-origin.org");
 			fail("Expected an exception..");
 		} catch (OpenShiftEndpointException e) {
+
+		// verifications
 			assertThat(e.getCause()).isInstanceOf(InternalServerErrorException.class);
 		}
-		// verifications
 		assertThat(app.getAliases()).hasSize(1).contains("jbosstools.org");
 		mockDirector.verifyPostApplicationEvent("foobarz", "springeap6");
 	}
@@ -259,11 +299,18 @@ public void shouldNotRemoveAliasFromApplication() throws Throwable {
 	public void shouldListExistingCartridges() throws Throwable {
 		// pre-conditions
 		mockDirector
-				.mockGetEmbeddableCartridges("foobarz", "springeap6",
+				.mockGetApplications("foobarz",
+						GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED)
+				.mockGetApplication("foobarz", "springeap6",
+						GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2EMBEDDED)
+				.mockGetApplicationCartridges("foobarz", "springeap6",
 						GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED);
+
 		final IApplication app = domain.getApplicationByName("springeap6");
+
 		// operation
 		final List embeddedCartridges = app.getEmbeddedCartridges();
+
 		// verifications
 		assertThat(embeddedCartridges).hasSize(2);
 	}
@@ -275,33 +322,37 @@ public void shouldReloadExistingEmbeddedCartridges() throws Throwable {
 		assertThat(app.getEmbeddedCartridges()).hasSize(1);
 		// simulate new content on openshift, that should be grabbed while doing
 		// a refresh()
-		mockDirector.mockGetEmbeddableCartridges("foobarz", "springeap6",
+		mockDirector.mockGetApplicationCartridges("foobarz", "springeap6",
 				GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED);
+
 		// operation
 		app.refresh();
+
+		// verify
+		// get app resource wont load embedded cartridges, only refresh does (thus should occur 1x)
+		mockDirector.verifyListEmbeddableCartridges(1, "foobarz", "springeap6");
 		assertThat(app.getEmbeddedCartridges()).hasSize(2);
-		mockDirector.verifyReloadEmbeddableCartridges("foobarz", "springeap6");
 	}
 
 	@Test
 	public void shouldAddCartridgeToApplication() throws Throwable {
 		// pre-conditions
 		mockDirector.mockAddEmbeddableCartridge("foobarz", "springeap6",
-						POST_MYSQL_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES);
+				POST_MYSQL_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES);
 		final IApplication app = domain.getApplicationByName("springeap6");
-		String mySql51Name = "mysql-5.1";
 		assertThat(app.getEmbeddedCartridges()).hasSize(1);
-		
+
 		// operation
-		app.addEmbeddableCartridge(new EmbeddableCartridge(mySql51Name));
-		
+		app.addEmbeddableCartridge(EMBEDDABLE_CARTRIDGE_MYSQL);
+
 		// verifications
 		mockDirector.verifyAddEmbeddableCartridge("foobarz", "springeap6");
 		assertThat(app.getEmbeddedCartridges()).hasSize(2);
-		IEmbeddedCartridge mySqlCartridge = app.getEmbeddedCartridge(mySql51Name);
+		IEmbeddedCartridge mySqlCartridge = app.getEmbeddedCartridge(EMBEDDABLE_CARTRIDGE_MYSQL.getName());
 		new EmbeddedCartridgeAssert(mySqlCartridge)
+				.hasMessages()
 				.hasDescription()
-				.hasName(mySql51Name);
+				.hasName(EMBEDDABLE_CARTRIDGE_MYSQL.getName());
 
 		new MessageAssert(mySqlCartridge.getMessages().getFirstBy(IField.DEFAULT))
 				.hasExitCode(-1)
@@ -324,10 +375,11 @@ public void shouldAddCartridgeToApplication() throws Throwable {
 	public void shouldNotAddCartridgeToApplication() throws Throwable {
 		// pre-conditions
 		mockDirector
-			.mockGetEmbeddableCartridges("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED)
-			.mockAddEmbeddableCartridge("foobarz", "springeap6", new SocketTimeoutException("mock..."));
+				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED)
+				.mockAddEmbeddableCartridge("foobarz", "springeap6", new SocketTimeoutException("mock..."));
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app.getEmbeddedCartridges()).hasSize(2);
+
 		// operation
 		try {
 			app.addEmbeddableCartridge(new EmbeddableCartridge("postgresql-8.4"));
@@ -335,6 +387,7 @@ public void shouldNotAddCartridgeToApplication() throws Throwable {
 		} catch (OpenShiftTimeoutException e) {
 			// ok
 		}
+		
 		// verifications
 		mockDirector.verifyAddEmbeddableCartridge("foobarz", "springeap6");
 		assertThat(app.getEmbeddedCartridge("postgresql-8.4")).isNull();
@@ -344,12 +397,19 @@ public void shouldNotAddCartridgeToApplication() throws Throwable {
 	@Test
 	public void shouldRemoveCartridgeFromApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetEmbeddableCartridges(
-				"foobarz", "springeap6",GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED);
+		mockDirector
+				.mockGetApplications(
+						"foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED)
+				.mockGetApplication(
+						"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_2EMBEDDED)
+				.mockGetApplicationCartridges(
+						"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED);
 		final IApplication application = domain.getApplicationByName("springeap6");
 		assertThat(application.getEmbeddedCartridges()).hasSize(2);
+
 		// operation
 		application.getEmbeddedCartridge("mysql-5.1").destroy();
+
 		// verifications
 		mockDirector.verifyDeleteEmbeddableCartridge("foobarz", "springeap6", "mysql-5.1");
 		assertThat(application.getEmbeddedCartridge("mysql-5.1")).isNull();
@@ -359,11 +419,16 @@ public void shouldRemoveCartridgeFromApplication() throws Throwable {
 	@Test
 	public void shouldNotRemoveCartridgeFromApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetEmbeddableCartridges(
-				"foobarz", "springeap6",GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED)
-				.mockRemoveEmbeddableCartridge("foobarz", "springeap6", "mysql-5.1", new SocketTimeoutException("mock..."));
+		mockDirector
+				.mockGetApplications(
+						"foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED)
+				.mockGetApplicationCartridges(
+						"foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED)
+				.mockRemoveEmbeddableCartridge("foobarz", "springeap6", "mysql-5.1",
+						new SocketTimeoutException("mock..."));
 		final IApplication application = domain.getApplicationByName("springeap6");
 		assertThat(application.getEmbeddedCartridges()).hasSize(2);
+
 		// operation
 		final IEmbeddedCartridge mysql = application.getEmbeddedCartridge("mysql-5.1");
 		try {
@@ -372,6 +437,7 @@ public void shouldNotRemoveCartridgeFromApplication() throws Throwable {
 		} catch (OpenShiftTimeoutException e) {
 			// ok
 		}
+		
 		// verifications
 		mockDirector.verifyDeleteEmbeddableCartridge("foobarz", "springeap6", "mysql-5.1");
 		assertThat(application.getEmbeddedCartridges()).hasSize(2).contains(mysql);
@@ -390,6 +456,7 @@ public void shouldWaitUntilTimeout() throws HttpClientException, Throwable {
 		// operation
 		boolean successfull = spy.waitForAccessible(timeout);
 
+		// verification
 		assertFalse(successfull);
 		assertTrue(System.currentTimeMillis() >= (startTime + timeout));
 	}
@@ -403,10 +470,11 @@ public void shouldEndBeforeTimeout() throws HttpClientException, Throwable {
 		assertThat(app).isNotNull().isInstanceOf(ApplicationResource.class);
 		ApplicationResource spy = Mockito.spy(((ApplicationResource) app));
 		Mockito.doReturn(true).when(spy).canResolv(Mockito.anyString());
-		
+
 		// operation
 		boolean successfull = spy.waitForAccessible(timeout);
 
+		// verification
 		assertTrue(successfull);
 		assertTrue(System.currentTimeMillis() < (startTime + timeout));
 	}
@@ -416,7 +484,7 @@ public void shouldGetForwardablePorts() throws Throwable {
 		// pre-conditions
 		final IApplication app = domain.getApplicationByName("springeap6");
 		assertThat(app).isNotNull().isInstanceOf(ApplicationResource.class);
-		String[] rhcListPortsOutput = new String[] { 
+		String[] rhcListPortsOutput = new String[] {
 				"haproxy -> 127.7.233.2:8080",
 				" haproxy -> 127.7.233.3:8080",
 				" java -> 127.7.233.1:3528",
@@ -428,20 +496,23 @@ public void shouldGetForwardablePorts() throws Throwable {
 				" java -> 127.7.233.1:9999",
 				" mysql -> 5190d701500446506a0000e4-foobarz.rhcloud.com:56756" };
 		ApplicationResource spy = Mockito.spy(((ApplicationResource) app));
-		Mockito.doReturn(Arrays.asList(rhcListPortsOutput)).when(spy).sshExecCmd(Mockito.anyString(), (ApplicationResource.SshStreams) Mockito.any());
+		Mockito.doReturn(Arrays.asList(rhcListPortsOutput)).when(spy)
+				.sshExecCmd(Mockito.anyString(), (ApplicationResource.SshStreams) Mockito.any());
 
 		// operation
 		List forwardablePorts = spy.getForwardablePorts();
-		
+
 		// verification
 		assertThat(forwardablePorts).isNotEmpty().hasSize(10);
 		assertThat(forwardablePorts)
-			.onProperty("name").containsExactly("haproxy", "haproxy", "java", "java", "java", "java", "java", "java", "java", "mysql");
+				.onProperty("name").containsExactly("haproxy", "haproxy", "java", "java", "java", "java", "java",
+						"java", "java", "mysql");
 		assertThat(forwardablePorts)
-			.onProperty("remoteAddress").containsExactly("127.7.233.2", "127.7.233.3", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "5190d701500446506a0000e4-foobarz.rhcloud.com");
+				.onProperty("remoteAddress").containsExactly("127.7.233.2", "127.7.233.3", "127.7.233.1",
+						"127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1", "127.7.233.1",
+						"5190d701500446506a0000e4-foobarz.rhcloud.com");
 		assertThat(forwardablePorts)
-			.onProperty("remotePort").containsExactly(8080, 8080, 3528, 4447, 5445, 5455, 8080, 9990, 9999, 56756);
+				.onProperty("remotePort").containsExactly(8080, 8080, 3528, 4447, 5445, 5455, 8080, 9990, 9999, 56756);
 	}
-    
 
 }
diff --git a/src/test/java/com/openshift/internal/client/DomainResourceTest.java b/src/test/java/com/openshift/internal/client/DomainResourceTest.java
index 0b3d6566..40fdcddb 100644
--- a/src/test/java/com/openshift/internal/client/DomainResourceTest.java
+++ b/src/test/java/com/openshift/internal/client/DomainResourceTest.java
@@ -15,7 +15,7 @@
 import static com.openshift.client.utils.Samples.GET_DOMAINS_EMPTY;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARS;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_NOAPPS;
 import static com.openshift.client.utils.Samples.POST_JEKYLL_DOMAINS_FOOBARZ_APPLICATIONS;
 import static com.openshift.client.utils.Samples.POST_SCALABLE_DOMAINS_FOOBARZ_APPLICATIONS;
@@ -197,7 +197,7 @@ public void shouldRefreshDomainAndReloadApplications() throws Throwable {
 		// pre-conditions
 		mockDirector
 			.mockGetDomain("foobarz", GET_DOMAINS_FOOBARZ)
-			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		
 		final IDomain domain = user.getDomain("foobarz");
 		assertThat(domain).isNotNull();
@@ -215,7 +215,7 @@ public void shouldRefreshDomainAndNotReloadApplications() throws Throwable {
 		// pre-conditions
 		mockDirector
 			.mockGetDomain("foobarz", GET_DOMAINS_FOOBARZ)
-			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		final IDomain domain = user.getDomain("foobarz");
 		assertThat(domain).isNotNull();
 		// operation
@@ -245,7 +245,7 @@ public void shouldLoadListOfApplicationsWithNoElement() throws Throwable {
 	@Test
 	public void shouldLoadListOfApplicationsWith2Elements() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		// operation
 		final List apps = domain.getApplications();
 		// verifications
@@ -261,7 +261,7 @@ public void shouldLoadListOfApplicationsWith2Elements() throws Throwable {
 	@Test
 	public void shouldNotLoadApplicationTwice() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		// operation
 		List apps = domain.getApplications();
 		assertThat(apps).hasSize(2);
@@ -448,7 +448,7 @@ public void shouldRequestCreateApplicationWithEmbeddableCartridges() throws Thro
 	@Test(expected = OpenShiftException.class)
 	public void shouldNotCreateApplicationWithMissingName() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		// operation
 		domain.createApplication(null, CARTRIDGE_JBOSSAS_7, null, null);
 		// verifications
@@ -468,7 +468,7 @@ public void shouldNotCreateApplicationWithMissingCartridge() throws Throwable {
 	@Test
 	public void shouldNotRecreateExistingApplication() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		// operation
 		try {
 			domain.createApplication("springeap6", CARTRIDGE_JBOSSAS_7, null, null);
@@ -484,7 +484,7 @@ public void shouldNotRecreateExistingApplication() throws Throwable {
 	@Test
 	public void shouldGetApplicationByNameCaseInsensitive() throws Throwable {
 		// pre-conditions
-		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS);
+		mockDirector.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED);
 		// operation
 		IApplication lowerCaseQueryResult = domain.getApplicationByName("springeap6");
 		IApplication upperCaseQueryResult = domain.getApplicationByName("SPRINGEAP6");
diff --git a/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java b/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java
index 5affd00a..835873c0 100644
--- a/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java
+++ b/src/test/java/com/openshift/internal/client/EmbeddedCartridgeTest.java
@@ -11,17 +11,18 @@
 package com.openshift.internal.client;
 
 import static com.openshift.client.utils.Samples.GET_DOMAINS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_3EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_3EMBEDDED;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.net.SocketTimeoutException;
-import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -29,37 +30,40 @@
 
 import com.openshift.client.IApplication;
 import com.openshift.client.IDomain;
-import com.openshift.client.IField;
 import com.openshift.client.IHttpClient;
 import com.openshift.client.IUser;
-import com.openshift.client.Message;
-import com.openshift.client.Messages;
 import com.openshift.client.cartridge.EmbeddableCartridge;
 import com.openshift.client.cartridge.IEmbeddedCartridge;
+import com.openshift.client.utils.ResourcePropertyAssert;
+import com.openshift.client.utils.Samples;
 import com.openshift.client.utils.TestConnectionFactory;
 import com.openshift.internal.client.httpclient.HttpClientException;
-import com.openshift.internal.client.response.Link;
+import com.openshift.internal.client.response.CartridgeResourceDTO;
+import com.openshift.internal.client.response.ResourceProperties;
 
 /**
  * @author Andre Dietisheim
  */
 public class EmbeddedCartridgeTest {
 
-	private IUser user;
-	private IDomain domain;
 	private IApplication application;
+	private HttpClientMockDirector mockDirector;
 
 	@Before
 	public void setUp() throws SocketTimeoutException, HttpClientException, Throwable {
 		// pre-conditions
-		IHttpClient client = new HttpClientMockDirector()
-				.mockGetDomains(GET_DOMAINS)
-				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS)
-				.mockGetEmbeddableCartridges("foobarz", "springeap6",
-						GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED)
-				.client();
-		this.user = new TestConnectionFactory().getConnection(client).getUser();
-		this.domain = user.getDomain("foobarz");
+		this.mockDirector = new HttpClientMockDirector();
+		IHttpClient client =
+				mockDirector
+						.mockGetDomains(GET_DOMAINS)
+						.mockGetApplications(
+								"foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED)
+						.mockGetApplicationCartridges(
+								"foobarz", "springeap6",
+								GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_2EMBEDDED)
+						.client();
+		IUser user = new TestConnectionFactory().getConnection(client).getUser();
+		IDomain domain = user.getDomain("foobarz");
 		this.application = domain.getApplicationByName("springeap6");
 	}
 
@@ -117,7 +121,7 @@ public void shouldHaveUrl() throws Throwable {
 
 		// verifications
 		assertThat(mongo.getUrl()).isEqualTo("mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/");
-		assertThat(mysql.getUrl()).isNull();
+		assertThat(mysql.getUrl()).isEqualTo("mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/");
 	}
 
 	@Test
@@ -130,16 +134,117 @@ public void shouldHaveDisplayName() throws Throwable {
 		assertThat(mysql.getDisplayName()).isEqualTo("MySQL Database 5.1");
 	}
 
+	@Test
+	public void shouldHaveDescription() throws Throwable {
+		// pre-conditions
+		// operation
+		IEmbeddedCartridge mysql = application.getEmbeddedCartridge("mysql-5.1");
+
+		// verifications
+		assertThat(mysql.getDescription())
+				.isEqualTo(
+						"MySQL is a multi-user, multi-threaded SQL database server.");
+	}
+
+	@Test
+	public void shouldBeLoadedAfterRefresh() throws Throwable {
+		// pre-conditions
+		EmbeddedCartridgeResource mysql =
+				(EmbeddedCartridgeResource) application.getEmbeddedCartridge("mysql-5.1");
+		assertThat(mysql.isResourceLoaded()).isFalse();
+		// operation
+		mysql.refresh();
+
+		// verifications
+		assertThat(mysql.isResourceLoaded()).isTrue();
+	}
+
+	@Test
+	public void shouldLoadCartridgeOnDescription() throws Throwable {
+		// pre-conditions
+		EmbeddedCartridgeResource mysql =
+				(EmbeddedCartridgeResource) application.getEmbeddedCartridge("mysql-5.1");
+		assertThat(mysql.isResourceLoaded()).isFalse();
+
+		// operation
+		mysql.getDescription();
+
+		// verifications
+		assertThat(mysql.isResourceLoaded()).isTrue();
+	}
+
+	@Test
+	public void shouldNotLoadCartridgeTwice() throws Throwable {
+		// pre-conditions
+		IEmbeddedCartridge mysql = application.getEmbeddedCartridge("mysql-5.1");
+
+		// operation
+		mysql.getDescription(); // triggers application to load all cartridge
+								// resource(s)
+		mysql.getDisplayName(); // should not trigger a 2nd time
+
+		// verifications
+		mockDirector.verifyGetApplicationCartridges(1, application.getDomain().getId(), application.getName());
+	}
+
+	@Test
+	public void shouldUpdatePropertiesWhenRefreshed() throws Throwable {
+		// pre-conditions
+		HttpClientMockDirector mockDirector = new HttpClientMockDirector();
+		IHttpClient client = mockDirector
+				.mockGetDomains(GET_DOMAINS)
+				.mockGetApplications(
+						"foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_3EMBEDDED)
+				.mockGetApplicationCartridges(
+						"foobarz", "springeap6",
+						GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_3EMBEDDED)
+				.client();
+		IUser user = new TestConnectionFactory().getConnection(client).getUser();
+		IDomain domain = user.getDomain("foobarz");
+		IApplication application = domain.getApplicationByName("springeap6");
+		assertThat(application.getEmbeddedCartridges()).onProperty("name").contains("switchyard-0");
+
+		// operation
+		IEmbeddedCartridge switchyard = application.getEmbeddedCartridge("switchyard-0");
+		// no properties in embedded block (within application)
+		assertThat(switchyard.getProperties().size()).isEqualTo(0); 
+		switchyard.refresh();
+
+		// verification
+		mockDirector.verifyGetApplicationCartridges(1, "foobarz", "springeap6");
+		ResourceProperties properties = switchyard.getProperties();
+		// 1 property in embedded block in cartridges
+		assertThat(properties.size()).isEqualTo(1); 
+		new ResourcePropertyAssert(properties.getAll().iterator().next())
+				.hasName("module_path")
+				.hasDescription("Module Path")
+				.hasType("cart_data");
+	}
+
+	@Test
+	public void shouldRemoveRemovedCartridge() throws Throwable {
+		// pre-conditions
+		// contains mongo and mysql
+		assertThat(application.getEmbeddedCartridges().size()).isEqualTo(2);
+		assertThat(application.getEmbeddedCartridge("mysql-5.1")).isNotNull();
+		mockDirector.mockGetCartridges(Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_CARTRIDGES_1EMBEDDED);
+		
+		// operation
+		// triggers app to load updated list without mysql, only mongo
+		application.refresh();
+
+		// verifications
+		mockDirector.verifyGetApplicationCartridges(1, application.getDomain().getId(), application.getName());
+		// mysql missing now
+		assertThat(application.getEmbeddedCartridges().size()).isEqualTo(1);
+		assertThat(application.getEmbeddedCartridge("mysql-5.1")).isNull();
+	}
+
+	
 	private IEmbeddedCartridge createEmbeddedCartridgeMock(String name) {
 		ApplicationResource applicationResourceMock = Mockito.mock(ApplicationResource.class);
-		return new EmbeddedCartridgeResource(
-				name,
-				"displayName",
-				"description",
-				CartridgeType.EMBEDDED,
-				"embedded-info",
-				Collections. emptyMap(),
-				new Messages(Collections.> emptyMap()),
-				applicationResourceMock);
+		CartridgeResourceDTO cartridgeDTO = new CartridgeResourceDTO(name, null, null) {
+		};
+		return new EmbeddedCartridgeResource(cartridgeDTO, applicationResourceMock);
 	}
 }
diff --git a/src/test/java/com/openshift/internal/client/GearGroupsResourceTest.java b/src/test/java/com/openshift/internal/client/GearGroupsResourceTest.java
index 98095be9..2e4b19fa 100644
--- a/src/test/java/com/openshift/internal/client/GearGroupsResourceTest.java
+++ b/src/test/java/com/openshift/internal/client/GearGroupsResourceTest.java
@@ -11,8 +11,8 @@
 package com.openshift.internal.client;
 
 import static com.openshift.client.utils.Samples.GET_DOMAINS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_1EMBEDDED;
 import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_GEARGROUPS;
 import static org.fest.assertions.Assertions.assertThat;
 
@@ -42,8 +42,8 @@ public class GearGroupsResourceTest {
 	public void setup() throws Throwable {
 		IHttpClient client = new HttpClientMockDirector()
 			.mockGetDomains(GET_DOMAINS)
-			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS)
-			.mockGetApplication("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6)
+			.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED)
+			.mockGetApplication("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_1EMBEDDED)
 			.mockGetGearGroups("foobarz", "springeap6", GET_DOMAINS_FOOBARZ_APPLICATIONS_SPRINGEAP6_GEARGROUPS)
 			.client();
 		IUser user = new TestConnectionFactory().getConnection(client).getUser();
diff --git a/src/test/java/com/openshift/internal/client/HttpClientMockDirector.java b/src/test/java/com/openshift/internal/client/HttpClientMockDirector.java
index 4f51cd26..d38906bf 100644
--- a/src/test/java/com/openshift/internal/client/HttpClientMockDirector.java
+++ b/src/test/java/com/openshift/internal/client/HttpClientMockDirector.java
@@ -230,6 +230,16 @@ public HttpClientMockDirector mockGetApplication(String domainId, String applica
 		return this;
 	}
 
+	public HttpClientMockDirector mockGetApplicationCartridges(String domainId, String applicationName,
+			Samples cartridgesResourceResponse)
+			throws SocketTimeoutException, HttpClientException {
+		when(client.get(
+				urlEndsWith("/domains/" + domainId + "/applications/" + applicationName + "/cartridges"),
+				anyInt()))
+				.thenReturn(cartridgesResourceResponse.getContentAsString());
+		return this;
+	}
+
 	public HttpClientMockDirector mockGetGearGroups(String domainId, String applicationName,
 			Samples gearGroupsResourceResponse)
 			throws SocketTimeoutException, HttpClientException {
@@ -250,16 +260,6 @@ public HttpClientMockDirector mockPostApplicationEvent(String domainId, String a
 		return this;
 	}
 
-	public HttpClientMockDirector mockGetEmbeddableCartridges(String domainId, String applicationName,
-			Samples cartridgesResourcesResponse)
-			throws SocketTimeoutException, HttpClientException {
-		when(client.get(
-				urlEndsWith("/domains/" + domainId + "/applications/" + applicationName + "/cartridges"),
-				anyInt()))
-				.thenReturn(cartridgesResourcesResponse.getContentAsString());
-		return this;
-	}
-
 	public HttpClientMockDirector mockAddEmbeddableCartridge(String domainId, String applicationName,
 			Samples addEmbeddedCartridgeResponse)
 			throws SocketTimeoutException, HttpClientException, UnsupportedEncodingException {
@@ -304,18 +304,18 @@ public HttpClientMockDirector verifyPostApplicationEvent(String domainId, String
 		return this;
 	}
 
-	public HttpClientMockDirector verifyReloadEmbeddableCartridges(String domainId, String applicationName)
+	public HttpClientMockDirector verifyListEmbeddableCartridges(int times, String domainId, String applicationName)
 			throws SocketTimeoutException, HttpClientException {
-		verify(client, times(2)).get(
+		verify(client, times(times)).get(
 				urlEndsWith("/domains/" + domainId + "/applications/" + applicationName + "/cartridges"),
 				anyInt());
 		return this;
 
 	}
 
-	public HttpClientMockDirector verifyGetEmbeddableCartridges(String domainId, String applicationName)
+	public HttpClientMockDirector verifyGetApplicationCartridges(int times, String domainId, String applicationName)
 			throws SocketTimeoutException, HttpClientException {
-		verify(client, times(1)).get(
+		verify(client, times(times)).get(
 				urlEndsWith("/domains/" + domainId + "/applications/" + applicationName + "/cartridges"),
 				anyInt());
 		return this;
diff --git a/src/test/java/com/openshift/internal/client/OpenShiftExceptionTest.java b/src/test/java/com/openshift/internal/client/OpenShiftExceptionTest.java
index 9754cba2..156c2489 100644
--- a/src/test/java/com/openshift/internal/client/OpenShiftExceptionTest.java
+++ b/src/test/java/com/openshift/internal/client/OpenShiftExceptionTest.java
@@ -12,7 +12,7 @@
 
 import static com.openshift.client.utils.Samples.DELETE_DOMAINS_FOOBARZ_KO_EXISTINGAPPS;
 import static com.openshift.client.utils.Samples.GET_DOMAINS;
-import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS;
+import static com.openshift.client.utils.Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.junit.Assert.fail;
 
@@ -59,7 +59,7 @@ public void setup() throws Throwable {
 		this.mockDirector = new HttpClientMockDirector();
 		this.clientMock = mockDirector
 				.mockGetDomains(GET_DOMAINS)
-				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS)
+				.mockGetApplications("foobarz", GET_DOMAINS_FOOBARZ_APPLICATIONS_1EMBEDDED)
 				.client();
 		this.user = new TestConnectionFactory().getConnection(clientMock).getUser();
 	}
diff --git a/src/test/java/com/openshift/internal/client/response/ResourceDTOFactoryTest.java b/src/test/java/com/openshift/internal/client/response/ResourceDTOFactoryTest.java
index 5175ea63..50462971 100755
--- a/src/test/java/com/openshift/internal/client/response/ResourceDTOFactoryTest.java
+++ b/src/test/java/com/openshift/internal/client/response/ResourceDTOFactoryTest.java
@@ -10,7 +10,6 @@
  ******************************************************************************/
 package com.openshift.internal.client.response;
 
-import static com.openshift.internal.client.response.ILinkNames.ADD_APPLICATION;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.junit.Assert.assertNotNull;
 
@@ -22,18 +21,23 @@
 import org.fest.assertions.Condition;
 import org.junit.Test;
 
+import com.openshift.client.ApplicationScale;
 import com.openshift.client.GearState;
 import com.openshift.client.HttpMethod;
 import com.openshift.client.IField;
 import com.openshift.client.IGear;
+import com.openshift.client.IGearProfile;
 import com.openshift.client.Message;
 import com.openshift.client.Messages;
 import com.openshift.client.utils.MessageAssert;
+import com.openshift.client.utils.ResourcePropertyAssert;
 import com.openshift.client.utils.Samples;
 import com.openshift.internal.client.CartridgeType;
 
 public class ResourceDTOFactoryTest {
 
+	private static final String LINK_ADD_APPLICATION = "ADD_APPLICATION";
+
 	private static final class ValidLinkCondition extends Condition> {
 		@Override
 		public boolean matches(Map links) {
@@ -141,7 +145,7 @@ public void shouldUnmarshallGetDomainsWith1ExistingResponseBody() throws Throwab
 		final DomainResourceDTO domainDTO = domainDTOs.get(0);
 		assertThat(domainDTO.getId()).isEqualTo("foobarz");
 		assertThat(domainDTO.getLinks()).hasSize(5);
-		final Link link = domainDTO.getLink(ADD_APPLICATION);
+		final Link link = domainDTO.getLink(LINK_ADD_APPLICATION);
 		assertThat(link).isNotNull();
 		assertThat(link.getHref()).isEqualTo("https://openshift.redhat.com/broker/rest/domains/foobarz/applications");
 		assertThat(link.getRel()).isEqualTo("Create new application");
@@ -193,7 +197,7 @@ public void shouldUnmarshallDeleteDomainKoNotFoundResponseBody() throws Throwabl
 	@Test
 	public void shouldUnmarshallGetApplicationsWith2AppsResponseBody() throws Throwable {
 		// pre-conditions
-		String content = Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS.getContentAsString();
+		String content = Samples.GET_DOMAINS_FOOBARZ_APPLICATIONS_2EMBEDDED.getContentAsString();
 		assertNotNull(content);
 		// operation
 		RestResponse response = ResourceDTOFactory.get(content);
@@ -201,6 +205,29 @@ public void shouldUnmarshallGetApplicationsWith2AppsResponseBody() throws Throwa
 		assertThat(response.getDataType()).isEqualTo(EnumDataType.applications);
 		final List applications = response.getData();
 		assertThat(applications).hasSize(2);
+		ApplicationResourceDTO applicationDTO = applications.get(0);
+		assertThat(applicationDTO.getDomainId()).isEqualTo("foobarz");
+		assertThat(applicationDTO.getCreationTime()).isEqualTo("2013-04-30T17:00:41Z");
+		assertThat(applicationDTO.getApplicationUrl()).isEqualTo("http://springeap6-foobarz.rhcloud.com/");
+		assertThat(applicationDTO.getFramework()).isEqualTo("jbosseap-6.0");
+		assertThat(applicationDTO.getName()).isEqualTo("springeap6");
+		assertThat(applicationDTO.getApplicationScale()).isEqualTo(ApplicationScale.NO_SCALE);
+		assertThat(applicationDTO.getGitUrl()).isEqualTo("ssh://517ff8b9500446729b00008e@springeap6-foobarz.rhcloud.com/~/git/springeap6.git/");
+		assertThat(applicationDTO.getInitialGitUrl()).isEqualTo("git://github.com/openshift/spring-eap6-quickstart.git");
+		assertThat(applicationDTO.getUuid()).isEqualTo("517ff8b9500446729b00008e");
+		assertThat(applicationDTO.getGearProfile()).isEqualTo(IGearProfile.SMALL);
+		assertThat(applicationDTO.getAliases()).containsExactly("jbosstools.org");
+		assertThat(applicationDTO.getUuid()).isEqualTo("517ff8b9500446729b00008e");
+		assertThat(applicationDTO.getEmbeddedCartridges()).onProperty("name").containsExactly("mongodb-2.2", "mysql-5.1");
+		CartridgeResourceDTO cartridgeResourceDTO = applicationDTO.getEmbeddedCartridges().get(0);
+		assertThat(cartridgeResourceDTO.getType()).isEqualTo(CartridgeType.EMBEDDED);
+		assertThat(cartridgeResourceDTO.getName()).isEqualTo("mongodb-2.2");
+		assertThat(cartridgeResourceDTO.getDescription()).isNull(); // not present in embedded node in application response (only in cartridges response)
+		assertThat(cartridgeResourceDTO.getDisplayName()).isNull(); // dito
+		assertThat(cartridgeResourceDTO.getMessages()).isNull(); // dito
+		assertThat(cartridgeResourceDTO.getLinks()).isNull(); // dito
+		List properties = cartridgeResourceDTO.getProperties().getAll();
+		assertThat(properties).onProperty("name").containsExactly("connection_url", "username", "password", "database_name", "info");
 	}
 
 	/**
@@ -229,7 +256,8 @@ public void shouldUnmarshallGetApplicationWithAliasesResponseBody() throws Throw
 
 	/**
 	 * Should unmarshall get application response body.
-	 * @throws Throwable 
+	 * 
+	 * @throws Throwable
 	 */
 	@Test
 	public void shouldUnmarshallAddApplicationEmbeddedCartridgeResponseBody() throws Throwable {
@@ -243,13 +271,13 @@ public void shouldUnmarshallAddApplicationEmbeddedCartridgeResponseBody() throws
 		// verifications
 		Messages messages = response.getMessages();
 		assertThat(messages.size()).isEqualTo(3);
-		Collection  defaultMessages = messages.getBy(IField.DEFAULT);
+		Collection defaultMessages = messages.getBy(IField.DEFAULT);
 		assertThat(defaultMessages).isNotEmpty();
 		new MessageAssert(defaultMessages.iterator().next())
 				.hasField(IField.DEFAULT)
 				.hasExitCode(-1)
 				.hasText("Added mysql-5.1 to application springeap6");
-		Collection  resultMessages = messages.getBy(IField.RESULT);
+		Collection resultMessages = messages.getBy(IField.RESULT);
 		assertThat(resultMessages).isNotEmpty();
 		new MessageAssert(resultMessages.iterator().next())
 				.hasField(IField.RESULT)
@@ -260,7 +288,7 @@ public void shouldUnmarshallAddApplicationEmbeddedCartridgeResponseBody() throws
 								+ "Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/\n\n"
 								+ "You can manage your new MySQL database by also embedding phpmyadmin-3.4.\n"
 								+ "The phpmyadmin username and password will be the same as the MySQL credentials above.\n");
-		Collection  appInfoMessages = messages.getBy(IField.APPINFO);
+		Collection appInfoMessages = messages.getBy(IField.APPINFO);
 		assertThat(appInfoMessages).isNotEmpty();
 		new MessageAssert(appInfoMessages.iterator().next())
 				.hasField(IField.APPINFO)
@@ -270,7 +298,32 @@ public void shouldUnmarshallAddApplicationEmbeddedCartridgeResponseBody() throws
 		assertThat(response.getDataType()).isEqualTo(EnumDataType.cartridge);
 		final CartridgeResourceDTO cartridge = response.getData();
 		assertThat(cartridge.getName()).isEqualTo("mysql-5.1");
+		assertThat(cartridge.getDisplayName()).isEqualTo("MySQL Database 5.1");
+		assertThat(cartridge.getDescription()).isEqualTo("MySQL is a multi-user, multi-threaded SQL database server.");
 		assertThat(cartridge.getType()).isEqualTo(CartridgeType.EMBEDDED);
+		ResourceProperties properties = cartridge.getProperties();
+		assertThat(properties).isNotNull();
+		assertThat(properties.size()).isEqualTo(4);
+		new ResourcePropertyAssert(properties.getAll().get(0))
+				.hasName("username")
+				.hasDescription("Root user on mysql database")
+				.hasType("cart_data")
+				.hasValue("adminnFC22YQ");
+		new ResourcePropertyAssert(properties.getAll().get(1))
+				.hasName("password")
+				.hasDescription("Password for root user on mysql database")
+				.hasType("cart_data")
+				.hasValue("U1IX8AIlrEcl");
+		new ResourcePropertyAssert(properties.getAll().get(2))
+				.hasName("database_name")
+				.hasDescription("MySQL DB name")
+				.hasType("cart_data")
+				.hasValue("springeap6");
+		new ResourcePropertyAssert(properties.getAll().get(3))
+				.hasName("connection_url")
+				.hasDescription("MySQL DB connection URL")
+				.hasType("cart_data")
+				.hasValue("mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/");
 		assertThat(cartridge.getLinks()).hasSize(7);
 
 	}
@@ -290,16 +343,11 @@ public void shouldUnmarshallGetApplicationCartridgesWith1ElementResponseBody() t
 		// verifications
 		assertThat(response.getMessages().size()).isEqualTo(0);
 		assertThat(response.getDataType()).isEqualTo(EnumDataType.cartridges);
-		final List cartridges = response.getData();
+		final Map cartridges = response.getData();
 		assertThat(cartridges).hasSize(3); // mysql, mongo, jbosseap
-		assertThat(cartridges).onProperty("name").contains("mongodb-2.2", "mysql-5.1", "jbosseap-6.0");
+		assertThat(cartridges.values()).onProperty("name").contains("mongodb-2.2", "mysql-5.1", "jbosseap-6.0");
 	}
 
-	/**
-	 * Should unmarshall get application response body.
-	 * 
-	 * @throws Throwable
-	 */
 	@Test
 	public void shouldUnmarshallGetApplicationCartridgesWith3ElementsResponseBody() throws Throwable {
 		// pre-conditions
@@ -310,9 +358,9 @@ public void shouldUnmarshallGetApplicationCartridgesWith3ElementsResponseBody()
 		// verifications
 		assertThat(response.getMessages().size()).isEqualTo(0);
 		assertThat(response.getDataType()).isEqualTo(EnumDataType.cartridges);
-		final List cartridges = response.getData();
+		Map cartridges = response.getData();
 		assertThat(cartridges).hasSize(3);
-		assertThat(cartridges).onProperty("name").contains("mongodb-2.2", "mysql-5.1", "jbosseap-6.0");
+		assertThat(cartridges.values()).onProperty("name").contains("mongodb-2.2", "mysql-5.1", "jbosseap-6.0");
 	}
 
 	@Test
diff --git a/src/test/resources/samples/get-domains-foobarz-applications-springeap6-cartridges_3embedded.json b/src/test/resources/samples/get-domains-foobarz-applications-springeap6-cartridges_3embedded.json
new file mode 100644
index 00000000..6e4301f2
--- /dev/null
+++ b/src/test/resources/samples/get-domains-foobarz-applications-springeap6-cartridges_3embedded.json
@@ -0,0 +1,825 @@
+{
+   "api_version":1.2,
+   "data":[
+      {
+         "additional_gear_storage":0,
+         "base_gear_storage":1,
+         "collocated_with":[
+            "switchyard-0",
+            "cron-1.4",
+            "metrics-0.1"
+         ],
+         "current_scale":1,
+         "description":"Market-leading open source enterprise platform for next-generation, highly transactional enterprise Java applications. Build and deploy enterprise Java in the cloud.",
+         "display_name":"JBoss Enterprise Application Platform 6.1.0",
+         "gear_profile":"small",
+         "help_topics":{
+
+         },
+         "license":"LGPL",
+         "license_url":"http://www.gnu.org/copyleft/lesser.txt",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get cartridge",
+               "required_params":[
+
+               ]
+            },
+            "UPDATE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6",
+               "method":"PUT",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Additional filesystem storage in gigabytes on each gear having cartridge jbosseap-6",
+                     "name":"additional_gear_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears having cartridge jbosseap-6",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears having cartridge jbosseap-6",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Update cartridge configuration",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/jbosseap-6",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete cartridge",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"jbosseap-6",
+         "properties":[
+            {
+               "name":"OPENSHIFT_JBOSSEAP_LOG_DIR",
+               "type":"environment",
+               "description":"Directory to store application log files."
+            },
+            {
+               "name":"OPENSHIFT_TMP_DIR",
+               "type":"environment",
+               "description":"Directory to store application temporary files."
+            },
+            {
+               "name":"OPENSHIFT_REPO_DIR",
+               "type":"environment",
+               "description":"Application root directory where application files reside. This directory is reset every time you do a git-push"
+            },
+            {
+               "name":"OPENSHIFT_JBOSSEAP_HTTP_PORT",
+               "type":"environment",
+               "description":"Internal port to which the web-framework binds to."
+            },
+            {
+               "name":"OPENSHIFT_JBOSSEAP_IP",
+               "type":"environment",
+               "description":"Internal IP to which the web-framework binds to."
+            },
+            {
+               "name":"OPENSHIFT_APP_DNS",
+               "type":"environment",
+               "description":"Fully qualified domain name for the application."
+            },
+            {
+               "name":"OPENSHIFT_APP_NAME",
+               "type":"environment",
+               "description":"Application name"
+            },
+            {
+               "name":"OPENSHIFT_DATA_DIR",
+               "type":"environment",
+               "description":"Directory to store application data files. Preserved across git-pushes. Not shared across gears."
+            },
+            {
+               "name":"OPENSHIFT_APP_UUID",
+               "type":"environment",
+               "description":"Unique ID which identified the application. Does not change between gears."
+            },
+            {
+               "name":"OPENSHIFT_GEAR_UUID",
+               "type":"environment",
+               "description":"Unique ID which identified the gear. This value changes between gears."
+            }
+         ],
+         "scales_from":1,
+         "scales_to":1,
+         "scales_with":null,
+         "status_messages":null,
+         "supported_scales_from":1,
+         "supported_scales_to":1,
+         "tags":[
+            "service",
+            "web_framework",
+            "java",
+            "jboss",
+            "jee_full_profile"
+         ],
+         "type":"standalone",
+         "url":null,
+         "usage_rates":[
+            {
+               "plan_id":"silver",
+               "usd":0.03,
+               "cad":0.03,
+               "eur":0.02,
+               "duration":"hour"
+            }
+         ],
+         "version":"6",
+         "website":"http://www.redhat.com/products/jbossenterprisemiddleware/application-platform/"
+      },
+      {
+         "additional_gear_storage":0,
+         "base_gear_storage":1,
+         "collocated_with":[
+            "jbosseap-6",
+            "cron-1.4",
+            "metrics-0.1"
+         ],
+         "current_scale":1,
+         "description":"SwitchYard is a lightweight service delivery framework providing full lifecycle support for developing, deploying, and managing service-oriented applications.",
+         "display_name":"SwitchYard 0.8.0",
+         "gear_profile":"small",
+         "help_topics":{
+
+         },
+         "license":"ASL 2.0",
+         "license_url":"",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get cartridge",
+               "required_params":[
+
+               ]
+            },
+            "UPDATE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0",
+               "method":"PUT",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Additional filesystem storage in gigabytes on each gear having cartridge switchyard-0",
+                     "name":"additional_gear_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears having cartridge switchyard-0",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears having cartridge switchyard-0",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Update cartridge configuration",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/switchyard-0",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete cartridge",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"switchyard-0",
+         "properties":[
+            {
+               "name":"module_path",
+               "type":"cart_data",
+               "description":"Module Path"
+            }
+         ],
+         "scales_from":1,
+         "scales_to":1,
+         "scales_with":null,
+         "status_messages":null,
+         "supported_scales_from":1,
+         "supported_scales_to":1,
+         "tags":[
+            "embedded"
+         ],
+         "type":"embedded",
+         "url":null,
+         "usage_rates":[
+
+         ],
+         "version":"0",
+         "website":"http://www.jboss.org/switchyard"
+      },
+      {
+         "additional_gear_storage":0,
+         "base_gear_storage":1,
+         "collocated_with":[
+            "jbosseap-6",
+            "switchyard-0",
+            "metrics-0.1"
+         ],
+         "current_scale":1,
+         "description":"The Cron cartridge allows you to run command line programs at scheduled times. Use this for background jobs and periodic processing.",
+         "display_name":"Cron 1.4",
+         "gear_profile":"small",
+         "help_topics":{
+
+         },
+         "license":"ASL 2.0",
+         "license_url":"http://www.apache.org/licenses/LICENSE-2.0.txt",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get cartridge",
+               "required_params":[
+
+               ]
+            },
+            "UPDATE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4",
+               "method":"PUT",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Additional filesystem storage in gigabytes on each gear having cartridge cron-1.4",
+                     "name":"additional_gear_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears having cartridge cron-1.4",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears having cartridge cron-1.4",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Update cartridge configuration",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/cron-1.4",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete cartridge",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"cron-1.4",
+         "properties":[
+
+         ],
+         "scales_from":1,
+         "scales_to":1,
+         "scales_with":null,
+         "status_messages":null,
+         "supported_scales_from":1,
+         "supported_scales_to":1,
+         "tags":[
+            "embedded"
+         ],
+         "type":"embedded",
+         "url":null,
+         "usage_rates":[
+
+         ],
+         "version":"1.4",
+         "website":"http://www.openshift.com/"
+      },
+      {
+         "additional_gear_storage":0,
+         "base_gear_storage":1,
+         "collocated_with":[
+            "jbosseap-6",
+            "switchyard-0",
+            "cron-1.4"
+         ],
+         "current_scale":1,
+         "description":"An experimental cartridge that demonstrates retrieving real-time statistics from your application. May be removed or replaced in the future.",
+         "display_name":"OpenShift Metrics 0.1",
+         "gear_profile":"small",
+         "help_topics":{
+
+         },
+         "license":"GPLv2",
+         "license_url":"",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get cartridge",
+               "required_params":[
+
+               ]
+            },
+            "UPDATE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1",
+               "method":"PUT",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Additional filesystem storage in gigabytes on each gear having cartridge metrics-0.1",
+                     "name":"additional_gear_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears having cartridge metrics-0.1",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears having cartridge metrics-0.1",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Update cartridge configuration",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload cartridge",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges/metrics-0.1",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete cartridge",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"metrics-0.1",
+         "properties":[
+            {
+               "name":"connection_url",
+               "type":"cart_data",
+               "description":"Application metrics URL",
+               "value":"https://springeap6-foobarz.rhcloud.com/metrics/"
+            }
+         ],
+         "scales_from":1,
+         "scales_to":1,
+         "scales_with":null,
+         "status_messages":null,
+         "supported_scales_from":1,
+         "supported_scales_to":1,
+         "tags":[
+            "embedded"
+         ],
+         "type":"embedded",
+         "url":null,
+         "usage_rates":[
+
+         ],
+         "version":"0.1",
+         "website":"https://openshift.redhat.com/"
+      }
+   ],
+   "messages":[
+      {
+         "exit_code":0,
+         "field":null,
+         "severity":"info",
+         "text":"Listing cartridges for application springeap6 under domain foobarz"
+      }
+   ],
+   "status":"ok",
+   "supported_api_versions":[
+      1.0,
+      1.1,
+      1.2,
+      1.3,
+      1.4,
+      1.5,
+      1.6
+   ],
+   "type":"cartridges",
+   "version":"1.2"
+}
diff --git a/src/test/resources/samples/get-domains-foobarz-applications-springeap6.json b/src/test/resources/samples/get-domains-foobarz-applications-springeap6_1embedded.json
similarity index 99%
rename from src/test/resources/samples/get-domains-foobarz-applications-springeap6.json
rename to src/test/resources/samples/get-domains-foobarz-applications-springeap6_1embedded.json
index 2de9734c..5cd9ee9a 100644
--- a/src/test/resources/samples/get-domains-foobarz-applications-springeap6.json
+++ b/src/test/resources/samples/get-domains-foobarz-applications-springeap6_1embedded.json
@@ -12,7 +12,7 @@
       "embedded":{
          "mongodb-2.2":{
             "connection_url":"mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/",
-            "username":"admin",
+            "username":"adietish",
             "password":"NNxXMT1z8dVj",
             "database_name":"springeap6",
             "info":"Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/"
diff --git a/src/test/resources/samples/get-domains-foobarz-applications-springeap6_2embedded.json b/src/test/resources/samples/get-domains-foobarz-applications-springeap6_2embedded.json
new file mode 100644
index 00000000..26001595
--- /dev/null
+++ b/src/test/resources/samples/get-domains-foobarz-applications-springeap6_2embedded.json
@@ -0,0 +1,440 @@
+{
+   "data":{
+      "aliases":[
+         "jbosstools.org"
+      ],
+      "app_url":"http://springeap6-foobarz.rhcloud.com/",
+      "build_job_url":null,
+      "building_app":null,
+      "building_with":null,
+      "creation_time":"2013-04-30T17:00:41Z",
+      "domain_id":"foobarz",
+      "embedded":{
+         "mongodb-2.2":{
+            "connection_url":"mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/",
+            "username":"adietish",
+            "password":"NNxXMT1z8dVj",
+            "database_name":"springeap6",
+            "info":"Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/"
+         },
+         "mysql-5.1":{
+             "connection_url":"mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/",
+             "username":"admin",
+             "password":"adminnlqrBcW",
+             "database_name":"springeap6",
+             "info":"Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/"
+          }
+      },
+      "framework":"jbosseap-6.0",
+      "gear_count":1,
+      "gear_profile":"small",
+      "git_url":"ssh://517ff8b9500446729b00008e@springeap6-foobarz.rhcloud.com/~/git/springeap6.git/",
+      "health_check_path":"health",
+      "initial_git_url":"git://github.com/openshift/spring-eap6-quickstart.git",
+      "links":{
+         "GET":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+            "method":"GET",
+            "optional_params":[
+
+            ],
+            "rel":"Get application",
+            "required_params":[
+
+            ]
+         },
+         "GET_DESCRIPTOR":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/descriptor",
+            "method":"GET",
+            "optional_params":[
+
+            ],
+            "rel":"Get application descriptor",
+            "required_params":[
+
+            ]
+         },
+         "GET_GEAR_GROUPS":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/gear_groups",
+            "method":"GET",
+            "optional_params":[
+
+            ],
+            "rel":"Get application gear groups",
+            "required_params":[
+
+            ]
+         },
+         "START":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Start application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "start"
+                  ]
+               }
+            ]
+         },
+         "STOP":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Stop application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "stop"
+                  ]
+               }
+            ]
+         },
+         "RESTART":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Restart application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "restart"
+                  ]
+               }
+            ]
+         },
+         "FORCE_STOP":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Force stop application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "force-stop"
+                  ]
+               }
+            ]
+         },
+         "ADD_ALIAS":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Add application alias",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "add-alias"
+                  ]
+               },
+               {
+                  "description":"The server alias for the application",
+                  "invalid_options":[
+
+                  ],
+                  "name":"alias",
+                  "type":"string",
+                  "valid_options":[
+
+                  ]
+               }
+            ]
+         },
+         "REMOVE_ALIAS":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Remove application alias",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "remove-alias"
+                  ]
+               },
+               {
+                  "description":"The application alias to be removed",
+                  "invalid_options":[
+
+                  ],
+                  "name":"alias",
+                  "type":"string",
+                  "valid_options":[
+                     "jbosstools.org"
+                  ]
+               }
+            ]
+         },
+         "SCALE_UP":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Scale up application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "scale-up"
+                  ]
+               }
+            ]
+         },
+         "SCALE_DOWN":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Scale down application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "scale-down"
+                  ]
+               }
+            ]
+         },
+         "TIDY":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Tidy the application framework",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "tidy"
+                  ]
+               }
+            ]
+         },
+         "RELOAD":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Reload the application",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "reload"
+                  ]
+               }
+            ]
+         },
+         "THREAD_DUMP":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+            "method":"POST",
+            "optional_params":[
+
+            ],
+            "rel":"Trigger thread dump",
+            "required_params":[
+               {
+                  "description":"event",
+                  "invalid_options":[
+
+                  ],
+                  "name":"event",
+                  "type":"string",
+                  "valid_options":[
+                     "thread-dump"
+                  ]
+               }
+            ]
+         },
+         "DELETE":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+            "method":"DELETE",
+            "optional_params":[
+
+            ],
+            "rel":"Delete application",
+            "required_params":[
+
+            ]
+         },
+         "ADD_CARTRIDGE":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+            "method":"POST",
+            "optional_params":[
+               {
+                  "default_value":null,
+                  "description":"The component to colocate with",
+                  "name":"colocate_with",
+                  "type":"string",
+                  "valid_options":[
+                     "jbosseap-6.0",
+                     "mongodb-2.2"
+                  ]
+               },
+               {
+                  "default_value":null,
+                  "description":"Minimum number of gears to run the component on.",
+                  "name":"scales_from",
+                  "type":"integer",
+                  "valid_options":[
+
+                  ]
+               },
+               {
+                  "default_value":null,
+                  "description":"Maximum number of gears to run the component on.",
+                  "name":"scales_to",
+                  "type":"integer",
+                  "valid_options":[
+
+                  ]
+               },
+               {
+                  "default_value":null,
+                  "description":"Additional GB of space to request on all gears running this component.",
+                  "name":"additional_storage",
+                  "type":"integer",
+                  "valid_options":[
+
+                  ]
+               }
+            ],
+            "rel":"Add embedded cartridge",
+            "required_params":[
+               {
+                  "description":"framework-type, e.g.: mongodb-2.0",
+                  "invalid_options":[
+
+                  ],
+                  "name":"name",
+                  "type":"string",
+                  "valid_options":[
+                     "mongodb-2.2",
+                     "switchyard-0.6",
+                     "cron-1.4",
+                     "mysql-5.1",
+                     "postgresql-8.4",
+                     "haproxy-1.4",
+                     "10gen-mms-agent-0.1",
+                     "phpmyadmin-3.4",
+                     "metrics-0.1",
+                     "rockmongo-1.1",
+                     "jenkins-client-1.4"
+                  ]
+               }
+            ]
+         },
+         "LIST_CARTRIDGES":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+            "method":"GET",
+            "optional_params":[
+
+            ],
+            "rel":"List embedded cartridges",
+            "required_params":[
+
+            ]
+         },
+         "DNS_RESOLVABLE":{
+            "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/dns_resolvable",
+            "method":"GET",
+            "optional_params":[
+
+            ],
+            "rel":"Resolve DNS",
+            "required_params":[
+
+            ]
+         }
+      },
+      "name":"springeap6",
+      "scalable":false,
+      "ssh_url":"ssh://517ff8b9500446729b00008e@springeap6-foobarz.rhcloud.com",
+      "uuid":"517ff8b9500446729b00008e"
+   },
+   "messages":[
+
+   ],
+   "status":"ok",
+   "supported_api_versions":[
+      1.0,
+      1.1,
+      1.2,
+      1.3,
+      1.4
+   ],
+   "type":"application",
+   "version":"1.2"
+}
\ No newline at end of file
diff --git a/src/test/resources/samples/get-domains-foobarz-applications.json b/src/test/resources/samples/get-domains-foobarz-applications_1embedded.json
similarity index 100%
rename from src/test/resources/samples/get-domains-foobarz-applications.json
rename to src/test/resources/samples/get-domains-foobarz-applications_1embedded.json
diff --git a/src/test/resources/samples/get-domains-foobarz-applications_2embedded.json b/src/test/resources/samples/get-domains-foobarz-applications_2embedded.json
new file mode 100644
index 00000000..38141080
--- /dev/null
+++ b/src/test/resources/samples/get-domains-foobarz-applications_2embedded.json
@@ -0,0 +1,856 @@
+{
+   "data":[
+      {
+         "aliases":[
+			"jbosstools.org"
+         ],
+         "app_url":"http://springeap6-foobarz.rhcloud.com/",
+         "build_job_url":null,
+         "building_app":null,
+         "building_with":null,
+         "creation_time":"2013-04-30T17:00:41Z",
+         "domain_id":"foobarz",
+         "embedded":{
+            "mongodb-2.2":{
+               "connection_url":"mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/",
+               "username":"admin",
+               "password":"NNxXMT1z8dVj",
+               "database_name":"springeap6",
+               "info":"Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/"
+            },
+            "mysql-5.1":{
+                "connection_url":"mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/",
+                "username":"admin",
+                "password":"adminnlqrBcW",
+                "database_name":"springeap6",
+                "info":"Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/"
+             }
+         },
+         "framework":"jbosseap-6.0",
+         "gear_count":1,
+         "gear_profile":"small",
+         "git_url":"ssh://517ff8b9500446729b00008e@springeap6-foobarz.rhcloud.com/~/git/springeap6.git/",
+         "health_check_path":"health",
+         "initial_git_url":"git://github.com/openshift/spring-eap6-quickstart.git",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application",
+               "required_params":[
+
+               ]
+            },
+            "GET_DESCRIPTOR":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/descriptor",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application descriptor",
+               "required_params":[
+
+               ]
+            },
+            "GET_GEAR_GROUPS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/gear_groups",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application gear groups",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "FORCE_STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Force stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "force-stop"
+                     ]
+                  }
+               ]
+            },
+            "ADD_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Add application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "add-alias"
+                     ]
+                  },
+                  {
+                     "description":"The server alias for the application",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "REMOVE_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Remove application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "remove-alias"
+                     ]
+                  },
+                  {
+                     "description":"The application alias to be removed",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "SCALE_UP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale up application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-up"
+                     ]
+                  }
+               ]
+            },
+            "SCALE_DOWN":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale down application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-down"
+                     ]
+                  }
+               ]
+            },
+            "TIDY":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Tidy the application framework",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "tidy"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload the application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "THREAD_DUMP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Trigger thread dump",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "thread-dump"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete application",
+               "required_params":[
+
+               ]
+            },
+            "ADD_CARTRIDGE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"The component to colocate with",
+                     "name":"colocate_with",
+                     "type":"string",
+                     "valid_options":[
+                        "jbosseap-6.0",
+                        "mongodb-2.2"
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears to run the component on.",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears to run the component on.",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Additional GB of space to request on all gears running this component.",
+                     "name":"additional_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"framework-type, e.g.: mongodb-2.0",
+                     "invalid_options":[
+
+                     ],
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+                        "mongodb-2.2",
+                        "switchyard-0.6",
+                        "cron-1.4",
+                        "mysql-5.1",
+                        "postgresql-8.4",
+                        "haproxy-1.4",
+                        "10gen-mms-agent-0.1",
+                        "phpmyadmin-3.4",
+                        "metrics-0.1",
+                        "rockmongo-1.1",
+                        "jenkins-client-1.4"
+                     ]
+                  }
+               ]
+            },
+            "LIST_CARTRIDGES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List embedded cartridges",
+               "required_params":[
+
+               ]
+            },
+            "DNS_RESOLVABLE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/dns_resolvable",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Resolve DNS",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"springeap6",
+         "scalable":false,
+         "ssh_url":"ssh://517ff8b9500446729b00008e@springeap6-foobarz.rhcloud.com",
+         "uuid":"517ff8b9500446729b00008e"
+      },
+      {
+         "aliases":[
+
+         ],
+         "app_url":"http://scalable-foobarz.rhcloud.com/",
+         "build_job_url":null,
+         "building_app":null,
+         "building_with":null,
+         "creation_time":"2013-04-30T17:03:38Z",
+         "domain_id":"foobarz",
+         "embedded":{
+            "haproxy-1.4":{
+
+            }
+         },
+         "framework":"jbosseap-6.0",
+         "gear_count":1,
+         "gear_profile":"small",
+         "git_url":"ssh://517ff96a500446729b0000bc@scalable-foobarz.rhcloud.com/~/git/scalable.git/",
+         "health_check_path":"health",
+         "initial_git_url":"git://github.com/openshift/spring-eap6-quickstart.git",
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application",
+               "required_params":[
+
+               ]
+            },
+            "GET_DESCRIPTOR":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/descriptor",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application descriptor",
+               "required_params":[
+
+               ]
+            },
+            "GET_GEAR_GROUPS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/gear_groups",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application gear groups",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "FORCE_STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Force stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "force-stop"
+                     ]
+                  }
+               ]
+            },
+            "ADD_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Add application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "add-alias"
+                     ]
+                  },
+                  {
+                     "description":"The server alias for the application",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "REMOVE_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Remove application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "remove-alias"
+                     ]
+                  },
+                  {
+                     "description":"The application alias to be removed",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "SCALE_UP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale up application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-up"
+                     ]
+                  }
+               ]
+            },
+            "SCALE_DOWN":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale down application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-down"
+                     ]
+                  }
+               ]
+            },
+            "TIDY":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Tidy the application framework",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "tidy"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload the application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "THREAD_DUMP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Trigger thread dump",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "thread-dump"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete application",
+               "required_params":[
+
+               ]
+            },
+            "ADD_CARTRIDGE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/cartridges",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"The component to colocate with",
+                     "name":"colocate_with",
+                     "type":"string",
+                     "valid_options":[
+                        "jbosseap-6.0",
+                        "haproxy-1.4"
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears to run the component on.",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears to run the component on.",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Additional GB of space to request on all gears running this component.",
+                     "name":"additional_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"framework-type, e.g.: mongodb-2.0",
+                     "invalid_options":[
+
+                     ],
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+                        "mongodb-2.2",
+                        "switchyard-0.6",
+                        "cron-1.4",
+                        "mysql-5.1",
+                        "postgresql-8.4",
+                        "haproxy-1.4",
+                        "10gen-mms-agent-0.1",
+                        "phpmyadmin-3.4",
+                        "metrics-0.1",
+                        "rockmongo-1.1",
+                        "jenkins-client-1.4"
+                     ]
+                  }
+               ]
+            },
+            "LIST_CARTRIDGES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/cartridges",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List embedded cartridges",
+               "required_params":[
+
+               ]
+            },
+            "DNS_RESOLVABLE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/scalable/dns_resolvable",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Resolve DNS",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"scalable",
+         "scalable":true,
+         "ssh_url":"ssh://517ff96a500446729b0000bc@scalable-foobarz.rhcloud.com",
+         "uuid":"517ff96a500446729b0000bc"
+      }
+   ],
+   "messages":[
+
+   ],
+   "status":"ok",
+   "supported_api_versions":[
+      1.0,
+      1.1,
+      1.2,
+      1.3,
+      1.4
+   ],
+   "type":"applications",
+   "version":"1.2"
+}
\ No newline at end of file
diff --git a/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json b/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json
new file mode 100644
index 00000000..f4ed7889
--- /dev/null
+++ b/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json
@@ -0,0 +1,506 @@
+{
+   "api_version":1.2,
+   "data":[
+      {
+         "aliases":[
+
+         ],
+         "app_url":"http://springeap6-foobarz.rhcloud.com/",
+         "build_job_url":null,
+         "building_app":"jenkins",
+         "building_with":null,
+         "creation_time":"2013-09-10T10:37:45Z",
+         "domain_id":"foobarz",
+         "embedded":{
+            "switchyard-0":{
+
+            },
+            "cron-1.4":{
+
+            },
+            "metrics-0.1":{
+               "connection_url":"https://springeap6-foobarz.rhcloud.com/metrics/",
+               "info":"Connection URL: https://springeap6-foobarz.rhcloud.com/metrics/"
+            }
+         },
+         "framework":"jbosseap-6",
+         "gear_count":1,
+         "gear_profile":"small",
+         "git_url":"ssh://522ef6794382ec0aac000039@springeap6-foobarz.rhcloud.com/~/git/springeap6.git/",
+         "health_check_path":"health",
+         "initial_git_url":null,
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application",
+               "required_params":[
+
+               ]
+            },
+            "GET_DESCRIPTOR":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/descriptor",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application descriptor",
+               "required_params":[
+
+               ]
+            },
+            "GET_GEAR_GROUPS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/gear_groups",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application gear groups",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "FORCE_STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Force stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "force-stop"
+                     ]
+                  }
+               ]
+            },
+            "ADD_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Add application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "add-alias"
+                     ]
+                  },
+                  {
+                     "description":"The server alias for the application",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "REMOVE_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Remove application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "remove-alias"
+                     ]
+                  },
+                  {
+                     "description":"The application alias to be removed",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "SCALE_UP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale up application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-up"
+                     ]
+                  }
+               ]
+            },
+            "SCALE_DOWN":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale down application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-down"
+                     ]
+                  }
+               ]
+            },
+            "TIDY":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Tidy the application framework",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "tidy"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload the application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "THREAD_DUMP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Trigger thread dump",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "thread-dump"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete application",
+               "required_params":[
+
+               ]
+            },
+            "ADD_CARTRIDGE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"The component to colocate with",
+                     "name":"colocate_with",
+                     "type":"string",
+                     "valid_options":[
+                        "jbosseap-6",
+                        "switchyard-0",
+                        "cron-1.4",
+                        "metrics-0.1"
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears to run the component on.",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears to run the component on.",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Additional GB of space to request on all gears running this component.",
+                     "name":"additional_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]",
+                     "name":"environment_variables",
+                     "type":"array",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"framework-type, e.g.: mongodb-2.2",
+                     "invalid_options":[
+
+                     ],
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+                        "cron-1.4",
+                        "phpmyadmin-3",
+                        "rockmongo-1.1",
+                        "switchyard-0",
+                        "metrics-0.1",
+                        "10gen-mms-agent-0.1",
+                        "mysql-5.1",
+                        "haproxy-1.4",
+                        "postgresql-9.2",
+                        "postgresql-8.4",
+                        "mongodb-2.2",
+                        "jenkins-client-1"
+                     ]
+                  }
+               ]
+            },
+            "LIST_CARTRIDGES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/cartridges",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List embedded cartridges",
+               "required_params":[
+
+               ]
+            },
+            "DNS_RESOLVABLE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/dns_resolvable",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Resolve DNS",
+               "required_params":[
+
+               ]
+            },
+            "SET_UNSET_ENVIRONMENT_VARIABLES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/environment-variables",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Name of the environment variable to add/update",
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Value of the environment variable",
+                     "name":"value",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], Delete: [{'name':'FOO'}, {'name':'BAR'}]",
+                     "name":"environment_variables",
+                     "type":"array",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add/Update/Delete one or more environment variables",
+               "required_params":[
+
+               ]
+            },
+            "LIST_ENVIRONMENT_VARIABLES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/springeap6/environment-variables",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List all environment variables",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"springeap6",
+         "scalable":false,
+         "ssh_url":"ssh://522ef6794382ec0aac000039@springeap6-foobarz.rhcloud.com",
+         "uuid":"522ef6794382ec0aac000039"
+      }
+   ],
+   "messages":[
+      {
+         "exit_code":0,
+         "field":null,
+         "severity":"info",
+         "text":"Found 1 application."
+      }
+   ],
+   "status":"ok",
+   "supported_api_versions":[
+      1.0,
+      1.1,
+      1.2,
+      1.3,
+      1.4,
+      1.5,
+      1.6
+   ],
+   "type":"applications",
+   "version":"1.2"
+}
diff --git a/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json~ b/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json~
new file mode 100644
index 00000000..1493466f
--- /dev/null
+++ b/src/test/resources/samples/get-domains-foobarz-applications_3embedded.json~
@@ -0,0 +1,506 @@
+{
+   "api_version":1.2,
+   "data":[
+      {
+         "aliases":[
+
+         ],
+         "app_url":"http://eap6-foobarz.rhcloud.com/",
+         "build_job_url":null,
+         "building_app":"jenkins",
+         "building_with":null,
+         "creation_time":"2013-09-10T10:37:45Z",
+         "domain_id":"foobarz",
+         "embedded":{
+            "switchyard-0":{
+
+            },
+            "cron-1.4":{
+
+            },
+            "metrics-0.1":{
+               "connection_url":"https://eap6-foobarz.rhcloud.com/metrics/",
+               "info":"Connection URL: https://eap6-foobarz.rhcloud.com/metrics/"
+            }
+         },
+         "framework":"jbosseap-6",
+         "gear_count":1,
+         "gear_profile":"small",
+         "git_url":"ssh://522ef6794382ec0aac000039@eap6-foobarz.rhcloud.com/~/git/eap6.git/",
+         "health_check_path":"health",
+         "initial_git_url":null,
+         "links":{
+            "GET":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application",
+               "required_params":[
+
+               ]
+            },
+            "GET_DESCRIPTOR":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/descriptor",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application descriptor",
+               "required_params":[
+
+               ]
+            },
+            "GET_GEAR_GROUPS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/gear_groups",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Get application gear groups",
+               "required_params":[
+
+               ]
+            },
+            "START":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Start application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "start"
+                     ]
+                  }
+               ]
+            },
+            "STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "stop"
+                     ]
+                  }
+               ]
+            },
+            "RESTART":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Restart application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "restart"
+                     ]
+                  }
+               ]
+            },
+            "FORCE_STOP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Force stop application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "force-stop"
+                     ]
+                  }
+               ]
+            },
+            "ADD_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Add application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "add-alias"
+                     ]
+                  },
+                  {
+                     "description":"The server alias for the application",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "REMOVE_ALIAS":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Remove application alias",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "remove-alias"
+                     ]
+                  },
+                  {
+                     "description":"The application alias to be removed",
+                     "invalid_options":[
+
+                     ],
+                     "name":"alias",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  }
+               ]
+            },
+            "SCALE_UP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale up application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-up"
+                     ]
+                  }
+               ]
+            },
+            "SCALE_DOWN":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Scale down application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "scale-down"
+                     ]
+                  }
+               ]
+            },
+            "TIDY":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Tidy the application framework",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "tidy"
+                     ]
+                  }
+               ]
+            },
+            "RELOAD":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Reload the application",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "reload"
+                     ]
+                  }
+               ]
+            },
+            "THREAD_DUMP":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/events",
+               "method":"POST",
+               "optional_params":[
+
+               ],
+               "rel":"Trigger thread dump",
+               "required_params":[
+                  {
+                     "description":"event",
+                     "invalid_options":[
+
+                     ],
+                     "name":"event",
+                     "type":"string",
+                     "valid_options":[
+                        "thread-dump"
+                     ]
+                  }
+               ]
+            },
+            "DELETE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6",
+               "method":"DELETE",
+               "optional_params":[
+
+               ],
+               "rel":"Delete application",
+               "required_params":[
+
+               ]
+            },
+            "ADD_CARTRIDGE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/cartridges",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"The component to colocate with",
+                     "name":"colocate_with",
+                     "type":"string",
+                     "valid_options":[
+                        "jbosseap-6",
+                        "switchyard-0",
+                        "cron-1.4",
+                        "metrics-0.1"
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Minimum number of gears to run the component on.",
+                     "name":"scales_from",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Maximum number of gears to run the component on.",
+                     "name":"scales_to",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Additional GB of space to request on all gears running this component.",
+                     "name":"additional_storage",
+                     "type":"integer",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]",
+                     "name":"environment_variables",
+                     "type":"array",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add embedded cartridge",
+               "required_params":[
+                  {
+                     "description":"framework-type, e.g.: mongodb-2.2",
+                     "invalid_options":[
+
+                     ],
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+                        "cron-1.4",
+                        "phpmyadmin-3",
+                        "rockmongo-1.1",
+                        "switchyard-0",
+                        "metrics-0.1",
+                        "10gen-mms-agent-0.1",
+                        "mysql-5.1",
+                        "haproxy-1.4",
+                        "postgresql-9.2",
+                        "postgresql-8.4",
+                        "mongodb-2.2",
+                        "jenkins-client-1"
+                     ]
+                  }
+               ]
+            },
+            "LIST_CARTRIDGES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/cartridges",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List embedded cartridges",
+               "required_params":[
+
+               ]
+            },
+            "DNS_RESOLVABLE":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/dns_resolvable",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"Resolve DNS",
+               "required_params":[
+
+               ]
+            },
+            "SET_UNSET_ENVIRONMENT_VARIABLES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/environment-variables",
+               "method":"POST",
+               "optional_params":[
+                  {
+                     "default_value":null,
+                     "description":"Name of the environment variable to add/update",
+                     "name":"name",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Value of the environment variable",
+                     "name":"value",
+                     "type":"string",
+                     "valid_options":[
+
+                     ]
+                  },
+                  {
+                     "default_value":null,
+                     "description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], Delete: [{'name':'FOO'}, {'name':'BAR'}]",
+                     "name":"environment_variables",
+                     "type":"array",
+                     "valid_options":[
+
+                     ]
+                  }
+               ],
+               "rel":"Add/Update/Delete one or more environment variables",
+               "required_params":[
+
+               ]
+            },
+            "LIST_ENVIRONMENT_VARIABLES":{
+               "href":"https://openshift.redhat.com/broker/rest/domains/foobarz/applications/eap6/environment-variables",
+               "method":"GET",
+               "optional_params":[
+
+               ],
+               "rel":"List all environment variables",
+               "required_params":[
+
+               ]
+            }
+         },
+         "name":"eap6",
+         "scalable":false,
+         "ssh_url":"ssh://522ef6794382ec0aac000039@eap6-foobarz.rhcloud.com",
+         "uuid":"522ef6794382ec0aac000039"
+      }
+   ],
+   "messages":[
+      {
+         "exit_code":0,
+         "field":null,
+         "severity":"info",
+         "text":"Found 1 application."
+      }
+   ],
+   "status":"ok",
+   "supported_api_versions":[
+      1.0,
+      1.1,
+      1.2,
+      1.3,
+      1.4,
+      1.5,
+      1.6
+   ],
+   "type":"applications",
+   "version":"1.2"
+}