Ignore:
Timestamp:
Mar 28, 2015, 9:07:12 PM (10 years ago)
Author:
alloc
Message:

AEI 2.21: Copy .app folders as a whole

Location:
java/installer2/src/net/oni2/aeinstaller/backend/oni/management
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/Installer.java

    r1016 r1019  
    610610
    611611                for (Package p : mods) {
    612                         ToolFileIterator.iteratePlatformToolFiles(p,
     612                        ToolFileIterator.iteratePlatformToolFiles(p, false,
    613613                                        new ToolFileIteratorEntry() {
    614614                                                @Override
    615                                                 public void toolFile(File source, File target) {
     615                                                public void toolFile(File source, File target, boolean isDir) {
    616616                                                        copyPlainFile(source, target, log);
    617617                                                }
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/tools/ToolFileIterator.java

    r804 r1019  
    1919         * @param tool
    2020         *            Tool to iterate over
     21         * @param handleAppAsFiles
     22         *            Whether or not to handle MacOS .app folders as a single file
    2123         * @param handler
    2224         *            Handler to handle found files
    2325         */
    24         public static void iteratePlatformToolFiles(Package tool,
     26        public static void iteratePlatformToolFiles(Package tool, boolean handleAppAsFiles,
    2527                        ToolFileIteratorEntry handler) {
    2628                File plain = CaseInsensitiveFile.getCaseInsensitiveFile(
     
    3537                                                plain, "win_only");
    3638                                if (plainCommon.exists())
    37                                         iterateFiles(plainCommon, Paths.getEditionBasePath(),
     39                                        iterateFiles(plainCommon, Paths.getEditionBasePath(), handleAppAsFiles,
    3840                                                        handler);
    3941                                if (PlatformInformation.getPlatform() == Platform.MACOS
    4042                                                && plainMac.exists())
    41                                         iterateFiles(plainMac, Paths.getEditionBasePath(), handler);
     43                                        iterateFiles(plainMac, Paths.getEditionBasePath(), handleAppAsFiles, handler);
    4244                                else if (plainWin.exists())
    43                                         iterateFiles(plainWin, Paths.getEditionBasePath(), handler);
     45                                        iterateFiles(plainWin, Paths.getEditionBasePath(), handleAppAsFiles, handler);
    4446                        } else {
    45                                 iterateFiles(plain, Paths.getEditionBasePath(), handler);
     47                                iterateFiles(plain, Paths.getEditionBasePath(), handleAppAsFiles, handler);
    4648                        }
    4749                }
    4850        }
    4951
    50         private static void iterateFiles(File srcFolder, File targetFolder,
     52        private static void iterateFiles(File srcFolder, File targetFolder, boolean handleAppAsFiles,
    5153                        ToolFileIteratorEntry handler) {
    5254                for (File f : srcFolder.listFiles()) {
    53                         if (f.isDirectory())
     55                        if (f.isDirectory() && (!f.getName().endsWith(".app") || !handleAppAsFiles))
    5456                                iterateFiles(f, CaseInsensitiveFile.getCaseInsensitiveFile(
    55                                                 targetFolder, f.getName()), handler);
     57                                                targetFolder, f.getName()), handleAppAsFiles, handler);
    5658                        else {
    57                                 handler.toolFile(f, new File(targetFolder, f.getName()));
     59                                handler.toolFile(f, new File(targetFolder, f.getName()), f.isDirectory());
    5860                        }
    5961                }
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/tools/ToolFileIteratorEntry.java

    r804 r1019  
    1414         * @param target
    1515         *            Target of file if installed
     16         * @param isFolder
     17         *            Is source a folder instead of a file? (MacOS .app folder)
    1618         */
    17         public void toolFile(File source, File target);
     19        public void toolFile(File source, File target, boolean isFolder);
    1820}
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/tools/ToolsManager.java

    r804 r1019  
    2626                final ToolInstallationList til = ToolInstallationList.getInstance();
    2727                for (final Package m : PackageManager.getInstance().getInstalledTools()) {
    28                         ToolFileIterator.iteratePlatformToolFiles(m,
     28                        ToolFileIterator.iteratePlatformToolFiles(m, false,
    2929                                        new ToolFileIteratorEntry() {
    3030                                                @Override
    31                                                 public void toolFile(File source, File target) {
     31                                                public void toolFile(File source, File target, boolean isDir) {
    3232                                                        byte[] chkSrc = FileChecksum
    3333                                                                        .calculateFileMD5(source);
     
    5656                        if (!uninstall) { // Install:
    5757                                final HashSet<String> files = new HashSet<String>();
    58                                 ToolFileIterator.iteratePlatformToolFiles(m,
     58                                ToolFileIterator.iteratePlatformToolFiles(m, true,
    5959                                                new ToolFileIteratorEntry() {
    6060                                                        @Override
    61                                                         public void toolFile(File source, File target) {
    62                                                                 copyToolsFiles(source, target, files);
     61                                                        public void toolFile(File source, File target, boolean isDir) {
     62                                                                copyToolsFiles(source, target, isDir, files);
    6363                                                        }
    6464                                                });
     
    7474        }
    7575
    76         private static void copyToolsFiles(File src, File target,
     76        private static void copyToolsFiles(File src, File target, boolean isDir,
    7777                        HashSet<String> files) {
    7878                try {
     
    8080                                        target.getParentFile(), target.getName());
    8181
    82                         // Case mismatch?
    83                         if (!targetFile.getName().equals(src.getName()))
    84                                 targetFile.delete();
    85 
    8682                        files.add(target.getPath().replace(
    8783                                        Paths.getEditionBasePath().getPath(), ""));
    8884
    89                         FileUtils.copyFile(src, target);
    90                         if (src.canExecute())
    91                                 target.setExecutable(true);
     85                        if (isDir) {
     86                                if (targetFile.exists()) {
     87                                        FileUtils.deleteDirectory(targetFile);
     88                                }
     89                               
     90                                FileUtils.copyDirectory(src, target, true);     
     91                        } else {
     92                                // Case mismatch?
     93                                if (!targetFile.getName().equals(src.getName()))
     94                                        targetFile.delete();
     95
     96                                FileUtils.copyFile(src, target);
     97                                if (src.canExecute())
     98                                        target.setExecutable(true);
     99                        }
    92100                } catch (IOException e) {
    93101                        e.printStackTrace();
     
    102110                                File targetFolder = targetFile.getParentFile();
    103111
    104                                 if (targetFile.exists())
    105                                         targetFile.delete();
     112                                if (targetFile.exists()) {
     113                                        if (targetFile.isDirectory()) {
     114                                                try {
     115                                                        FileUtils.deleteDirectory(targetFile);
     116                                                } catch (IOException e) {
     117                                                        e.printStackTrace();
     118                                                }
     119                                        } else
     120                                                targetFile.delete();
     121                                }
    106122                                if (targetFolder.list().length == 0)
    107123                                        targetFolder.delete();
Note: See TracChangeset for help on using the changeset viewer.