Usually a new connection object is created graphically by using the corresponding connection tool from the diagrams’s tool palette. When using Graphiti you only have to provide a so called create connection feature. The integration into the platform’s UI is done by the framework.
A create connection feature has to implement the interface ICreateConnectionFeature. Instead of implementing it directly it should extend one of the available base classes. In this example we extend the base class AbstractCreateConnectionFeature.
We have to implement/overwrite 3 methods:
In this example we want create an EReference between EClasses via the connection tool from the palette.

Figure: EReference between EClasses
You can see the complete implementation of the create connection feature here:
package org.eclipse.graphiti.examples.tutorial.features;
 
		public class TutorialCreateEReferenceFeature 
		extends
       AbstractCreateConnectionFeature 
		{
 
    public TutorialCreateEReferenceFeature 
		(IFeatureProvider fp) {
       
		// provide name and description for the UI, e.g. the 
		palette
       
		super(fp, "EReference",
		"Create EReference");
    
		}
 
    public boolean 
		canCreate(ICreateConnectionContext context) {
       
		// return true if both anchors belong to an EClass
        
		// and those EClasses are not identical
        
		EClass source = getEClass(context.getSourceAnchor());
        
		EClass target = getEClass(context.getTargetAnchor());
       
		if (source != null
		&& target != null && source != target) 
		{
           
		return true;
        
		}
        return 
		false;
    }
 
   
		public boolean canStartConnection(ICreateConnectionContext 
		context) {
       
		// return true if start anchor belongs to a EClass
       
		if (getEClass(context.getSourceAnchor()) !=
		null) {
           
		return true;
        
		}
        return 
		false;
    }
 
   
		public Connection create(ICreateConnectionContext 
		context) {
        Connection newConnection 
		= null;
 
       
		// get EClasses which should be connected
        
		EClass source = getEClass(context.getSourceAnchor());
        
		EClass target = getEClass(context.getTargetAnchor());
 
       
		if (source != null
		&& target != null) {
           
		// create new business object 
            
		EReference eReference = createEReference(source, target);
           
		// add connection for business object
            
		AddConnectionContext addContext =
                
		new AddConnectionContext(context.getSourceAnchor(), context
                    
		.getTargetAnchor());
            
		addContext.setNewObject(eReference);
            
		newConnection =
                
		(Connection) getFeatureProvider().addIfPossible(addContext);
        
		}
        
       
		return newConnection;
    
		}
 
    /**
     
		* Returns the EClass belonging to the anchor, or null if not available.
     
		*/
    private EClass 
		getEClass(Anchor anchor) {
       
		if (anchor != null) 
		{
            
		Object object =
                
		getBusinessObjectForPictogramElement(anchor.getParent());
           
		if (object instanceof
		EClass) {
               
		return (EClass) object;
            
		}
        }
       
		return null;
    }
 
   
		/**
    * Creates a EReference between 
		two EClasses.
    */
   
		private EReference createEReference(EClass 
		source, EClass target) {
        EReference 
		eReference = EcoreFactory.eINSTANCE.createEReference();
        
		eReference.setName("new EReference");
        
		eReference.setEType(target);
        
		eReference.setLowerBound(0);
        
		eReference.setUpperBound(1);
        
		source.getEStructuralFeatures().add(eReference);
       
		return eReference;
   }
}
		
Additionally the feature provider has to deliver our newly created feature (overwrite the method getCreateConnectionFeatures).
This implementation can be seen here:
 @Override
 public
		ICreateConnectionFeature[] getCreateConnectionFeatures() {
   
		return new ICreateConnectionFeature[] { 
       
		new TutorialCreateEReferenceFeature (this) 
		};
 } 
Before we can run the editor we have to add anchors to the container shapes of the EClasses. Anchors are explained later in detail.
For now simply create an anchor at end of the add method of the TutorialAddEClassFeature, as shown in the following code snippet:
 public PictogramElement 
		add(IAddContext context) {
       
		
        // 
		... EXISTING CODING ... 
       
		
        // add a chopbox anchor to 
		the shape 
        peCreateService.createChopboxAnchor(containerShape);
 
		
        // 
		call the layout feature
        
		layoutPictogramElement(containerShape);
 
       
		return containerShape;
    
		} 
  
Now start the editor and test the create connection feature: