Coverage Report - de.glossmaker.gloss.undo.UndoGlossStack
 
Classes in this File Line Coverage Branch Coverage Complexity
UndoGlossStack
23%
6/26
6%
1/16
3,667
 
 1  
 package de.glossmaker.gloss.undo;
 2  
 
 3  
 import de.glossmaker.undo.UndoStack;
 4  
 import de.glossmaker.undo.UndoableItem;
 5  
 
 6  
 /**
 7  
  * This class implements the container for undo and redo. The elements that can
 8  
  * be stored in this container have to be of the type {@link UndoableItem}.
 9  
  * 
 10  
  * @author Markus Flingelli
 11  
  *
 12  
  */
 13  0
 public class UndoGlossStack extends UndoStack<UndoableItem> {
 14  1
         private static UndoGlossStack mUndoStack = null;
 15  
         
 16  
         private UndoGlossStack() {
 17  1
                 super();
 18  1
         }
 19  
         
 20  
         public static UndoGlossStack getInstance() {
 21  1
                 if (mUndoStack == null) {
 22  1
                         mUndoStack = new UndoGlossStack();
 23  
                 }
 24  1
                 return mUndoStack;
 25  
         }
 26  
         
 27  
         public void pushUndo(UndoableItem item) {                
 28  0
                 boolean insert = true;
 29  0
                 if (mUndo.size() > 0) {
 30  0
                         UndoableItem prevItem = mUndo.pop();                        
 31  0
                         if (prevItem != null) {
 32  0
                                 if (prevItem.getPropertyName().equals(item.getPropertyName())) {
 33  0
                                         if (item.getNewValue() instanceof String) {
 34  0
                                                 String newValue = (String) item.getNewValue();
 35  0
                                                 if (!newValue.endsWith(" ")) {
 36  0
                                                         prevItem.setNewValue(item.getNewValue());                                                        
 37  0
                                                         insert = false;
 38  
                                                 } 
 39  0
                                                 mUndo.push(prevItem);
 40  0
                                         } else {
 41  0
                                                 mUndo.push(prevItem);
 42  
                                         }
 43  
                                 } else {
 44  0
                                         mUndo.push(prevItem);
 45  
                                 }
 46  
                         }
 47  
                 }
 48  0
                 if (insert == true) {
 49  0
                         mUndo.push(item);
 50  
                         // reset mRedo to avoid inconsistency
 51  0
                         if (mRedo.size() > 0) {
 52  0
                                 mRedo.clear();
 53  
                         }
 54  
                 }
 55  0
         }
 56  
 }