Ignore:
Timestamp:
Jan 12, 2013, 11:48:33 PM (12 years ago)
Author:
alloc
Message:

AEI2: Added load/save config

Location:
AE/installer2/src/net/oni2/aeinstaller/backend/mods
Files:
5 added
2 edited

Legend:

Unmodified
Added
Removed
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java

    r603 r604  
    1313import net.oni2.aeinstaller.backend.Settings;
    1414import net.oni2.aeinstaller.backend.Settings.Platform;
     15import net.oni2.aeinstaller.backend.depot.DepotConfig;
    1516import net.oni2.aeinstaller.backend.depot.DepotManager;
    1617import net.oni2.aeinstaller.backend.depot.model.NodeMod;
     
    2122 */
    2223public class Mod implements Comparable<Mod> {
    23         // TODO: Dependencies/Conflicts
    24 
    2524        private String name = "";
    2625        private int packageNumber = 0;
     
    7675        public void updateLocalData() {
    7776                File config = new File(getLocalPath(), "Mod_Info.cfg");
    78                 File timestamp = new File(getLocalPath(), "aei.cfg");
     77                File aeicfg = new File(getLocalPath(), "aei.cfg");
    7978                if (config.exists()) {
    8079                        try {
     
    112111                                                if (node == null)
    113112                                                        description = sVal.replaceAll("\\\\n", "<br>");
     113                                        } else if (sName.equalsIgnoreCase("Depends")) {
     114                                                String[] depsS = sVal.split(",");
     115                                                for (String s : depsS) {
     116                                                        try {
     117                                                                int dep = Integer.parseInt(s);
     118                                                                dependencies.add(dep);
     119                                                        } catch (NumberFormatException e) {
     120                                                                System.err
     121                                                                                .format("Mod %05d does contain a non-number dependency: '%s'\n",
     122                                                                                                packageNumber, s);
     123                                                        }
     124                                                }
     125                                        } else if (sName.equalsIgnoreCase("Conflicts")) {
     126                                                String[] confS = sVal.split(",");
     127                                                for (String s : confS) {
     128                                                        try {
     129                                                                int conf = Integer.parseInt(s);
     130                                                                conflicts.add(conf);
     131                                                        } catch (NumberFormatException e) {
     132                                                                System.err
     133                                                                                .format("Mod %05d does contain a non-number dependency: '%s'\n",
     134                                                                                                packageNumber, s);
     135                                                        }
     136                                                }
    114137                                        }
    115138                                }
     
    123146                                        + getLocalPath().getPath());
    124147                }
    125                 if (timestamp.exists()) {
     148                if (aeicfg.exists()) {
    126149                        try {
    127                                 FileInputStream fstream = new FileInputStream(timestamp);
     150                                FileInputStream fstream = new FileInputStream(aeicfg);
    128151                                InputStreamReader isr = new InputStreamReader(fstream);
    129152                                BufferedReader br = new BufferedReader(isr);
    130                                 String ts = br.readLine();
    131                                 localTimestamp = Long.parseLong(ts);
     153                                String strLine;
     154                                while ((strLine = br.readLine()) != null) {
     155                                        if (strLine.indexOf("->") < 1)
     156                                                continue;
     157                                        if (strLine.indexOf("//") >= 0)
     158                                                strLine = strLine.substring(0, strLine.indexOf("//"));
     159                                        String[] split = strLine.split("->", 2);
     160                                        String sName = split[0].trim();
     161                                        String sVal = split[1].trim();
     162                                        if (sName.equalsIgnoreCase("Timestamp")) {
     163                                                localTimestamp = Long.parseLong(sVal);
     164                                        }
     165                                }
    132166                                isr.close();
    133167                        } catch (FileNotFoundException e) {
     
    214248
    215249        /**
     250         * @return the package number as 5 digit string
     251         */
     252        public String getPackageNumberString() {
     253                return String.format("%05d", packageNumber);
     254        }
     255
     256        /**
    216257         * @return Types of mod
    217258         */
     
    266307         */
    267308        public boolean isMandatoryMod() {
    268                 return packageNumber < 10000;
     309                return packageNumber < DepotConfig.getMandatoryLimit();
    269310        }
    270311
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java

    r603 r604  
    33import java.io.File;
    44import java.io.FileFilter;
     5import java.io.FileInputStream;
     6import java.io.FileNotFoundException;
     7import java.io.FileOutputStream;
     8import java.io.IOException;
    59import java.util.Collection;
    610import java.util.HashMap;
     
    913import java.util.Vector;
    1014
     15import com.thoughtworks.xstream.XStream;
     16import com.thoughtworks.xstream.io.xml.StaxDriver;
     17
    1118import net.oni2.aeinstaller.backend.Paths;
    1219import net.oni2.aeinstaller.backend.depot.DepotManager;
    1320import net.oni2.aeinstaller.backend.depot.model.NodeMod;
    1421import net.oni2.aeinstaller.backend.depot.model.TaxonomyTerm;
     22import net.oni2.aeinstaller.backend.oni.Installer;
    1523
    1624/**
     
    1826 */
    1927public class ModManager {
    20         // Download mods
    21         // Update mods
    22 
    2328        private static ModManager instance = new ModManager();
    2429
     
    2631        private HashMap<Integer, Mod> mods = new HashMap<Integer, Mod>();
    2732        private HashMap<Integer, Mod> tools = new HashMap<Integer, Mod>();
     33
     34        private Vector<Integer> currentlyInstalled = new Vector<Integer>();
     35
     36        /**
     37         * @param f
     38         *            Mod selection file
     39         * @return Mod selection
     40         */
     41        @SuppressWarnings("unchecked")
     42        public Vector<Integer> loadModSelection(File f) {
     43                Vector<Integer> res = new Vector<Integer>();
     44                try {
     45                        FileInputStream fis = new FileInputStream(f);
     46                        XStream xs = new XStream(new StaxDriver());
     47                        Object obj = xs.fromXML(fis);
     48                        if (obj instanceof Vector<?>)
     49                                res = (Vector<Integer>) obj;
     50                        fis.close();
     51                } catch (FileNotFoundException e) {
     52                        e.printStackTrace();
     53                } catch (IOException e) {
     54                        e.printStackTrace();
     55                }
     56                return res;
     57        }
     58
     59        /**
     60         * @param f
     61         *            Mod selection file
     62         * @param mods
     63         *            Selected mods
     64         */
     65        public void saveModSelection(File f, TreeSet<Mod> mods) {
     66                try {
     67                        Vector<Integer> installed = new Vector<Integer>();
     68                        for (Mod m : mods) {
     69                                installed.add(m.getPackageNumber());
     70                        }
     71                        FileOutputStream fos = new FileOutputStream(f);
     72                        XStream xs = new XStream(new StaxDriver());
     73                        xs.toXML(installed, fos);
     74                        fos.close();
     75                } catch (FileNotFoundException e) {
     76                        e.printStackTrace();
     77                } catch (IOException e) {
     78                        e.printStackTrace();
     79                }
     80        }
    2881
    2982        /**
     
    69122                        mods.put(m.getPackageNumber(), m);
    70123                }
    71         }
    72 
    73         public void refreshLocalMods() {
    74                 // TODO: evtl nur private e.g. als listener für downloads?
     124
     125                currentlyInstalled = Installer.getInstalledMods();
     126                if (currentlyInstalled == null)
     127                        currentlyInstalled = new Vector<Integer>();
    75128        }
    76129
     
    108161         * @return Mods which are always installed
    109162         */
    110         public Collection<Mod> getMandatoryMods() {
    111                 Vector<Mod> res = new Vector<Mod>();
     163        public TreeSet<Mod> getMandatoryMods() {
     164                TreeSet<Mod> res = new TreeSet<Mod>();
    112165                for (Mod m : mods.values()) {
    113166                        if (m.isMandatoryMod())
     
    116169                return res;
    117170        }
    118        
     171
    119172        /**
    120173         * @return Collection of tools
     
    123176                return tools.values();
    124177        }
    125        
     178
    126179        /**
    127180         * @return Tools which are always installed
    128181         */
    129         public Collection<Mod> getMandatoryTools() {
    130                 Vector<Mod> res = new Vector<Mod>();
     182        public TreeSet<Mod> getMandatoryTools() {
     183                TreeSet<Mod> res = new TreeSet<Mod>();
    131184                for (Mod m : tools.values()) {
    132185                        if (m.isMandatoryMod())
     
    201254        }
    202255
     256        /**
     257         * @param m
     258         *            Mod to check
     259         * @return Is mod installed?
     260         */
     261        public boolean isModInstalled(Mod m) {
     262                return currentlyInstalled.contains(m.getPackageNumber());
     263        }
    203264}
Note: See TracChangeset for help on using the changeset viewer.