/*
 * Copyright (c) 2004, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */

package org.postgresql.test.socketfactory;

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.net.SocketFactory;

public class CustomSocketFactory extends SocketFactory {

  private static CustomSocketFactory instance;

  private final String argument;
  private int socketCreated;

  public CustomSocketFactory(String argument) {
    if (instance != null) {
      throw new IllegalStateException("Test failed, multiple custom socket factory instantiation");
    }
    instance = this;
    this.argument = argument;
  }

  @Override
  public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException {
    throw new UnsupportedOperationException();
  }

  @Override
  public Socket createSocket(InetAddress arg0, int arg1) throws IOException {
    throw new UnsupportedOperationException();
  }

  @Override
  public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3)
      throws IOException, UnknownHostException {
    throw new UnsupportedOperationException();
  }

  @Override
  public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3)
      throws IOException {
    throw new UnsupportedOperationException();
  }

  @Override
  public Socket createSocket() throws IOException {
    socketCreated++;
    return new Socket();
  }

  public String getArgument() {
    return argument;
  }

  public int getSocketCreated() {
    return socketCreated;
  }

  public static CustomSocketFactory getInstance() {
    return instance;
  }

}
