<?xml version="1.0" encoding="UTF-8"?>
<setup:Project
    xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:git="http://www.eclipse.org/oomph/setup/git/1.0"
    xmlns:jdt="http://www.eclipse.org/oomph/setup/jdt/1.0"
    xmlns:maven="http://www.eclipse.org/oomph/setup/maven/1.0"
    xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
    xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
    xsi:schemaLocation="http://www.eclipse.org/oomph/setup/git/1.0 https://raw.githubusercontent.com/eclipse-oomph/oomph/master/setups/models/Git.ecore http://www.eclipse.org/oomph/setup/jdt/1.0 https://raw.githubusercontent.com/eclipse-oomph/oomph/master/setups/models/JDT.ecore http://www.eclipse.org/oomph/setup/maven/1.0 https://raw.githubusercontent.com/eclipse-oomph/oomph/master/setups/models/Maven.ecore"
    name="fips.release"
    label="Eclipse IDE for Faktor-IPS Release Development">
  <stream name="main"
      label="Faktor-IPS Release Eclipse">
    <setupTask
        xsi:type="setup.p2:P2Task"
        label="FaktorIPS and Produktvarianten">
      <requirement
          name="org.faktorips.feature.feature.group"/>
      <requirement
          name="org.faktorips.feature.source.feature.group"/>
      <requirement
          name="org.faktorips.groovy.feature.feature.group"/>
      <requirement
          name="org.faktorips.m2e.feature.feature.group"/>
      <requirement
          name="org.faktorips.productvariant.feature.group"/>
      <requirement
          name="org.faktorips.productvariant.source.feature.group"/>
      <requirement
          name="org.faktorips.productvariant.nl1.feature.group"/>
      <requirement
          name="org.faktorips.productvariant.datatype.feature.feature.group"/>
      <requirement
          name="org.faktorips.productvariant.datatype.feature.source.feature.group"/>
      <requirement
          name="org.projectlombok.feature.feature.group"/>
      <repository
          url="${fips.update.site}"/>
      <repository
          url="${fips.productvariant.update.site}"/>
      <repository
          url="https://projectlombok.org/p2"/>
      <description>
        Install Faktor-IPS, Produktvarianten and Lombok.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        type="FOLDER"
        name="git.clone.vm.shu.privat.parent"
        defaultValue="${installation.location/../git}"
        storageURI="scope://Workspace"
        label="Git-Parent Verzeichnis (Überprüft ob &quot;vm.shu.privat&quot; als Unterordner vorhanden ist, falls nicht wird das Repo geklont)">
      <description>
        Uebergeordnetes Verzeichnis fuer den Clone von vm.shu.privat.
        Oomph legt automatisch den Unterordner 'vm.shu.privat' an.

        WICHTIG: Hier den ELTERNORDNER angeben, NICHT den Zielordner selbst.
        Beispiel: /home/user/git  ->  Clone landet in /home/user/git/vm.shu.privat
        Falsch  : /home/user/git/vm.shu.privat  (fuehrt zu falschem Pfad)

        Auch ein bereits bestehender Ordner kann angegeben werden.
        Falls vm.shu.privat dort bereits geklont wurde, wird kein
        erneuter Clone ausgefuehrt.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="git.clone.vm.shu.privat.location"
        value="${git.clone.vm.shu.privat.parent/vm.shu.privat}">
      <description>Effektiver Clone-Pfad: Elternordner + /vm.shu.privat (automatisch abgeleitet).</description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        type="FOLDER"
        name="workspace.location"
        defaultValue="${installation.location/ws}"
        storageURI="scope://Workspace"
        label="Workspace Location">
      <description>Workspace path</description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="git.user.name"
        defaultValue="${user.name}"
        storageURI="scope://Installation"
        label="Gerrit Username">
      <description>
        Gerrit user name for ssh authentication. Only relevant
        if repo needs to be cloned.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="git.clone.vm.shu.privat.remoteURI"
        value="ssh://${git.user.name}@gerrit.faktorzehn.de:29418/mustercontent/vm/vm.shu.privat">
      <description>gerrit-repo-url</description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="git.clone.vm.shu.privat.branch"
        defaultValue="main"
        storageURI="scope://Workspace"
        label="Git Branch">
      <description>
        Branch to check out after cloning the repository. Won't
        affect existing repositories.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="gerrit.server.url"
        defaultValue="https://gerrit.faktorzehn.de"
        storageURI="scope://Workspace"
        label="Gerrit Server URL">
      <description>Base URL of the Gerrit server for hook installation.</description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="fips.update.site"
        defaultValue="https://update.faktorzehn.org/faktorips/v26_7"
        storageURI="scope://Workspace"
        label="Faktor-IPS Update-Site">
      <description>
        Update-Site URL for Faktor-IPS. Examples:
        - https://update.faktorzehn.org/faktorips/latest/ (latest stable)
        - https://update.faktorzehn.org/faktorips/v26_7/ (version 26.7)
        - https://update.faktorzehn.org/faktorips/v26_7/26.7.0.a20260119-01 (specific build)
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="perform.repo.setup"
        defaultValue="true"
        storageURI="scope://Workspace"
        label="mustercontent repo klonen und importieren">
      <choice
          value="true"
          label="Ja - mustercontent klonen und Maven-Projekte importieren"/>
      <choice
          value="false"
          label="Nein - Überspringen (nur leerer Workspace)"/>
      <description>
        Ob das vm.shu.privat-Repository geklont und die Maven-Projekte
        in den Workspace importiert werden sollen. Bei 'Nein' wird ein
        leerer Workspace geöffnet.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="fips.productvariant.update.site"
        defaultValue="https://drone.faktorzehn.de/unzip/maven/prefixed/faktor-ips_3_snapshots/org.faktorips.productvariant/org.faktorips.productvariant.p2repository/26.7.0-SNAPSHOT"
        storageURI="scope://Workspace"
        label="Produktvarianten Update-Site">
      <description>
        Update-Site URL for Faktor-IPS Produktvarianten. Examples:
        - https://drone.faktorzehn.de/unzip/maven/prefixed/faktor-ips_3_snapshots/org.faktorips.productvariant/org.faktorips.productvariant.p2repository (latest snapshot)
        - https://update.faktorzehn.org/faktorips/productvariants/ (stable release)
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:EclipseIniTask"
        excludedTriggers="STARTUP"
        option="-Xms"
        value="256m"
        vm="true">
      <description>Set initial heap size</description>
    </setupTask>
    <setupTask
        xsi:type="setup:EclipseIniTask"
        excludedTriggers="STARTUP"
        option="-Xmx"
        value="4096m"
        vm="true">
      <description>Set maximum heap size</description>
    </setupTask>
    <setupTask
        xsi:type="setup:EclipseIniTask"
        excludedTriggers="STARTUP"
        option="-XX:+AutoCreateSharedArchive"
        vm="true">
      <description>Enable CDS archive auto creation</description>
    </setupTask>
    <setupTask
        xsi:type="setup:EclipseIniTask"
        excludedTriggers="STARTUP"
        option="-XX:SharedArchiveFile"
        value="=${user.home/.eclipse/classes.jsa}"
        vm="true">
      <description>Set CDS archive location</description>
    </setupTask>
    <setupTask
        xsi:type="setup:EclipseIniTask"
        excludedTriggers="STARTUP"
        option="-perspective"
        value="org.eclipse.jdt.ui.JavaPerspective">
      <description>Open Java perspective on first start</description>
    </setupTask>
    <setupTask
        xsi:type="git:GitCloneTask"
        id="git.clone.vm.shu.privat"
        filter="(perform.repo.setup=true)"
        location="${git.clone.vm.shu.privat.location}"
        remoteURI="${git.clone.vm.shu.privat.remoteURI}"
        checkoutBranch="${git.clone.vm.shu.privat.branch}"
        recursive="true">
      <configSections
          name="branch">
        <properties
            key="autoSetupRebase"
            value="always"/>
      </configSections>
      <configSections
          name="pull">
        <properties
            key="rebase"
            value="true"/>
      </configSections>
      <configSections
          name="core">
        <properties
            key="autocrlf"
            value="input"/>
      </configSections>
      <description>
        Clone the vm.shu.privat repository from Gerrit with optimal Git configuration.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:CompoundTask"
        filter="(perform.repo.setup=true)"
        name="Gerrit Hooks Setup">
    <setupTask
          xsi:type="setup:ExecuteTask"
          id="gerrit.commitmsg.unix"
          filter="(|(osgi.os=macosx)(osgi.os=linux))"
          command="bash"
          workingDirectory="${git.clone.vm.shu.privat.location}">
               <argument
            value="-c"/>
               <argument
            value="git_dir=$(git rev-parse --git-dir) &amp;&amp; hooks_dir=&quot;$git_dir/hooks&quot; &amp;&amp; mkdir -p &quot;$hooks_dir&quot; &amp;&amp; curl -fsSL -o &quot;$hooks_dir/commit-msg&quot; &quot;${gerrit.server.url}/tools/hooks/commit-msg&quot; &amp;&amp; chmod +x &quot;$hooks_dir/commit-msg&quot;"/>
               <description>Install Gerrit commit-msg hook (Unix/Mac)</description>
    </setupTask>
    <setupTask
          xsi:type="setup:ExecuteTask"
          id="gerrit.commitmsg.win"
          filter="(osgi.os=win32)"
          command="powershell"
          workingDirectory="${git.clone.vm.shu.privat.location}">
               <argument
            value="-NoProfile"/>
               <argument
            value="-ExecutionPolicy"/>
               <argument
            value="Bypass"/>
               <argument
            value="-Command"/>
               <argument
            value="$gitDir = git rev-parse --git-dir; $hooksDir = Join-Path $gitDir 'hooks'; if (!(Test-Path $hooksDir)) { New-Item -ItemType Directory -Path $hooksDir -Force | Out-Null }; Invoke-WebRequest -Uri '${gerrit.server.url}/tools/hooks/commit-msg' -OutFile (Join-Path $hooksDir 'commit-msg') -UseBasicParsing"/>
               <description>Install Gerrit commit-msg hook (Windows)</description>
    </setupTask>
    </setupTask>
    <setupTask
        xsi:type="maven:MavenImportTask"
        id="maven.import"
        filter="(perform.repo.setup=true)">
      <sourceLocator
          rootFolder="${git.clone.vm.shu.privat.location}"
          locateNestedProjects="true"/>
      <description>
        Import all Maven projects from the repository using M2E.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:ExecuteTask"
        id="pom.xml.fips.properties"
        filter="(&amp;(perform.repo.setup=true)(|(osgi.os=macosx)(osgi.os=linux)))"
        command="bash">
      <argument
          value="-c"/>
      <argument
          value='FIPS_SITE="${fips.update.site}"; FIPS_SITE="${FIPS_SITE%/}"; FIPS_POM="${git.clone.vm.shu.privat.location}/pom.xml"; FIPS_VER=$(printf "%s" "$FIPS_SITE" | grep -Eo "[0-9]+[.][0-9]+[.][0-9]+[.][a-zA-Z][a-zA-Z0-9_-]+$" || true); if [ -z "$FIPS_VER" ]; then COMPOSITE=$(curl -fsSL "$FIPS_SITE/compositeContent.xml" 2>/dev/null || true); FIPS_VER=$(printf "%s" "$COMPOSITE" | grep -Eo "[0-9]+[.][0-9]+[.][0-9]+[.][a-zA-Z][a-zA-Z0-9_-]+" | tail -1 || true); fi; if [ -z "$FIPS_VER" ]; then printf "ERROR: Cannot determine faktorips.version from: %s\n" "$FIPS_SITE"; exit 1; fi; if grep -q "faktorips.version" "$FIPS_POM"; then printf "faktorips.version already present, skipping\n"; exit 0; fi; python3 -c "import sys; lt=chr(60); gt=chr(62); sl=chr(47); nl=chr(10); sp=chr(32)*8; site=sys.argv[1]; pom=sys.argv[2]; ver=sys.argv[3]; fv=\"faktorips.version\"; fr=\"fips.repository\"; pt=\"properties\"; ins=nl+sp+lt+fv+gt+ver+lt+sl+fv+gt+nl+sp+lt+fr+gt+site+lt+sl+fr+gt; pt_tag=lt+pt+gt; f=open(pom); c=f.read(); f.close(); c=c.replace(pt_tag,pt_tag+ins,1); f=open(pom,\"w\"); f.write(c); f.close(); print(\"Done: faktorips.version=\"+ver)" "$FIPS_SITE/" "$FIPS_POM" "$FIPS_VER"'/>
      <description>
        Fügt faktorips.version und fips.repository in den properties-Block
        der root pom.xml ein. Bash erkennt die Version aus der URL oder per
        compositeContent.xml-Abruf, Python übernimmt die XML-Modifikation.
        Setzt alle Sonderzeichen via chr() um XML-Escaping-Probleme zu vermeiden.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:ExecuteTask"
        id="pom.xml.fips.properties.win"
        filter="(&amp;(perform.repo.setup=true)(osgi.os=win32))"
        command="powershell">
      <argument
          value="-NoProfile"/>
      <argument
          value="-ExecutionPolicy"/>
      <argument
          value="Bypass"/>
      <argument
          value="-Command"/>
      <argument
          value="$site='${fips.update.site}'.TrimEnd('/'); $pom='${git.clone.vm.shu.privat.location}/pom.xml'; $m=[regex]::Match($site,'(\d+\.\d+\.\d+\.[a-zA-Z]\w+)$'); $ver=if($m.Success){$m.Groups[1].Value}else{$null}; if(-not $ver){try{$xml=(Invoke-WebRequest -Uri ($site+'/compositeContent.xml') -UseBasicParsing -TimeoutSec 30).Content; $ver=[regex]::Matches($xml,'\d+\.\d+\.\d+\.[a-zA-Z]\w+') | ForEach-Object {$_.Value} | Select-Object -Last 1}catch{}}; if(-not $ver){Write-Error 'Cannot determine faktorips.version'; exit 1}; $c=Get-Content -Path $pom -Raw; if($c -match 'faktorips\.version'){Write-Host 'Already present, skipping'; exit 0}; $lt=[char]60; $gt=[char]62; $nl=[char]10; $ins=$nl+'        '+$lt+'faktorips.version'+$gt+$ver+$lt+'/faktorips.version'+$gt+$nl+'        '+$lt+'fips.repository'+$gt+$site+'/'+$lt+'/fips.repository'+$gt; $c=[regex]::Replace($c,[regex]::Escape($lt+'properties'+$gt),$lt+'properties'+$gt+$ins,1); Set-Content -Path $pom -Value $c -NoNewline; Write-Host ('Done: faktorips.version='+$ver)"/>
      <description>
        Windows-Äquivalent zu pom.xml.fips.properties (PowerShell).
        Fügt faktorips.version und fips.repository in den properties-Block
        der root pom.xml ein. Version wird aus der Update-Site-URL oder
        per compositeContent.xml-Abruf ermittelt.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:CompoundTask"
        name="Eclipse Preferences">
      <setupTask
          xsi:type="jdt:JRETask"
          version="JavaSE-21"
          location="${jre.location-21}">
        <description>Java 21 JRE</description>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Maven (M2E) Settings">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.m2e.core/eclipse.m2.downloadSources"
            value="true">
          <description>Automatically download Maven sources</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.m2e.core/eclipse.m2.downloadJavaDoc"
            value="false">
          <description>Do not download JavaDoc by default (can be slow)</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.m2e.core/eclipse.m2.updateProjects"
            value="false">
          <description>Do not automatically update Maven projects on import</description>
        </setupTask>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Workspace Preferences">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.core.resources/encoding"
            value="UTF-8">
          <description>Set workspace encoding to UTF-8</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.ui.editors/spacesForTabs"
            value="true">
          <description>Use spaces instead of tabs</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.ui.editors/removeSpacesAsTabs"
            value="true">
          <description>Remove trailing whitespace as tabs</description>
        </setupTask>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Java Compiler Settings">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.codegen.targetPlatform"
            value="21">
          <description>Java compiler target platform (Java 21)</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.compliance"
            value="21">
          <description>Java compiler compliance level (Java 21)</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.source"
            value="21">
          <description>Java compiler source level (Java 21)</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.codegen.methodParameters"
            value="generate">
          <description>Generate method parameters for better debugging</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.release"
            value="enabled">
          <description>Enable release flag for proper module compilation</description>
        </setupTask>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Console and Debug Settings">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.debug.ui/Console.limitConsoleOutput"
            value="false">
          <description>Don't limit console output</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.debug.ui/Console.highWaterMark"
            value="88000">
          <description>Console buffer size (88000 characters)</description>
        </setupTask>
      </setupTask>
    </setupTask>
  </stream>
  <logicalProjectContainer
      xsi:type="setup:ProjectCatalog"
      href="index:/org.eclipse.setup#//@projectCatalogs[name='org.eclipse']"/>
  <description>Eclipse IDE for Faktor-IPS release development with vm.shu.privat repository.</description>
</setup:Project>
