// Path: core/src/main/java/com/github/moronicgeek/swagger/cloud/model/ApplicationRegistrationMetadata.java
// public class ApplicationRegistrationMetadata {
// 
// 
//     private int id;
//     private String name;
//     private String swaggerUrl;
//     private String groupId;
//     private int port;
//     private String host;
// 
//     public ApplicationRegistrationMetadata(String name, String swaggerUrl, String groupId, int port, String host) {
//         this.name = name;
//         this.swaggerUrl = swaggerUrl;
//         this.groupId = groupId;
//         this.port = port;
//         this.host = host;
//     }
// 
//     public ApplicationRegistrationMetadata() {
// 
//     }
// 
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getSwaggerUrl() {
//         return swaggerUrl;
//     }
// 
//     public void setSwaggerUrl(String swaggerUrl) {
//         this.swaggerUrl = swaggerUrl;
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public void setGroupId(String groupId) {
//         this.groupId = groupId;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ApplicationRegistrationMetadata metadata = (ApplicationRegistrationMetadata) o;
//         return id == metadata.id &&
//                 Objects.equals(name, metadata.name) &&
//                 Objects.equals(swaggerUrl, metadata.swaggerUrl) &&
//                 Objects.equals(groupId, metadata.groupId);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(id, name, swaggerUrl, groupId);
//     }
// 
//     @Override
//     public String toString() {
//         return "ApplicationRegistrationMetadata{" +
//                 "id=" + id +
//                 ", name='" + name + '\'' +
//                 ", swaggerUrl='" + swaggerUrl + '\'' +
//                 ", groupId='" + groupId + '\'' +
//                 '}';
//     }
// 
// 
// }
// 
// Path: server/src/main/java/com/github/moronicgeek/swagger/cloud/server/ApiDefinition.java
// public class ApiDefinition {
// 
// 
//     private String name;
//     private String swaggerUrl;
//     private String groupId;
//     private String description;
//     private String host;
//     private int port;
// 
//     public ApiDefinition() {
//     }
// 
//     public ApiDefinition(String name, String swaggerUrl, String groupId, String description, String host, int port) {
//         this.name = name;
//         this.swaggerUrl = swaggerUrl;
//         this.groupId = groupId;
//         this.description = description;
//         this.host = host;
//         this.port = port;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getSwaggerUrl() {
//         return swaggerUrl;
//     }
// 
//     public void setSwaggerUrl(String swaggerUrl) {
//         this.swaggerUrl = swaggerUrl;
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public void setGroupId(String groupId) {
//         this.groupId = groupId;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         ApiDefinition that = (ApiDefinition) o;
// 
//         if (port != that.port) return false;
//         if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
//         return host != null ? host.equals(that.host) : that.host == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = groupId != null ? groupId.hashCode() : 0;
//         result = 31 * result + (host != null ? host.hashCode() : 0);
//         result = 31 * result + port;
//         return result;
//     }
// }


import com.github.moronicgeek.swagger.cloud.model.ApplicationRegistrationMetadata;
import com.github.moronicgeek.swagger.cloud.server.ApiDefinition;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import org.springframework.web.client.HttpClientErrorException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
package com.github.moronicgeek.swagger.cloud.server.registry;



/**
 * Created by muhammedpatel on 2016/08/06.
 */
//TODO probably a good idea to create an interface for other stores like hazel cast and the myriad other stores. One Day!!!
public class Registry {
    private static Logger LOGGER = LoggerFactory.getLogger(Registry.class);
    private ConcurrentHashMap<String, Set<ApiDefinition>> registry = new ConcurrentHashMap<>();

// Path: core/src/main/java/com/github/moronicgeek/swagger/cloud/model/ApplicationRegistrationMetadata.java
// public class ApplicationRegistrationMetadata {
// 
// 
//     private int id;
//     private String name;
//     private String swaggerUrl;
//     private String groupId;
//     private int port;
//     private String host;
// 
//     public ApplicationRegistrationMetadata(String name, String swaggerUrl, String groupId, int port, String host) {
//         this.name = name;
//         this.swaggerUrl = swaggerUrl;
//         this.groupId = groupId;
//         this.port = port;
//         this.host = host;
//     }
// 
//     public ApplicationRegistrationMetadata() {
// 
//     }
// 
// 
//     public int getId() {
//         return id;
//     }
// 
//     public void setId(int id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getSwaggerUrl() {
//         return swaggerUrl;
//     }
// 
//     public void setSwaggerUrl(String swaggerUrl) {
//         this.swaggerUrl = swaggerUrl;
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public void setGroupId(String groupId) {
//         this.groupId = groupId;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ApplicationRegistrationMetadata metadata = (ApplicationRegistrationMetadata) o;
//         return id == metadata.id &&
//                 Objects.equals(name, metadata.name) &&
//                 Objects.equals(swaggerUrl, metadata.swaggerUrl) &&
//                 Objects.equals(groupId, metadata.groupId);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(id, name, swaggerUrl, groupId);
//     }
// 
//     @Override
//     public String toString() {
//         return "ApplicationRegistrationMetadata{" +
//                 "id=" + id +
//                 ", name='" + name + '\'' +
//                 ", swaggerUrl='" + swaggerUrl + '\'' +
//                 ", groupId='" + groupId + '\'' +
//                 '}';
//     }
// 
// 
// }
// 
// Path: server/src/main/java/com/github/moronicgeek/swagger/cloud/server/ApiDefinition.java
// public class ApiDefinition {
// 
// 
//     private String name;
//     private String swaggerUrl;
//     private String groupId;
//     private String description;
//     private String host;
//     private int port;
// 
//     public ApiDefinition() {
//     }
// 
//     public ApiDefinition(String name, String swaggerUrl, String groupId, String description, String host, int port) {
//         this.name = name;
//         this.swaggerUrl = swaggerUrl;
//         this.groupId = groupId;
//         this.description = description;
//         this.host = host;
//         this.port = port;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getSwaggerUrl() {
//         return swaggerUrl;
//     }
// 
//     public void setSwaggerUrl(String swaggerUrl) {
//         this.swaggerUrl = swaggerUrl;
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public void setGroupId(String groupId) {
//         this.groupId = groupId;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         ApiDefinition that = (ApiDefinition) o;
// 
//         if (port != that.port) return false;
//         if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
//         return host != null ? host.equals(that.host) : that.host == null;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = groupId != null ? groupId.hashCode() : 0;
//         result = 31 * result + (host != null ? host.hashCode() : 0);
//         result = 31 * result + port;
//         return result;
//     }
// }


// Path: server/src/main/java/com/github/moronicgeek/swagger/cloud/server/registry/Registry.java
import com.github.moronicgeek.swagger.cloud.model.ApplicationRegistrationMetadata;
import com.github.moronicgeek.swagger.cloud.server.ApiDefinition;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import org.springframework.web.client.HttpClientErrorException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

package com.github.moronicgeek.swagger.cloud.server.registry;



/**
 * Created by muhammedpatel on 2016/08/06.
 */
//TODO probably a good idea to create an interface for other stores like hazel cast and the myriad other stores. One Day!!!
public class Registry {
    private static Logger LOGGER = LoggerFactory.getLogger(Registry.class);
    private ConcurrentHashMap<String, Set<ApiDefinition>> registry = new ConcurrentHashMap<>();

    public boolean addApi(ApplicationRegistrationMetadata metadata) {