@Override
    public void onRelocateTag( TagView tagViewToRelocate, TagView tagViewRelocationRef, InsertionPoint insertionPoint ) {
        //Prevent modification between two similar TagLists
        if( !this.containsTagView( tagViewToRelocate ) || !this.containsTagView( tagViewRelocationRef ) )
            return;
        
        int fromIndex = -1;
        int toIndex = -1;
        
        for( int i = 0; i < this.tagItems.size(); i++ )
            if( this.tagItems.get( i ).getTagView().equals( tagViewToRelocate ) )
                fromIndex = i;
            else if( this.tagItems.get( i ).getTagView().equals( tagViewRelocationRef ) )
                if( InsertionPoint.BEFORE == insertionPoint )
                    toIndex = i;
                else
                    toIndex = i + 1;
        
        //Reorder tagItem list
        this.tagItems.add( toIndex, this.tagItems.get( fromIndex ) );
        this.tagItems.remove( fromIndex > toIndex ? fromIndex + 1 : fromIndex );
        
        //Reset TagListView
        for( TagItem tagItem : this.tagItems ) {
            this.tagListView.getTagsPanel().remove( tagItem.getTagView() );
            this.tagListView.getTagsPanel().add( tagItem.getTagView() );
        }
    }