public void Execute()
 {
     group           = new GroupedFigures();
     figureObservers = new Dictionary <Figure, List <IObserver> >();
     group.Select();
     for (var it = figures.CreateIterator(); !it.EOL;)
     {
         var bufferFigure = it.GetCurrent().Value;
         if (bufferFigure.Selected)
         {
             if (bufferFigure.isSticky)
             {
                 figureObservers.Add(bufferFigure, new List <IObserver>(bufferFigure.GetObservers()));
                 bufferFigure.RemoveAllObserver();
             }
             group.Add(bufferFigure);
             figures.Remove(bufferFigure);
         }
         else
         {
             it.Next();
         }
     }
     if (group.Count > 0)
     {
         figures.AddLast(group);
     }
     else
     {
         group = null;
     }
     figures.NotifyAll();
 }
        public void Unexecute()
        {
            var group = new GroupedFigures();

            group.Select();
            for (var it = ungroupedFigures.CreateIterator(); !it.EOL; it.Next())
            {
                var bufferFigure = it.GetCurrent().Value;
                if (bufferFigure.isSticky)
                {
                    bufferFigure.RemoveAllObserver();
                }
                group.Add(bufferFigure);
                figures.Remove(bufferFigure);
            }

            if (group.Count > 0)
            {
                figures.AddLast(group);
            }
        }