// Path: src/main/java/net/technolords/micro/model/jaxb/Configuration.java
// public class Configuration {
//     private String type;
//     private String url;
//     private QueryGroups queryGroups;
//     private SimpleResource simpleResource;
//     private ResourceGroups resourceGroups;
//     private NamespaceList namespaceList;
//     private Map<String, String> cachedNamespaceMapping;
//     private Pattern pattern;
// 
//     @XmlAttribute(name = "type")
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @XmlAttribute(name = "url")
//     public String getUrl() {
//         return url;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// 
//     @XmlElement (name = "query-groups")
//     public QueryGroups getQueryGroups() {
//         return queryGroups;
//     }
// 
//     public void setQueryGroups(QueryGroups queryGroups) {
//         this.queryGroups = queryGroups;
//     }
// 
//     @XmlElement(name = "resource")
//     public SimpleResource getSimpleResource() {
//         return simpleResource;
//     }
// 
//     public void setSimpleResource(SimpleResource simpleResource) {
//         this.simpleResource = simpleResource;
//     }
// 
//     @XmlElement(name = "resource-groups")
//     public ResourceGroups getResourceGroups() {
//         return resourceGroups;
//     }
// 
//     public void setResourceGroups(ResourceGroups resourceGroups) {
//         this.resourceGroups = resourceGroups;
//     }
// 
//     @XmlElement(name = "namespaces")
//     public NamespaceList getNamespaceList() {
//         return namespaceList;
//     }
// 
//     public void setNamespaceList(NamespaceList namespaceList) {
//         this.namespaceList = namespaceList;
//     }
// 
//     @XmlTransient
//     public Map<String, String> getCachedNamespaceMapping() {
//         return cachedNamespaceMapping;
//     }
// 
//     public void setCachedNamespaceMapping(Map<String, String> cachedNamespaceMapping) {
//         this.cachedNamespaceMapping = cachedNamespaceMapping;
//     }
// 
//     @XmlTransient
//     public Pattern getPattern() {
//         return pattern;
//     }
// 
//     public void setPattern(Pattern pattern) {
//         this.pattern = pattern;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if(obj == null) {
//             return false;
//         }
//         if(!(obj instanceof Configuration)) {
//             return false;
//         }
//         Configuration ref = (Configuration) obj;
//         return (Objects.equals(this.getUrl(), ref.getUrl())
//                 && Objects.equals(this.getType(), ref.getType())
//                 && Objects.equals(this.getSimpleResource(), ref.getSimpleResource())
//         );
//     }
// }
// 
// Path: src/main/java/net/technolords/micro/model/jaxb/registration/Registration.java
// public class Registration {
//     private Registrar registrar;
//     private String address;
//     private int port;
//     private Service service;
// 
//     @XmlEnum
//     public enum Registrar { CONSUL, EUREKA }
// 
//     @XmlAttribute (name = "registrar", required = true)
//     public Registrar getRegistrar() {
//         return registrar;
//     }
// 
//     public void setRegistrar(Registrar registrar) {
//         this.registrar = registrar;
//     }
// 
//     @XmlAttribute (name = "address")
//     public String getAddress() {
//         return address;
//     }
// 
//     public void setAddress(String address) {
//         this.address = address;
//     }
// 
//     @XmlAttribute (name = "port")
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     @XmlElement (name = "service")
//     public Service getService() {
//         return service;
//     }
// 
//     public void setService(Service service) {
//         this.service = service;
//     }
// }


import java.util.List;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import net.technolords.micro.model.jaxb.Configuration;
import net.technolords.micro.model.jaxb.registration.Registration;
package net.technolords.micro.registry.consul;




public class ConsulRequestFactory {
    private static final String API_SERVICE_REGISTER = "/v1/agent/service/register";
    private static final String API_SERVICE_DEREGISTER = "/v1/agent/service/deregister/";

    /**
     * A factory for a HttpPut method, suitable to register the service.
     *
     * @param registration
     *  The Registration reference associated with the HttpPut
     *
     * @return
     *  The generated HttpPut
     */
// Path: src/main/java/net/technolords/micro/model/jaxb/Configuration.java
// public class Configuration {
//     private String type;
//     private String url;
//     private QueryGroups queryGroups;
//     private SimpleResource simpleResource;
//     private ResourceGroups resourceGroups;
//     private NamespaceList namespaceList;
//     private Map<String, String> cachedNamespaceMapping;
//     private Pattern pattern;
// 
//     @XmlAttribute(name = "type")
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @XmlAttribute(name = "url")
//     public String getUrl() {
//         return url;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// 
//     @XmlElement (name = "query-groups")
//     public QueryGroups getQueryGroups() {
//         return queryGroups;
//     }
// 
//     public void setQueryGroups(QueryGroups queryGroups) {
//         this.queryGroups = queryGroups;
//     }
// 
//     @XmlElement(name = "resource")
//     public SimpleResource getSimpleResource() {
//         return simpleResource;
//     }
// 
//     public void setSimpleResource(SimpleResource simpleResource) {
//         this.simpleResource = simpleResource;
//     }
// 
//     @XmlElement(name = "resource-groups")
//     public ResourceGroups getResourceGroups() {
//         return resourceGroups;
//     }
// 
//     public void setResourceGroups(ResourceGroups resourceGroups) {
//         this.resourceGroups = resourceGroups;
//     }
// 
//     @XmlElement(name = "namespaces")
//     public NamespaceList getNamespaceList() {
//         return namespaceList;
//     }
// 
//     public void setNamespaceList(NamespaceList namespaceList) {
//         this.namespaceList = namespaceList;
//     }
// 
//     @XmlTransient
//     public Map<String, String> getCachedNamespaceMapping() {
//         return cachedNamespaceMapping;
//     }
// 
//     public void setCachedNamespaceMapping(Map<String, String> cachedNamespaceMapping) {
//         this.cachedNamespaceMapping = cachedNamespaceMapping;
//     }
// 
//     @XmlTransient
//     public Pattern getPattern() {
//         return pattern;
//     }
// 
//     public void setPattern(Pattern pattern) {
//         this.pattern = pattern;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if(obj == null) {
//             return false;
//         }
//         if(!(obj instanceof Configuration)) {
//             return false;
//         }
//         Configuration ref = (Configuration) obj;
//         return (Objects.equals(this.getUrl(), ref.getUrl())
//                 && Objects.equals(this.getType(), ref.getType())
//                 && Objects.equals(this.getSimpleResource(), ref.getSimpleResource())
//         );
//     }
// }
// 
// Path: src/main/java/net/technolords/micro/model/jaxb/registration/Registration.java
// public class Registration {
//     private Registrar registrar;
//     private String address;
//     private int port;
//     private Service service;
// 
//     @XmlEnum
//     public enum Registrar { CONSUL, EUREKA }
// 
//     @XmlAttribute (name = "registrar", required = true)
//     public Registrar getRegistrar() {
//         return registrar;
//     }
// 
//     public void setRegistrar(Registrar registrar) {
//         this.registrar = registrar;
//     }
// 
//     @XmlAttribute (name = "address")
//     public String getAddress() {
//         return address;
//     }
// 
//     public void setAddress(String address) {
//         this.address = address;
//     }
// 
//     @XmlAttribute (name = "port")
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     @XmlElement (name = "service")
//     public Service getService() {
//         return service;
//     }
// 
//     public void setService(Service service) {
//         this.service = service;
//     }
// }


// Path: src/main/java/net/technolords/micro/registry/consul/ConsulRequestFactory.java
import java.util.List;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import net.technolords.micro.model.jaxb.Configuration;
import net.technolords.micro.model.jaxb.registration.Registration;

package net.technolords.micro.registry.consul;




public class ConsulRequestFactory {
    private static final String API_SERVICE_REGISTER = "/v1/agent/service/register";
    private static final String API_SERVICE_DEREGISTER = "/v1/agent/service/deregister/";

    /**
     * A factory for a HttpPut method, suitable to register the service.
     *
     * @param registration
     *  The Registration reference associated with the HttpPut
     *
     * @return
     *  The generated HttpPut
     */
    public static HttpEntityEnclosingRequestBase createRegisterRequest(Registration registration, List<Configuration> configurations) {