source: osm/applications/editors/josm/plugins/smed/src/smed/Smed.java@ 28770

Last change on this file since 28770 was 27379, checked in by malcolmh, 12 years ago

'New release'

  • Property svn:executable set to *
File size: 5.2 KB
Line 
1package smed;
2
3import java.io.BufferedInputStream;
4import java.io.BufferedOutputStream;
5import java.io.File;
6import java.io.FileOutputStream;
7import java.lang.reflect.Method;
8import java.net.URL;
9import java.net.URLClassLoader;
10import java.util.Enumeration;
11import java.util.List;
12import java.util.ResourceBundle;
13import java.util.jar.JarEntry;
14import java.util.jar.JarFile;
15import java.util.jar.JarOutputStream;
16
17import javax.swing.JMenuItem;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.gui.MapFrame;
21import org.openstreetmap.josm.plugins.Plugin;
22import org.openstreetmap.josm.plugins.PluginInformation;
23
24import smed.io.SmedFile;
25import smed.plug.ifc.SmedPluggable;
26import smed.plug.util.JARFileFilter;
27import smed.tabs.SmedTabAction;
28import smed.tabs.SmedTabbedPane;
29
30public class Smed extends Plugin{
31
32 private JMenuItem item;
33 private SmedTabAction smedTab;
34 // private List<SmedPluggable> plugins = null;
35
36 public Smed(PluginInformation info) {
37 super(info);
38
39 String os = "";
40 String userHome = "";
41
42 File pluginDir = Main.pref.getPluginsDirectory();
43 String pluginDirName = pluginDir.getAbsolutePath();
44 SmedFile splugDir = new SmedFile(pluginDirName + "/splug");
45
46 if(!splugDir.exists()) splugDir.mkdir();
47
48 File[] jars = splugDir.listFiles(new JARFileFilter());
49 SmedFile.init();
50
51 // build smed_ifc.jar from smed.jar
52 JarEntry e = null;
53 BufferedInputStream inp = null;
54 String eName = null;
55 byte[] buffer = new byte[16384];
56 int len;
57
58 try {
59 JarFile file = new JarFile(pluginDirName + "/SeaMapEditor.jar");
60 FileOutputStream fos = new FileOutputStream(pluginDirName + "/splug/smed_ifc.jar");
61 JarOutputStream jos = new JarOutputStream(fos);
62 BufferedOutputStream oos = new BufferedOutputStream( jos);
63
64 // extract *.jar to splug
65 Enumeration<JarEntry> ent = file.entries();
66 while(ent.hasMoreElements()) {
67 e = ent.nextElement();
68 eName = e.getName();
69 if(eName.endsWith(".jar")) {
70 if(splugDir.needUpdate(jars,eName)) {
71 FileOutputStream pfos = new FileOutputStream(pluginDirName + "/splug/" + eName);
72 BufferedOutputStream pos = new BufferedOutputStream(pfos);
73 inp = new BufferedInputStream(file.getInputStream( e ));
74
75 while ((len = inp.read(buffer)) > 0) {
76 pos.write(buffer, 0, len);
77 }
78
79 pos.flush();
80 pos.close();
81 inp.close();
82 pfos.close();
83
84 SmedFile.createMF(eName);
85 }
86 }
87 }
88
89
90
91 // write smed_ifc.jar to splug
92 e = file.getJarEntry("smed/plug/ifc/SmedPluggable.class");
93 inp = new BufferedInputStream(file.getInputStream( e ));
94 eName = e.getName();
95
96 jos.putNextEntry(new JarEntry(eName));
97
98 while ((len = inp.read(buffer)) > 0) {
99 oos.write(buffer, 0, len);
100 }
101
102 oos.flush();
103 inp.close();
104
105 e = file.getJarEntry("smed/plug/ifc/SmedPluginManager.class");
106 inp = new BufferedInputStream(file.getInputStream( e ));
107 eName = e.getName();
108 jos.putNextEntry(new JarEntry(eName));
109
110 while ((len = inp.read(buffer)) > 0) {
111 oos.write(buffer, 0, len);
112 }
113
114 oos.flush();
115 oos.close();
116 fos.flush();
117 fos.close();
118 inp.close();
119
120 } catch (Exception ex) {
121 ex.printStackTrace();
122 }
123
124 // add smed_ifc.jar to classpath (josm need this archive, or perhaps only the interface)
125 File f = new java.io.File(pluginDirName + "/splug/smed_ifc.jar");
126 ClassLoader myClassLoader = Thread.currentThread().getContextClassLoader();
127
128 try {
129 Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
130 addUrlMethod.setAccessible(true);
131 addUrlMethod.invoke(myClassLoader, f.toURI().toURL());
132 } catch (Exception ex) {
133 ex.printStackTrace();
134 }
135
136 smedTab = new SmedTabAction();
137 item = Main.main.menu.toolsMenu.add(smedTab);
138 smedTab.setOsmItem(item);
139
140 item.setEnabled(false);
141
142 }
143
144 @Override
145 public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
146 if (oldFrame == null && newFrame != null) {
147 item.setEnabled(true);
148 } else {
149 item.setEnabled(false);
150 List<SmedPluggable> plugins = SmedTabbedPane.getPlugins();
151
152 if(plugins != null) {
153 for(SmedPluggable p : plugins) p.stop();
154 }
155 smedTab.closeDialog();
156 }
157
158 if(Main.map != null) {
159 // von SmedTabbedPane nach hier verlagert, damit sicher ist Main.map != null
160 SmedPluggable p = SmedTabbedPane.getCurPlugin();
161
162 if(p != null) p.hasFocus();
163 }
164 }
165
166}
Note: See TracBrowser for help on using the repository browser.