Managing selection

Selection in a Web application is handled through the IlvSelectionManager and IlvSelectInteractor classes.
The IlvSelectionManager allows you to select one or more objects in the view and to move the current selection. The IlvSelectInteractor directly uses the selection manager to perform these tasks.
Note
Selection makes sense in multisession mode only.

Client-side configuration

To use the selection on the client side, import the following scripts:
<script TYPE="text/javascript" src="script/IlvAbstractSelectionManager.js"></
script>
<script TYPE="text/javascript" src="script/framework/IlvSelectionManager.js"></
script>
<script TYPE="text/javascript" src="script/framework/IlvSelectInteractor.js"></
script>
To retrieve the selection manager on the client side, use the following code:
var selectionManager = view.getSelectionManager();

Server-side configuration

By default, the selection feature is not enabled in the image servlet support.
To make the selection feature available, you need to call setSelectionEnabled(true) .
Example:
public class DiagrammerServlet  extends IlvDiagrammerServlet  {

  protected IlvSDMServletSupport createServletSupport(ServletContext context) {
    return new DiagrammerServletSupport(context);
  }

}

public class DiagrammerServletSupport extends IlvDiagrammerServletSupport {  
  public DiagrammerServletSupport(ServletContext context) {
    super(context);    
    setSelectionEnabled(true); 
  }  
}

Image mode or Rectangle mode

The selection manager provides two modes for displaying the selection of objects:
  • Image mode: after each selection on the client, an image request is issued.
  • Rectangle mode: after each selection on the client, the bounding box of each selected object is queried to the server and displayed on the client.
    The color and thickness of the bounding box rectangles can be configured through the selection manager.

Properties

The selection servlet can be configured to provide additional information for each selected object. This information corresponds to additional properties that can be used on the client.
To do so, you need to subclass the selection support implementation to override getAdditionalProperties(IlvSelectionResponse response, Object object) , as in the following example.
The following selection support adds the properties of an SDM node:
//Subclass to override the getAdditionalProperties method
public class DiagrammerSelectionSupport extends IlvDiagrammerSelectionSupport {

  public DiagrammerSelectionSupport(IlvDiagrammerServletSupport support) {
    super(support);
  }

  protected ArrayList getAdditionalProperties(IlvSelectionResponse response,
   Object object) {
    ArrayList props = super.getAdditionalProperties(response, object);
    
    IlvSDMNode node = (IlvSDMNode) object;
    IlvDiagrammer diagrammer = (IlvDiagrammer)
       response.getProperty(DIAGRAMMER_KEY);
    IlvSDMModel model = diagrammer.getEngine().getModel();
           
    String names[] = model.getObjectPropertyNames(node);
    
    for (int i = 0; i < names.length; i++) {
      ArrayList l = new ArrayList();
      l.add(names[i]);
      l.add(model.getObjectProperty(node, names[i]));
      props.add(l);
    }
    
     return props;
  }

}

//Use the new selection selection support class in the servlet support.
public class DiagrammerServletSupport extends IlvDiagrammerServletSupport {
  
  [...]

  protected IlvSelectionSupport createSelectionSupport() {
    return new DiagrammerSelectionSupport(this);
  }
  
}
In image mode, you need to issue an additional request to get the selection information (the information is disabled by default). To force this additional request on each selection, use view.getSelectionManager().setForceUpdateProperties(true) .
In rectangle mode, the selection information is always enabled.
There are two ways to retrieve the selection information on the client side:
  • Get the current selection at any time.
    view.getSelectionManager().getSelection()
  • Register a listener for selection changes.
    The listener is notified of the current selection.
The additional properties are available in the properties of a selection rectangle.
If the selection support example illustrated earlier in this section is used, the following listener example fills a panel with properties of the selected object:
function showProperties(rList) {

  if (rList.length == 1) {
    var p = "<table>";

    for(var i=0; i<rList[0].getProperties(length); i++){
      var props = rList[0].getProperties();
      p += "<td>" + props[i][0]+ "</td>";
      p += "<td>" + props[i][1]+ "</td>";
    }						
    p +="<table>";
    propPanel.setContent(p);
  }
}

Listeners

Listeners can be registered for the selection manager to keep track of the selection when the selection manager is in rectangle mode. To add a listener to the selection manager, use the following method:
view.getSelectionManager().addSelectionChangedListener(listener)
listener is a function with one parameter that corresponds to the selection: a list of rectangles with additional properties.
In image mode, you need to issue an additional request to get the selection information; listeners are not notified by default.
To force this second request on each selection, use:
view.getSelectionManager().setForceUpdateProperties(true)

Moving

If moving objects is allowed on the client and server sides, the IlvSelectInteractor allows you to drag and drop objects.
Important
To avoid user actions to be overridden by the automatic layout, the node layout must be disabled when using that feature.