001    package nl.cwi.sen1.gui.plugin.editor;
002    
003    import locationapi.Factory;
004    import locationapi.types.Area;
005    import locationapi.types.AreaAreas;
006    import locationapi.types.Slice;
007    import aterm.ATermList;
008    import aterm.pure.PureFactory;
009    
010    public class SliceRegistrar {
011            private static Factory factory;
012    
013            static public void registerSlices(EditorPane editor, ATermList slices) {
014            editor.unsetStyles();
015            
016            initFactory(slices);
017                    
018                    for ( ; !slices.isEmpty(); slices = slices.getNext()) {
019                            Slice slice = factory.SliceFromTerm(slices.getFirst());
020                            registerSlice(editor, slice);
021                    }
022            }
023    
024            static private void registerSlice(EditorPane editor, Slice slice) {
025                    String name = slice.getId();
026                    AreaAreas areas = slice.getAreas();
027                    
028                    for ( ; !areas.isEmpty(); areas = areas.getTail()) {
029                            Area area = areas.getHead();
030                            editor.setStyle(area.getOffset(), area.getLength(), name);
031                    }
032            }
033            
034            private static void initFactory(ATermList slices) {
035                    if (factory == null) {
036                            factory = Factory.getInstance((PureFactory) slices.getFactory());
037                    }
038            }
039    
040    }
041