<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<apichanges>

  <apidefs>
    <apidef name="friend">Bridge Core with Core Network Friend API</apidef>
  </apidefs>

  <changes>
      <change id="proxy-selector-brigde">
          <api name="friend"/>
          <summary>Core Network provides ProxySelector</summary>
          <version major="3" minor="40"/>
          <date day="2" month="4" year="2013"/>
          <author login="lfischme"/>
          <compatibility addition="yes" binary="compatible" semantic="compatible" />
          <description>
              <p>
                  The <code>o.n.core</code> module finds a instance of java.net.ProxySelector
                  in the default <code>org.openide.util.Lookup</code>. If some found
                  then will be registred as default <code>ProxySelector.setDedault()</code>.
              </p>
          </description>
          <class package="org.netbeans.core" name="ProxySettings"/>
          <issue number="201731"/>
      </change>

      <change id="system-proxy-reload-brigde">
          <api name="friend"/>
          <summary>ProxySettings.Reload allows reload the Network Proxy Settings</summary>
          <version major="3" minor="40"/>
          <date day="2" month="4" year="2013"/>
          <author login="lfischme"/>
          <compatibility addition="yes" binary="compatible" semantic="compatible" />
          <description>
              <p>
                  An implementation of this class brings a facility to reload Network 
                  Proxy Settings from underlying OS.
                  The module <code>core.network</code> provides a implementation
                  which may be accessible via <code>Lookup.getDefault()</code>. It's not guaranteed
                  any implementation is found on all distribution.
              </p>
          </description>
          <class package="org.netbeans.core" name="ProxySettings"/>
          <issue number="201731"/>
      </change>

      <change id="system-proxy-reload">
          <api name="friend"/>
          <summary>NbProxySelector and ProxyAutoConfig moved to new Core Network module.</summary>
          <version major="3" minor="40"/>
          <date day="2" month="4" year="2013"/>
          <author login="lfischme"/>
          <compatibility addition="no" binary="compatible" semantic="compatible" />
          <description>
              <p>
                  Classes <code>NbProxySelector</code> and <code>ProxyAutoConfig</code> have been
                  moved to Core Network module. Now the <code>NbProxySelector</code> can be accessed
                  via lookup - in <code>CoreBridgeImpl</code>.
              </p>
          </description>
          <issue number="201731"/>
      </change>
  </changes>

  <!-- Now the surrounding HTML text and document structure: -->

  <htmlcontents>
    <head>
      <title>Change History for the Friend Core APIs</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>
This document lists changes made to the API between core/startup and core
modules. It is a friend API so it does not need to be developed compatibly,
and indeed it is not. 
</p>

<!-- The actual lists of changes, as summaries and details: -->

      <hr/><standard-changelists module-code-name="org.netbeans.core"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
