Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.swing / org.gvsig.scripting.swing.impl / src / main / java / javax / help / ScriptingHelpModel.java @ 478

History | View | Annotate | Download (2.31 KB)

1

    
2
package javax.help;
3

    
4
import java.io.File;
5
import java.lang.reflect.Field;
6
import java.net.URL;
7
import javax.help.event.HelpModelEvent;
8
import javax.help.event.HelpModelListener;
9
import org.apache.commons.io.FilenameUtils;
10
import org.gvsig.scripting.ScriptingHelpManager;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13

    
14

    
15
public class ScriptingHelpModel extends DefaultHelpModel {
16

    
17
    private static final Logger logger = LoggerFactory.getLogger(ScriptingHelpModel.class);
18

    
19
    private final ScriptingHelpManager helpManager;
20
    private Field currentURLField = null;
21

    
22
    public ScriptingHelpModel(HelpSet hs, ScriptingHelpManager helpManager) {
23
        super(hs);
24
        this.helpManager = helpManager;
25
    }
26

    
27
    @Override
28
    protected void fireIDChanged(Object source, Map.ID id, URL url, String historyName, JHelpNavigator navigator) {
29
        if (url != null && "file".equalsIgnoreCase(url.getProtocol())) {
30
            if (id == null) {
31
                url = helpManager.makeURL(null, url);
32
                this.setTheCurrentURL(url);
33
            } else {
34
                URL baseUrl = id.getHelpSet().getHelpSetURL();
35
                if ("file".equalsIgnoreCase(baseUrl.getProtocol()) ) {
36
                    url = helpManager.makeURL(
37
                            new File(FilenameUtils.getFullPath(baseUrl.getPath())),
38
                            url
39
                    );
40
                    this.setTheCurrentURL(url);
41
                }
42
            }
43
        }
44

    
45
        Object[] listeners = listenerList.getListenerList();
46
        HelpModelEvent e = null;
47

    
48
        for (int i = listeners.length - 2; i >= 0; i -= 2) {
49
            if (listeners[i] == HelpModelListener.class) {
50
                if (e == null) {
51
                    e = new HelpModelEvent(source, id, url, historyName, navigator);
52
                }
53
                ((HelpModelListener) listeners[i + 1]).idChanged(e);
54
            }
55
        }
56
    }
57

    
58
    private void setTheCurrentURL(URL url) {
59

    
60
        try {
61
            if( this.currentURLField==null ) {
62
                this.currentURLField = DefaultHelpModel.class.getDeclaredField("currentURL");
63
                this.currentURLField.setAccessible(true);
64
            }
65
            this.currentURLField.set(this, url);
66
        } catch (Exception ex) {
67
            logger.warn("Can't change currentURL", ex);
68
        }
69
    }
70
}