瀏覽代碼

initSVN

git-svn-id: http://repo.nplusc.de/svn/iZink@28 8b19561d-0d00-6744-8ac1-9afc8f58a8aa
masterX244 12 年之前
父節點
當前提交
56cae70be7
共有 33 個文件被更改,包括 5315 次插入0 次删除
  1. 二進制
      IZSetup/ICE_JNIRegistry.dll
  2. 15 0
      IZSetup/addons.izsetup
  3. 74 0
      IZSetup/build.xml
  4. 10 0
      IZSetup/bundle.izmeta
  5. 二進制
      IZSetup/default.izbundle
  6. 64 0
      IZSetup/default.izpackage
  7. 33 0
      IZSetup/games.izsetup
  8. 33 0
      IZSetup/gamestls.izsetup
  9. 3 0
      IZSetup/manifest.mf
  10. 1425 0
      IZSetup/nbproject/build-impl.xml
  11. 8 0
      IZSetup/nbproject/genfiles.properties
  12. 94 0
      IZSetup/nbproject/project.properties
  13. 25 0
      IZSetup/nbproject/project.xml
  14. 15 0
      IZSetup/pack001.izsetup
  15. 170 0
      IZSetup/src/de/nplusc/izc/InstallPak/BundleVerifyGui.form
  16. 322 0
      IZSetup/src/de/nplusc/izc/InstallPak/BundleVerifyGui.java
  17. 154 0
      IZSetup/src/de/nplusc/izc/InstallPak/InstallManager.java
  18. 133 0
      IZSetup/src/de/nplusc/izc/InstallPak/InstallProgressGui.form
  19. 386 0
      IZSetup/src/de/nplusc/izc/InstallPak/InstallProgressGui.java
  20. 219 0
      IZSetup/src/de/nplusc/izc/InstallPak/ModeSel.java
  21. 115 0
      IZSetup/src/de/nplusc/izc/InstallPak/ModeSelectionGUI.form
  22. 159 0
      IZSetup/src/de/nplusc/izc/InstallPak/ModeSelectionGUI.java
  23. 278 0
      IZSetup/src/de/nplusc/izc/InstallPak/PackManager.java
  24. 199 0
      IZSetup/src/de/nplusc/izc/InstallPak/PackagerGUI.form
  25. 376 0
      IZSetup/src/de/nplusc/izc/InstallPak/PackagerGUI.java
  26. 142 0
      IZSetup/src/de/nplusc/izc/InstallPak/SelectionGUI.form
  27. 238 0
      IZSetup/src/de/nplusc/izc/InstallPak/SelectionGUI.java
  28. 20 0
      IZSetup/src/de/nplusc/izc/InstallPak/Tester.java
  29. 10 0
      IZSetup/src/de/nplusc/izc/InstallPak/bundle.izmeta
  30. 489 0
      IZSetup/src/de/nplusc/izc/InstallPak/izsetupReader.java
  31. 64 0
      IZSetup/src/de/nplusc/izc/InstallPak/tempalte.izpackage
  32. 27 0
      IZSetup/src/de/nplusc/izc/InstallPak/template.izsetup
  33. 15 0
      IZSetup/xprecover.izsetup

二進制
IZSetup/ICE_JNIRegistry.dll


+ 15 - 0
IZSetup/addons.izsetup

@@ -0,0 +1,15 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|Addons+0x01
+001|msg|Addon1_1| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|group|Group1|Addons+0x02
+002|msg|Addon2_1| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|group|Group1|Addons+0x03
+003|msg|Addon3_1| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec||der installer beendet sich nicht bei wait am schluss

+ 74 - 0
IZSetup/build.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="IZSetup" default="default" basedir=".">
+    <description>Builds, tests, and runs the project IZSetup.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties
+      -post-init:                called after initialization of project properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-jar:                  called before JAR building
+      -post-jar:                 called after JAR building
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting an obfuscator after compilation could look like this:
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Another way to customize the build is by overriding existing main targets.
+    The targets of interest are: 
+
+      -init-macrodef-javac:     defines macro for javac compilation
+      -init-macrodef-junit:     defines macro for junit execution
+      -init-macrodef-debug:     defines macro for class debugging
+      -init-macrodef-java:      defines macro for class execution
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)
+      -do-jar-without-manifest: JAR building (if you are not using a manifest)
+      run:                      execution of project 
+      -javadoc-build:           Javadoc generation
+      test-report:              JUnit report generation
+
+    An example of overriding the target for project execution could look like this:
+
+        <target name="run" depends="IZSetup-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that the overridden target depends on the jar target and not only on 
+    the compile target as the regular run target does. Again, for a list of available 
+    properties which you can use, check the target you are overriding in the
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>

+ 10 - 0
IZSetup/bundle.izmeta

@@ -0,0 +1,10 @@
+000|izsetup|1.0.0| 
+000|type|bundle|nur für uer (der kommentar)
+001|meta:isZipped|false|
+CMM|meta:isZipped: bei false sind die dateien als normale dateien neben dieser bundle gelagert -> kein entzippern
+CMM|in tempdir nötig. Muss bei multidisk-bundles deaktiviert sein. bei diskbundles wird Deaktivierung empfohlen
+CMM|da es die Festplatte nicht so vollstopft
+001|bundlename|Testbundle
+001|packagedata|default.izpackage|muss im basedir des Bundles liegen(!!!!!!!!!!!!!!!!!!!!!!!!!!)
+001|Description|Test für bundleGui
+001|extractSize|10000|Angabe in Bytes. wird von GUI konvertiert.

二進制
IZSetup/default.izbundle


+ 64 - 0
IZSetup/default.izpackage

@@ -0,0 +1,64 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+000|type|packages|dient nur zur unterscheidung von packagefiles
+000|||packagefiles unterstützen Conds genauso
+000|flag|multidisk|dieses Flag aktivirt den Multidisk-Modus
+CMM|Inline-COmment-funktion
+CMM|Multidisk-Modus=Dateien werden nicht auf Temp kopiert und bei nem WaitDisk
+CMM|kommt ne Aufforderung die nächste Disk einzulegen
+CMM|der dateiname danach sagt auf welche datei geschaut wird
+001|pack|BaseSystem|Name de Packages das in der Anicht auftaucht
+001|detectInstall|File://C:\kernel.etl2
+CMM|File:// benutzt den DateiExistiert-operator
+CMM|Reg:// detektiert unter Win auf Exitenz von Regwert
+001|description|Die minimal nötigen Tools und Komponenten fürs System
+CMM|#basedir# ersetzt Variable durch Pfad dieser datei (ermöglict jar und
+CMM|setup voneinander zu trennen)
+001|packfile|#basedir#\pack001.izsetup
+CMM|msg und exec-lines werden vom PackManager ignoriert und sind für unattendeds nötig
+CMM|dabei werden alle packages nacheinander installiert und ausgeführt
+001|msg|Installiere BasePackage
+001|exec|java -jar izsetup.jar -file pack001.izsetup --silent
+CMM|########################################### 
+CMM|###########################################
+CMM|###########################################
+002|pack|Addons| 
+002|detectInstall|File://%userprofile%\appdata\programname\datei1.dat|
+002|description|Addons und sosntiges was nicht zwingend notwendig ist|
+002|packfile|#basedir#\addons.izsetup| 
+002|req|001|nummer des benötigten packs//kann weitere erfordernwenn
+002|msg|Installiere Addons| 
+002|exec|java -jar izsetup.jar -file addons.izsetup --silent| 
+CMM|########################################### 
+CMM|###########################################
+CMM|###########################################
+003|cond:1|IsWin7| 
+003|pack|Fehlendes Zeugs von XP| 
+003|detectInstall|File://C:\ornder2\datei2.bin
+003|description|Sach das bei XP defult war aber dort fehlt|
+003|packfile|#basedir#\xprecover.izsetup| 
+003|req|001| 
+003|msg|installiere fehlendes nach das bei XP dabei war
+003|exec|java -jar izsetup.jar -file xprevocer.izsetup --silent| 
+003|endcond:1| |
+004|pack|games| 
+004|waitDisk|#basedir#\games.izsetup| 
+004|detectInstall|File://C:\Program Files\ImgBurn\ImgBurn.exexexe
+004|Description|Die Games die nicht fehlen dürfen
+004|packfile|#basedir#\games.izsetup
+004|req|001| 
+004|msg|installiere games| 
+004|exec|java -jar izsetup.jar -file games.izsetup --silent| 
+005|pack|game-Tools| 
+005|waitDisk|#basedir#\gamestls.izsetup| 
+005|detectInstall|File://C:\ornder3\datei3b.bin| 
+005|Description|Tools für die games aus dem Package| 
+005|packfile|#basedir#\gamestls.izsetup
+005|req|004|dependencys gehen über mehrere packs ->auch 001 notwendig 
+005|msg|installiere games-tools| 
+005|exec|java -jar izsetup.jar -file gamestls.izsetup --silent| 
+999|pack|NoExec| dieses Pack ist nur als Wrapper fr die Basta-Messge gedacht und wird nicht ausgeführt
+999|req|000|da 000 kein pack kann dieses nicht ausgewählt werden
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec||der installer beendet sich nicht bei wait am schluss

+ 33 - 0
IZSetup/games.izsetup

@@ -0,0 +1,33 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|Games+0x01
+001|msg|Games1_1| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|Games1_2| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|Games1_3| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|Games1_4| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|group|Group1|Games+0x02
+002|msg|Games2_1| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|Games2_2| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|Games2_3| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|Games2_4| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|group|Group1|Games+0x03
+003|msg|Games3_1| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|Games3_2| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|Games3_3| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|Games3_4| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec|wait|der installer beendet sich nicht bei wait am schluss

+ 33 - 0
IZSetup/gamestls.izsetup

@@ -0,0 +1,33 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|GameTools+0x01
+001|msg|GameTool1_1| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|GameTool1_2| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|GameTool1_3| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+001|msg|GameTool1_4| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|group|Group1|GameTools+0x02
+002|msg|GameTool2_1| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|GameTool2_2| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|GameTool2_3| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|msg|GameTool2_4| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|group|Group1|GameTools+0x03
+003|msg|GameTool3_1| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|GameTool3_2| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|GameTool3_3| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|msg|GameTool3_4| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec|wait|der installer beendet sich nicht bei wait am schluss

+ 3 - 0
IZSetup/manifest.mf

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+

+ 1425 - 0
IZSetup/nbproject/build-impl.xml

@@ -0,0 +1,1425 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+  - initialization
+  - compilation
+  - jar
+  - execution
+  - debugging
+  - javadoc
+  - test compilation
+  - test execution
+  - test debugging
+  - applet
+  - cleanup
+
+        -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="IZSetup-impl">
+    <fail message="Please build using Ant 1.8.0 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.8.0"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+    <!-- 
+                ======================
+                INITIALIZATION SECTION 
+                ======================
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/config.properties"/>
+        <property file="nbproject/private/configs/${config}.properties"/>
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class">
+            <and>
+                <isset property="manifest.available"/>
+                <isset property="main.class.available"/>
+            </and>
+        </condition>
+        <condition property="do.archive">
+            <not>
+                <istrue value="${jar.archive.disabled}"/>
+            </not>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="do.archive"/>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class+mkdist.available">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available">
+            <and>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available+main.class">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="manifest.available-mkdist.available">
+            <or>
+                <istrue value="${manifest.available}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="manifest.available+main.class-mkdist.available">
+            <or>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <length length="0" string="${endorsed.classpath}" when="greater"/>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
+        <property name="copylibs.rebase" value="true"/>
+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="IZSetup" testname="TestNG tests" workingDir="${work.dir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename IZSetup -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                        <arg line="${testng.cmd.args}"/>
+                    </customize>
+                </j2seproject3:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </j2seproject3:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </j2seproject3:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <attribute default="" name="stopclassname"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${run.classpath}" name="classpath"/>
+            <attribute default="jvm" name="jvm"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                <pathconvert property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <filtermapper>
+                            <replacestring from=" " to="%20"/>
+                        </filtermapper>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}"/>
+                    <manifest>
+                        <attribute name="Class-Path" value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">
+                <j2seproject1:fileset dir="${build.classes.dir}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: IZSetup was already built"/>
+    </target>
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-jar.properties}" verbose="false"/>
+        <property file="${built-jar.properties}" prefix="already.built.jar."/>
+        <antcall target="-warn-already-built-jar"/>
+        <propertyfile file="${built-jar.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-jar.properties}"/>
+            <param location="${project.ToolKit}" name="call.subproject"/>
+            <param location="${project.ToolKit}/build.xml" name="call.script"/>
+            <param name="call.target" value="jar"/>
+            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+        </antcall>
+    </target>
+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+    <target depends="init" name="-check-automatic-build">
+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+    </target>
+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+        <antcall target="clean"/>
+    </target>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-depend">
+        <pathconvert property="build.generated.subdirs">
+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="*"/>
+            </dirset>
+        </pathconvert>
+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy todir="${build.classes.dir}/META-INF">
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <!--
+                ====================
+                JAR BUILDING SECTION
+                ====================
+            -->
+    <target depends="init" name="-pre-pre-jar">
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+    </target>
+    <target name="-pre-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
+        <j2seproject1:jar/>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">
+        <j2seproject1:jar manifest="${manifest.file}"/>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
+        <j2seproject1:jar manifest="${manifest.file}">
+            <j2seproject1:manifest>
+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
+            </j2seproject1:manifest>
+        </j2seproject1:jar>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+    </target>
+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">
+        <basename file="${application.splash}" property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>
+    <target name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile" description="Run a main class." name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <!--
+                pre NB7.2 profiler integration
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
+                end of pre NB72 profiling section
+            -->
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="run"/>
+    </target>
+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-single"/>
+    </target>
+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcal target="run-test-with-main"/>
+    </target>
+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <startprofiler/>
+        <antcall target="run-applet"/>
+    </target>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" if="have.sources" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+            <and>
+                <isset property="endorsed.classpath.cmd.line.arg"/>
+                <not>
+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+                <exclude name="*.java"/>
+            </fileset>
+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                TEST COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                =======================
+                TEST EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <j2seproject3:test testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                =======================
+                TEST DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: IZSetup was already built"/>
+    </target>
+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-clean.properties}" verbose="false"/>
+        <property file="${built-clean.properties}" prefix="already.built.clean."/>
+        <antcall target="-warn-already-built-clean"/>
+        <propertyfile file="${built-clean.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-clean.properties}"/>
+            <param location="${project.ToolKit}" name="call.subproject"/>
+            <param location="${project.ToolKit}/build.xml" name="call.script"/>
+            <param name="call.target" value="clean"/>
+            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+        </antcall>
+    </target>
+    <target depends="init" name="-do-clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target name="-check-call-dep">
+        <property file="${call.built.properties}" prefix="already.built."/>
+        <condition property="should.call.dep">
+            <and>
+                <not>
+                    <isset property="already.built.${call.subproject}"/>
+                </not>
+                <available file="${call.script}"/>
+            </and>
+        </condition>
+    </target>
+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+            <propertyset>
+                <propertyref prefix="transfer."/>
+                <mapper from="transfer.*" to="*" type="glob"/>
+            </propertyset>
+        </ant>
+    </target>
+</project>

+ 8 - 0
IZSetup/nbproject/genfiles.properties

@@ -0,0 +1,8 @@
+build.xml.data.CRC32=77883f0b
+build.xml.script.CRC32=1c9bd4db
+build.xml.stylesheet.CRC32=28e38971@1.53.1.46
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=77883f0b
+nbproject/build-impl.xml.script.CRC32=dcd11796
+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46

+ 94 - 0
IZSetup/nbproject/project.properties

@@ -0,0 +1,94 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=IZSetup
+application.vendor=LH
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/IZSetup.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+file.reference.commons-exec-1.1.jar=../../../.m2/repository/org/apache/commons/commons-exec/1.1/commons-exec-1.1.jar
+file.reference.commons-io-2.3.jar=../../../.m2/repository/commons-io/commons-io/2.3/commons-io-2.3.jar
+file.reference.mysql-connector-java-5.1.21-bin.jar=../../libs/mysql-connector-java-5.1.21-bin.jar
+includes=**
+jar.archive.disabled=${jnlp.enabled}
+jar.compress=false
+jar.index=${jnlp.enabled}
+javac.classpath=\
+    ${reference.ToolKit.jar}:\
+    ${file.reference.commons-exec-1.1.jar}:\
+    ${file.reference.commons-io-2.3.jar}:\
+    ${file.reference.mysql-connector-java-5.1.21-bin.jar}:\
+    ${libs.JNA.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.7
+javac.target=1.7
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+jnlp.codebase.type=no.codebase
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.mixed.code=default
+jnlp.offline-allowed=false
+jnlp.signed=false
+jnlp.signing=
+jnlp.signing.alias=
+jnlp.signing.keystore=
+main.class=de.nplusc.izc.InstallPak.ModeSel
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+project.ToolKit=../ToolKit
+reference.ToolKit.jar=${project.ToolKit}/dist/ToolKit.jar
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test

+ 25 - 0
IZSetup/nbproject/project.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.java.j2seproject</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+            <name>IZSetup</name>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
+            <reference>
+                <foreign-project>ToolKit</foreign-project>
+                <artifact-type>jar</artifact-type>
+                <script>build.xml</script>
+                <target>jar</target>
+                <clean-target>clean</clean-target>
+                <id>jar</id>
+            </reference>
+        </references>
+    </configuration>
+</project>

+ 15 - 0
IZSetup/pack001.izsetup

@@ -0,0 +1,15 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|Basetools+0x01
+001|msg|Tool1_1| 
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|group|Group1|Basetools+0x02
+002|msg|Tool2_1| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|group|Group1|Basetools+0x03
+003|msg|Tool3_1| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec||der installer beendet sich nicht bei wait am schluss

+ 170 - 0
IZSetup/src/de/nplusc/izc/InstallPak/BundleVerifyGui.form

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator3">
+    </Component>
+  </NonVisualComponents>
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+    <Property name="resizable" type="boolean" value="false"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </SyntheticProperties>
+  <Events>
+    <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentMoved"/>
+  </Events>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" attributes="0">
+                              <EmptySpace min="-2" pref="35" max="-2" attributes="0"/>
+                              <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace type="separate" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="1" attributes="0">
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="35" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="lblDesc" max="32767" attributes="0"/>
+                          <Group type="102" attributes="0">
+                              <Component id="lblSize" min="-2" pref="142" max="-2" attributes="0"/>
+                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="90" max="-2" attributes="0"/>
+                      <Component id="jLabel7" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="jSeparator4" min="-2" pref="50" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jSeparator1" max="32767" attributes="0"/>
+                  </Group>
+                  <Component id="monitorBar" max="32767" attributes="0"/>
+                  <Component id="unpax" alignment="1" max="32767" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace min="0" pref="475" max="32767" attributes="0"/>
+              <Component id="lblName" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="350" max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace min="-2" pref="21" max="-2" attributes="0"/>
+              <Component id="lblName" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="63" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="lblDesc" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="separate" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lblSize" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="74" max="32767" attributes="0"/>
+              <Component id="unpax" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+              <Component id="jLabel7" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
+              <Component id="monitorBar" min="-2" pref="36" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                  <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/>
+                  <Component id="jSeparator4" min="-2" pref="10" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace min="-2" pref="11" max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JProgressBar" name="monitorBar">
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblName">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Name"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Beschreibung"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Speicherverbrauch"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblDesc">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel5"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblSize">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel6"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblVID">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="izSetup 1.0.0 (c) 2012 iZc"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator4">
+    </Component>
+    <Component class="javax.swing.JButton" name="unpax">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Entpacken und Module ausw&#xe4;hlen"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="unpaxActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel7">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Status des Entpackens"/>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>

+ 322 - 0
IZSetup/src/de/nplusc/izc/InstallPak/BundleVerifyGui.java

@@ -0,0 +1,322 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.IOtools.FileTK;
+import de.nplusc.izc.tools.IOtools.ZipFileHandler;
+import de.nplusc.izc.tools.UiToolz.UiTools;
+import de.nplusc.izc.tools.baseTools.Lock;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.awt.Point;
+
+/**
+ *
+ * @author LH
+ */
+public class BundleVerifyGui extends javax.swing.JFrame
+{
+    public String zf;
+    /**
+     * Creates new form BundleVerifyGui
+     * @param zf das FIle des Bundles
+     */
+    public BundleVerifyGui(String zfl)
+    {
+        zf=zfl;
+        z=new ZipFileHandler(zf);
+        initComponents();
+        readInBundle();//file ist im zipfilehandlerdefiniert;
+        updatePosition();
+        lblVID.setText(InstallManager.VERSION_GUI_TXT);
+    }
+        private void updatePosition()
+    {
+        Point p = new Point(ModeSel.topleft_coords_x, ModeSel.topleft_coords_y);
+        setLocation(p);
+    }
+    private boolean isDiskMode=false;
+    private String packfileForInstall;
+    private void readInBundle()
+    {
+        String[] bundledata = izsetupReader.ConvertToSysSpezSetupFile(z.getStringEntry("bundle.izmeta"), false, true, "");
+        String baseDir = Tools.processEnvVarsinLine("%temp%\\iZsetup");//sird aktualisiert wenn ein UnCopy-Bundle erkannt wurde
+        for (String line : bundledata)
+        {
+            System.err.println(line);
+            String[] linedata= line.split("\\|");
+            if(linedata[1].equalsIgnoreCase("meta:isZipped")&&linedata[2].equalsIgnoreCase("false"))
+            {
+                Tools.DebugHelperPrint("Disk?", true, "iZsetup.enableFinerDebug");
+                isDiskMode=true;
+                baseDir=FileTK.getFilePath(zf);
+                unpax.setText("Module auswählen");
+                monitorBar.setVisible(false);
+            }
+            if(linedata[1].equalsIgnoreCase("extractSize"))
+               lblSize.setText(UiTools.convertToSizeString(Long.valueOf(linedata[2])));
+            if(linedata[1].equalsIgnoreCase("Description"))
+               lblDesc.setText(linedata[2]);
+            if(linedata[1].equalsIgnoreCase("bundlename"))
+               lblName.setText(linedata[2]);
+            if(linedata[1].equalsIgnoreCase("packagedata"))
+            {
+                packfileForInstall = baseDir+"\\"+linedata[2];
+                System.err.println("InstPk>>"+packfileForInstall);
+            }
+        }
+    }
+    
+    
+    
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents()
+    {
+
+        jSeparator2 = new javax.swing.JSeparator();
+        jSeparator3 = new javax.swing.JSeparator();
+        monitorBar = new javax.swing.JProgressBar();
+        lblName = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        jLabel3 = new javax.swing.JLabel();
+        lblDesc = new javax.swing.JLabel();
+        lblSize = new javax.swing.JLabel();
+        lblVID = new javax.swing.JLabel();
+        jSeparator1 = new javax.swing.JSeparator();
+        jSeparator4 = new javax.swing.JSeparator();
+        unpax = new javax.swing.JButton();
+        jLabel7 = new javax.swing.JLabel();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        setResizable(false);
+        addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                formComponentMoved(evt);
+            }
+        });
+
+        lblName.setText("Name");
+
+        jLabel2.setText("Beschreibung");
+
+        jLabel3.setText("Speicherverbrauch");
+
+        lblDesc.setText("jLabel5");
+
+        lblSize.setText("jLabel6");
+
+        lblVID.setText("izSetup 1.0.0 (c) 2012 iZc");
+
+        unpax.setText("Entpacken und Module auswählen");
+        unpax.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                unpaxActionPerformed(evt);
+            }
+        });
+
+        jLabel7.setText("Status des Entpackens");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(35, 35, 35)
+                                .addComponent(jLabel3)
+                                .addGap(18, 18, 18))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                .addContainerGap()
+                                .addComponent(jLabel2)
+                                .addGap(35, 35, 35)))
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(lblDesc, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(lblSize, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(0, 0, Short.MAX_VALUE))))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(90, 90, 90)
+                        .addComponent(jLabel7)))
+                .addContainerGap())
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lblVID)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jSeparator1))
+                    .addComponent(monitorBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(unpax, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(0, 475, Short.MAX_VALUE)
+                .addComponent(lblName)
+                .addGap(350, 350, 350))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(21, 21, 21)
+                .addComponent(lblName)
+                .addGap(63, 63, 63)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblDesc)
+                    .addComponent(jLabel2))
+                .addGap(18, 18, 18)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel3)
+                    .addComponent(lblSize))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 74, Short.MAX_VALUE)
+                .addComponent(unpax)
+                .addGap(1, 1, 1)
+                .addComponent(jLabel7)
+                .addGap(3, 3, 3)
+                .addComponent(monitorBar, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(lblVID)
+                    .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(11, 11, 11))
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+    ZipFileHandler z;
+    Lock l = new Lock();
+    private void unpaxActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_unpaxActionPerformed
+    {//GEN-HEADEREND:event_unpaxActionPerformed
+
+        if(!isDiskMode)
+        {
+            Tools.DebugHelperPrint("Diskfile Detected", true, "iZsetup.enableCoreDebug");
+            try
+            {
+                l.lock();
+            }
+            catch (InterruptedException ex)
+            {
+                ex.printStackTrace();
+            }
+            new Thread(new Runnable()
+            {
+                @SuppressWarnings("ResultOfObjectAllocationIgnored")
+                @Override
+                public void run()
+                {
+                    
+                    z.extractAllToDiskWithMonitoringProgressbar(Tools.processEnvVarsinLine("%temp%\\iZsetup"), monitorBar);
+                    l.unlock();
+                }
+            }).start();
+        }
+        try
+        {
+            l.lock();
+            l.unlock();
+        }
+        catch (InterruptedException ex)
+        {
+        }
+        ModeSel.filePath=packfileForInstall;//wird von dem anderen Modul verarbeitet
+        new Thread(new Runnable()
+        {
+            @SuppressWarnings("ResultOfObjectAllocationIgnored")
+            @Override
+            public void run()
+            {
+                new PackagerGUI().setVisible(true);
+            }
+        }).start();
+        setVisible(false);
+        
+    }//GEN-LAST:event_unpaxActionPerformed
+
+    private void formComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentMoved
+    {//GEN-HEADEREND:event_formComponentMoved
+        ModeSel.topleft_coords_x = getLocation().x;
+        ModeSel.topleft_coords_y = getLocation().x;
+    }//GEN-LAST:event_formComponentMoved
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[])
+    {
+        /* Set the Nimbus look and feel */
+        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
+        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
+         */
+        try
+        {
+            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
+            {
+                if ("Nimbus".equals(info.getName()))
+                {
+                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        }
+        catch (ClassNotFoundException ex)
+        {
+            java.util.logging.Logger.getLogger(BundleVerifyGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (InstantiationException ex)
+        {
+            java.util.logging.Logger.getLogger(BundleVerifyGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (IllegalAccessException ex)
+        {
+            java.util.logging.Logger.getLogger(BundleVerifyGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (javax.swing.UnsupportedLookAndFeelException ex)
+        {
+            java.util.logging.Logger.getLogger(BundleVerifyGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        //</editor-fold>
+
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                System.err.println("FIFO");
+                //new BundleVerifyGui("D:\\\\zip\\\\test.zip").setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel7;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JSeparator jSeparator2;
+    private javax.swing.JSeparator jSeparator3;
+    private javax.swing.JSeparator jSeparator4;
+    private javax.swing.JLabel lblDesc;
+    private javax.swing.JLabel lblName;
+    private javax.swing.JLabel lblSize;
+    private javax.swing.JLabel lblVID;
+    private javax.swing.JProgressBar monitorBar;
+    private javax.swing.JButton unpax;
+    // End of variables declaration//GEN-END:variables
+}

+ 154 - 0
IZSetup/src/de/nplusc/izc/InstallPak/InstallManager.java

@@ -0,0 +1,154 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.baseTools.Messagers;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+/**
+ *
+ * @author LH
+ */
+public class InstallManager
+{
+    public static final int VERSION_MAJOR = 1,VERSION_MINOR=1,REVISION=0;
+    public static final String VERSION_GUI_TXT="izSetup "+VERSION_MAJOR+"."+VERSION_MINOR+"."+REVISION+" (c) 2012 iZc";
+    
+    
+    public static InstallManager Main;
+    private String[] InstallQueue;
+    private String[] Groups;
+    private String[] enabledGroupIDs;
+    private HashMap<String,ArrayList<String>> groupsplitted = new HashMap<>();
+    static{
+        Main=  new InstallManager();
+      //  Main.setInstallScript(ModeSel.filePath);
+    }
+    
+    public String[] getToggleAblePrograms()
+    {
+        Arrays.sort(Groups);
+        return Groups;
+    }
+    
+    public void setInstallScript(String path)
+    {
+        String[] data = izsetupReader.getSysSpezSetupFile(path);
+        if(data==null)
+        {
+            Messagers.SingleLineMsg("WTF?!?!?!?!?!?!?!?", "...");
+            System.exit(0xfa11);
+        }
+        String groupID="000"; 
+        String previousGRPID ="000";
+        
+        ArrayList<String> SubGroup = new ArrayList<>();
+        for (String line : data)
+        {
+            if(!(line.length()<6))
+            {
+                String[] splittedLine = line.split("\\|");
+                //DBG_START
+                try{
+                Tools.DebugHelperPrint(splittedLine[0]+"|GRP", true, "iZsetup.enableFinerDebug");
+                Tools.DebugHelperPrint(splittedLine[1]+"|KEY", true, "iZsetup.enableFinerDebug");
+                Tools.DebugHelperPrint(splittedLine[2]+"|VAL", true, "iZsetup.enableFinerDebug");
+                Tools.DebugHelperPrint(splittedLine[3]+"|CMNT", true, "iZsetup.enableFinerDebug");
+                //DBG_STOP
+                }
+                catch(Exception e)
+                {
+                    
+                }
+                if(!splittedLine[0].equals("000"))
+                {
+                    groupID=splittedLine[0];
+                    if(!previousGRPID.equals(groupID)&&!previousGRPID.equals("000"))
+                    {
+                        groupsplitted.put(previousGRPID, SubGroup);//Einlagern der abgeschlossenen gruppe
+                        SubGroup = new ArrayList<>();//resetten für neue daten;
+                    }
+                    SubGroup.add(line);
+                    previousGRPID=groupID;
+
+                }
+            }
+        }
+        groupsplitted.put(previousGRPID, SubGroup);//die letzte auch noch einflanschen
+        String[] groupIDs = groupsplitted.keySet().toArray(new String[0]);
+        ArrayList<String> lenabledGroupIDs = new ArrayList<>();
+        ArrayList<String> lGroups = new ArrayList<>();
+        for (String id : groupIDs)
+        {
+            lenabledGroupIDs.add(id);
+            
+            if(groupsplitted.get(id).get(0).split("\\|")[1].equalsIgnoreCase("grp")||groupsplitted.get(id).get(0).split("\\|")[1].equalsIgnoreCase("group"))
+            {
+                String groupname = groupsplitted.get(id).get(0).split("\\|")[2];//angelt sich erste zeile der Gruppe davon 3. Wert
+                                                                                //wenn nicht mit grp oder group eingeleitetdann immer ausgeführt
+                lGroups.add(id+"|"+groupname);
+            }
+        }
+        Groups = lGroups.toArray(new String[0]);
+        enabledGroupIDs=lenabledGroupIDs.toArray(new String[0]);
+    }
+    public void setGroupState(String grpid,boolean state)
+    {
+        boolean exists = false;
+        for (int i = 0; i < enabledGroupIDs.length; i++)
+        {
+            String id = enabledGroupIDs[i];
+            if(grpid.equals(id))
+            {
+                exists=true;
+                if(!state)
+                {
+                    enabledGroupIDs[i]="";
+                }
+            }
+        }
+        ArrayList<String> newGrps = new ArrayList<>();
+        for (String cnt : enabledGroupIDs)
+        {
+            if(cnt.length()>1)
+            {
+                newGrps.add(cnt);
+            }
+        }
+        if(!exists&&state)
+        {
+            newGrps.add(grpid);
+        }
+        enabledGroupIDs = newGrps.toArray(new String[0]);
+    }
+    public String[] getInstallQueue()
+    {
+        return InstallQueue;
+    }
+    
+    
+    public void createQueue()
+    {
+        ArrayList<String> TempQueue = new ArrayList<>();
+        Arrays.sort(enabledGroupIDs);
+        //System.err.println("nop");
+        for (String id : enabledGroupIDs)
+        {
+            ArrayList<String> loadedGroup = groupsplitted.get(id);
+            for (String lines : loadedGroup)
+            {
+                String[] linedata =lines.split("\\|");
+                if(linedata[1].equalsIgnoreCase("msg")||linedata[1].equalsIgnoreCase("exec")||linedata[1].equalsIgnoreCase("requireExec"))
+                {
+                    TempQueue.add(linedata[2]);
+                }
+            }
+        }
+        InstallQueue = TempQueue.toArray(new String[0]);
+    }
+}

+ 133 - 0
IZSetup/src/de/nplusc/izc/InstallPak/InstallProgressGui.form

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+    <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+      <Dimension value="[852, 331]"/>
+    </Property>
+    <Property name="resizable" type="boolean" value="false"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+    <SyntheticProperty name="generateCenter" type="boolean" value="false"/>
+  </SyntheticProperties>
+  <Events>
+    <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentMoved"/>
+  </Events>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="jSeparator3" min="-2" pref="50" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jSeparator4" max="32767" attributes="0"/>
+                  </Group>
+                  <Component id="ptotal" alignment="0" max="32767" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                          <Component id="lblMsg" alignment="0" max="32767" attributes="0"/>
+                          <Component id="btnExit" alignment="0" max="32767" attributes="0"/>
+                          <Component id="jScrollPane1" alignment="0" pref="787" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="pbarPacks" pref="39" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="ptotal" min="-2" pref="31" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="lblMsg" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="22" max="32767" attributes="0"/>
+                      <Component id="jScrollPane1" min="-2" pref="187" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="btnExit" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Component id="pbarPacks" max="32767" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                  <Component id="jSeparator3" min="-2" pref="10" max="-2" attributes="0"/>
+                  <Component id="jSeparator4" min="-2" pref="10" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="tempLog">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="lblMsg">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Starte Installixierung"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JProgressBar" name="ptotal">
+    </Component>
+    <Component class="javax.swing.JButton" name="btnExit">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Beenden"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnExitActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblVID">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="izSetup 1.0.0 (c) 2012 iZc"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JProgressBar" name="pbarPacks">
+      <Properties>
+        <Property name="minimum" type="int" value="10"/>
+        <Property name="orientation" type="int" value="1"/>
+        <Property name="value" type="int" value="3"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator3">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator4">
+    </Component>
+  </SubComponents>
+</Form>

+ 386 - 0
IZSetup/src/de/nplusc/izc/InstallPak/InstallProgressGui.java

@@ -0,0 +1,386 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.IOtools.FileTK;
+import de.nplusc.izc.tools.UiToolz.BootStrap;
+import de.nplusc.izc.tools.baseTools.Lock;
+import de.nplusc.izc.tools.baseTools.Messagers;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.awt.Point;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import javax.swing.UIManager;
+        
+
+/**
+ *
+ * @author LH
+ */
+public class InstallProgressGui extends javax.swing.JFrame
+{
+    InstallManager im = InstallManager.Main;
+    private boolean autoExit = true;
+    private boolean packMode = false;//ändert GUI ein hisschen und arbeitet ne zweite queue ab
+    private String[] packList;
+    private Lock l = new Lock();
+    /**
+     * Creates new form InstallProgressGui
+     */
+    public InstallProgressGui()
+    {
+
+        initComponents();
+        updatePosition();
+        btnExit.setVisible(false);
+        pbarPacks.setVisible(false);
+        startInstallation();
+        
+    }
+    private void updatePosition()
+    {
+        lblVID.setText(InstallManager.VERSION_GUI_TXT);
+        Point p = new Point(ModeSel.topleft_coords_x, ModeSel.topleft_coords_y);
+        setLocation(p);
+    }
+    public InstallProgressGui(String[] packQueue)
+    {
+        Tools.DebugHelperPrint("PAck", true, "iZsetup.enableCoreDebug");
+        initComponents();
+        updatePosition();
+        pbarPacks.setVisible(true);
+        btnExit.setVisible(false);
+        packList = packQueue;
+        startPackInstall();
+    }
+    public void startPackInstall()
+    {
+        ArrayList<String> packListCopyTemp = new ArrayList<>();
+        for (String qe : packList)
+        {
+            String comparer = qe.substring(0,9);
+            if(comparer.equalsIgnoreCase("packfile:"))
+                packListCopyTemp.add(qe);
+        }
+        pbarPacks.setMaximum(packListCopyTemp.size());
+        pbarPacks.setMinimum(0);
+        pbarPacks.setValue(0);
+        packMode=true;
+        autoExit=false;
+        new Thread(new Runnable()
+        {
+            @Override
+            @SuppressWarnings("SleepWhileInLoop")
+            public void run()
+            {
+                try
+                {
+                    BootStrap.bootLock.lock();
+                    BootStrap.bootLock.unlock();
+                }
+                catch (InterruptedException ex)
+                {
+                    ex.printStackTrace();
+                }
+                for (String packcmd : packList)
+                {
+                    im =new InstallManager();
+                    String fileToHandle = packcmd.substring(9);
+                    //substring(9)
+                    String comparer = packcmd.substring(0,9);
+                    String metadata = packcmd.substring(9);
+                    if(comparer.equalsIgnoreCase("packfile:"))
+                    {
+                        im.setInstallScript(fileToHandle);
+                        im.createQueue();
+                        try
+                        {
+                            Tools.DebugHelperPrint("", true, "iZsetup.enableCoreDebug");
+                            l.lock();//das 2. geht erst durch wenn von wo anderst geunlockt wurde;
+                            startInstallation();
+                            
+                            l.lock();
+                            Tools.DebugHelperPrint("UnloxDetected", true, "iZsetup.enableCoreDebug");
+                            l.unlock();    
+                        }
+                        catch (InterruptedException ex)
+                        {
+                            ex.printStackTrace();
+                        }
+                        pbarPacks.setValue(pbarPacks.getValue()+1);
+                    }
+                    if(comparer.equalsIgnoreCase("waitdisk:"))
+                    {
+                        Tools.DebugHelperPrint("WaitDetected;", true, "iZsetup.enableCoreDebug");
+                        boolean rightDisk = FileTK.checkDirExist(fileToHandle);
+                        while(!rightDisk)
+                        {
+                            Messagers.SingleLineMsg("Erwarte DIsk:"+metadata, "OKee...");
+                            rightDisk = FileTK.checkDirExist(fileToHandle);
+                        }
+                        
+                    }
+                    
+                }
+                btnExit.setVisible(true);
+                
+            }
+        }).start();
+    }
+    
+    public void startInstallation()
+    {
+
+        int count = im.getInstallQueue().length;
+        ptotal.setMinimum(0);
+        ptotal.setValue(0);
+        ptotal.setMaximum((count/2));
+        if(packMode)
+            ptotal.setMaximum((count/2)-1);
+        
+        new Thread(new Runnable()
+        {
+
+            @Override
+            @SuppressWarnings("SleepWhileInLoop")
+            public void run()
+            {
+                try
+                {
+                    BootStrap.bootLock.lock();
+                    BootStrap.bootLock.unlock();
+                }
+                catch (InterruptedException ex)
+                {
+                    ex.printStackTrace();
+                }
+                String[] queue = im.getInstallQueue();
+                for (int i = 0; i + 1 < queue.length; i++)
+                {
+                    String msg = queue[i];
+                    tempLog.append(lblMsg.getText() + "\n");//Trockentest für Cmd-s
+                    lblMsg.setText(msg);
+                    i++;
+                    String cmd = queue[i];
+                    if(!cmd.equalsIgnoreCase("wait"))
+                    {
+                        if(!cmd.substring(0,5).equalsIgnoreCase("Copy:"))
+                        {
+                        Tools.DebugHelperPrint(msg, true, "iZsetup.enableFinerDebug");
+                        Tools.DebugHelperPrint(cmd, true, "iZsetup.enableFinerDebug");
+                        Tools.runSingleCmd(true,true,false,tempLog,cmd);//scharfgesetzt
+                                            //TODO: muss an J7u17 anpassen
+                        }
+                        else
+                        {
+                            cmd = cmd.substring(5);
+                            String[] cmdspl = cmd.split(">");
+                            //File src = new File(cmdspl[0]);
+                            File trg = new File(FileTK.getFilePath(cmdspl[1]));
+                            trg.mkdirs();
+                            try
+                            {
+                                Files.copy(Paths.get(cmdspl[0]), Paths.get(cmdspl[1]), StandardCopyOption.REPLACE_EXISTING);
+                                //copy:src>trg
+                            }
+                            catch (IOException ex)
+                            {
+                                ex.printStackTrace();
+                            }
+                        }
+                    }
+                    else
+                    {
+                        autoExit = false;
+                    }
+                    try
+                    {
+                        Thread.sleep(1000);
+                    }
+                    catch (InterruptedException ex)
+                    {
+                        //ex.printStackTrace();
+                    }
+                    ptotal.setValue(ptotal.getValue()+1);
+                }
+                Tools.DebugHelperPrint("...", true, "iZsetup.enableCoreDebug");
+                //lblMsg.setText("finito");
+                if(!packMode)
+                    btnExit.setVisible(true);
+                if(autoExit)
+                {
+                    try
+                    {
+                        Thread.sleep(20000);
+                    }
+                    catch (InterruptedException ex)
+                    {
+                        ex.printStackTrace();
+                    }
+                }
+                else
+                {
+                    if(!packMode)
+                    {
+                        System.exit(0);
+                    }
+                    else
+                    {
+                        Tools.DebugHelperPrint("unlox", true, "iZsetup.enableCoreDebug");
+                        l.unlock();
+                    }
+                }
+            }
+        }).start();
+
+    }
+
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents()
+    {
+
+        jScrollPane1 = new javax.swing.JScrollPane();
+        tempLog = new javax.swing.JTextArea();
+        lblMsg = new javax.swing.JLabel();
+        ptotal = new javax.swing.JProgressBar();
+        btnExit = new javax.swing.JButton();
+        lblVID = new javax.swing.JLabel();
+        pbarPacks = new javax.swing.JProgressBar();
+        jSeparator3 = new javax.swing.JSeparator();
+        jSeparator4 = new javax.swing.JSeparator();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        setMinimumSize(new java.awt.Dimension(852, 331));
+        setResizable(false);
+        addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                formComponentMoved(evt);
+            }
+        });
+
+        tempLog.setColumns(20);
+        tempLog.setRows(5);
+        jScrollPane1.setViewportView(tempLog);
+
+        lblMsg.setText("Starte Installixierung");
+
+        btnExit.setText("Beenden");
+        btnExit.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                btnExitActionPerformed(evt);
+            }
+        });
+
+        lblVID.setText("izSetup 1.0.0 (c) 2012 iZc");
+
+        pbarPacks.setMinimum(10);
+        pbarPacks.setOrientation(1);
+        pbarPacks.setValue(3);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lblVID)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jSeparator4))
+                    .addComponent(ptotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                            .addComponent(lblMsg, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(btnExit, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 787, Short.MAX_VALUE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(pbarPacks, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(ptotal, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblMsg)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE)
+                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(btnExit))
+                    .addComponent(pbarPacks, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(lblVID)
+                    .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void btnExitActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnExitActionPerformed
+    {//GEN-HEADEREND:event_btnExitActionPerformed
+        System.exit(0);
+    }//GEN-LAST:event_btnExitActionPerformed
+
+    private void formComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentMoved
+    {//GEN-HEADEREND:event_formComponentMoved
+        ModeSel.topleft_coords_x = getLocation().x;
+        ModeSel.topleft_coords_y = getLocation().x;
+    }//GEN-LAST:event_formComponentMoved
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[])
+    {
+                        try {
+	    UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
+	} catch( Exception e ) { 
+	    //e.printStackTrace();
+	}
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                new InstallProgressGui().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton btnExit;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JSeparator jSeparator3;
+    private javax.swing.JSeparator jSeparator4;
+    private javax.swing.JLabel lblMsg;
+    private javax.swing.JLabel lblVID;
+    private javax.swing.JProgressBar pbarPacks;
+    private javax.swing.JProgressBar ptotal;
+    private javax.swing.JTextArea tempLog;
+    // End of variables declaration//GEN-END:variables
+}

+ 219 - 0
IZSetup/src/de/nplusc/izc/InstallPak/ModeSel.java

@@ -0,0 +1,219 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+import de.nplusc.izc.tools.IOtools.FileTK;
+import de.nplusc.izc.tools.UiToolz.BootStrap;
+import de.nplusc.izc.tools.UiToolz.UiTools;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.io.File;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+/**
+ *
+ * @author LH
+ */
+public class ModeSel// extends javax.swing.JFrame
+{
+    public static boolean silentMode=false;
+    public static boolean packMode = false;
+    public static String filePath = "";
+    public static boolean isBundle = false;
+    public static int topleft_coords_x = -1;//Detektion gegen diese Werte. -1=nicht initialisiert
+    public static int topleft_coords_y = -1;//^
+    private static String[] pargs;
+    
+    
+    public static String[] getArgs()
+    {
+        return pargs;
+    }
+    
+    
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[])
+    {
+        pargs=args;
+        String libpath = "";
+        try
+        {
+            //http://www.softicons.com/free-icons/application-icons/installer-icon-by-macuser64/installer-icon
+            //http://www.iconfinder.com/icondetails/61818/128/box_icon
+            //http://openclipart.org/detail/172351/ppa-icon-by-myromance123-172351
+            
+            //installs to C:\program files\iZsetup\
+            
+            //setDefauötPosition
+            //852, 331
+            
+            //HAX_ALERT
+            
+           libpath = FileTK.getFilePath(new File(ModeSel.class.getProtectionDomain()
+                   .getCodeSource().getLocation().toURI().getPath()).getPath());
+        }
+        catch (URISyntaxException ex)
+        {
+            ex.printStackTrace();
+        }
+        
+        
+        System.setProperty( "java.library.path", libpath);
+ 
+        Field fieldSysPath;
+        try
+        {
+        fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
+        fieldSysPath.setAccessible( true );
+        fieldSysPath.set( null, null );
+        }
+                catch (NoSuchFieldException | SecurityException |IllegalAccessException ex)
+        {
+            ex.printStackTrace();
+        }
+        
+        
+        
+        
+        topleft_coords_x = (UiTools.getScreenRes()[0]/2)-(852/2);
+        topleft_coords_y = (UiTools.getScreenRes()[1]/2)-(330/2);
+        
+        //args = new String[]{"-file",""
+        for (int i = 0; i < args.length; i++)
+        {
+            System.err.println(i+"|"+args[i]);
+            
+        }
+        //String file = "default.izsetup";
+        
+
+        //if(izsetupReader.getSysSpezSetupFile(file,true)!=null)
+        //{
+          //  packMode=true;
+        //}
+        //DSAB_FOR_DBG
+        //if(izsetupReader.getSysSpezSetupFile(file)==null&&!args[0].equals("-file"))
+        //{
+        //    return;
+        //}
+        String file="";
+        boolean enableFile = false;
+        if(args.length>1)
+        {
+            //Tester.main(args);
+            if(args[0].equals("-file"))
+            {
+                file=args[1];
+                enableFile = true;
+                //-file gamestls.izsetup --silent
+            }
+            if(args[0].equals("-bundle"))
+            {
+                file=args[1];
+                isBundle = true;
+                enableFile = true;
+                //-file gamestls.izsetup --silent
+            }
+            else
+            {
+                isBundle=false;
+            }
+            for (String arg : args)
+            {
+                if(arg.equals("--silent"))
+                {
+
+                    silentMode=true;
+                    //packMode=false;
+                    if(izsetupReader.getSysSpezSetupFile(file,true)!=null)
+                    {
+                        packMode=true;
+                    }
+                    else
+                    {
+                        packMode=false;
+                    }
+                }
+                if(arg.equals("--pack"))
+                {
+                    packMode=true;
+
+                }
+            }
+        }
+        //DBG_START
+        //silentMode=false;
+        //packMode=false;
+        if(!enableFile)
+        {
+            System.out.println("Usage help for iZsetup CLI");
+            System.out.println("izsetup [-file|-bundle] <path> <options>");
+            System.out.println("-file for izsetup  or izpackage (requires --pack option to use izpackage");
+            System.out.println("--pack file is packfile");
+            System.out.println("--silent unattended mode");
+            return;
+        }
+       // isBundle = true;
+        //file="default.izbundle";
+        //DBG_END
+        Tools.DebugHelperPrint(file, true, "iZsetup.enableCoreDebug");
+        Tools.DebugHelperPrint("isBundle+|+packMode+|+silentMode", true, "iZsetup.enableCoreDebug");
+        Tools.DebugHelperPrint(isBundle+"|"+packMode+"|"+silentMode, true, "iZsetup.enableCoreDebug");
+        if(!isBundle&&!packMode)
+        {
+            InstallManager.Main.setInstallScript(file);
+        }
+        filePath=file;
+        try {
+	    UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
+	} catch( ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e ) { 
+	    //e.printStackTrace();
+	}
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            @SuppressWarnings("ResultOfObjectAllocationIgnored")
+            @Override
+            public void run()
+            {
+                System.err.println(packMode+"|"+silentMode);
+                if(packMode&&!silentMode)
+                {
+                    new BootStrap(new PackagerGUI());
+                }
+                else
+                {
+                    if(silentMode)
+                    {
+                        if(!packMode)
+                        {
+                            InstallManager.Main.createQueue();                    
+                            new BootStrap(new InstallProgressGui());
+                        }
+                        else
+                        {
+                            PackManager p = new PackManager();
+                            p.loadPackageData(filePath);
+                            p.createQueue();
+                            new BootStrap(new InstallProgressGui(p.getQueue()));
+                        }
+                    }
+                    else
+                    {
+                        if(isBundle)
+                        {
+                            new BootStrap(new BundleVerifyGui(filePath));
+                        }
+                        else
+                        {
+                        new BootStrap(new ModeSelectionGUI());
+                        }
+                    }
+                }
+            }
+        });
+    }             
+}

+ 115 - 0
IZSetup/src/de/nplusc/izc/InstallPak/ModeSelectionGUI.form

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+    <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+      <Dimension value="[852, 331]"/>
+    </Property>
+    <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+      <Dimension value="[852, 331]"/>
+    </Property>
+    <Property name="resizable" type="boolean" value="false"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </SyntheticProperties>
+  <Events>
+    <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentMoved"/>
+  </Events>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="0" pref="274" max="32767" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="btnInstall" min="-2" pref="334" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="234" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="btnCust" min="-2" pref="141" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="325" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="jSeparator1" min="-2" pref="50" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jSeparator2" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="0">
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="-2" pref="76" max="-2" attributes="0"/>
+                      <Component id="btnInstall" min="-2" pref="104" max="-2" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Component id="btnCust" min="-2" pref="36" max="-2" attributes="0"/>
+                      <EmptySpace pref="76" max="32767" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jSeparator1" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+                          <Component id="jSeparator2" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="32767" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="btnInstall">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Installieren"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnInstallActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JButton" name="btnCust">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Anpassen"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnCustActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblVID">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="izSetup 1.0.0 (c) 2012 iZc"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+    </Component>
+  </SubComponents>
+</Form>

+ 159 - 0
IZSetup/src/de/nplusc/izc/InstallPak/ModeSelectionGUI.java

@@ -0,0 +1,159 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+import de.nplusc.izc.tools.UiToolz.BootStrap;
+import java.awt.Point;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+/**
+ *
+ * @author LH
+ */
+public class ModeSelectionGUI extends javax.swing.JFrame
+{
+
+    /**
+     * Creates new form ModeSel
+     */
+    public ModeSelectionGUI()
+    {
+        initComponents();
+        updatePosition();
+        lblVID.setText(InstallManager.VERSION_GUI_TXT);
+    }
+    private void updatePosition()
+    {
+        Point p = new Point(ModeSel.topleft_coords_x, ModeSel.topleft_coords_y);
+        setLocation(p);
+    }
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents()
+    {
+
+        btnInstall = new javax.swing.JButton();
+        btnCust = new javax.swing.JButton();
+        jSeparator1 = new javax.swing.JSeparator();
+        lblVID = new javax.swing.JLabel();
+        jSeparator2 = new javax.swing.JSeparator();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        setMaximumSize(new java.awt.Dimension(852, 331));
+        setMinimumSize(new java.awt.Dimension(852, 331));
+        setResizable(false);
+        addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                formComponentMoved(evt);
+            }
+        });
+
+        btnInstall.setText("Installieren");
+        btnInstall.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                btnInstallActionPerformed(evt);
+            }
+        });
+
+        btnCust.setText("Anpassen");
+        btnCust.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                btnCustActionPerformed(evt);
+            }
+        });
+
+        lblVID.setText("izSetup 1.0.0 (c) 2012 iZc");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(0, 274, Short.MAX_VALUE)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                .addComponent(btnInstall, javax.swing.GroupLayout.PREFERRED_SIZE, 334, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(234, 234, 234))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                .addComponent(btnCust, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(325, 325, 325))))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lblVID)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jSeparator2)
+                        .addContainerGap())))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(76, 76, 76)
+                        .addComponent(btnInstall, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(btnCust, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 76, Short.MAX_VALUE)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(lblVID)))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void btnCustActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnCustActionPerformed
+    {//GEN-HEADEREND:event_btnCustActionPerformed
+       SelectionGUI.main(null);
+       this.setVisible(false);
+    }//GEN-LAST:event_btnCustActionPerformed
+
+    private void btnInstallActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnInstallActionPerformed
+    {//GEN-HEADEREND:event_btnInstallActionPerformed
+        InstallManager.Main.createQueue();
+        InstallProgressGui.main(null);
+        this.setVisible(false);
+    }//GEN-LAST:event_btnInstallActionPerformed
+
+    private void formComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentMoved
+    {//GEN-HEADEREND:event_formComponentMoved
+        ModeSel.topleft_coords_x = getLocation().x;
+        ModeSel.topleft_coords_y = getLocation().x;
+    }//GEN-LAST:event_formComponentMoved
+   public static void main(String args[])
+    {
+        try {
+	    UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
+	} catch( ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e ) { 
+	    //e.printStackTrace();
+	}
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton btnCust;
+    private javax.swing.JButton btnInstall;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JSeparator jSeparator2;
+    private javax.swing.JLabel lblVID;
+    // End of variables declaration//GEN-END:variables
+}

+ 278 - 0
IZSetup/src/de/nplusc/izc/InstallPak/PackManager.java

@@ -0,0 +1,278 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.IOtools.FileTK;
+import de.nplusc.izc.tools.IOtools.registryReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+/**
+ *
+ * @author LH
+ */
+public class PackManager
+{
+    private HashMap<String,ArrayList<String>> groupsplitted = new HashMap<>();
+    private String[] installingPacks,AllPacks,DetectedPacks,queue;
+    
+    /**
+     * Lädt die Liste aller Packs aus der aktiven Datei
+     * @return PAckliste im FOrmat ID|Name
+     * 
+     */
+    public String[] getPackList()
+    {
+        String[] ret = new String[AllPacks.length];
+        for (int i=0;i<AllPacks.length;i++)
+        {
+            String id=AllPacks[i];
+            ArrayList<String> group=groupsplitted.get(id);
+            for (String row : group)
+            {
+                String[] rowSplit = row.split("\\|");
+                if(rowSplit[1].equalsIgnoreCase("pack"))
+                    ret[i] = id+"|"+rowSplit[2];
+            }
+        }
+        return ret;
+    }
+    
+    public void loadPackageData(String path)
+    {
+        String[] data = izsetupReader.getSysSpezSetupFile(path,true,true);
+        String groupID="000"; 
+        String previousGRPID ="000";
+        
+        ArrayList<String> SubGroup = new ArrayList<>();
+        for (String line : data)
+        {
+            if(!(line.length()<6))
+            {
+                String[] splittedLine = line.split("\\|");
+                if(!splittedLine[0].equals("000"))
+                {
+                    groupID=splittedLine[0];
+                    if(!previousGRPID.equals(groupID)&&!previousGRPID.equals("000"))
+                    {
+                        groupsplitted.put(previousGRPID, SubGroup);//Einlagern der abgeschlossenen gruppe
+                        SubGroup = new ArrayList<>();//resetten für neue daten;
+                    }
+                    SubGroup.add(line);
+                    previousGRPID=groupID;
+
+                }
+            }
+        }
+        groupsplitted.put(previousGRPID, SubGroup);//die letzte auch noch einflanschen
+        String[] groupIDs = groupsplitted.keySet().toArray(new String[0]);
+        Arrays.sort(groupIDs);
+        AllPacks = groupIDs;
+        checkForpackInstalled();
+        ArrayList<String> installables = new ArrayList<>();
+        for (String id : AllPacks)
+        {
+            if(!packIsInstalled(id))
+                installables.add(id);
+        }
+        installingPacks = installables.toArray(new String[0]);
+        Arrays.sort(installingPacks);
+    }
+
+    public void setPackInstallState(String packid, boolean state)
+    {
+        boolean exists = false;
+        for (int i = 0; i < installingPacks.length; i++)
+        {
+            String id = installingPacks[i];
+            if(packid.equals(id))
+            {
+                exists=true;
+                if(!state)
+                {
+                    installingPacks[i]="";
+                }
+            }
+        }
+        ArrayList<String> newGrps = new ArrayList<>();
+        for (String cnt : installingPacks)
+        {
+            if(cnt.length()>1)
+            {
+                newGrps.add(cnt);
+            }
+        }
+        if(!exists&&state)
+        {
+            newGrps.add(packid);
+        }
+        installingPacks = newGrps.toArray(new String[0]);
+        newGrps = new ArrayList<>();
+        for (String cnt : installingPacks)
+        {
+            if(packIsInstallable(cnt))
+                newGrps.add(cnt);
+            
+        }
+        installingPacks = newGrps.toArray(new String[0]);
+    }
+    public boolean packIsInstallable(String packid)
+    {
+        return packIsInstallable(packid, false);
+    }
+    public boolean packIsInstallable(String packid,boolean blocksItself)
+    {
+        String reqPack = packDependency(packid);
+        
+        for (String pack : DetectedPacks)//Detektiere obDependency installiert(dependency erfüllt wenn pack bereits installiert
+        {
+            if(reqPack.equalsIgnoreCase(pack))
+                return true;
+        }
+        if(blocksItself)
+        {
+            for (String pack : installingPacks)//detektiere obDependency in installierliste
+            {
+                if(packid.equalsIgnoreCase(pack))
+                    return false;
+            }
+        }
+        for (String pack : installingPacks)//detektiere obDependency in installierliste
+        {
+            if(reqPack.equalsIgnoreCase(pack)&&packIsInstallable(reqPack))
+                return true;
+        }
+        if(reqPack.equals("none"))
+            return true;
+        return false;
+    }
+    
+    public boolean packIsInstalled(String packid)
+    {
+        for (String cntnt : DetectedPacks)
+        {
+            if(cntnt.equalsIgnoreCase(packid))
+                return true;
+        }
+        return false;
+    }
+    
+    
+    
+    public boolean packIsScheduled(String packid)
+    {
+        for (String cntnt : installingPacks)
+        {
+            if(cntnt.equalsIgnoreCase(packid))
+                return true;
+        }
+        return false;
+    }
+   
+    public String packDependency(String packid)
+    {
+        ArrayList<String> selectedPack = groupsplitted.get(packid);
+        //002|req|001|nummer des benötigten packs//kann weitere erfordernwenn
+        for (String line : selectedPack)
+        {
+            String[] linesegs = line.split("\\|");
+            if(linesegs[1].equalsIgnoreCase("req"))
+                return linesegs[2];
+        }
+        
+        
+        return "none";
+    }
+
+    //005|Description|Tools für die games aus dem Package
+    public String getPackDescription(String packid)
+    {
+        ArrayList<String> selectedPack = groupsplitted.get(packid);
+        for (String line : selectedPack)
+        {
+            String[] linesegs = line.split("\\|");
+            if(linesegs[1].equalsIgnoreCase("Description"))
+                return linesegs[2];
+        }
+        return "Error 0x0404: keine Beschreiubung gefunden";
+    }
+    
+    public String getPackName(String packid)
+    {
+        ArrayList<String> selectedPack = groupsplitted.get(packid);
+        for (String line : selectedPack)
+        {
+            String[] linesegs = line.split("\\|");
+            if(linesegs[1].equalsIgnoreCase("pack"))
+                return linesegs[2];
+        }
+        return "Error 0x0404: kein Name gefunden";
+    }
+    
+    
+    private void checkForpackInstalled()
+    {
+        ArrayList<String> installedPack = new ArrayList<>();
+        for (int i=0;i<AllPacks.length;i++)
+        {
+            String id=AllPacks[i];
+            ArrayList<String> group=groupsplitted.get(id);
+            for (String row : group)
+            {
+                String[] rowSplit = row.split("\\|");
+                if(rowSplit[1].equalsIgnoreCase("detectInstall"))
+                {
+                    String detecString = rowSplit[2];
+                    //CMM|File:// benutzt den DateiExistiert-operator
+                    //CMM|Reg:// detektiert unter Win auf Exitenz von Regwert
+                    if(detecString.substring(0,7).equalsIgnoreCase("File://"))
+                    {
+                        String detecpart = detecString.substring(7);
+                        if(FileTK.checkDirExist(detecpart))
+                        {
+                            installedPack.add(id);
+                        }
+                    }
+                    if(detecString.substring(0,6).equalsIgnoreCase("Reg://"))
+                    {
+                        String detecpart = detecString.substring(6);
+                        if(registryReader.checkExistenceOfRegKey(detecpart)||registryReader.checkExistenceOfRegKeyEntry(detecpart))
+                        {
+                            installedPack.add(id);
+                        }
+                    }
+                }
+            }
+        }
+        DetectedPacks = installedPack.toArray(new String[0]);
+    }
+    public void createQueue()
+    {
+        Arrays.sort(installingPacks);
+        ArrayList<String> queuetmp = new ArrayList<>();
+        for (String id : installingPacks)
+        {
+            ArrayList<String> grpldr =groupsplitted.get(id);
+            for (String line : grpldr)
+            {
+                String[] data = line.split("\\|");
+                if(data[1].equalsIgnoreCase("packfile"))
+                {
+                    queuetmp.add("packfile:"+data[2]);
+                }
+                if(data[1].startsWith("waitdisk:"))
+                {
+                    queuetmp.add("waitdisk:"+data[2]+"|"+data[1].substring(9));
+                }
+            }
+        }
+        queue=queuetmp.toArray(new String[0]);
+    }
+    public String[] getQueue()
+    {
+        return queue;
+    } 
+}

+ 199 - 0
IZSetup/src/de/nplusc/izc/InstallPak/PackagerGUI.form

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </SyntheticProperties>
+  <Events>
+    <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentMoved"/>
+  </Events>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel1" min="-2" pref="225" max="-2" attributes="0"/>
+                          <Component id="jScrollPane1" alignment="0" min="-2" pref="216" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" attributes="0">
+                              <EmptySpace min="-2" pref="34" max="-2" attributes="0"/>
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Component id="packStatus" min="-2" max="-2" attributes="0"/>
+                                  <Component id="packTitle" min="-2" pref="429" max="-2" attributes="0"/>
+                              </Group>
+                          </Group>
+                          <Group type="102" alignment="1" attributes="0">
+                              <EmptySpace type="unrelated" pref="12" max="32767" attributes="0"/>
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Component id="jButton1" min="-2" pref="597" max="-2" attributes="0"/>
+                                  <Component id="jScrollPane2" min="-2" pref="584" max="-2" attributes="0"/>
+                              </Group>
+                              <EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="jSeparator3" min="-2" pref="50" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
+                      <Component id="jSeparator1" min="-2" pref="642" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
+                      <Component id="packStatus" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="packTitle" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Component id="jScrollPane2" min="-2" pref="137" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
+                      <Component id="jButton1" min="-2" pref="72" max="-2" attributes="0"/>
+                  </Group>
+                  <Component id="jScrollPane1" min="-2" pref="249" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="20" max="32767" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jSeparator1" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+                  <Component id="lblVID" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Component id="jSeparator3" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTable" name="tblSelector">
+          <Properties>
+            <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
+              <Table columnCount="3" rowCount="1">
+                <Column editable="false" title="meta:id" type="java.lang.Object"/>
+                <Column editable="false" title="Name" type="java.lang.Object"/>
+                <Column editable="false" title="Status" type="java.lang.Object"/>
+              </Table>
+            </Property>
+            <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor" preCode="tblSelector.setColumnModel(new HidableTableColumnModel(tblSelector.getColumnModel()));">
+              <TableColumnModel selectionModel="0">
+                <Column maxWidth="-1" minWidth="-1" prefWidth="30" resizable="false">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+                <Column maxWidth="80" minWidth="80" prefWidth="80" resizable="true">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+                <Column maxWidth="-1" minWidth="-1" prefWidth="80" resizable="true">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+              </TableColumnModel>
+            </Property>
+            <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
+              <TableHeader reorderingAllowed="true" resizingAllowed="true"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tblSelectorMouseClicked"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="packDesc">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+          <Events>
+            <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="packDescComponentMoved"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="packTitle">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="{PackTitle}"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Installation starten"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="packStatus">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="{DepDetails}"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Doppelklicken um Status zu &#xe4;ndern"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblVID">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="izSetup 1.0.0 (c) 2012 iZc"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator3">
+    </Component>
+  </SubComponents>
+</Form>

+ 376 - 0
IZSetup/src/de/nplusc/izc/InstallPak/PackagerGUI.java

@@ -0,0 +1,376 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.baseTools.HidableTableColumnModel;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.awt.Point;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ *
+ * @author LH
+ */
+public class PackagerGUI extends javax.swing.JFrame
+{
+
+    /**
+     * Creates new form PackagerGUI
+     */
+    private PackManager p;
+    public PackagerGUI()
+    {
+        initComponents();
+        updatePosition();
+        lblVID.setText(InstallManager.VERSION_GUI_TXT);
+        packStatus.setVisible(false);
+        p = new PackManager();
+        p.loadPackageData(ModeSel.filePath);
+        ((HidableTableColumnModel)(tblSelector.getColumnModel())).setColumnVisible(0, false);
+        //^auskommentieren um id-spalte sichtbar zu bekommenTempcode fürs Testen
+        int rows=1;
+        String[] tablefill = p.getPackList();
+        for (int i = 0; i < tablefill.length; i++)
+        {
+            String GRP = tablefill[i];
+            String[] data = GRP.split("\\|");
+            if(i>=rows)
+                ((DefaultTableModel)tblSelector.getModel()).addRow(new String[3]);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[0], i, 0);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[1], i, 1);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt("Wird installiert", i, 2);
+            if(p.packIsInstalled(data[0]))
+            {
+                ((DefaultTableModel)tblSelector.getModel()).setValueAt("Bereits installiert", i, 2);
+            }
+        }
+    }
+    private void updatePosition()
+    {
+        Point p = new Point(ModeSel.topleft_coords_x, ModeSel.topleft_coords_y);
+        setLocation(p);
+    }
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents()
+    {
+
+        jScrollPane1 = new javax.swing.JScrollPane();
+        tblSelector = new javax.swing.JTable();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        packDesc = new javax.swing.JTextArea();
+        packTitle = new javax.swing.JLabel();
+        jButton1 = new javax.swing.JButton();
+        packStatus = new javax.swing.JLabel();
+        jLabel1 = new javax.swing.JLabel();
+        lblVID = new javax.swing.JLabel();
+        jSeparator1 = new javax.swing.JSeparator();
+        jSeparator3 = new javax.swing.JSeparator();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                formComponentMoved(evt);
+            }
+        });
+
+        tblSelector.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][]
+            {
+                {null, null, null}
+            },
+            new String []
+            {
+                "meta:id", "Name", "Status"
+            }
+        )
+        {
+            boolean[] canEdit = new boolean []
+            {
+                false, false, false
+            };
+
+            public boolean isCellEditable(int rowIndex, int columnIndex)
+            {
+                return canEdit [columnIndex];
+            }
+        });
+        tblSelector.addMouseListener(new java.awt.event.MouseAdapter()
+        {
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                tblSelectorMouseClicked(evt);
+            }
+        });
+        jScrollPane1.setViewportView(tblSelector);
+        tblSelector.setColumnModel(new HidableTableColumnModel(tblSelector.getColumnModel()));
+        tblSelector.getColumnModel().getColumn(0).setResizable(false);
+        tblSelector.getColumnModel().getColumn(0).setPreferredWidth(30);
+        tblSelector.getColumnModel().getColumn(1).setMinWidth(80);
+        tblSelector.getColumnModel().getColumn(1).setPreferredWidth(80);
+        tblSelector.getColumnModel().getColumn(1).setMaxWidth(80);
+        tblSelector.getColumnModel().getColumn(2).setPreferredWidth(80);
+
+        packDesc.setColumns(20);
+        packDesc.setRows(5);
+        packDesc.addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                packDescComponentMoved(evt);
+            }
+        });
+        jScrollPane2.setViewportView(packDesc);
+
+        packTitle.setText("{PackTitle}");
+
+        jButton1.setText("Installation starten");
+        jButton1.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                jButton1ActionPerformed(evt);
+            }
+        });
+
+        packStatus.setText("{DepDetails}");
+
+        jLabel1.setText("Doppelklicken um Status zu ändern");
+
+        lblVID.setText("izSetup 1.0.0 (c) 2012 iZc");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(34, 34, 34)
+                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(packStatus)
+                                    .addComponent(packTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 429, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, 12, Short.MAX_VALUE)
+                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 597, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 584, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addGap(8, 8, 8))))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lblVID)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 642, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(10, 10, 10)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(17, 17, 17)
+                        .addComponent(packStatus))
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(jLabel1)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(packTitle)
+                        .addGap(18, 18, 18)
+                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 249, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 20, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lblVID, javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jSeparator3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void tblSelectorMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_tblSelectorMouseClicked
+    {//GEN-HEADEREND:event_tblSelectorMouseClicked
+        int x = tblSelector.getSelectedRow();
+        String packid=(String)((DefaultTableModel)tblSelector.getModel()).getValueAt(x, 0);
+        boolean sel = p.packIsScheduled(packid);
+        if(evt.getClickCount()==2)
+        {
+            if(sel==false&&p.packIsInstallable(packid))
+            {
+                sel=true;
+            }
+            else
+            {
+                sel=false;
+            }
+            p.setPackInstallState(packid, sel);
+        }
+        rebuildTable();
+        String _packTitle = p.getPackName(packid);
+        String packDescr = p.getPackDescription(packid);
+        packTitle.setText(_packTitle);
+        packDesc.setText(packDescr);
+    }//GEN-LAST:event_tblSelectorMouseClicked
+
+    private String[] handoverqueue;
+    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed
+    {//GEN-HEADEREND:event_jButton1ActionPerformed
+        p.createQueue();
+        handoverqueue = p.getQueue();
+        new Thread(new Runnable()
+        {
+            @Override
+            @SuppressWarnings("SleepWhileInLoop")
+            public void run()
+            {
+                new InstallProgressGui(handoverqueue).setVisible(true);
+            }
+        }).start();
+        this.setVisible(false);
+    }//GEN-LAST:event_jButton1ActionPerformed
+
+    private void packDescComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_packDescComponentMoved
+    {//GEN-HEADEREND:event_packDescComponentMoved
+        //NOP
+    }//GEN-LAST:event_packDescComponentMoved
+
+    private void formComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentMoved
+    {//GEN-HEADEREND:event_formComponentMoved
+        ModeSel.topleft_coords_x = getLocation().x;
+        ModeSel.topleft_coords_y = getLocation().x;
+    }//GEN-LAST:event_formComponentMoved
+
+    private void rebuildTable()
+    {
+        String[] tablefill = p.getPackList();
+        for (int i = 0; i < tablefill.length; i++)
+        {
+            String GRP = tablefill[i];
+            String[] data = GRP.split("\\|");
+            String packid = data[0];
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[0], i, 0);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[1], i, 1);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt("0xFA11", i, 2);
+            if(p.packIsScheduled(packid))
+            {
+                Tools.DebugHelperPrint(packid+"|sched", true, "iZsetup.enableFinerDebug");
+                ((DefaultTableModel)tblSelector.getModel()).setValueAt("Wird installiert", i, 2);
+            }
+            else
+            {
+                if(p.packIsInstalled(data[0]))
+                {
+                    Tools.DebugHelperPrint(packid+"|exis", true, "iZsetup.enableFinerDebug");
+                    ((DefaultTableModel)tblSelector.getModel()).setValueAt("Bereits installiert", i, 2);
+                }
+                else
+                {
+                    if(!p.packIsInstallable(packid))
+                    {
+                        String depName = ""; 
+                        String depID = p.packDependency(data[0]);
+                        try
+                        {
+                        depName = p.getPackName(depID);
+                        }
+                        catch(Exception e)
+                        {
+                        }
+                        Tools.DebugHelperPrint(packid+"|reqdep:"+depID, true, "iZsetup.enableFinerDebug");
+                        ((DefaultTableModel)tblSelector.getModel()).setValueAt(depName+" benötigt", i, 2);
+                    }
+                    else
+                    {
+                        ((DefaultTableModel)tblSelector.getModel()).setValueAt("Abgewählt", i, 2);
+                    }
+                }
+            }
+        }
+    }
+            
+    
+    /**
+     * @param args the command line arguments
+     */    
+    public static void main(String args[])
+    {
+        /* Set the Nimbus look and feel */
+        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
+        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
+         */
+        try
+        {
+            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
+            {
+                if ("Nimbus".equals(info.getName()))
+                {
+                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        }
+        catch (ClassNotFoundException ex)
+        {
+            java.util.logging.Logger.getLogger(PackagerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (InstantiationException ex)
+        {
+            java.util.logging.Logger.getLogger(PackagerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (IllegalAccessException ex)
+        {
+            java.util.logging.Logger.getLogger(PackagerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        catch (javax.swing.UnsupportedLookAndFeelException ex)
+        {
+            java.util.logging.Logger.getLogger(PackagerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        //</editor-fold>
+
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                new PackagerGUI().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton jButton1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JSeparator jSeparator3;
+    private javax.swing.JLabel lblVID;
+    private javax.swing.JTextArea packDesc;
+    private javax.swing.JLabel packStatus;
+    private javax.swing.JLabel packTitle;
+    private javax.swing.JTable tblSelector;
+    // End of variables declaration//GEN-END:variables
+}

+ 142 - 0
IZSetup/src/de/nplusc/izc/InstallPak/SelectionGUI.form

@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </SyntheticProperties>
+  <Events>
+    <EventHandler event="componentMoved" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentMoved"/>
+  </Events>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jSeparator1" min="-2" pref="50" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="lblVID" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jSeparator2" max="32767" attributes="0"/>
+                  </Group>
+                  <Group type="102" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" attributes="0">
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="jScrollPane1" min="-2" pref="420" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <EmptySpace min="-2" pref="55" max="-2" attributes="0"/>
+                              <Component id="btnInstall" min="-2" pref="342" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace min="0" pref="412" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" min="-2" pref="185" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="btnInstall" min="-2" pref="61" max="-2" attributes="0"/>
+              <EmptySpace pref="43" max="32767" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="lblVID" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Component id="jSeparator1" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+                  <Component id="jSeparator2" alignment="1" min="-2" pref="10" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="btnInstall">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Install"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnInstallActionPerformed"/>
+      </Events>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTable" name="tblSelector">
+          <Properties>
+            <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
+              <Table columnCount="3" rowCount="1">
+                <Column editable="false" title="meta:id" type="java.lang.String"/>
+                <Column editable="false" title="Name" type="java.lang.String"/>
+                <Column editable="false" title="Status" type="java.lang.String"/>
+              </Table>
+            </Property>
+            <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
+              <TableColumnModel selectionModel="1">
+                <Column maxWidth="-1" minWidth="-1" prefWidth="1" resizable="false">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+                <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+                <Column maxWidth="120" minWidth="120" prefWidth="120" resizable="true">
+                  <Title/>
+                  <Editor/>
+                  <Renderer/>
+                </Column>
+              </TableColumnModel>
+            </Property>
+            <Property name="columnSelectionAllowed" type="boolean" value="true"/>
+            <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
+              <TableHeader reorderingAllowed="false" resizingAllowed="true"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tblSelectorMouseClicked"/>
+          </Events>
+          <AuxValues>
+            <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="tblSelector.setColumnModel(new HidableTableColumnModel(tblSelector.getColumnModel()));"/>
+          </AuxValues>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="lblVID">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="izSetup 1.0.0 (c) 2012 iZc"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+    </Component>
+  </SubComponents>
+</Form>

+ 238 - 0
IZSetup/src/de/nplusc/izc/InstallPak/SelectionGUI.java

@@ -0,0 +1,238 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.baseTools.HidableTableColumnModel;
+import java.awt.Point;
+import javax.swing.UIManager;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ *
+ * @author LH
+ */
+public class SelectionGUI extends javax.swing.JFrame
+{
+    /**
+     * Creates new form SelectionGUI
+     */
+    InstallManager im = InstallManager.Main;
+    public SelectionGUI()
+    {
+        initComponents();
+        updatePosition();
+        lblVID.setText(InstallManager.VERSION_GUI_TXT);
+        ((HidableTableColumnModel)(tblSelector.getColumnModel())).setColumnVisible(0, false);
+        //^Tempcode fürs Testen
+        int rows=1;
+        String[] tablefill = im.getToggleAblePrograms();
+        for (int i = 0; i < tablefill.length; i++)
+        {
+            String GRP = tablefill[i];
+            String[] data = GRP.split("\\|");
+            if(i>=rows)
+                ((DefaultTableModel)tblSelector.getModel()).addRow(new String[3]);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[0], i, 0);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt(data[1], i, 1);
+            ((DefaultTableModel)tblSelector.getModel()).setValueAt("Wird installiert", i, 2);
+        }
+        
+    }
+    private void updatePosition()
+    {
+        Point p = new Point(ModeSel.topleft_coords_x, ModeSel.topleft_coords_y);
+        setLocation(p);
+    }
+    /**
+     * This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents()
+    {
+
+        btnInstall = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        tblSelector = new javax.swing.JTable();
+        lblVID = new javax.swing.JLabel();
+        jSeparator1 = new javax.swing.JSeparator();
+        jSeparator2 = new javax.swing.JSeparator();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        addComponentListener(new java.awt.event.ComponentAdapter()
+        {
+            public void componentMoved(java.awt.event.ComponentEvent evt)
+            {
+                formComponentMoved(evt);
+            }
+        });
+
+        btnInstall.setText("Install");
+        btnInstall.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                btnInstallActionPerformed(evt);
+            }
+        });
+
+        tblSelector.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][]
+            {
+                {null, null, null}
+            },
+            new String []
+            {
+                "meta:id", "Name", "Status"
+            }
+        )
+        {
+            Class[] types = new Class []
+            {
+                java.lang.String.class, java.lang.String.class, java.lang.String.class
+            };
+            boolean[] canEdit = new boolean []
+            {
+                false, false, false
+            };
+
+            public Class getColumnClass(int columnIndex)
+            {
+                return types [columnIndex];
+            }
+
+            public boolean isCellEditable(int rowIndex, int columnIndex)
+            {
+                return canEdit [columnIndex];
+            }
+        });
+        tblSelector.setColumnSelectionAllowed(true);
+        tblSelector.getTableHeader().setReorderingAllowed(false);
+        tblSelector.setColumnModel(new HidableTableColumnModel(tblSelector.getColumnModel()));
+        tblSelector.addMouseListener(new java.awt.event.MouseAdapter()
+        {
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                tblSelectorMouseClicked(evt);
+            }
+        });
+        jScrollPane1.setViewportView(tblSelector);
+        tblSelector.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        tblSelector.getColumnModel().getColumn(0).setResizable(false);
+        tblSelector.getColumnModel().getColumn(0).setPreferredWidth(1);
+        tblSelector.getColumnModel().getColumn(2).setMinWidth(120);
+        tblSelector.getColumnModel().getColumn(2).setPreferredWidth(120);
+        tblSelector.getColumnModel().getColumn(2).setMaxWidth(120);
+
+        lblVID.setText("izSetup 1.0.0 (c) 2012 iZc");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(lblVID)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jSeparator2))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addContainerGap()
+                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 420, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(55, 55, 55)
+                                .addComponent(btnInstall, javax.swing.GroupLayout.PREFERRED_SIZE, 342, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addGap(0, 412, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(btnInstall, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(lblVID, javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void btnInstallActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnInstallActionPerformed
+    {//GEN-HEADEREND:event_btnInstallActionPerformed
+        InstallManager.Main.createQueue();
+        InstallProgressGui.main(null);
+            this.setVisible(false);
+    }//GEN-LAST:event_btnInstallActionPerformed
+
+    private void tblSelectorMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_tblSelectorMouseClicked
+    {//GEN-HEADEREND:event_tblSelectorMouseClicked
+                //int y = tblSelector.getSelectedColumn();
+        int x = tblSelector.getSelectedRow();
+        boolean sel = ((DefaultTableModel)tblSelector.getModel()).getValueAt(x, 2).equals("Wird installiert");
+        //if(evt.getClickCount()==2)
+        {
+            if(sel==false)
+            {
+                ((DefaultTableModel)tblSelector.getModel()).setValueAt("Wird installiert", x, 2);
+                sel=true;
+            }
+            else
+            {
+                ((DefaultTableModel)tblSelector.getModel()).setValueAt("Wird nicht installiert", x, 2);
+                sel=false;
+            }
+            im.setGroupState((String)((DefaultTableModel)tblSelector.getModel()).getValueAt(x, 0), sel);
+        }
+        
+    }//GEN-LAST:event_tblSelectorMouseClicked
+
+    private void formComponentMoved(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentMoved
+    {//GEN-HEADEREND:event_formComponentMoved
+        ModeSel.topleft_coords_x = getLocation().x;
+        ModeSel.topleft_coords_y = getLocation().x;
+    }//GEN-LAST:event_formComponentMoved
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[])
+    {
+                        try {
+	    UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
+	} catch( Exception e ) { 
+	    //e.printStackTrace();
+	}
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                new SelectionGUI().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton btnInstall;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JSeparator jSeparator2;
+    private javax.swing.JLabel lblVID;
+    private javax.swing.JTable tblSelector;
+    // End of variables declaration//GEN-END:variables
+}

+ 20 - 0
IZSetup/src/de/nplusc/izc/InstallPak/Tester.java

@@ -0,0 +1,20 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+
+import de.nplusc.izc.tools.IOtools.ZipFileHandler;
+
+/**
+ *
+ * @author LH
+ */
+public class Tester
+{
+    public static void main(String args[])
+    {
+       
+        new ZipFileHandler("D:\\zip\\burnme2\\PSPDevsrc1.zip").extractAllToDiskWithMonitoringProgressbar(null, null);
+    }
+}

+ 10 - 0
IZSetup/src/de/nplusc/izc/InstallPak/bundle.izmeta

@@ -0,0 +1,10 @@
+000|izsetup|1.0.0
+000|type|bundle|nur für uer (der kommentar)
+001|meta:isZipped|true|
+CMM|meta:isZipped: bei false sind die dateien als normale dateien neben dieser bundle gelagert -> kein entzippern
+CMM|in tempdir nötig. Muss bei multidisk-bundles deaktiviert sein. bei diskbundles wird Deaktivierung empfohlen
+CMM|da es die Festplatte nicht so vollstopft
+001|bundlename|Testbundle
+001|packagedata|packs.izpackage|muss im basedir des Bundles liegen(!!!!!!!!!!!!!!!!!!!!!!!!!!)
+001|Description|Test für bundleGui
+001|extractSize|10000|Angabe in Bytes. wird von GUI konvertiert.

+ 489 - 0
IZSetup/src/de/nplusc/izc/InstallPak/izsetupReader.java

@@ -0,0 +1,489 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.nplusc.izc.InstallPak;
+import de.nplusc.izc.tools.IOtools.FileTK;
+import de.nplusc.izc.tools.IOtools.registryReader;
+import de.nplusc.izc.tools.WinToolz.Commands;
+import de.nplusc.izc.tools.baseTools.Detectors;
+import de.nplusc.izc.tools.baseTools.Messagers;
+import de.nplusc.izc.tools.baseTools.Tools;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+/**
+ *
+ * @author LH
+ */
+public class izsetupReader
+{
+    private static HashMap<String,ArrayList<String>> groupsplitted = new HashMap<>();
+    
+    /**
+     * Verarbeitet iZsetup-Daten
+     * @param content der String mit dem SetupFile
+     * @param packagesOnly ob packagefiles als einzigesdurch dürfen
+     * @param dbgenab debugmode (gint content auf err-stream aus)?
+     * @param baseDir baasedir für #basedir#-ersetzung
+     * @return konvertiertes file
+     */
+    public static String[] ConvertToSysSpezSetupFile(String content, boolean packagesOnly,boolean dbgenab,String baseDir)
+    {
+        groupsplitted = new HashMap<>();
+        String[] rawFile = content.split("\\n");
+        if(!rawFile[0].startsWith("000|izsetup|"))
+        {
+            Messagers.SingleLineMsg("Das war leider keine gültige datei...", "Okay");
+            System.exit(0);
+        }
+        //12
+        //000|izsetup|1.0.0|
+        String versCode = rawFile[0].substring(12);
+        validateVersion(versCode);
+        ArrayList<String> SubGroup = new ArrayList<>();
+        String previousGRPID="000";
+        String groupID="000";
+        boolean isPak = true;
+        if(packagesOnly)
+        {
+            isPak=false;
+        }
+        for (String line : rawFile)
+        {
+            if(dbgenab)
+            {
+                System.err.println("RAW>>>"+line);
+            }
+            
+            if(!(line.length()<6))
+            {
+                String[] splittedLine = line.split("\\|");
+                //DBG_START
+                // System.err.println(splittedLine[0]+"|GRP");
+                // System.err.println(splittedLine[1]+"|KEY");
+                // System.err.println(splittedLine[2]+"|VAL");
+                // System.err.println(splittedLine[3]+"|CMNT");
+                //DBG_STOP
+                
+                boolean _999 = false;
+                if(packagesOnly)
+                {
+                    
+                    if(splittedLine[0].equals("999"))
+                        _999=true;
+                }
+                if(!splittedLine[0].equals("000")&&!_999&&isPak)
+                {
+                    groupID=splittedLine[0];
+                    if(!splittedLine[0].equalsIgnoreCase("CMM"))
+                    {
+                        if(!previousGRPID.equals(groupID)&&!previousGRPID.equals("000"))
+                        {
+                            groupsplitted.put(previousGRPID, SubGroup);//Einlagern der abgeschlossenen gruppe
+                            SubGroup = new ArrayList<>();//resetten für neue daten;
+                        }
+                        
+                        line = Tools.processEnvVarsinLine(line);
+                        line = Tools.replaceHashmarkedVars(line, "basedir", baseDir);
+                        //Detectfor envvars
+                        
+                        //FileTK.
+                        //line = line.re
+                        //#basedir# durch pfad von izSetup-file ersetzen
+                        //userprofile-variable und appdata-variable unterstützt
+                        SubGroup.add(line);
+                        if(dbgenab)
+                            System.err.println(line);
+                        previousGRPID=groupID;
+                    }
+
+                }
+                else
+                {
+                    //000|privileges|elevated
+                    if (splittedLine[1].equalsIgnoreCase("privileges"))
+                    {
+                        Tools.DebugHelperPrint("COnvert_Privilegienkram....", true, "iZsetup.enableCoreDebug");
+                        System.err.println(splittedLine[2]+"|elevated");
+                        if(splittedLine[2].equalsIgnoreCase("elevated"))
+                        {
+                            Tools.DebugHelperPrint("AdminRechte her! aber dalli", true, "iZsetup.enableCoreDebug");
+
+                            String basecmd = Tools.processEnvVarsinLine("-jar %appdata%/izsetup/izsetupLauncher.jar");
+                            if(!Detectors.detectisAdmin())
+                            {
+                                  Tools.DebugHelperPrint(">((((((((()°> nix gfunden", true, "iZsetup.enableCoreDebug");
+                                
+                                System.err.println("noAdmin");
+                                String cmd = basecmd;
+                                String[] args = ModeSel.getArgs();
+                                for (String arg : args)
+                                {
+                                    cmd +=" "+arg;
+                                }
+                                Commands.executeAsAdministrator("java"  , cmd.trim());
+                                System.exit(0);
+                            }
+                        }
+                    }
+                    //000|type|script|
+                    if(splittedLine[1].equalsIgnoreCase("type")
+                            &&packagesOnly
+                            &&!isPak
+                            &&((!splittedLine[2].equalsIgnoreCase("packages"))||(!splittedLine[2].equalsIgnoreCase("package")))
+                            )
+                    {
+                        isPak=true;//errort aus wenn nur packagefiles erlaubt aber ein normales file kommt
+                    }
+                }
+            }
+        }
+        groupsplitted.put(previousGRPID, SubGroup);
+        ArrayList<String> returnValuesTemp = new ArrayList<>();
+        String[] groupids = groupsplitted.keySet().toArray(new String[0]);
+        for (String key : groupids)
+        {
+            clearGroupFromCrap(key);//ausgelagert um Coide zu entwirren
+        }
+        Arrays.sort(groupids);
+        for (String key : groupids)
+        {
+            ArrayList<String> GC= groupsplitted.get(key);
+            for (String val : GC)
+            {
+                returnValuesTemp.add(val);
+            }
+        }
+        String[] ret = returnValuesTemp.toArray(new String[0]);
+        return ret;
+    }
+    
+    
+    
+   /**
+    * Verarbeitet iZsetup-Daten
+    * @param filepath datei des files
+    * @return konvertiertes setuoFile
+    */
+    public static String[] getSysSpezSetupFile(String filepath)
+    {
+        return getSysSpezSetupFile(filepath,false);
+    }
+    
+    
+    /**
+     * Verarbeitet iZsetup-Daten
+     * @param filepath dateipfad des files
+     * @param packagesOnly ob nur packfiles gelesenwerden dürfen
+     * @return konvertiertes file
+     */
+            
+    public static String[] getSysSpezSetupFile(String filepath, boolean packagesOnly)
+    {
+        return getSysSpezSetupFile(filepath, packagesOnly,false);
+    }
+    
+    /**
+     * 
+     * Verarbeitet iZsetup-Daten
+     * @param filepath dateipfad des files
+     * @param packagesOnly ob nur packfiles gelesenwerden dürfen
+     * @param dbgenab debugmode (gint content auf err-stream aus)?
+     * @return konvertiertes file
+     */
+    public static String[] getSysSpezSetupFile(String filepath, boolean packagesOnly,boolean dbgenab)
+    {
+        groupsplitted = new HashMap<>();
+        String[] rawFile = FileTK.fileload(filepath, false);
+        if(!rawFile[0].startsWith("000|izsetup|"))
+        {
+            System.err.println(filepath);
+            Messagers.SingleLineMsg("Das war leider keine gültige datei...", "Okay");
+            System.exit(0);
+        }
+        //12
+        //000|izsetup|1.0.0|
+        String versCode = rawFile[0].substring(12);
+        validateVersion(versCode);
+        ArrayList<String> SubGroup = new ArrayList<>();
+        String previousGRPID="000";
+        String groupID="000";
+        boolean isPak = true;
+        if(packagesOnly)
+        {
+            isPak=false;
+        }
+        for (String line : rawFile)
+        {
+            if(!(line.length()<6))
+            {
+                String[] splittedLine = line.split("\\|");
+                //DBG_START
+               // System.err.println(splittedLine[0]+"|GRP");
+               // System.err.println(splittedLine[1]+"|KEY");
+               // System.err.println(splittedLine[2]+"|VAL");
+               // System.err.println(splittedLine[3]+"|CMNT");
+                //DBG_STOP
+                
+                boolean _999 = false;
+                if(packagesOnly)
+                {
+                    
+                    if(splittedLine[0].equals("999"))
+                        _999=true;
+                }
+                if(!splittedLine[0].equals("000")&&!_999&&isPak)
+                {
+                    groupID=splittedLine[0];
+                    if(!splittedLine[0].equalsIgnoreCase("CMM"))
+                    {
+                        if(!previousGRPID.equals(groupID)&&!previousGRPID.equals("000"))
+                        {
+                            groupsplitted.put(previousGRPID, SubGroup);//Einlagern der abgeschlossenen gruppe
+                            SubGroup = new ArrayList<>();//resetten für neue daten;
+                        }
+                        
+                        line = Tools.processEnvVarsinLine(line);
+                        String baseDir = FileTK.getFilePath(filepath);
+                        line = Tools.replaceHashmarkedVars(line, "basedir", baseDir);
+                        //Detectfor envvars
+                        
+                        //FileTK.
+                        //line = line.re
+                        //#basedir# durch pfad von izSetup-file ersetzen
+                        //userprofile-variable und appdata-variable unterstützt
+                        SubGroup.add(line);
+                        if(dbgenab)
+                            System.err.println(line);
+                        previousGRPID=groupID;
+                    }
+
+                }
+                else
+                {
+                                        //000|privileges|elevated
+                    if (splittedLine[1].equalsIgnoreCase("privileges"))
+                    {
+                        Tools.DebugHelperPrint("Read_Privilegienkram....", true, "iZsetup.enableCoreDebug");
+
+                        if(splittedLine[2].equalsIgnoreCase("elevated"))
+                        {
+                            Tools.DebugHelperPrint("AdminRechte her! aber dalli", true, "iZsetup.enableCoreDebug");
+
+                            String basecmd = Tools.processEnvVarsinLine("-jar %appdata%/izsetup/izsetupLauncher.jar");
+                            if(!Detectors.detectisAdmin())
+                            {
+                                Tools.DebugHelperPrint("<°()))))))))< nix gfunden", true, "iZsetup.enableCoreDebug");
+                                String cmd = basecmd;
+                                String[] args = ModeSel.getArgs();
+                                for (String arg : args)
+                                {
+                                    cmd +=" "+arg;
+                                }
+                                Commands.executeAsAdministrator("java"  , cmd.trim());
+                                System.exit(0);
+                                
+                            }
+                        }
+                    }
+                    //000|type|script|
+                    if(splittedLine[1].equalsIgnoreCase("type")
+                            &&packagesOnly
+                            &&!isPak
+                            &&((!splittedLine[2].equalsIgnoreCase("packages"))||(!splittedLine[2].equalsIgnoreCase("package")))
+                            )
+                    {
+                        isPak=true;//errort aus wenn nur packagefiles erlaubt aber ein normales file kommt
+                    }
+                }
+            }
+        }
+        groupsplitted.put(previousGRPID, SubGroup);
+        ArrayList<String> returnValuesTemp = new ArrayList<>();
+        String[] groupids = groupsplitted.keySet().toArray(new String[0]);
+        for (String key : groupids)
+        {
+            clearGroupFromCrap(key);//ausgelagert um Coide zu entwirren
+        }
+        Arrays.sort(groupids);
+        for (String key : groupids)
+        {
+            ArrayList<String> GC= groupsplitted.get(key);
+            for (String val : GC)
+            {
+                returnValuesTemp.add(val);
+            }
+        }
+        String[] ret = returnValuesTemp.toArray(new String[0]);
+        return ret;
+    }
+    /*
+    public static void main(String args[])
+    {
+        //NOP
+    }*/
+                    
+    private static void clearGroupFromCrap(String groupkey)
+    {
+        ArrayList<String> GroupContentPP = groupsplitted.get(groupkey);//wird später durch ne neue List ersetzt
+        String[] Groupcontent  = GroupContentPP.toArray(new String[0]);
+        for (int i = 0; i < Groupcontent.length; i++)
+        {
+            String line = Groupcontent[i];
+            if(line.length()>0)
+            {
+                String[] linesegs = line.split("\\|");
+                if(linesegs[1].startsWith("cond"))
+                {
+                    String condelsemarker="else"+linesegs[1];
+                    String condendmarker="end"+linesegs[1];
+                    int elseline = 0,endline=0;
+                    boolean conditionsClear = false;
+                    if(linesegs[2].equalsIgnoreCase("IsWin8"))
+                    {
+                        conditionsClear =Detectors.detectIsWin8();
+                    }
+                    if(linesegs[2].equalsIgnoreCase("Is64Bit")&&!conditionsClear)
+                    {
+                        conditionsClear = Detectors.detect64bitWinon7and8();
+                    }
+                    if(linesegs[2].equalsIgnoreCase("IsWinXP")&&!conditionsClear)
+                    {
+                        conditionsClear = Detectors.detectWInXP();
+                    }
+                    if(linesegs[2].equalsIgnoreCase("IsWin7")&&!conditionsClear)
+                    {
+                        conditionsClear = Detectors.detectWin7();
+                    }
+                    if(linesegs[2].startsWith("PathExists:"))
+                    {
+                        conditionsClear = FileTK.checkDirExist(linesegs[2].substring(11));//kann zum Erkennen beliebiger Programme genutzt werden
+                    }
+                    if(linesegs[2].startsWith("RegKeyExists:"))
+                    {
+                        // prüft Registryeinträge//sollte hinter ne CheckWIndows geglemmt werden
+                        conditionsClear = registryReader.checkExistenceOfRegKey(linesegs[2].substring(13));
+                        if(!conditionsClear)
+                        {
+                            conditionsClear = registryReader.checkExistenceOfRegKeyEntry(linesegs[2].substring(13));
+                        }
+                    }
+                    Groupcontent[i]="";
+                    if(!conditionsClear)
+                    //<editor-fold defaultstate="collapsed" desc="BEdingung nicht erfüllt">
+                    {
+                        boolean elseContained= false;
+                        //int endofCond = 0;
+                        for (int j = i; j < Groupcontent.length; j++)
+                        {
+                            
+                            String linei = Groupcontent[j];
+                            //System.err.println("XXX"+linei);
+                            
+                            if(linei.length()>0)
+                            {
+                                String[] linesegsi = linei.split("\\|");
+                                if(linesegsi[1].startsWith(condelsemarker))
+                                {
+                                    elseline=j;
+                                    Groupcontent[j]="";
+                                    elseContained=true;
+                                    for (int k = i; k < j; k++)
+                                    {
+                                        Groupcontent[k]="";//entfernt die nicht passenden Werte
+                                    }
+                                }
+                                if(linesegsi[1].startsWith(condendmarker))
+                                {
+                                    endline=j;
+                                    Groupcontent[j]="";
+                                    if(!elseContained)
+                                    {
+                                        for (int k = i; k < j; k++)
+                                        {
+                                            Groupcontent[k]="";//entfernt die nicht passenden Werte
+                                            
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    //</editor-fold>
+                    else
+                    //<editor-fold defaultstate="collapsed" desc="BEdingung erfüllt">
+                    {
+                        boolean elseContained= false;
+                        for (int j = i; j < Groupcontent.length; j++)
+                        {
+                            String linei = Groupcontent[j];
+                            //System.err.println("|||"+linei);
+                            if(linei.length()>0)
+                            {
+                                String[] linesegsi = linei.split("\\|");
+                                if(linesegsi[1].startsWith(condelsemarker))
+                                {
+                                    elseline=j;
+                                    Groupcontent[j]="";
+                                    elseContained=true;
+                                }
+                                if(linesegsi[1].startsWith(condendmarker))
+                                {
+                                    endline=j;
+                                    Groupcontent[j]="";
+                                    if(elseContained)
+                                    {
+                                        for (int k = elseline; k < j; k++)
+                                        {
+                                            Groupcontent[k]="";//entfernt die nicht passenden Werte
+                                            
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    //</editor-fold>
+                }
+            }
+        }
+        
+        
+        
+     GroupContentPP = new ArrayList<>();
+        for (String string : Groupcontent)
+        {
+            if(!string.isEmpty())
+                GroupContentPP.add(string);
+        }
+        groupsplitted.put(groupkey, GroupContentPP);
+    }
+    
+    
+    
+    private static void validateVersion(String versCode)
+    {
+        versCode = versCode.split("\\|")[0]; //rest abkoppeln
+        String[] versCodeSpl = versCode.split("\\.");
+        Tools.DebugHelperPrint(">>Version:"+versCode+"\n"+versCodeSpl[0]+"|"+InstallManager.VERSION_MAJOR+
+                "\n"+versCodeSpl[1]+"|"+InstallManager.VERSION_MINOR+"\n"+versCodeSpl[2]+"|"+InstallManager.REVISION, true, "iZsetup.enableCoreDebug");
+        
+        if ((Integer.valueOf(versCodeSpl[0]) > InstallManager.VERSION_MAJOR))
+        {
+            Messagers.SingleLineMsg("iZsetup ist veraltet Mindestens " + versCode + " benötigt", "Okay");
+            System.exit(0);
+        }
+        if ((Integer.valueOf(versCodeSpl[1]) > InstallManager.VERSION_MINOR))
+        {
+            Messagers.SingleLineMsg("iZsetup ist veraltet Mindestens " + versCode + " benötigt", "Okay");
+            System.exit(0);
+        }
+        if ((Integer.valueOf(versCodeSpl[2]) > InstallManager.REVISION))
+        {
+            Messagers.SingleLineMsg("iZsetup ist veraltet Mindestens " + versCode + " benötigt", "Okay");
+            System.exit(0);
+        }
+    }
+}

+ 64 - 0
IZSetup/src/de/nplusc/izc/InstallPak/tempalte.izpackage

@@ -0,0 +1,64 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+000|type|packages|dient nur zur unterscheidung von packagefiles
+000|||packagefiles unterstützen Conds genauso
+000|flag|multidisk|dieses Flag aktivirt den Multidisk-Modus
+CMM|Inline-COmment-funktion
+CMM|Multidisk-Modus=Dateien werden nicht auf Temp kopiert und bei nem WaitDisk
+CMM|kommt ne Aufforderung die nächste Disk einzulegen
+CMM|der dateiname danach sagt auf welche datei geschaut wird
+001|pack|BaseSystem|Name de Packages das in der Anicht auftaucht
+001|detectInstall|File://C:\kernel.etl2
+CMM|File:// benutzt den DateiExistiert-operator
+CMM|Reg:// detektiert unter Win auf Exitenz von Regwert
+001|description|Die minimal nötigen Tools und Komponenten fürs System
+CMM|#basedir# ersetzt Variable durch Pfad dieser datei (ermöglict jar und
+CMM|setup voneinander zu trennen)
+001|packfile|#basedir#\pack001.izsetup
+CMM|msg und exec-lines werden vom PackManager ignoriert und sind für unattendeds nötig
+CMM|dabei werden alle packages nacheinander installiert und ausgeführt
+001|msg|Installiere BasePackage
+001|exec|java -jar izsetup.jar -file pack001.izsetup --silent
+CMM|########################################### 
+CMM|###########################################
+CMM|###########################################
+002|pack|Addons| 
+002|detectInstall|File://%userprofile%\appdata\programname\datei1.dat|
+002|description|Addons und sosntiges was nicht zwingend notwendig ist|
+002|packfile|#basedir#\addons.izsetup| 
+002|req|001|nummer des benötigten packs//kann weitere erfordernwenn
+002|msg|Installiere Addons| 
+002|exec|java -jar izsetup.jar -file addons.izsetup --silent| 
+CMM|########################################### 
+CMM|###########################################
+CMM|###########################################
+003|cond:1|IsWin7| 
+003|pack|Fehlendes Zeugs von XP| 
+003|detectInstall|File://C:\ornder2\datei2.bin
+003|description|Sach das bei XP defult war aber dort fehlt|
+003|packfile|#basedir#\xprecover.izsetup| 
+003|req|001| 
+003|msg|installiere fehlendes nach das bei XP dabei war
+003|exec|java -jar izsetup.jar -file xprevocer.izsetup --silent| 
+003|endcond:1| |
+004|pack|games| 
+004|waitDisk:Message|#basedir#\games.izsetup| 
+004|detectInstall|File://C:\Program Files\ImgBurn\ImgBurn.exexexe
+004|Description|Die Games die nicht fehlen dürfen
+004|packfile|#basedir#\games.izsetup
+004|req|001| 
+004|msg|installiere games| 
+004|exec|java -jar izsetup.jar -file games.izsetup --silent| 
+005|pack|game-Tools| 
+005|waitDisk|#basedir#\gamestls.izsetup| 
+005|detectInstall|File://C:\ornder3\datei3b.bin| 
+005|Description|Tools für die games aus dem Package| 
+005|packfile|#basedir#\gamestls.izsetup
+005|req|004|dependencys gehen über mehrere packs ->auch 001 notwendig 
+005|msg|installiere games-tools| 
+005|exec|java -jar izsetup.jar -file gamestls.izsetup --silent| 
+999|pack|NoExec| dieses Pack ist nur als Wrapper fr die Basta-Messge gedacht und wird nicht ausgeführt
+999|req|000|da 000 kein pack kann dieses nicht ausgewählt werden
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec||der installer beendet sich nicht bei wait am schluss

+ 27 - 0
IZSetup/src/de/nplusc/izc/InstallPak/template.izsetup

@@ -0,0 +1,27 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|Gruppenname für GUI
+001|cond:1|IsWin8|Geht bis zum nächsten Exec,COnds können aufeinanderfolgen
+001|cond:2|Is64Bit|^
+001|msg|Wird übersprungen|gehört zum darauffolgenden Exec mit gleicher ID
+001|exec| | 
+001|elsecond:2| | 
+001|msg|Installiere was 32-bit spezifisches| 
+001|exec|ping localhost| 
+001|endcond:2| | 
+001|endcond:1| | 
+001|msg|Installing XXX| 
+001|exec|ping localhost| 
+002|rgrp|Runtimes|Beispiel fpr RequireExec-Gruppe
+002|msg|Führe XXX aus| 
+002|requireExec|ping localhost|RequireExec kann nicht ausgewählt werden da immer notwendig. Kann Durch COnds beeinflusst werden
+003|grp|nichtWin8|Testgruppe#3
+003|cond:1|IsWin8| 
+003|elsecond:1| | 
+003|msg|Nur für win7| 
+003|msg|ping localhost| 
+003|endcond:1| | 
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec|wait|der installer beendet sich nicht bei wait am schluss

+ 15 - 0
IZSetup/xprecover.izsetup

@@ -0,0 +1,15 @@
+000|izsetup|1.0.0|Version (4 spalte=Kommentar)(posiNbr|type|Value|comment);Leere Felder brauchen ein LEerzeichen!
+000|type|script|dient nur zur unterscheidung von packagefiles
+000|||Dieser Bereich ist der Header (groupid 000 word vom Preprocessor immer verworfen und kann für Vermerke genutzt werden
+000|||Msg muss vorm exec stehen da sonst falsch gelinkt wird
+001|group|Group1|Proggys+0x01
+001|msg|Proggy1_1|  
+001|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+002|group|Group1|ProggysProggys+0x02
+002|msg|Proggy2_1| 
+002|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+003|group|Group1|ProggysProggys+0x03
+003|msg|Proggy3_1| 
+003|exec|ping localhost|gibt neverzögerung ohnewas am system zu ädndern (Dummy-befehl)
+999|msg|Basta|namenlose gruppen werden automatsch ausgeführt
+999|exec|wait|der installer beendet sich nicht bei wait am schluss