|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.esri.arcgis.controls.ARMap
public class ARMap
The ARMap container for the display of map data.
Every PMF document contains at least one ARMap object. Only one ARMap can have focus at a time and this ARMap is called the focus map. The IARPageLayout interface provides access to all of the ARMap objects in the document. The ARMap is a view that can take control of the main display area of the ArcReaderControl to become the CurrentView and is a container for map data. It is the primary point for managing data layers, navigating around those data layers and finding particular features.
Constructor Summary | |
---|---|
ARMap(Object obj)
Construct a ARMap using a reference to such an object returned from ArcGIS Engine or Server. |
Method Summary | |
---|---|
void |
centerAt(double xCoord,
double yCoord)
Moves the center of the map to the specified point. |
void |
centerAtBookmark(Object vBookmarkID)
Centers the map display on the bookmark. |
boolean |
equals(Object o)
Compare this object with another |
IARLayer |
getARLayer(int index)
The layer at the specified index. |
int |
getARLayerCount()
The number of layer in the map's layer collection. |
int |
getBookmarkCount()
The number of bookmarks in the map's bookmark collection. |
String |
getBookmarkName(int index)
The name of the bookmark. |
Object |
getCustomProperty()
A property to associate data with an object. |
String |
getDescription()
The description of the map. |
int |
getDistanceUnits()
The distance units of the map. |
void |
getExtent(double[] xMin,
double[] yMin,
double[] xMax,
double[] yMax)
The visible extent of the map. |
void |
getFullExtent(double[] xMin,
double[] yMin,
double[] xMax,
double[] yMax)
The extent of all the data within the map. |
Object |
getInternalObject()
The internal ArcObjects IMap object. |
double |
getMapScale()
The scale of the map as a representative fraction. |
int |
getMapUnits()
The geographical units of the map. |
String |
getName()
The name of the map. |
double |
getReferenceScale()
The reference scale of the map as a representative fraction. |
double |
getRotation()
The number of degrees the map display is rotated. |
String |
getSpatialReferenceName()
The name of the map's spatial reference. |
int |
hashCode()
the hashcode for this object |
boolean |
isCanRedoExtent()
Indicates if there is a map extent that can be redone. |
boolean |
isCanUndoExtent()
Indicates if there is a map extent that can be undone. |
void |
pan(int direction,
double screenPercentage)
Pans the map by a factor in a specified direction. |
IARFeatureSet |
queryARFeatures(IARSearchDef pSearchDef)
Searches the map using a search definition and returns an ARFeatureSet. |
void |
redoExtent()
Redo the next map extent in the stack. |
void |
refresh(boolean refreshNow)
Redraws the map display area. |
IARFeatureCursor |
searchARFeatures(IARSearchDef pSearchDef)
Searches the map using a search definition and returns an ARFeatureCursor. |
void |
setCustomProperty(Object pVal)
A property to associate data with an object. |
void |
setExtent(double xMin,
double yMin,
double xMax,
double yMax)
Sets the visible extent of the map. |
void |
setMapScale(double mapScale)
The scale of the map as a representative fraction. |
void |
setRotation(double mapRotation)
The number of degrees the map display is rotated. |
void |
toMapPoint(int x,
int y,
double[] xCoord,
double[] yCoord)
Converts a point in device coordinates (typically pixels) to coordinates in map units. |
void |
undoExtent()
Undo to the previous map extent in the stack. |
void |
zoomIn(double factor)
Zooms in on the map by a factor. |
void |
zoomOut(double factor)
Zooms out on the map by a factor. |
void |
zoomToBookmark(Object vBookmarkID)
Zooms the map display to the bookmark. |
void |
zoomToFullExtent()
Zoom to the full extent of all data within the map. |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface com.esri.arcgis.interop.RemoteObjRef |
---|
getJintegraDispatch, release |
Constructor Detail |
---|
public ARMap(Object obj) throws IOException
obj
to ARMap
. *
ARMap o = (ARMap)obj; // will not work
ARMap o = new ARMap(obj); // Use this constructor instead
* @param obj an object returned from ArcGIS Engine or Server
IOException
- if there are interop problems
ARMap theARMap = (ARMap) obj;
Method Detail |
---|
public boolean equals(Object o)
equals
in class Object
public int hashCode()
hashCode
in class Object
public void setMapScale(double mapScale) throws IOException, AutomationException
setMapScale
in interface IARMap
mapScale
- The mapScale (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public double getMapScale() throws IOException, AutomationException
The MapScale property will return an error if the MapUnits are unknown or if passed a value of 0.
getMapScale
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getSpatialReferenceName()
,
com.esri.arcgis.publishercontrols.IARMap#getReferenceScale()
,
com.esri.arcgis.publishercontrols.IARMap#getDistanceUnits()
,
com.esri.arcgis.publishercontrols.IARMap#getMapUnits()
public void refresh(boolean refreshNow) throws IOException, AutomationException
The Refresh method causes screen display area of the ARMap to be completely redrawn by sending a windows paint event. Use the Refresh method to ensure the ARMap is displaying the current state of the data. For example, if data is in an SDE server with many users editing the data, refreshing the ARMap ensures the user of a ArcReaderControl application sees any new edits.
Specify whether to immediately redraw the ARMap or whether to queue up the redraw to happen at some point in the immediate future. For example, if there are many extent changes, but only the last extent needs displaying to the user pass False to the Refresh method. The paint event will be queued and the ARMap will be redrawn once after the last extent change. However, if every extent change needs displaying to the user, pass True to the Refresh method. The ARMap will be redrawn after every extent change. Likewise pass True after an extent change, but before flashing or flickering an ARFeature.
The Refresh method triggers the following events:
OnBeforeScreenDraw
OnAfterScreenDraw
refresh
in interface IARMap
refreshNow
- The refreshNow (in, optional, pass false if not required)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public String getName() throws IOException, AutomationException
The Name of the ARMap. This is the name that appears in the Table of Contents (TOC) on the left hand side of the ArcReaderControl.
getName
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public int getARLayerCount() throws IOException, AutomationException
The ARLayerCount property returns the number of ARLayer's within the ARMap.
This does not include any IARLayer::ChildARLayer objects if IARLayer::IsGroupLayer returns true for an ARLayer.
getARLayerCount
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public IARLayer getARLayer(int index) throws IOException, AutomationException
getARLayer
in interface IARMap
index
- The index (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public String getDescription() throws IOException, AutomationException
Returns a description of the ARMap at the time the document was published.
Note that map's do not have a description by default.
getDescription
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public String getSpatialReferenceName() throws IOException, AutomationException
Returns the name of the spatial reference the ARMap is using to display data.
getSpatialReferenceName
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getReferenceScale()
,
com.esri.arcgis.publishercontrols.IARMap#getDistanceUnits()
public int getMapUnits() throws IOException, AutomationException
The ARMap's map units. Any coordinates returned from the GetExtent, GetFullExtent and ToMapPoint methods will be in MapUnits. Likewise the coordinates passed into the SetExtent and CenterAt methods need to be in MapUnits.
getMapUnits
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getSpatialReferenceName()
,
com.esri.arcgis.publishercontrols.IARMap#getMapScale()
,
com.esri.arcgis.publishercontrols.IARMap#getReferenceScale()
,
com.esri.arcgis.publishercontrols.IARMap#getDistanceUnits()
public int getDistanceUnits() throws IOException, AutomationException
The DistanceUnits are used when reporting measurements and are used by the esriARToolMapMeasure tool when it is set as the IARControl::CurrentARTool and is used on the ARMap object.
getDistanceUnits
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getSpatialReferenceName()
,
com.esri.arcgis.publishercontrols.IARMap#getMapScale()
,
com.esri.arcgis.publishercontrols.IARMap#getReferenceScale()
,
com.esri.arcgis.publishercontrols.IARMap#getMapUnits()
public void setExtent(double xMin, double yMin, double xMax, double yMax) throws IOException, AutomationException
Sets the xmin, ymin, xmax and ymax coordinates of the ARMap's current visible extent in MapUnits. The SetExtent method automatically refreshes the ARMap's display area.
setExtent
in interface IARMap
xMin
- The xMin (in)yMin
- The yMin (in)xMax
- The xMax (in)yMax
- The yMax (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomToFullExtent()
,
com.esri.arcgis.publishercontrols.IARMap#getFullExtent(double[], double[], double[], double[])
,
com.esri.arcgis.publishercontrols.IARMap#getExtent(double[], double[], double[], double[])
public void getExtent(double[] xMin, double[] yMin, double[] xMax, double[] yMax) throws IOException, AutomationException
Returns the xmin, ymin, xmax and ymax coordinates of the ARMap's current visible extent in MapUnits.
getExtent
in interface IARMap
xMin
- The xMin (in/out: use single element array)yMin
- The yMin (in/out: use single element array)xMax
- The xMax (in/out: use single element array)yMax
- The yMax (in/out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomToFullExtent()
,
com.esri.arcgis.publishercontrols.IARMap#setExtent(double, double, double, double)
,
com.esri.arcgis.publishercontrols.IARMap#getFullExtent(double[], double[], double[], double[])
public void getFullExtent(double[] xMin, double[] yMin, double[] xMax, double[] yMax) throws IOException, AutomationException
Returns the xmin, ymin, xmax and ymax coordinates of the full extent of all data layers in the ARMap in MapUnits.
getFullExtent
in interface IARMap
xMin
- The xMin (in/out: use single element array)yMin
- The yMin (in/out: use single element array)xMax
- The xMax (in/out: use single element array)yMax
- The yMax (in/out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomToFullExtent()
,
com.esri.arcgis.publishercontrols.IARMap#setExtent(double, double, double, double)
,
com.esri.arcgis.publishercontrols.IARMap#getExtent(double[], double[], double[], double[])
public double getReferenceScale() throws IOException, AutomationException
The ReferenceScale property indicates the scale to which all symbol and text sizes used in the ARMap will be made relative.
A ReferenceScale set to 0 indicates that no ReferenceScale is set, and the size of any symbols or text on the ARMap will remain the same irrespective of MapScale. When a ReferenceScale is set, the size of any symbols or text on the ARMap will change as the MapScale changes. For example, text labels will get larger if you zoom in to a scale larger than the ReferenceScale and smaller if you zoom out to a scale smaller than the ReferenceScale.
getReferenceScale
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getSpatialReferenceName()
,
com.esri.arcgis.publishercontrols.IARMap#getDistanceUnits()
public void zoomIn(double factor) throws IOException, AutomationException
Zooms in on the ARMap from the center of its current visible extent by a specified factor. This factor represents the ratio between the new visible extent and the previous visible extent and will cause the MapScale property to change. For example, zooming in by a factor of 2, is the same as zooming out by a factor of 0.5 and vice versa.
zoomIn
in interface IARMap
factor
- The factor (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomOut(double)
,
com.esri.arcgis.publishercontrols.IARMap#centerAt(double, double)
,
com.esri.arcgis.publishercontrols.IARMap#pan(int, double)
public void zoomOut(double factor) throws IOException, AutomationException
Zooms out on the ARMap from the center of its current visible extent by a specified factor. This factor represents the ratio between the new visible extent and the previous visible extent and will cause the MapScale property to change. For example, zooming in by a factor of 2, is the same as zooming out by a factor of 0.5 and vice versa.
zoomOut
in interface IARMap
factor
- The factor (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomIn(double)
,
com.esri.arcgis.publishercontrols.IARMap#centerAt(double, double)
,
com.esri.arcgis.publishercontrols.IARMap#pan(int, double)
public void pan(int direction, double screenPercentage) throws IOException, AutomationException
Pans the ARMap display area in the specified direction, by a specified screen percentage. The extent of the ARMap will change, but the MapScale will remain the same.
A percentage of 0 will not actually offset the ARMap in the display area, a percentage of 25 will pan the current visible extent by a quarter of its width, and a percentage of 100 will offset the ARMap in the display area completely, so that any of the ARMap visible before the Pan will no longer be visible.
pan
in interface IARMap
direction
- A com.esri.arcgis.controls.esriARDirection constant (in)screenPercentage
- The screenPercentage (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomIn(double)
,
com.esri.arcgis.publishercontrols.IARMap#zoomOut(double)
,
com.esri.arcgis.publishercontrols.IARMap#centerAt(double, double)
public void centerAt(double xCoord, double yCoord) throws IOException, AutomationException
The CenterAt method positions the supplied x and y map coordinates in the center of the ARMap display area. The extent of the ARMap will change, but the MapScale will remain the same.
centerAt
in interface IARMap
xCoord
- The xCoord (in)yCoord
- The yCoord (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#zoomIn(double)
,
com.esri.arcgis.publishercontrols.IARMap#zoomOut(double)
,
com.esri.arcgis.publishercontrols.IARMap#pan(int, double)
public void setRotation(double mapRotation) throws IOException, AutomationException
setRotation
in interface IARMap
mapRotation
- The mapRotation (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public double getRotation() throws IOException, AutomationException
The Rotation property indicates the rotation of the ARMap display, and so the angle data appears inside the ARMap. The angle of the rotation is measured in degrees. Positive numbers rotate the display counter clockwise and negative numbers clockwise.
Use the Refresh method to redraw the ARMap display area in order to see the rotated ARMap data.
getRotation
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public IARFeatureSet queryARFeatures(IARSearchDef pSearchDef) throws IOException, AutomationException
Queries the ARMap based upon an attribute or spatial query as defined by the ArcReaderSearchDef. Only ARLayer objects with a Searchable property set to true within the ARMap will be searched.
All ARFeature objects matching the query are instantiated in the ARFeatureSet. If the number of features could be very large, this may not be desirable as it may result in a long delay and consume a large amount of memory. Instead use the SearchARFeatures method. If there are no features matching the query the IARFeatureSet::ARFeatureCount property will return 0.
The QueryARFeatures method will return an error if the currently loaded document was not published with permission to QueryFeatures. Use the IARControl::HasDocumentPermission method to determine this.
If there is an error with the query, such as ill-formed SQL, the error returned will contain an error description from the underlying database.
queryARFeatures
in interface IARMap
pSearchDef
- A reference to a com.esri.arcgis.controls.IARSearchDef (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public void toMapPoint(int x, int y, double[] xCoord, double[] yCoord) throws IOException, AutomationException
Converts the x and y screen coordinates supplied in pixels to x and y map coordinates. The screen coordinates are relative to the top left of the ARMap display area. To obtain the offset of the display area from the top left of the ArcReaderControl use the IARControl::ViewTop and IARControl::ViewLeft properties. The returned map coordinates will be in MapUnits.
toMapPoint
in interface IARMap
x
- The x (in)y
- The y (in)xCoord
- The xCoord (in/out: use single element array)yCoord
- The yCoord (in/out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public boolean isCanUndoExtent() throws IOException, AutomationException
Whenever the extent of the map changes the previous extent is placed onto an extent stack. It is possible to navigate backwards and forwards through any extents in the extent stack.
CanUndoExtent indicates if there is an ARMap extent that can be undone. Use the property before using the UndoExtent method.
isCanUndoExtent
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#undoExtent()
,
com.esri.arcgis.publishercontrols.IARMap#redoExtent()
,
com.esri.arcgis.publishercontrols.IARMap
public void undoExtent() throws IOException, AutomationException
Undo the ARMap extent to the previous extent in the extent stack. Use the CanUndoExtent property to determine whether the extent can be undone.
undoExtent
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#redoExtent()
,
com.esri.arcgis.publishercontrols.IARMap
public boolean isCanRedoExtent() throws IOException, AutomationException
Whenever the extent of the map changes the previous extent is placed onto an extent stack. It is possible to navigate backwards and forwards through any extents in the extent stack.
CanRedoExtent indicates if there is an ARMap extent that can be redone. Use the property before using the RedoExtent method.
isCanRedoExtent
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#undoExtent()
,
com.esri.arcgis.publishercontrols.IARMap#redoExtent()
,
com.esri.arcgis.publishercontrols.IARMap
public void redoExtent() throws IOException, AutomationException
Redo the ARMap extent to the next extent in the extent stack. Use the CanRedoExtent property to determine whether the extent can be redone.
redoExtent
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#undoExtent()
,
com.esri.arcgis.publishercontrols.IARMap
public Object getInternalObject() throws IOException, AutomationException
Use the InternalObject property to access the underlying IMap object. This property is always inaccessible.
Getting the InternalObject property will return an error if no license is available and if the currently loaded document was not published with permission to access InternalObjects. Use the IARControl::HasDocumentPermission method to determine this.
getInternalObject
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public int getBookmarkCount() throws IOException, AutomationException
The BookmarkCount property returns the number of spatial bookmarks within the ARMap.
getBookmarkCount
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#centerAtBookmark(java.lang.Object)
,
com.esri.arcgis.publishercontrols.IARMap#getBookmarkName(int)
,
com.esri.arcgis.publishercontrols.IARMap#zoomToBookmark(java.lang.Object)
public String getBookmarkName(int index) throws IOException, AutomationException
getBookmarkName
in interface IARMap
index
- The index (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public void zoomToBookmark(Object vBookmarkID) throws IOException, AutomationException
Zooms to the spatial bookmark to make it visible on the display as the new viewing extent, changing the MapScale.
Specify a BookmarkName or a zero-based index to zoom to a spatial bookmark. For example, to zoom to the first spatial bookmark in the collection, pass an index of 0, and to zoom to the last spatial bookmark in the layer collection, pass an index of (BookmarkCount - 1).
zoomToBookmark
in interface IARMap
vBookmarkID
- A Variant (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#centerAtBookmark(java.lang.Object)
,
com.esri.arcgis.publishercontrols.IARMap#getBookmarkName(int)
,
com.esri.arcgis.publishercontrols.IARMap#getBookmarkCount()
public void centerAtBookmark(Object vBookmarkID) throws IOException, AutomationException
Centers the spatial bookmark on the display to make it visible. The extent of the ARMap will change, but the MapScale will remain the same.
Specify a BookmarkName or a zero-based index to center a spatial bookmark. For example, to center the first spatial bookmark in the collection, pass an index of 0, and to center the last spatial bookmark in the layer collection, pass an index of (BookmarkCount - 1).
centerAtBookmark
in interface IARMap
vBookmarkID
- A Variant (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#getBookmarkName(int)
,
com.esri.arcgis.publishercontrols.IARMap#getBookmarkCount()
,
com.esri.arcgis.publishercontrols.IARMap#zoomToBookmark(java.lang.Object)
public void zoomToFullExtent() throws IOException, AutomationException
Changes the ARMap's viewing extent to show the full extent of all data layers, causing the MapScale property to change. The ZoomToFullExtent method automatically refreshes the ARMap display area.
zoomToFullExtent
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.com.esri.arcgis.publishercontrols.IARMap#setExtent(double, double, double, double)
,
com.esri.arcgis.publishercontrols.IARMap#getFullExtent(double[], double[], double[], double[])
,
com.esri.arcgis.publishercontrols.IARMap#getExtent(double[], double[], double[], double[])
public Object getCustomProperty() throws IOException, AutomationException
Use the CustomProperty to associate any useful data with the ARMap. This is similar to a 'Tag' property, and can be use to store strings, numbers and objects.
getCustomProperty
in interface IARMap
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public void setCustomProperty(Object pVal) throws IOException, AutomationException
setCustomProperty
in interface IARMap
pVal
- A Variant (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.public IARFeatureCursor searchARFeatures(IARSearchDef pSearchDef) throws IOException, AutomationException
Searches the ARMap based upon an attribute or spatial query as defined by the ArcReaderSearchDef. Only ARLayer objects with a Searchable property set to true within the ARMap will be searched.
Use the ARFeatureCursor to retrieve each ARFeature one at a time. If there are no ARFeature objects matching the query the first IARFeatureCursor::NextARFeature will return nothing.
The SearchARFeatures method will return an error if the currently loaded document was not published with permission to QueryFeatures. Use the IARControl::HasDocumentPermission method to determine this.
If there is an error with the query, such as ill-formed SQL, the error returned will contain an error description from the underlying database.
searchARFeatures
in interface IARMap
pSearchDef
- A reference to a com.esri.arcgis.controls.IARSearchDef (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |