public class DefaultNameGenerator extends java.lang.Object implements NameGenerator
NameGenerator
interface
used when generating new unique URL
s from
URLFactory
. This implementation supports producing a
name by incrementing a counter that is appended to the name
before its suffix.Constructor and Description |
---|
DefaultNameGenerator(java.lang.String name,
java.lang.String suffix)
Creates a new
DefaultNameGenerator that generates
names by inserting a numerical index between the specified
name and suffix . |
DefaultNameGenerator(java.lang.String name,
java.lang.String suffix,
int initialIndex)
Creates a new
DefaultNameGenerator that generates
names by inserting a numerical index between the specified
name and suffix . |
Modifier and Type | Method and Description |
---|---|
protected java.lang.String |
getName()
Called by
nextName() to get the starting fixed portion
of the name. |
protected java.lang.String |
getSuffix()
Called by
nextName() to get the ending fixed portion of
the name. |
protected int |
nextIndex()
Returns the next index.
|
java.lang.String |
nextName()
This method is called by
URLFactory from one of its
newUniqueURL(...) methods to obtain a relative
file name, which is usually just a simple file name without any
preceeding directory names, that will be used in the process of
generating a unique URL . |
public DefaultNameGenerator(java.lang.String name, java.lang.String suffix)
DefaultNameGenerator
that generates
names by inserting a numerical index between the specified
name
and suffix
. The starting index
is 1.public DefaultNameGenerator(java.lang.String name, java.lang.String suffix, int initialIndex)
DefaultNameGenerator
that generates
names by inserting a numerical index between the specified
name
and suffix
. The starting index
is the specified initialIndex
. The initial index is
allowed to be 0. If the initial index is less than 0, then the
first name is generated without an index, and the next name is
generated with index 1 (not 0).public java.lang.String nextName()
NameGenerator
URLFactory
from one of its
newUniqueURL(...)
methods to obtain a relative
file name, which is usually just a simple file name without any
preceeding directory names, that will be used in the process of
generating a unique URL
.
The URLFactory
is responsible for assembling a complete
URL
by combining a base URL
with the
relative file name returned by nextName()
. The
URLFactory
is also responsible for checking that the
newly created URL
is unique among files on disk
and within the IDE's caches. If the new URL
is not
unique, then URLFactory
will issue another call to
nextName()
to get a new name. This process is
repeated until either a unique URL
is produced, or
the URLFactory
"times out" on the
NameGenerator
implementation after a very large
number of iterations fails to produce a unique URL
.
Therefore to interact properly with URLFactory
, the
nextName()
implementation must return a different
name each time it is invoked. More specifically, a particular
instance of NameGenerator
should not return any
name more than once from its nextName()
method.
Of course, this restriction does not apply across different
instances of NameGenerator
.
The exact means by which a new name is produced is not specified
and is left to the specific NameGenerator
classes.
However, the nextName()
method should not attempt to
create an URL
and check for its uniqueness, as this
may lead to problems in the future when the URLFactory
and
URLFileSystem
classes are enhanced. For example, if
individual NameGenerator
implementations are
attempting to determine uniqueness, bugs may surface later if the
IDE's algorithm for determining uniqueness changes. How the IDE
determines URL
uniqueness is not documented and should
be considered an implementation detail of the IDE framework.
For an example of a NameGenerator
implementation,
see DefaultNameGenerator
.
nextName
in interface NameGenerator
protected java.lang.String getName()
nextName()
to get the starting fixed portion
of the name.protected java.lang.String getSuffix()
nextName()
to get the ending fixed portion of
the name.protected int nextIndex()
-1
is returned and the next
index is set to 1
. Otherwise, the current index
is returned, and the index is incremented.