class ZTSClient implements Closeable {

    static String multipleRoleKey(List<String> roles) {
        
        // first check to make sure we have valid data
        
        if (roles == null || roles.isEmpty()) {
            return null;
        }
        
        // if we have a single role then that's the key
        
        if (roles.size() == 1) {
            return roles.get(0);
        }
        
        // if we have multiple roles, then we have to
        // sort the values and then generate the key
        // since we might have been given unmodifiable
        // list we need to make a copy so we can sort it

        List<String> modList = new ArrayList<>(roles);
        Collections.sort(modList);
        return String.join(",", modList);
    }

    public  ZTSClient();
    public  ZTSClient(String ztsUrl);
    public  ZTSClient(Principal identity);
    public  ZTSClient(String ztsUrl, Principal identity);
    public  ZTSClient(String ztsUrl, SSLContext sslContext);
    public  ZTSClient(String ztsUrl, String proxyUrl, SSLContext sslContext);
    public  ZTSClient(String domainName, String serviceName, ServiceIdentityProvider siaProvider);
    public  ZTSClient(String ztsUrl, String domainName, String serviceName,
                     ServiceIdentityProvider siaProvider);

}