public final class NodeFactory
extends java.lang.Object
NodeFactory class is responsible for creating
  instances of Node.
  
  The type of Node that gets created depends on the URL that is
  passed into the findOrCreate(URL). The NodeFactory makes use of
  registered Recognizer instances to determine what Node class
  corresponds to a particular URL. Many nodes are simply recognized by the
  file extension while others are recognized only after a Recognizer reads
  the contents of the file/resource pointed by the URL. Because some
  Recognizers count on the physical file/resource to do their job,
  the findOrCreate(URL) method must only be called when the file/resource
  pointed by the URL physically exists on a file system/repository.
  
  When the file/resource does not physically exists on the file
  system/repository, the findOrCreate(Class, URL) method must be
  called. The specified Class indicates what node type to create.
  
  Every Node instance created by the NodeFactory
  is cached.  An instance of an already created Node can be
  retrieved from the cache by calling the find(URL) method.
Node, 
Recognizer| Modifier and Type | Field and Description | 
|---|---|
| static int | NODE_CACHEDUpdate message sent when a node is cached by a factory. | 
| static int | NODE_UNCACHEDUpdate message sent when a node is uncached by a factory. | 
| Modifier and Type | Method and Description | 
|---|---|
| static void | attach(Observer observer,
      java.lang.Class<? extends Node> type)Associates the specified  observerwith the giventype. | 
| static void | attach(Observer observer,
      java.lang.String type)Associates the specified  observerwith the giventype. | 
| static Node | clone(Node srcNode,
     java.net.URL dstNodeURL) | 
| static void | detach(Observer observer,
      java.lang.Class<? extends Node> type)Removes the specified  observerfrom the giventypelist of observers. | 
| static void | detach(Observer observer,
      java.lang.String type)Removes the specified  observerfrom the giventypelist of observers. | 
| static Node | find(java.net.URL url)Find the  Nodeassociated with theURL. | 
| static Node | findInFolder(Folder folder,
            java.net.URL url)Deprecated. 
 use the  index model api. Since 11.1.1.0.
    The method does not scale well when large projects are involved. We now recommend
    clients use the Index Model API. This new API works asynchronously
    and performs very well, regardless of the project size, once the
    index model of the project files is constructed. SeeIndex.findNodes( oracle.ide.index.QueryCriteria, Class, oracle.ide.index.ResultCallback) | 
| static Node | findOrCreate(java.lang.Class<? extends Node> type,
            java.net.URL url)Use this method when creating a  Nodefor a resource that does
  not yet exist at the location pointed to by theURL. | 
| static Node | findOrCreate(java.net.URL url)Use this method when creating a  Nodefor a resource that
  physically exists at the location pointed to by theURL. | 
| static <T extends Node> | findOrCreateOrFail(java.lang.Class<T> type,
                  java.net.URL url)Find a node. | 
| static Node | findOrCreateOrFail(java.net.URL url)Use this method when creating a  Nodefor a resource that
  physically exists at the location pointed to by theURL. | 
| static Node | findOrCreateUsingDefault(java.net.URL url,
                        java.lang.Class<? extends Node> defaultNodeType)Avoid using this method. | 
| static int | getCachedNodeCount()Gets the number of nodes currently cached. | 
| static java.util.Iterator<Node> | getCachedNodes()Returns an  Iteratorover theNodeinstances that
  are currently cached. | 
| static java.util.Iterator<Node> | getLoadedNodes()Returns an  Iteratorover theNodeinstances that
  are currently loaded. | 
| static int | getOpenNodeCount()Gets the number of nodes currently open. | 
| static java.util.Iterator<Node> | getOpenNodes()Returns an  Iteratorover theNodeinstances that
  are currently opened. | 
| static void | recache(java.net.URL oldURL,
       java.net.URL newURL,
       Node node)Removes the  oldURLfrom the cache and puts thenewURLin the cache so that it is associated
  with the givenNode. | 
| static void | recache(java.net.URL oldURL,
       java.net.URL newURL,
       Node node,
       boolean notify)Removes the  oldURLfrom the cache and puts thenewURLin the cache so that it is associated
  with the givenNode. | 
| static java.lang.Class | recognizeUrl(java.net.URL url)Find the specified  urlin the cache or recognize
 it and return theClassinstance of theNodethat
 can be, or has been, created for thisurl. | 
| static Node | uncache(java.net.URL url) | 
| static Node | uncache(java.net.URL url,
       boolean notify) | 
public static final int NODE_CACHED
public static final int NODE_UNCACHED
public static Node findOrCreateOrFail(java.net.URL url)
Node for a resource that
  physically exists at the location pointed to by the URL. 
  When the URL points to a resource that does not exists, you
  must always use the findOrCreate(Class, URL) method.
  Returns the Node associated with the URL.  If the
  Node does not exist, a new Node is created.
  Unlike findOrCreate(URL), this method handles exceptional
  cases using a RuntimeException, on the basis that most callers will
  be unable to do anything to recover from such a case. If you want to
  handle failed creation, using findOrCreate(URL)} is recommended.
url - unique URL identifying the node.java.lang.RuntimeException - if the node could not be created.java.lang.NullPointerException - if url is null.public static Node findOrCreate(java.net.URL url) throws java.lang.IllegalAccessException, java.lang.InstantiationException
Node for a resource that
  physically exists at the location pointed to by the URL.
  When the URL points to a resource that does not exist, you
  must always use the findOrCreate(Class, URL) method.
  Returns the Node associated with the URL.  If the
  Node does not exist, a new Node is created.url - unique URL identifying the node.java.lang.IllegalAccessException - if the Node class or
  its initializer is not accessible.java.lang.InstantiationException - if the Node class is
  an abstract class, an interface, an array class, a primitive type,
  or void; or if the instantiation fails for some other reason.public static Node findOrCreate(java.lang.Class<? extends Node> type, java.net.URL url) throws java.lang.IllegalAccessException, java.lang.InstantiationException
Node for a resource that does
  not yet exist at the location pointed to by the URL. When
  the URL points to a resource that physically exists, you
  must always use the findOrCreate(URL) method.
  Returns the Node associated with the URL.  If the
  Node does not exist, a new Node is created.type - The Class of the node type to create.url - URL identifying the node's persistent location.Node or a newly created one.java.lang.IllegalAccessException - if the Class or its
  initializer is not accessible.java.lang.InstantiationException - if the Class is an
  abstract class, an interface, an array class, a primitive type, or
  void; or if the instantiation fails for some other reason.public static <T extends Node> T findOrCreateOrFail(java.lang.Class<T> type, java.net.URL url)
type - the class of the node. Must not be null.url - the url of the node. Must not be null.java.lang.RuntimeException - if the node could not be created.java.lang.ClassCastException - if the node exists but is not of
    type T.java.lang.NullPointerException - if url or type are null.public static Node findOrCreateUsingDefault(java.net.URL url, java.lang.Class<? extends Node> defaultNodeType) throws java.lang.IllegalAccessException, java.lang.InstantiationException
URLs must be recognized by Recognizers. The
  IDE will use findOrCreate(URL) method to create Nodes
  for the URLs contained in a project's content. If Recognizers are
  not able to recognize your Node types, then the wrong node will be
  created. Only use methods findOrCreate(URL) and/or
  findOrCreate(Class, URL).
  Returns the Node associated with the URL.  If the
  Node does not exist, a new Node is created.url - unique URL identifying the node.defaultNodeType - the default Node type to use if none of the
  recognizers can recognize the URL.  Pass null to indicate that there
  is no default type, and that null should be returned if no recognizer
  can recognize the URL.java.lang.IllegalAccessException - if the Node class or
  its initializer is not accessible.java.lang.InstantiationException - if the Node class is
  an abstract class, an interface, an array class, a primitive type,
  or void; or if the instantiation fails for some other reason.public static Node find(java.net.URL url)
public static Node findInFolder(Folder folder, java.net.URL url)
index model api. Since 11.1.1.0.
    The method does not scale well when large projects are involved. We now recommend
    clients use the Index Model API. This new API works asynchronously
    and performs very well, regardless of the project size, once the
    index model of the project files is constructed. See
    Index.findNodes( oracle.ide.index.QueryCriteria, Class, oracle.ide.index.ResultCallback)public static Node clone(Node srcNode, java.net.URL dstNodeURL)
Node instance whose contents are identical
  to (and copied from) the specified Node.  The original
  Node is not modified.  The copying is done based on the
  last saved state of the srcNode.  The returned
  Node is cached and assigned the URL specified by
  dstNodeURL.srcNode - The Node that will be cloned.dstNodeURL - The URL that is to be assigned to the
  clone after all of its data has been loaded from the original.
  This is the URL under which the new Node will be
  cached by the NodeFactory.Node that is a clone of the
  srcNode.public static Node uncache(java.net.URL url)
Node with the specified URL from the
  NodeFactory's cache.
  
  WANING :  Don't call this method unless you really know what 
  what you are doing. (I.e. unless you know that you are exclusive owner 
  of this node)
  Calling this method can result in releasing a node that
  is held by another client. The next time somebody requests the 
  same Node, she can obtain a different instance of Node for the same URL.
public static Node uncache(java.net.URL url, boolean notify)
Node with the specified URL from the
  NodeFactory's cache. If notify is true, it
  notifies observers that the node was uncached.
  
  WANING :  Don't call this method unless you really know what 
  what you are doing. (I.e. unless you know that you are exclusive owner 
  of this node)
  Calling this method can result in releasing a node that
  is held by another client. The next time somebody requests the 
  same Node, she can obtain a different instance of Node for the same URL.
public static void recache(java.net.URL oldURL,
                           java.net.URL newURL,
                           Node node)
oldURL from the cache and puts the
  newURL in the cache so that it is associated
  with the given Node.public static void recache(java.net.URL oldURL,
                           java.net.URL newURL,
                           Node node,
                           boolean notify)
oldURL from the cache and puts the
  newURL in the cache so that it is associated
  with the given Node.public static java.util.Iterator<Node> getCachedNodes()
Iterator over the Node instances that
  are currently cached.  There is no guarantee as to what order the
  Nodes will be iterated over.Iterator.remove()
    on the returned Iterator will throw
    UnsupportedOperationException.public static java.util.Iterator<Node> getOpenNodes()
Iterator over the Node instances that
  are currently opened.  There is no guarantee as to what order the
  Nodes will be iterated over.Iterator.remove() method will throw an
   UnsupportedOperationException.public static java.util.Iterator<Node> getLoadedNodes()
Iterator over the Node instances that
  are currently loaded.  There is no guarantee as to what order the
  Nodes will be iterated over.Iterator.remove() method will throw an
   UnsupportedOperationException.public static int getCachedNodeCount()
public static int getOpenNodeCount()
public static final void attach(Observer observer, java.lang.Class<? extends Node> type)
observer with the given
  type. Every time an instance of type
  is cached in the node factory, a NODE_CACHED notification is
  broadcast to the observer. The type
  should be the class of node and not of the data. The reason for
  this is that calling Node.getData() may break lazy
  loading for some nodes.public static final void attach(Observer observer, java.lang.String type)
observer with the given
  type. Every time an instance of type
  is cached in the node factory, a NODE_CACHED notification is
  broadcast to the observer. The type
  should be the class of node and not of the data. The reason for
  this is that calling Node.getData() may break lazy
  loading for some nodes.public static final void detach(Observer observer, java.lang.Class<? extends Node> type)
observer from the given
  type list of observers.public static final void detach(Observer observer, java.lang.String type)
observer from the given
  type list of observers.public static java.lang.Class recognizeUrl(java.net.URL url)
url in the cache or recognize
 it and return the Class instance of the Node that
 can be, or has been, created for this url.
 
 As a side-effect, this method will initialize the extension 
 that defines the relevant Node type, if it hasn't been
 initialized yet.url - A URL that needs finding or recognizingClass instance or null if the URL
 was not found or recognized