Statistics
| Revision:

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