2626
2727package com .oracle .appbundler ;
2828
29+ import java .io .BufferedOutputStream ;
2930import java .io .BufferedWriter ;
3031import java .io .File ;
32+ import java .io .FileOutputStream ;
3133import java .io .FileWriter ;
3234import java .io .IOException ;
3335import java .io .InputStream ;
36+ import java .io .OutputStream ;
3437import java .io .Writer ;
3538import java .net .URL ;
3639import java .nio .file .Files ;
3740import java .nio .file .LinkOption ;
3841import java .nio .file .Path ;
3942import java .nio .file .StandardCopyOption ;
4043import java .util .ArrayList ;
44+ import java .util .zip .ZipEntry ;
45+ import java .util .zip .ZipInputStream ;
4146
4247import javax .xml .stream .XMLOutputFactory ;
4348import javax .xml .stream .XMLStreamException ;
@@ -87,6 +92,8 @@ public class AppBundlerTask extends Task {
8792 private static final String ARRAY_TAG = "array" ;
8893 private static final String STRING_TAG = "string" ;
8994
95+ private static final int BUFFER_SIZE = 2048 ;
96+
9097 public void setOutputDirectory (File outputDirectory ) {
9198 this .outputDirectory = outputDirectory ;
9299 }
@@ -276,6 +283,9 @@ public void execute() throws BuildException {
276283
277284 executableFile .setExecutable (true , false );
278285
286+ // Copy localized resources to Resources folder
287+ copyResources (resourcesDirectory );
288+
279289 // Copy runtime to PlugIns folder
280290 copyRuntime (plugInsDirectory );
281291
@@ -292,6 +302,42 @@ public void execute() throws BuildException {
292302 }
293303 }
294304
305+ private void copyResources (File resourcesDirectory ) throws IOException {
306+ // Unzip res.zip into resources directory
307+ InputStream inputStream = getClass ().getResourceAsStream ("res.zip" );
308+ ZipInputStream zipInputStream = new ZipInputStream (inputStream );
309+
310+ try {
311+ ZipEntry zipEntry = zipInputStream .getNextEntry ();
312+ while (zipEntry != null ) {
313+ File file = new File (resourcesDirectory , zipEntry .getName ());
314+
315+ if (zipEntry .isDirectory ()) {
316+ file .mkdir ();
317+ } else {
318+ OutputStream outputStream = new BufferedOutputStream (new FileOutputStream (file ), BUFFER_SIZE );
319+
320+ try {
321+ int b = zipInputStream .read ();
322+ while (b != -1 ) {
323+ outputStream .write (b );
324+ b = zipInputStream .read ();
325+ }
326+
327+ outputStream .flush ();
328+ } finally {
329+ outputStream .close ();
330+ }
331+
332+ }
333+
334+ zipEntry = zipInputStream .getNextEntry ();
335+ }
336+ } finally {
337+ zipInputStream .close ();
338+ }
339+ }
340+
295341 private void copyRuntime (File plugInsDirectory ) throws IOException {
296342 if (runtime != null ) {
297343 File runtimeHomeDirectory = runtime .getDir ();
0 commit comments