gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / scripts / tools / makedocs / makedocs.py @ 737
History | View | Annotate | Download (9.14 KB)
1 |
|
---|---|
2 |
from gvsig import * |
3 |
from gvsig.commonsdialog import * |
4 |
from gvsig.libs.formpanel import FormPanel, getResource |
5 |
|
6 |
import os |
7 |
import os.path |
8 |
import shutil |
9 |
import sys |
10 |
import subprocess |
11 |
import threading |
12 |
import logging |
13 |
|
14 |
|
15 |
from java.awt import Dimension |
16 |
|
17 |
from org.gvsig.scripting.swing.api import ScriptingSwingLocator |
18 |
|
19 |
class MakeDocs(FormPanel, threading.Thread): |
20 |
def __init__(self,workspace,projects,outputfolder): |
21 |
threading.Thread.__init__(self)
|
22 |
FormPanel.__init__(self, getResource(__file__,"makedocs.xml")) |
23 |
self.setName("Javadoc creator") |
24 |
self.setPreferredSize(700,230) |
25 |
self.canceled = False |
26 |
|
27 |
self.workspace = workspace
|
28 |
self.projects = projects
|
29 |
self.outputfolder = outputfolder
|
30 |
self.txtWorkspace.setText(workspace)
|
31 |
self.txtOutputFolder.setText(outputfolder)
|
32 |
|
33 |
def findJavaSources(self,workspace,project): |
34 |
projectFolder = os.path.join(workspace,project) |
35 |
sources = list()
|
36 |
for root, dirs, files in os.walk(projectFolder): |
37 |
for file in files: |
38 |
if file == "pom.xml": |
39 |
if root[-5:] != ".main": |
40 |
javaSources = os.path.join(root,"src","main","java") |
41 |
if os.path.isdir(javaSources):
|
42 |
sources.append(javaSources) |
43 |
self.message2(root)
|
44 |
return sources
|
45 |
|
46 |
def findJavadocSources(self,workspace,projects): |
47 |
sources = list()
|
48 |
for project, url in projects: |
49 |
sources.extend(self.findJavaSources(workspace,project))
|
50 |
if project == "org.gvsig.scripting": |
51 |
sources.append(os.path.join( |
52 |
workspace,project,"org.gvsig.scripting.app","org.gvsig.scripting.app.mainplugin", |
53 |
"src","main","resources-plugin","scripting","lib","gvsig","javadocs" |
54 |
)) |
55 |
return sources
|
56 |
|
57 |
def calculateCountFromSources(self,sources): |
58 |
countfiles = 0
|
59 |
folders = set()
|
60 |
for sourceFolder in sources: |
61 |
for root, dirs, files in os.walk(sourceFolder): |
62 |
for f in files: |
63 |
if f.endswith(".java"): |
64 |
countfiles+=1
|
65 |
self.message2("[%05d] %s" % (countfiles, os.path.join(root,f))) |
66 |
if len(files)>0: |
67 |
package = root[len(sourceFolder)+1:] |
68 |
folders.add(package) |
69 |
|
70 |
return countfiles, len(folders) |
71 |
|
72 |
def calculateHTMLFileList(self,htmlroot, listfname): |
73 |
listfile= open(listfname,"w") |
74 |
countfiles = 0
|
75 |
for root, dirs, files in os.walk(htmlroot): |
76 |
for f in files: |
77 |
if f.startswith("package-"): |
78 |
continue
|
79 |
if f.endswith(".html"): |
80 |
countfiles+=1
|
81 |
listfile.write(os.path.join(root,f)) |
82 |
listfile.write("\n")
|
83 |
self.message2("[%05d] %s" % (countfiles, os.path.join(root,f))) |
84 |
listfile.close() |
85 |
return countfiles
|
86 |
|
87 |
def message(self,msg): |
88 |
self.lblStatus.setText(msg)
|
89 |
|
90 |
def message2(self,msg): |
91 |
self.lblStatus2.setText(msg)
|
92 |
|
93 |
def mkjavadoc(self,workspace,projects, outputpath): |
94 |
try:
|
95 |
self.pgbProgreso.setIndeterminate(True) |
96 |
self.message("Creando carpeta de salida...") |
97 |
if not os.path.exists(outputpath): |
98 |
os.makedirs(outputpath) |
99 |
|
100 |
os.chdir(outputpath) |
101 |
if not os.path.exists("html"): |
102 |
os.makedirs("html")
|
103 |
os.chdir("html")
|
104 |
|
105 |
if self.chkGenerarJavadocs.isSelected(): |
106 |
self.message("Eliminando javadoc existentes...") |
107 |
os.chdir("..")
|
108 |
shutil.rmtree("html",True) |
109 |
os.makedirs("html")
|
110 |
os.chdir("html")
|
111 |
|
112 |
self.message("Localizando fuentes...") |
113 |
sources = self.findJavadocSources(workspace,projects)
|
114 |
|
115 |
self.message("Preparando procesado...") |
116 |
maxfiles, maxpackages = self.calculateCountFromSources(sources)
|
117 |
|
118 |
argsfile = file("javadoc_args","w") |
119 |
argsfile.write("-nonavbar\n")
|
120 |
argsfile.write("-encoding ISO-8859-1\n")
|
121 |
argsfile.write("-subpackages org:scripting\n")
|
122 |
argsfile.write("-sourcepath ")
|
123 |
for source in sources: |
124 |
argsfile.write(":%s" % source)
|
125 |
argsfile.write("\n")
|
126 |
argsfile.close() |
127 |
|
128 |
proc = subprocess.Popen(["javadoc", "@javadoc_args"], stdout=subprocess.PIPE,stderr=subprocess.STDOUT) |
129 |
stdoutprocess = proc.stdout |
130 |
generatingcount = 0
|
131 |
loadingcount=0
|
132 |
|
133 |
self.pgbProgreso.setMaximum(maxpackages)
|
134 |
self.pgbProgreso.setValue(0) |
135 |
self.pgbProgreso.setIndeterminate(False) |
136 |
|
137 |
for line in stdoutprocess: |
138 |
if self.canceled: |
139 |
break
|
140 |
#print line[:-1]
|
141 |
if ": error:" in line : |
142 |
self.message("Procesando fuentes...") |
143 |
self.message2(line)
|
144 |
|
145 |
elif line.startswith("Generating "): |
146 |
self.message("Generando javadocs...") |
147 |
if generatingcount == 0: |
148 |
self.pgbProgreso.setMaximum(maxfiles + maxpackages*3 + 9) |
149 |
self.message2(line[11:-9]) |
150 |
if "/package-" in line: |
151 |
generatingcount+=1
|
152 |
else:
|
153 |
if os.path.basename(line[:-4]).count(".")==1: |
154 |
generatingcount +=1
|
155 |
self.pgbProgreso.setValue(generatingcount)
|
156 |
|
157 |
elif line.startswith("Loading source files for package "): |
158 |
self.message("Cargando fuentes...") |
159 |
loadingcount+=1
|
160 |
self.pgbProgreso.setValue(loadingcount)
|
161 |
self.message2(line[33:]) |
162 |
|
163 |
self.message("Proceso terminado") |
164 |
self.message2("") |
165 |
self.pgbProgreso.setValue(self.pgbProgreso.getMaximum()) |
166 |
if self.canceled: |
167 |
print "Proceso cancelado" |
168 |
|
169 |
except Exception, ex: |
170 |
self.message("Proceso abortado") |
171 |
self.message2(str(ex)) |
172 |
print str(ex) |
173 |
logging.exception("Proceso abortado")
|
174 |
|
175 |
def btnSelectWorkspace_click(self, *args): |
176 |
f = openFolderDialog("Selecciona la carpeta del workspace")
|
177 |
if f == None or len(f)<1: |
178 |
return
|
179 |
self.txtWorkspace.setText(f[0].getAbsolutePath()) |
180 |
|
181 |
def btnSelectOutputFolder_click(self, *args): |
182 |
f = openFolderDialog("Selecciona la carpeta de salida")
|
183 |
if f == None or len(f)<1: |
184 |
return
|
185 |
self.txtOutputFolder.setText(f[0].getAbsolutePath()) |
186 |
|
187 |
def btnCerrar_click(self,*args): |
188 |
self.canceled = True |
189 |
self.hide()
|
190 |
|
191 |
def btnProcesar_click(self,*args): |
192 |
self.btnProcesar.setEnabled(False) |
193 |
self.btnCerrar.setText("Cancelar") |
194 |
self.start()
|
195 |
|
196 |
def showWindow(self,title="Crear javadocs"): |
197 |
windowManager = ScriptingSwingLocator.getUIManager() |
198 |
windowManager.showWindow(self.asJComponent(),title)
|
199 |
|
200 |
def run(self): |
201 |
self.mkjavadoc(
|
202 |
self.workspace,
|
203 |
self.projects,
|
204 |
self.outputfolder
|
205 |
) |
206 |
# Falla al volverse a lanzar el proceso por que no se
|
207 |
# a rearmado correctamente el thread. Asi que dejo
|
208 |
# desactivado el boton.
|
209 |
#self.btnProcesar.setEnabled(True)
|
210 |
|
211 |
|
212 |
def main(*args): |
213 |
workspace = "/home/jjdelcerro/data/devel/temp"
|
214 |
outputfolder = workspace + "/javadocs"
|
215 |
projects = ( |
216 |
("org.gvsig.scripting",None), |
217 |
("org.gvsig.tools",None), |
218 |
("org.gvsig.desktop",None), |
219 |
("org.gvsig.gdal",None), |
220 |
("org.gvsig.raster",None), |
221 |
("org.gvsig.raster.gdal",None), |
222 |
("org.gvsig.geoprocess",None), |
223 |
("org.gvsig.3d",None), |
224 |
("org.gvsig.app.document.layout2.app",None), |
225 |
("org.gvsig.attributeeditor",None), |
226 |
("org.gvsig.chart",None), |
227 |
("org.gvsig.complexlegend",None), |
228 |
("org.gvsig.derivedgeometries",None), |
229 |
("org.gvsig.dgn",None), |
230 |
("org.gvsig.downloader",None), |
231 |
("org.gvsig.dwg",None), |
232 |
("org.gvsig.dxf",None), |
233 |
("org.gvsig.dyschromatopsia",None), |
234 |
("org.gvsig.educa.portableview",None), |
235 |
("org.gvsig.expressionfield",None), |
236 |
("org.gvsig.gpe",None), |
237 |
("org.gvsig.hyperlink.app",None), |
238 |
("org.gvsig.jexcel",None), |
239 |
("org.gvsig.jvmpreferences",None), |
240 |
("org.gvsig.legend.dotdensity.app",None), |
241 |
("org.gvsig.legend.graduatedsymbols.app",None), |
242 |
("org.gvsig.legend.proportionalsymbols.app",None), |
243 |
("org.gvsig.legend.quantitybycategory.app",None), |
244 |
("org.gvsig.legend.vectorfilterexpression.app",None), |
245 |
("org.gvsig.mapsheets.app",None), |
246 |
("org.gvsig.postgresql",None), |
247 |
("org.gvsig.projection.jcrs",None), |
248 |
("org.gvsig.raster.ermapper",None), |
249 |
("org.gvsig.raster.georeferencing",None), |
250 |
("org.gvsig.raster.lizardtech",None), |
251 |
("org.gvsig.raster.multifile",None), |
252 |
("org.gvsig.raster.netcdf",None), |
253 |
("org.gvsig.raster.osm",None), |
254 |
("org.gvsig.raster.postgis",None), |
255 |
("org.gvsig.raster.principalcomponents",None), |
256 |
("org.gvsig.raster.reproject",None), |
257 |
("org.gvsig.raster.roimask",None), |
258 |
("org.gvsig.raster.tasseledcap",None), |
259 |
("org.gvsig.raster.tilecache",None), |
260 |
("org.gvsig.raster.tools",None), |
261 |
("org.gvsig.raster.wms",None), |
262 |
("org.gvsig.raster.wcs",None), |
263 |
("org.gvsig.raster.wmts",None), |
264 |
("org.gvsig.seismic",None), |
265 |
("org.gvsig.sld",None), |
266 |
("org.gvsig.vectorediting",None), |
267 |
("org.gvsig.vectorediting.symmetry",None), |
268 |
("org.gvsig.vectorediting.offset",None), |
269 |
("org.gvsig.wfs.app",None), |
270 |
("org.gvsig.customize.app",None), |
271 |
("org.gvsig.catalog",None), |
272 |
("org.gvsig.gazetteer",None), |
273 |
("org.gvsig.publish",None), |
274 |
("org.gvsig.webmap",None), |
275 |
("org.gvsig.googlemaps",None), |
276 |
("org.gvsig.bingmaps",None), |
277 |
("org.gvsig.toolbox", None), |
278 |
) |
279 |
makedocs = MakeDocs(workspace,projects,outputfolder) |
280 |
makedocs.showWindow("Crear javadocs")
|
281 |
#makedocs.run()
|
282 |
|