private void removeUnusedEndpoints() {
    if (config == null) {
      return;
    }

    Set<String> endpoints = new HashSet<String>();

    for (Interface iface : project.getInterfaceList()) {
      endpoints.addAll(Arrays.asList(iface.getEndpoints()));
    }

    StringList keys = new StringList();

    synchronized (defaults) {
      for (String key : defaults.keySet()) {
        if (!endpoints.contains(key)) {
          keys.add(key);
        }
      }

      for (String key : keys) {
        EndpointDefaults def = defaults.remove(key);
        config.getEndpointList().remove(def);
      }
    }
  }
    @Override
    public void interfaceAdded(Interface iface) {
      for (String endpoint : iface.getEndpoints()) {
        // ensure we have defaults
        getEndpointDefaults(endpoint);
      }

      iface.addPropertyChangeListener(AbstractInterface.ENDPOINT_PROPERTY, propertyChangeListener);
    }
  public void importEndpoints(Interface iface) {
    EndpointStrategy ep = iface.getProject().getEndpointStrategy();
    if (ep instanceof DefaultEndpointStrategy) {
      DefaultEndpointStrategy dep = (DefaultEndpointStrategy) ep;
      String[] endpoints = iface.getEndpoints();

      for (String endpoint : endpoints) {
        getEndpointDefaults(endpoint)
            .getConfig()
            .set(dep.getEndpointDefaults(endpoint).getConfig());
      }
    }
  }
  public void init(Project project) {
    this.project = (WsdlProject) project;
    initConfig();

    project.addProjectListener(projectListener);

    for (Interface iface : project.getInterfaceList()) {
      for (String endpoint : iface.getEndpoints()) {
        // ensure we have defaults
        getEndpointDefaults(endpoint);
      }

      iface.addPropertyChangeListener(AbstractInterface.ENDPOINT_PROPERTY, propertyChangeListener);
    }

    removeUnusedEndpoints();
  }