Ignore:
Timestamp:
Apr 12, 2013, 5:57:57 PM (12 years ago)
Author:
alloc
Message:

AEI2.02:

Location:
java/installer2/src/net/oni2/aeinstaller/backend
Files:
5 added
3 edited
1 moved

Legend:

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

    r755 r804  
    2525import net.oni2.aeinstaller.backend.oni.PersistDat;
    2626import net.oni2.aeinstaller.backend.oni.XMLTools;
     27import net.oni2.aeinstaller.backend.oni.management.tools.ToolInstallationList;
    2728import net.oni2.aeinstaller.backend.packages.EBSLInstallType;
    2829import net.oni2.aeinstaller.backend.packages.Package;
     
    100101                log.println("AEI2 version: "
    101102                                + SwingJavaBuilder.getConfig().getResource("appversion"));
     103
     104                ToolInstallationList til = ToolInstallationList.getInstance();
    102105                log.println("Installed tools:");
    103106                for (Package t : PackageManager.getInstance().getInstalledTools()) {
    104                         log.println(String.format(" - %s (%s)", t.getName(), t.getVersion()));
     107                        log.println(String.format(" - %s (%s)", t.getName(), t.getVersion())
     108                                        + (til.isModified(t.getPackageNumber()) ? " (! LOCALLY MODIFIED !)"
     109                                                        : ""));
    105110                }
    106111                log.println("Installing mods:");
     
    236241                log.println();
    237242                Date end = new Date();
    238                 log.println("Initialization ended at " + sdf.format(end));
     243                log.println("Installation ended at " + sdf.format(end));
    239244                log.println("Process took "
    240245                                + ((end.getTime() - start.getTime()) / 1000) + " seconds");
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/tools/ToolsManager.java

    r784 r804  
    1 package net.oni2.aeinstaller.backend.oni.management;
     1package net.oni2.aeinstaller.backend.oni.management.tools;
    22
    33import java.io.File;
    4 import java.io.FileInputStream;
    5 import java.io.FileNotFoundException;
    6 import java.io.FileOutputStream;
    74import java.io.IOException;
     5import java.util.Arrays;
     6import java.util.HashSet;
    87import java.util.TreeSet;
    98
    109import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
     10import net.oni2.aeinstaller.backend.FileChecksum;
    1111import net.oni2.aeinstaller.backend.Paths;
    1212import net.oni2.aeinstaller.backend.packages.Package;
    13 import net.oni2.platformtools.PlatformInformation;
    14 import net.oni2.platformtools.PlatformInformation.Platform;
     13import net.oni2.aeinstaller.backend.packages.PackageManager;
    1514
    1615import org.apache.commons.io.FileUtils;
    17 
    18 import com.thoughtworks.xstream.XStream;
    19 import com.thoughtworks.xstream.io.xml.StaxDriver;
    2016
    2117/**
     
    2319 */
    2420public class ToolsManager {
     21
    2522        /**
    26          * @return Currently installed tools
     23         * Verify integrity of installed tools
    2724         */
    28         @SuppressWarnings("unchecked")
    29         public static TreeSet<Integer> getInstalledTools() {
    30                 File installCfg = new File(Paths.getInstallerPath(),
    31                                 "installed_tools.xml");
    32                 TreeSet<Integer> res = new TreeSet<Integer>();
    33                 try {
    34                         if (installCfg.exists()) {
    35                                 FileInputStream fis = new FileInputStream(installCfg);
    36                                 XStream xs = new XStream(new StaxDriver());
    37                                 Object obj = xs.fromXML(fis);
    38                                 if (obj instanceof TreeSet<?>)
    39                                         res = (TreeSet<Integer>) obj;
    40                                 fis.close();
    41                         }
    42                 } catch (FileNotFoundException e) {
    43                         e.printStackTrace();
    44                 } catch (IOException e) {
    45                         e.printStackTrace();
    46                 }
    47                 return res;
    48         }
    49 
    50         private static void writeInstalledTools(TreeSet<Integer> tools) {
    51                 File installCfg = new File(Paths.getInstallerPath(),
    52                                 "installed_tools.xml");
    53                 try {
    54                         FileOutputStream fos = new FileOutputStream(installCfg);
    55                         XStream xs = new XStream(new StaxDriver());
    56                         xs.toXML(tools, fos);
    57                         fos.close();
    58                 } catch (FileNotFoundException e) {
    59                         e.printStackTrace();
    60                 } catch (IOException e) {
    61                         e.printStackTrace();
     25        public static void verifyToolsIntegrity() {
     26                final ToolInstallationList til = ToolInstallationList.getInstance();
     27                for (final Package m : PackageManager.getInstance().getInstalledTools()) {
     28                        ToolFileIterator.iteratePlatformToolFiles(m,
     29                                        new ToolFileIteratorEntry() {
     30                                                @Override
     31                                                public void toolFile(File source, File target) {
     32                                                        byte[] chkSrc = FileChecksum
     33                                                                        .calculateFileMD5(source);
     34                                                        if (!target.exists()) {
     35                                                                til.markModified(m.getPackageNumber(), true);
     36                                                        } else {
     37                                                                byte[] chkTrg = FileChecksum
     38                                                                                .calculateFileMD5(target);
     39                                                                if (!Arrays.equals(chkSrc, chkTrg))
     40                                                                        til.markModified(m.getPackageNumber(), true);
     41                                                        }
     42                                                }
     43                                        });
    6244                }
    6345        }
     
    7052         */
    7153        public static void installTools(TreeSet<Package> tools, boolean uninstall) {
    72                 TreeSet<Integer> installed = getInstalledTools();
     54                ToolInstallationList til = ToolInstallationList.getInstance();
    7355                for (Package m : tools) {
    74                         if (!uninstall || installed.contains(m.getPackageNumber())) {
    75                                 File plain = CaseInsensitiveFile.getCaseInsensitiveFile(
    76                                                 m.getLocalPath(), "plain");
    77                                 if (plain.exists()) {
    78                                         if (m.hasSeparatePlatformDirs()) {
    79                                                 File plainCommon = CaseInsensitiveFile
    80                                                                 .getCaseInsensitiveFile(plain, "common");
    81                                                 File plainMac = CaseInsensitiveFile
    82                                                                 .getCaseInsensitiveFile(plain, "mac_only");
    83                                                 File plainWin = CaseInsensitiveFile
    84                                                                 .getCaseInsensitiveFile(plain, "win_only");
    85                                                 if (plainCommon.exists())
    86                                                         copyRemoveToolsFiles(plainCommon,
    87                                                                         Paths.getEditionBasePath(), uninstall);
    88                                                 if (PlatformInformation.getPlatform() == Platform.MACOS
    89                                                                 && plainMac.exists())
    90                                                         copyRemoveToolsFiles(plainMac,
    91                                                                         Paths.getEditionBasePath(), uninstall);
    92                                                 else if (plainWin.exists())
    93                                                         copyRemoveToolsFiles(plainWin,
    94                                                                         Paths.getEditionBasePath(), uninstall);
    95                                         } else {
    96                                                 copyRemoveToolsFiles(plain, Paths.getEditionBasePath(),
    97                                                                 uninstall);
    98                                         }
     56                        if (!uninstall) { // Install:
     57                                final HashSet<String> files = new HashSet<String>();
     58                                ToolFileIterator.iteratePlatformToolFiles(m,
     59                                                new ToolFileIteratorEntry() {
     60                                                        @Override
     61                                                        public void toolFile(File source, File target) {
     62                                                                copyToolsFiles(source, target, files);
     63                                                        }
     64                                                });
     65                                til.addTool(m.getPackageNumber(), files);
     66                        } else { // Uninstall:
     67                                if (til.isInstalled(m.getPackageNumber())) {
     68                                        removeTool(til.getFiles(m.getPackageNumber()));
     69                                        til.removeTool(m.getPackageNumber());
    9970                                }
    10071                        }
    101                         if (uninstall)
    102                                 installed.remove(m.getPackageNumber());
    103                         else
    104                                 installed.add(m.getPackageNumber());
    10572                }
    106                 writeInstalledTools(installed);
     73                til.saveList();
    10774        }
    10875
    109         private static void copyRemoveToolsFiles(File srcFolder, File targetFolder,
    110                         boolean remove) {
    111                 for (File f : srcFolder.listFiles()) {
    112                         try {
    113                                 if (f.isDirectory())
    114                                         copyRemoveToolsFiles(f,
    115                                                         CaseInsensitiveFile.getCaseInsensitiveFile(
    116                                                                         targetFolder, f.getName()), remove);
    117                                 else {
    118                                         File targetFile = CaseInsensitiveFile
    119                                                         .getCaseInsensitiveFile(targetFolder, f.getName());
    120                                         if (remove) {
    121                                                 if (targetFile.exists())
    122                                                         targetFile.delete();
    123                                         } else {
    124                                                 if (!targetFile.getName().equals(f.getName()))
    125                                                         targetFile.delete();
    126                                                 FileUtils.copyFileToDirectory(f, targetFolder);
    127                                                 if (f.canExecute())
    128                                                         CaseInsensitiveFile.getCaseInsensitiveFile(
    129                                                                         targetFolder, f.getName()).setExecutable(
    130                                                                         true);
    131                                         }
    132                                 }
    133                         } catch (IOException e) {
    134                                 e.printStackTrace();
     76        private static void copyToolsFiles(File src, File target,
     77                        HashSet<String> files) {
     78                try {
     79                        File targetFile = CaseInsensitiveFile.getCaseInsensitiveFile(
     80                                        target.getParentFile(), target.getName());
     81
     82                        // Case mismatch?
     83                        if (!targetFile.getName().equals(src.getName()))
     84                                targetFile.delete();
     85
     86                        files.add(target.getPath().replace(
     87                                        Paths.getEditionBasePath().getPath(), ""));
     88
     89                        FileUtils.copyFile(src, target);
     90                        if (src.canExecute())
     91                                target.setExecutable(true);
     92                } catch (IOException e) {
     93                        e.printStackTrace();
     94                }
     95        }
     96
     97        private static void removeTool(HashSet<String> files) {
     98                for (String p : files) {
     99                        File targetFile = new File(Paths.getEditionBasePath().getPath() + p);
     100                        if (targetFile.getPath().contains(
     101                                        Paths.getEditionBasePath().getPath())) {
     102                                File targetFolder = targetFile.getParentFile();
     103
     104                                if (targetFile.exists())
     105                                        targetFile.delete();
     106                                if (targetFolder.list().length == 0)
     107                                        targetFolder.delete();
    135108                        }
    136109                }
    137                 if (remove)
    138                         if (targetFolder.list().length == 0)
    139                                 targetFolder.delete();
    140110        }
    141 
    142111}
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/Package.java

    r749 r804  
    1414import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
    1515import net.oni2.aeinstaller.backend.Paths;
    16 import net.oni2.aeinstaller.backend.oni.management.ToolsManager;
     16import net.oni2.aeinstaller.backend.oni.management.tools.ToolInstallationList;
    1717import net.oni2.moddepot.DepotConfig;
    1818import net.oni2.moddepot.ECompatiblePlatform;
     
    230230        public boolean isInstalled() {
    231231                if (tool)
    232                         return ToolsManager.getInstalledTools().contains(packageNumber);
     232                        return ToolInstallationList.getInstance().isInstalled(packageNumber);
    233233                else
    234234                        return PackageManager.getInstance().isModInstalled(this);
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/PackageManager.java

    r749 r804  
    1414
    1515import net.oni2.aeinstaller.backend.Paths;
     16import net.oni2.aeinstaller.backend.oni.management.Installer;
     17import net.oni2.aeinstaller.backend.oni.management.tools.ToolInstallationList;
    1618import net.oni2.moddepot.DepotManager;
    1719import net.oni2.moddepot.model.NodeMod;
    1820import net.oni2.moddepot.model.TaxonomyTerm;
    19 import net.oni2.aeinstaller.backend.oni.management.Installer;
    20 import net.oni2.aeinstaller.backend.oni.management.ToolsManager;
    2121
    2222import com.thoughtworks.xstream.XStream;
     
    266266        public TreeSet<Package> getInstalledTools() {
    267267                TreeSet<Package> res = new TreeSet<Package>();
    268                 for (int n : ToolsManager.getInstalledTools()) {
     268                for (int n : ToolInstallationList.getInstance().getItems().keySet()) {
    269269                        res.add(getPackageByNumber(n));
    270270                }
     
    301301                        for (int depNum : m.getDependencies()) {
    302302                                Package other = getPackageByNumber(depNum);
    303                                 if (!mods.contains(other)) {
    304                                         if (!res.containsKey(m))
    305                                                 res.put(m, new HashSet<Package>());
    306                                         res.get(m).add(other);
     303                                if (other != null) {
     304                                        if (!mods.contains(other)) {
     305                                                if (!res.containsKey(m))
     306                                                        res.put(m, new HashSet<Package>());
     307                                                res.get(m).add(other);
     308                                        }
    307309                                }
    308310                        }
     
    326328                        for (int confNum : m.getIncompabitilities()) {
    327329                                Package other = getPackageByNumber(confNum);
    328                                 if (mods.contains(other)) {
    329                                         if (!res.containsKey(m))
    330                                                 res.put(m, new HashSet<Package>());
    331                                         res.get(m).add(other);
     330                                if (other != null) {
     331                                        if (mods.contains(other)) {
     332                                                if (!res.containsKey(m))
     333                                                        res.put(m, new HashSet<Package>());
     334                                                res.get(m).add(other);
     335                                        }
    332336                                }
    333337                        }
Note: See TracChangeset for help on using the changeset viewer.