Skip to main content
summaryrefslogtreecommitdiffstats
blob: 7d0c59325b13ce72caf3ee7dccac3119fbe922e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;

import java.util.concurrent.atomic.AtomicLong;

import org.eclipse.core.resources.IFile;
import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent;
import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;

class TaglibFileTracker extends TaglibResourceTracker
{
    private final IFile _file;
    private String _uri;
    private final AtomicLong _lastModifiedStamp = new AtomicLong();
    private TaglibResourceManager _manager;
    private final ILibraryChangeHandler _handler;

    public TaglibFileTracker(final IFile file, final TaglibResourceManager manager,
            final ILibraryChangeHandler handler)
    {
        _manager = manager;
        _manager.addListener(this);
        _file = file;
        _lastModifiedStamp.set(file.getModificationStamp());
        _handler = handler;
    }

    public String getUri()
    {
        return _uri;
    }

    public final void setUri(final String uri)
    {
        _uri = uri;
    }

    @Override
    public void dispose()
    {
        _manager.removeListener(this);
        _manager = null;
    }

    @Override
    public EventResult acceptEvent(final ResourceLifecycleEvent event)
    {
        if (!_file.equals(event.getAffectedResource()))
        {
            return EventResult.getDefaultEventResult();
        }

        final EventType eventType = event.getEventType();

        switch (eventType)
        {
        case RESOURCE_ADDED:
            // added resources kick an add event.
            _handler.added(_file);
            break;
        case RESOURCE_CHANGED:
            // changed resources kick a change event
            _handler.changed(_uri, _file);
            break;
        case RESOURCE_INACCESSIBLE:
            // removed resources kick a remove event
            _handler.removed(_uri, _file);
            break;
        }

        return EventResult.getDefaultEventResult();
    }
    
//    private final static class HandleFileAddJob implements IWorkspaceRunnable
//    {
//        private final IResourceChangeEvent _event;
//        private List<IFile> _files;
//        private ILibraryChangeHandler   _handler;
//        
//        private HandleFileAddJob(final IResourceChangeEvent event, final List<IFile> files,
//                final ILibraryChangeHandler handler)
//        {
//            _event = event;
//            _files = files;
//            _handler = handler;
//        }
//
//        public void run(final IProgressMonitor monitor)
//                throws CoreException
//        {
//            for (final IFile file : _files)
//            {
//                final IResourceDelta delta = _event.getDelta()
//                        .findMember(file.getFullPath());
//
//                if (delta != null)
//                {
//                    if (delta.getKind() == IResourceDelta.ADDED)
//                    {
//                        _handler.added(file);
//                    }
//                }
//            }
//        }
//    }
}

Back to the top