This is the base class for all AnimPaths that connect Routers,
SoftwareComponents etc.
The basic class for all routers etc.
The ActionListener is attached to the Customizer and will react to the buttons
and launch the corresponding method call - i.e.
Update the table according to the buttons pressed etc.
Activates the rubber band mode.
The line that is currently executed
The list of actors on this path
This button adds a new entry
Adds an actor to the motion path.
Adds a single Identification to the AllowedEndPoints.
Adds a single Identification to the AllowedStartPoints.
The buttons to add a new entry
Add an element to the display.
adds another element to the list.
adds another element to the list.
adds a new entry into the 'routing table'.
This adds a new picture to the List of available graphics, stored under
'name'
Adds a new button to insert the specified type of element.
Adds a new entry to the method table.
Sets an image for a certain method - will be used in the Customizer.
The button to add a new payload line
The payload can be empty but can be used by applications to simulate
package content.
The default progress action to be taken when a package arrives that is not
specified in the progress table.
The AbstractRouter has an internal table that is sorted by package types.
Adds a new property to the table of properties.
Adds a propertyChangeListener.
This adds a new scaling recommendation to the list of available scales.
add a new Source Code to the Viewer.
Add a TableErrorListener to this object - these Listeners will be
notified with an TableError Object whenever there is a wrong input.
The text for the add button...
Add a new timer event to the list.
This feature handles the scroll bar and the changes according to it
The variable i is ignored since we only have one progress.
Advance progress indicator channel i by one step.
As with HighlightText the parameter is ignored since it is only used
for ProgressIndicators with multiple values.
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
The AnimList where the Element is currently stored.
The AnimList where the information is stored
this function updates the Peer.
This class can be attached to a motion path and arrive at
its goal after several steps.
Creates a circleshaped actor that arrives in ten turns.
The animation control class
This interface represents a class that will animate our
Display.
This constructor is to be used by all derieved classes to avoid
the evil of nullpointer exceptions.
Contains all the data to be displayed.
This class is a motion path that may have actors attached
to it.
The standard constructor.
This constructor creates a path that has an image as peer.
The basic class for all Peers - i.e.
Set up infrastructure for listeners etc.
The standard constructor creates a static element that is
represented by a square and that is dragable.
This constructor creates a static element that has a polygon
as visual component.
This constructor creates a static element that is represented by
a bitmap - a situation that occurs 99% of the time.
This constructor creates a static element that is represented by
a bitmap.
The value which has to be reached to change to state ARRIVED and
stop moving.
This flag is set when the element has arrived at the end of its
path (AnimActors) or more generally speaking has reached the
end of its activity (e.g.
This method is called by Link when a package is placed on it.
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
The button that undoes changes in the modify window
Change a key value from oldKey to newKey.
This method tests whether it is ok to change the values at the
given point of time...
This method tests whether values are negative.
verifies whether a package conforms to the syntax required.
verifies whether a package conforms to the syntax required.
This primitive flag indicates a circular shape
If true, this component is not displayed
When the actor is copied the state is reset to NOSTATE
Returns a clone of this object.
Generate a copy of this path but only its "look and feel".
returns a copy of this object
Links are not cloned, only the basic properties of this router
Create a copy of this SplineRep but make sure that shape is
updated and array is cloned
The button to close the viewer window
The coefficients of the spline - those are calculated automatically
within the constructor
This value indicates how far the Actor has travelled on its
path so far.
This internal helper function is used by the constructor to
calculate the coefficients.
This algorithm does spline calculations and is directly adapted
from Hearn, Baker (1997) "Computer Graphics - C Version", 2nd ed.
this method is called by getPreferredSize, getMinimumSize and
getMaximumSize.
The button that deletes the selected elements
This method is called to inform the AnimStatic that it has been connected
to a path.
Connects an element to this router.
This method is called by AnimPath's setStart/setEnd().
The first element of a manual connect
The path used to connect two elements.
If two AnimStatics are selected they will be connected by a
copy ('clone') of the given AnimPath.
See AnimList for description.
The class used to connect elements.
Utility function used to convert grid coordinates into coords
that can be used with paint.
Cost - field in class viror.teach.anim.net.
Link The cost associated with this link.
The array of control points that define the appearance of a spline.
the control point values are all relative to the start point in
grid coordinates.
This factory method generates a polygon, which can be filled or not
this factory method generates a geometric primitive.
This factory method generates a spline
The scaled version of the picture.
The values in the new-line -> save when scrolling etc.
The current mouse position.
The Customizer for the payload...
The data of this line as string.
The object that is customized with this object
The Map to store all entries.
The object that will be shown by this Customizer
The object represented by this customizer
The OrnamentalComponent behind this customizer instance
The reference to the package
This Map stores all the table entries in the 'routing table'
Deactivates the rubber band mode.
The default entry to use when no match in table
Order of the spline (i.e.
The time it takes a bit to travel through this line.
The button that deletes the selected elements
Will be true if our internal garbage collection (doGC-Method) will
have to delete elements that are in state DELETED.
When an object is removed from the Animation it chnages to this
state to give all listeners the chance to react to this.
The text field where the decription is displayed
A short description of this router
This method is called to inform the AnimStatic that it has been disconnected
from a path.
Disconnects an element from this router.
This method is called by Animpath's setStart/setEnd().
A reference to the AnimDisplay used for this animation.
A reference back to the display for scaling etc.
The display where we show the animation
Contains TableZone and ScrollBar
If this flag is true, then the object is produced if
g.fill else, g.draw is used
This method is called in getAll() and getPeers() etc.
This method inserts the elements that have been added since
the last call of doIC().
This value is used to check whether the user can drag the component
with the mouse.
This variable is used for dragging.
sets the peer to a spline that looks just like the one we use
to send our actors along.
This method must be called to initialize the path.
returns the position an actor should have after
progressing percentage% on the motion path
Access all AnimElements stored in the List.
Access all AnimElements stored in the List.
Returns an array of all selected elements
Returns an array of all selected elements
The value that must be reached to change state to ARRIVED
Gets the bandwidth value, i.e.
Get the control point with index n.
Returns all control points
Gets the Cost of this link.
Returns a beans customizer that either editable or not.
Returns an UndoCustomizer for this class without any data in it yet.
Please Note: When the customizer is not editable it sports a button panel.
The customizer used for this bean.
The customizer used for this bean.
returns the degree of this spline
Gets the Delay of this link.
The description of this element
Use this to get the Display associated with the AnimList
returns the display this AnimRepresentation uses.
Use this to get the Display associated with the AnimList
returns a line slashed into command, and arguments
Returns the script entry at position i.
gives the data correpsonding to the given entry.
Gets the error rate of this link.
Returns the actual frame rate, not necessarily the one that was
set by setFrameRate (see above).
Returns the router that will be reached by link number l
Returns the size of the grid
returns the grid position
Returns the router this component is connected to.
The identification of this AnimElement.
Returns the image stored under the key 'name'.
Gets the initial scale, i.e.
Returns the current value of InitialScale
returns the software component that will be reached by internal link l
Returns the last internal link that connects to the given goal.
Returns the IPAddress of this router
Returns the keys of the map as array
Returns the number of lines this script has.
Returns the last link that connects to the given goal.
Returns the AnimList this element is stored in
Returns the method saved under the key i
Return the Icon reserved for a certain method
Returns all 'method' names as an array
Returns all called methods sorted the same way as the result of
getKeys() is.
Returns the mood of the list.
Returns the mood of the list.
Returns the highest package type int value that exists within
this context.
Returns the number of visible characters in one line
Returns the number of visible lines of text
Returns the number of InternalLinks that connect SoftwareComponents to this
machine.
Returns the number of links that leave from this machine
Returns the single out type associated with the key i
Returns all out package types sorted the same way as the result of
getKeys() is.
Returns the package that should be sent when the given method is "called"
Gets the text for this package type
returns the path this element moves on
Returns all package payload in an array
Returns the package payload
Returns the number of lines of payload
returns the peer element.
Returns an array of all peers.
Returns an array of all peers.
Returns the position of the Bitmap.
Return the current progress position.
The parameter i is ignored
the preferred size is based on the screen resolution and
the chosen grid.
Returns the current value for a PropertyDisplay TextField with the key being
the label text next to it.
Returns all 'property' names in an array
Returns the Link to the Router.
Returns a scaling value that was recommended for the image name (the image
can be retrieved via getImage(name)).
Returns the amount of screen used when at preferredSize
This static method returns the current instance
gives information on the number of elements in the list.
gives information on the number of elements in the list.
Returns the value that is added to Completion every turn.
returns the current stroke style
Read the data contained in the table.
Returns the target for key i
Returns all target routers sorted the same way as the result of
getKeys() is.
Returns the TravelTime, i.e.
This code is taken from the java2d tutorial.
This code is taken from the java2d tutorial.
The time the actor waits before moving again (not between each step
but rather before the next one)
This function returns an array of all properties that start with x.
This function returns an array of all methods that start with x.
The x coordinate in the "fictive" grid
The y coordinate in the "fictive" grid
Here all images are stored in association with a name
The identification string for this AnimElement.
Objects of this class have added functionality that allows their
content to be compared to the name of a SoftwareComponent or
Router.
A list of InternalLinks (i.e.
This function only ensures that pics have to be loaded
completely before being used in this class.
The ProgressIndicators associated with this object
This class allows reading ini files from any input stream, file or http-doc.
Pass an input stream to the ini reader to have it know where to look...
The IniReader takes the given String as input stream.
This value allows to give pictures an inital scale, i.e.
Set up the display to make it suitable for the table.
This method parses the info for this OOComponent from an URL.
Fills the description from a document lying on the server.
Reads hostname, ip address and description from an 'ini file'.
Initializes the script from an url.
Reads an ini file from the given url.
This method ensures that all objects already in the list before
the connction to a display class are adjusted to the properties
of the display.
This method ensures that all objects already in the list before
the connction to a display class are adjusted to the properties
of the display.
reads information about this handler from a URL
Reads the routing table from an URL.
Will be true if our internal insertion list has to be merged with
our data structure (i.e.
This (Hash)Map maps insertion buttons to elements that will be inserted
when pressing the button.
The insertion list - these elements will be inserted into the
data structure.
This ActionListener handles insertions
The object that will be cloned to be inserted when in insert mode
The last element that was entered.
This Map maps InternalLinks to the SoftwareComponent reachable by them...
An internal link can be used to either connect two SoftwareComponents or
a SoftwareComponent to a Router.
A couple of utility functions that help with introspection
The IP-Address of this host, as long.
When this returns true, the object is invisible on screen
returns the value of highlighted.
If this is set to true, the buttons in the OOComponentCustomizer will be
enabled, otherwise they will not be active.
If this is true, packages can only be sent synchronized, i.e.
returns true, if the name of the component is equal to the data of this
payload.
The input stream we use...
This method returns true, when the large full-information Customizer is to
be shown.
Returns an iterator over this object.
Packages are represented by AnimActors that have additional
information attached.
This constructor is the one to usually use.
This constructor is used to create packages that have an image
as a physical representation.
This package constructor gives us a package that is suitable for routing
with SoftwareHandlers.
What should this router do when a package arrives? The implementation in this
class only sets the LastNewPackage to p.
This method is called when a package arrives at the router
remove the package that has arrived!
Title: Viror.teach.anim.net
Description:
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
This class allows the bean Package to be initialized - this is not
done via properties for one simple reason; we also use this class
to allow users to view this component when the animation is running.
The standard constructor used by bean tools.
If editable is true, the values shown in this JPanel can be
altered
This listener can be notified of syntactically incorrect packages by
a PackagePedanticHandler.
Title: Viror.teach.anim.net
Description:
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
The layer on which packages are displayed when originating from
this router
The layer on which packages should be placed when they are sent.
These package handlers demand a certain systax from their packages and will
notify PackageErrorListeners if the syntax is violated.
This is called in AnimDisplay.paintComponent to draw exactly
this object.
This is called in AnimDisplay.paintComponent to draw exactly
this object.
This is called in AnimDisplay.paintComponent to draw exactly
this object.
the paint method draws all the components in the AnimList
according to the given scale.
parses a line from the input file.
The path this actor is attached to.
The pause value is used to stop/resume the thread for animation
The list where all payload elements are listed.
The payload can be empty but can be used by applications to simulate
package content.
In addition to the other customizer effects, the one for Payloads also
needs to be able to spawn a new element from the values inserted into the
already displayed customizer....
The title text for the payload section
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
The physical representation of this component
The stroke used by the objects
The set of all ProgressIndicators observing this object
This method is used to get the shape at the given coordinates
This method is used to get the shape at the given coordinates
Sends a package p from s to the other end of the link.
Sends a package p from s to the other end of the link.
This class draws a polygon which can be either open or
closed.
The waypoints define the look of the polygon.
The position of this element is saved as a translation
matrix
The position in the source code - this is mapped to a source code page
and line with the help of the ArrayList Script.
A progress indicator is a GUI component that shows
the progress of some activity.
The set of all ProgressIndicators
If true, ProgressIndicators will have their first indicator
advanced by one for every package arrived.
This interface indicates that the implementing class changes its
values in a from that could be considered a progress.
The table of all progress reactions
A lookup in the ProgressTable - will return a default if it has been defined,
might return null otherwise.
when we get a DELETED from any other object we sever the ties to
it -> this ensures that the object will be gone completely from
this animation and if not used elsewhere will be consumed by
the garbage collector daemon.
There are two kinds of propertyChanges that interest us.
This is fired when the coordinates of the AnimElement change.
The array of labels associated with the text fields
This Map stores the strings which describe the different
package types
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Title: TokenRingTrainer
Description:
Kontrollinstanz der Animation.
This message will be written when waiting for orders.
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
called when the element is deleted.
If the AnimPath is removed all Actors on it have to go as well
Removes an actor from the list of elements moving along the
path.
completely empties the list of all elements.
completely empties the list of all elements.
Removes a single Identification from the AllowedEndPoints
Removes a single Identification from the AllowedStartPoints
Removes all elements currently selected
Removes all elements currently selected
Remove an element from the display.
This function removes all elements that are "equal" (as in Object.equals())
to e.
Implementation note: If trying to remove an element that
has just been inserted the deletion might not work.
removes an entry from the table
This will remove a method and all the packages it should have sent! Ture is
returned if the operation was sucessful.
The button to remove payload entries
Removes a payload entry from the list of payload entries
removes the default table entry.
Remove a property from the table of properties.
See description of setTableEntry for details
Resumes an animation that was interrupted by a call of
suspend
This method gets an image from the given URL.
This class represents a router in the animation.
The constructor sets up a router.
Title: Viror.teach.anim.net
Description:
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
The GUI component that will allow custom settings for the router.
The standard costructor is used by bean tools.
The index of the link connecting to the router.
This is not a real customizer but rather a cheap alternative when the
customizer should be used for display purposes only.
Note: editable is always false - this 'Customizer' cannot be used for editing.
True if a rubber band should be displayed.
The rubber band origin coordinates.
save the header info to the given output stream.
a shortcut function that allows giving a file name instead
of a stream for saving
The scale factor of this element saved in matrix form
Change the size of this element.
Change the size of this element.
Overwritten to reset the value of Start
This implementation of scale uses AffineTransforms.
Here are all scales that are recommended for the given image.
This is a convenience method - since most elements use bitmaps
as representations.
how much of the screen should the display use? (Percentage)
The Script of this object - see intro text for details.
The scrollbar to view all text
Scroll the table information
The scrollbar to move through the table
The scaled version of the picture for selected graphics.
This flag is set when the object is selected which happens after
the mouse is clicked on it but may also be activated directly.
This graphic will be displayed when the object is selected.
The single and only instance of this class.
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
This method sends an internal package.
Calling this method sends a package via an internal link.
This method sends a package to the router in order to have it moved
to other routers and then finally to the intended component.
Calling this method puts the given package on the link.
Sets the text on the button that adds a new table entry.
Sets the list which contains the elements.
Passes a set of all Identifications that will be allowed as end points.
Passes a set of all Identifications that will be allowed as start points.
Sets the class that controls the animation cycle
The value that must be reached to change state to ARRIVED
Sets the bandwidth value, i.e.
Every time the component size is changed we want to
recalculate the scaling factor to ensure proper display.
Changes the completion value of the actor.
sets the text for the start button
the class that will be used to connect the two elements.
Sets the n-th control point to the given value.
Sets a control point to another position.
Sets the Cost of this link.
Sets the Delay of this link.
sets the text for the stop button
DO NOT CALL THIS FUNCTION! This function sets a reference to the display
which is often needed for inital scaling of AnimRepresentations etc.
Do not call this method! It is used exclusively by AnimDisplay
when a list is added to it.
read warning in the interface description!
If set to true, the element can be dragged around the
screen.
Sets the end point of the path.
Sets the secondary component of the internal link.
see the other form of setEndTangent for details
The curve used for the Animpath is a cubic spline.
Change a script entry to the given values.
alter header X information (use save function to update on disk as
well).
Sets the error rate of this link.
Sets the grid position (i.e.
Sets the grid position (i.e.
Only call this function if no startpoint has been set yet.
Sets the package handler.
Sets the colour that will be used to highlight the component.
makes this object stand out from the others of its type.
sets the router this handler runs on
sets the router this handler runs on
Sets the hostname for this router.
The identification of this AnimElement.
Sets the initial scale, i.e.
The specified element will bi inserted if the mouse is clicked
while in INSERT-Mood.
The specified element will bi inserted if the mouse is clicked
while in INSERT-Mood.
Sets the IP address for this router
Set the error message text to use when key is empty
sets the package that should be considered the last one that has arrived
so far.
Sets the text of this Code Viewer.
A shortcut function to set line width.
This function should only be called by an implementation of
AnimList during add and remove.
Change the method stored under key i
If this is set to true, the buttons in the OOComponentCustomizer will be
enabled, otherwise they will not be active.
Sets the mood of the list.
Sets the mood of the list.
sets the text for the start button
Sets the number of visible characters in one line
Set the number of visible lines of text.
Pass the object that this customizer will display/alter
Pass the object that this customizer will display/alter
Pass the object that this customizer will display/alter
Pass the object that this customizer will display/alter
Change the out type associated with key i
sets a text for a certain package type.
allows to set the fill style.
Sets the payload value at the given position to the one passed as parameter.
Sets the AnimRepresentation which should be used with this element.
Set the onscreen position of this Representation.
Set the onscreen position of this Representation.
setPosition ensures that all control points lie correctly
in relative position to the starting point
the standard way of positioning an element (such that the coordinates
are the object center).
Set the onscreen position of this Representation.
The parameter 'viewer' is ignored -> it is required due to the generic
nature of the interface.
A hard jump for resets etc.
Note that the first line is 0.
sets the text that will be shown when waiting for orders.
Sets the percentage of the screen the display should use.
This method can be used to set a graphic that should be displayed
when the element is selected.
sets the text that will be shown when a button was pressed that
required something to be selected but that was nothing selected.
Sets the beginning of the path which has to be a static
element.
sets the first component of the internal link.
Sets the startpoint to another position and therefore moves
the whole spline, since all other points are relative to that one
see the other form of setStartTangent for details
The curve used for the Animpath is a cubic spline.
sets the text for the start button
Sets the state to this value.
Sets the direction of the Actor when moving on the path.
sets the text for the stop button
set the stroke style (a java2D feature)
If this is true, packages can only be sent synchronized, i.e.
Fill the table with information from the underlying data structure.
Changes a table entry to the given values.
Sets the target for key i
takes a spline object and uses it as a new basis for the
CubicCurve Original
Set the error message text to use when key value already taken.
This v = true, then the large full-information Customizer is to
be shown.
sets the text for the start button
Set true to make object invisible on screen
The current scale factor.
This is a standard implementation for AnimList which seems
adequate in most cases.
The standard implementation for the package handler this is basically
a glorified routing table with some additional frills.
Title: Viror.teach.anim.net
Description:
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
This class stands for a software component that is installed on a router.
A basic constructor that can be used in conjunction with StandardButtons
or any other constellation where the position of the element will be
set afterwards.
This constructor is the one that is most likely to be used in the case of
of 'manual' use.
This is another PackageHandler-Implementation.
Title: Viror.teach.anim.net
Description:
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
This class is an advanced version of the HighlightText class.
Creates a new object that has the values saved in the fields of the
customizer.
A helper class that can be used to generate splines.
The standard constructor generates a cubic spline (degree three)
where all controlpoints are at 0,0.
This alternative constructor gets us a spline that is a straight
line.
The constructor needs the degree of the spline (i.e.
This class draws a spline on screen.
The standard constructor gives us a curve with all points 0,0
The constructor needs a start point to define the position in
the display and 3 more control points given as relative coordinates
to describe the shape of the curve
paint a square in the background using the components
foregroundcolour (frames our display)
This primitive flag indicates a square shape
This class defines a JPanel with the standard buttons used
to manipulate the Animation.
The standard constructor sets up the basics but has to be augmented by
the sets and gets (especially the AList should be set)
The starting point of the Path
The start point of the spline in screen coordinates.
The button that starts the animation
The set of all ids allowed for the startpoint
For Details on the various states see the diagram "Elementstates"
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
The value by which Completion changes evey animation cycle.
The variable i is ignored
Undo last progress step for indicator channel i.
Undo last progress step for indicator channel i.
The button that stops the animation
The current setting for the background
Halts an animation until it is started again with
resume.
If this is true, packages can only be sent synchronized, i.e.
The current table entries
The Panel where the data is displayed and can be altered...
This method emits a sharp system beep when a package is sent.
This set contains all TableErrorListeners
an object of this type is passed to all TableErrorListeners when there is
some irregularity with a TableGUI object.
Classes implementing this interface can listen for errors in a TableGUI - i.e.
This class can be used to customize tables.
Defines a table that can be used to customize tables in objects visually.
Here the table is displayed
Tests whether a point is "on" this object, i.e.
This method tests the pixel's alpha value to see whether it is part of
the graphic or not.
we test if we are inside or outside of the polygon
By default Vectors use their bounding box to check for
intersection with a point - derieved classes are expected to
overwrite this one!
Test whether this object might have been selected.
This class contains a few utility methods for reading text.
The JPanel where the text is displayed
Title: TokenRingTrainer
Description:
Diese Klasse gibt die Aufgabestellung und die Auswahlmöglichkeiten zum Beantworten
der Aufgabe, überprüft die Eingabe des Anwenders auf Richtigkeit und sendet die
Daten an den Server
Copyright: Copyright (c) 2003
Company:
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
This class object must be changed by derieved classes in order to call
the methods they have implemented.
If the CodeValue of the timer event is 0, the package will be sent, otherwise
a progress will be fired according to package type (a lookup will occur).
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Classes that implement this interface will be able to receive timer events
generated by AbsractRouters.
The set of all timer listeners
This class listens for timer events and will cause a progress in a
ProgressIndicator,
Copyright: Copyright (c) Ralf Gitzel
Company: Wifo III
Create a TimerProgress object.
The Title text of this customizer
Title: TokenRingTrainer
Description:
Nach dem Erzeugen der Aufgabe, wird das Szenario einmal durch gespielt, ohne
dass eine Animation gestartet wird.
Title: TokenRingTrainer
Description:
Copyright: Copyright (c) 2003
Company:
Use this method for debugging and other output
The string representation of this line
The detailed info on this package as a string
The name and short description of this handler
Use this one mainly for debugging purposes
The name and short description of this handler
use this method for debugging etc.
Use this method for debugging etc.
The number of "animation turns" it will take the Actor to
arrive at the end of its motion pass.
This array contains the names given for all types the
package may have.
The Package Type can be chosen from all available
The maximum number of package types.