Class: Jerbil::JavaFileList

Description

A JavaFileList is a specialisation of a standard Rake::FileList. It includes additional methods to deal with build dirs, resources and other Java related things.

Attributes

NameRead/write?Description
dstdir R
resource_patterns RW
srcdir R

Public Class methods


new (srcdir, dstdir, extensions = nil)

srcdir:the directory containing the Java source files.
dstdir:destination directory for class files (used by JavacTask).
extensions:a list of extensions to treat as resources. The default is to treat

all files not ending in .java as resources.

     # File lib/jerbil/java_helper.rb, line 217
217:     def initialize(srcdir, dstdir, extensions = nil)
218:       super([])
219:       @srcdir = srcdir
220:       @dstdir = dstdir
221:       @resource_patterns = []     
222:       add_extensions(extensions)
223:       include(srcdir + "/**/*.java")
224:     end

Public Instance methods


add_extension (ext)

Registers a resource extension.

  add_extension("xml")  => all xml files
     # File lib/jerbil/java_helper.rb, line 305
305:     def add_extension(ext)
306:       @resource_patterns << "/**/*.#{ext}"
307:     end

add_extensions (exts)

Registers a list of extensions.

     # File lib/jerbil/java_helper.rb, line 310
310:     def add_extensions(exts)
311:       exts.to_a.each {|ext| add_extension(ext)}      
312:     end

out_of_date ()

Returns a list of out-of-date files, based on timestamp comparison.

     # File lib/jerbil/java_helper.rb, line 287
287:     def out_of_date
288:       return self.to_a unless (File.exists?(dstdir) and Dir.entries(dstdir).length > 2)      
289:       
290:       outofdate = []
291:       source_and_target do |s,t|  
292:         outofdate << s unless FileUtils.uptodate?(t,s)
293:       end
294:       outofdate
295:     end

resource_and_target ( {|resource,target| ...}

Calls block once for each resource found in srcdir, passing the source and destination file as parameter.

     # File lib/jerbil/java_helper.rb, line 271
271:     def resource_and_target # :yields: resource,target   
272:       resources.each do | r |
273:         target =  r.sub(/#{srcdir_quoted}/, dstdir)
274:         yield r, target if block_given?
275:       end
276:     end

resources ()

Returns a Rake::FileList containing all resources found in srcdir. Resources are typically files in srcdir with extensions other than .java (properties, xml, …). If you want to copy specfic resources register extensions using add_extension.

     # File lib/jerbil/java_helper.rb, line 258
258:     def resources
259:       r = FileList.new
260:       if resource_patterns.empty? 
261:         r.include(srcdir + "/**/*.*")    
262:         r.exclude(srcdir + "/**/*.java")     
263:       else     
264:         resource_patterns.each { |p| r.include(srcdir+p) }
265:       end
266:       r
267:     end

source_and_target ( {|src,target| ...}

Calls block once for each sourcefile in srcdir with corresponding target file.

     # File lib/jerbil/java_helper.rb, line 280
280:     def source_and_target    # :yields: src,target
281:       self.each do |file|
282:           yield file, file.pathmap("%{^#{srcdir_quoted},#{dstdir}}X.class")
283:       end      
284:     end

sourcepath ()

     # File lib/jerbil/java_helper.rb, line 250
250:     def sourcepath
251:       srcdir
252:     end

to_classes ()

Returns a list of Java classes. This method uses Rjb::import to load the specified classes into the virtual machine.

     # File lib/jerbil/java_helper.rb, line 236
236:     def to_classes
237:       classnames = to_classnames      
238:       classes = classnames.map {|name| Rjb::import(name)}
239:       classes.to_a
240:     end

to_classfiles ()

Translates all java source files into their corresponding class destination files, based on dstdir.

For example src/org/foo/Baz.java -> classes/org/foo/Baz.class.

     # File lib/jerbil/java_helper.rb, line 246
246:     def to_classfiles
247:       self.pathmap("%{^#{srcdir_quoted},#{dstdir}}X.class")
248:     end

to_classnames ()

Returns a list of all java source files formatted as Java class names. For example src/org/foo/Baz -> org.foo.Baz.

     # File lib/jerbil/java_helper.rb, line 228
228:     def to_classnames
229:       # remove the initial directory and separator     
230:       paths = self.pathmap("%{^#{srcdir_quoted}/?,}X")
231:       paths.gsub!("/", ".")
232:     end

uptodate? ()

     # File lib/jerbil/java_helper.rb, line 297
297:     def uptodate?
298:       out_of_date.empty?
299:     end