<?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="faktorips.productdesigner"
    label="Eclipse IDE for developing Faktor-IPS Product Designer">
  <stream name="main"
      label="Product Designer Development Eclipse">
    <setupTask
        xsi:type="setup.p2:P2Task"
        label="FaktorIPS and Development Tools">
      <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.core"/>
      <requirement
          name="org.faktorips.productvariant.datatype"/>
      <requirement
          name="org.faktorips.productvariant.ui"/>
      <requirement
          name="org.eclipse.xtend.sdk.feature.group"/>
      <requirement
          name="org.eclipse.wst.web_ui.feature.feature.group"/>
      <requirement
          name="org.eclipse.wildwebdeveloper.feature.feature.group"/>
      <requirement
          name="net.sf.eclipsecs.feature.group"/>
      <requirement
          name="com.github.spotbugs.plugin.eclipse.feature.group"/>
      <requirement
          name="com.basistech.m2e.code.quality.checkstyle.feature.feature.group"/>
      <requirement
          name="com.basistech.m2e.code.quality.spotbugs.feature.feature.group"/>
      <requirement
          name="org.sonarlint.eclipse.feature.feature.group"/>
      <requirement
          name="org.moreunit.feature.feature.group"/>
      <requirement
          name="de.jcup.jenkinseditor.feature.feature.group"/>
      <requirement
          name="de.jcup.yamleditor.feature.group"/>
      <requirement
          name="com.essiembre.eclipse.rbe.feature.group"/>
      <repository
          url="${fips.update.site}"/>
      <repository
          url="https://update.faktorzehn.org/faktorips/productvariants/"/>
      <repository
          url="https://download.eclipse.org/modeling/tmf/xtext/updates/composite/marketplace/"/>
      <repository
          url="https://checkstyle.org/eclipse-cs-update-site"/>
      <repository
          url="https://spotbugs.github.io/eclipse/"/>
      <repository
          url="https://m2e-code-quality.github.io/m2e-code-quality-p2-site/"/>
      <repository
          url="https://github.com/MoreUnit/MoreUnit-Eclipse/releases/latest/download/"/>
      <repository
          url="https://de-jcup.github.io/update-site-eclipse-jenkins-editor/update-site/"/>
      <repository
          url="https://de-jcup.github.io/update-site-eclipse-yaml-editor/update-site/"/>
      <repository
          url="https://eclipse-uc.sonarlint.org"/>
      <repository
          url="https://raw.githubusercontent.com/essiembre/eclipse-rbe/master/eclipse-rbe-update-site/"/>
      <description>
        Install FaktorIPS features and essential development
        tools.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        type="FOLDER"
        name="git.clone.faktorips.productdesigner.location"
        defaultValue="${installation.location/../git/faktorips.productdesigner}"
        storageURI="scope://Workspace"
        label="Git Repository Location">
      <description>
        Full path to faktorips.productdesigner repository.
        If path points to an existing repository, no clone action will
        be executed.
      </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.faktorips.productdesigner.remoteURI"
        value="ssh://${git.user.name}@gerrit.faktorzehn.de:29418/faktorips/faktorips.productdesigner">
      <description>gerrit-repo-url</description>
    </setupTask>
    <setupTask
        xsi:type="setup:VariableTask"
        name="git.clone.faktorips.productdesigner.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="maven.build.profile"
        defaultValue="sso"
        storageURI="scope://Workspace"
        label="Maven Build Profile">
      <description>
        Maven profile to use for the build (e.g., 'sso',
        'default').
      </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.faktorips.productdesigner"
        location="${git.clone.faktorips.productdesigner.location}"
        remoteURI="${git.clone.faktorips.productdesigner.remoteURI}"
        checkoutBranch="${git.clone.faktorips.productdesigner.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 FaktorIPS Product Designer repository from
        Gerrit with optimal Git configuration.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:CompoundTask"
        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.faktorips.productdesigner.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.faktorips.productdesigner.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="setup:CompoundTask"
        id="maven.build.task"
        name="Maven Build">
      <setupTask
          xsi:type="setup:ExecuteTask"
          id="maven.build"
          command="mvn"
          workingDirectory="${git.clone.faktorips.productdesigner.location}">
				<argument
            value="clean"/>
				<argument
            value="install"/>
				<argument
            value="-V"/>
				<argument
            value="-DskipTests=true"/>
				<argument
            value="-P${maven.build.profile}"/>
				<argument
            value="-Dgit.fail.build=false"/>
				<argument
            value="-T"/>
				<argument
            value="1C"/>
				<description>Execute Maven build with parallel processing for
					faster builds.</description>
			</setupTask>
    </setupTask>
    <setupTask
        xsi:type="maven:MavenImportTask"
        id="maven.import">
      <sourceLocator
          rootFolder="${git.clone.faktorips.productdesigner.location}"
          locateNestedProjects="true"/>
      <description>
        Import all Maven projects from the repository using
        M2E.
      </description>
    </setupTask>
    <setupTask
        xsi:type="setup:CompoundTask"
        name="Product Designer Preferences">
      <setupTask
          xsi:type="setup:PreferenceTask"
          key="@Preferences@"
          value="file:${git.clone.faktorips.productdesigner.location}/.cfg/preferences.epf">
        <description>Eclipse preferences (.epf)</description>
      </setupTask>
      <setupTask
          xsi:type="setup:PreferenceTask"
          key="/instance/org.eclipse.jdt.ui/spelling_user_dictionary"
          value="${git.clone.faktorips.productdesigner.location}/.cfg/f10_dict.txt">
        <description>F10 spelling dictionary</description>
      </setupTask>
      <setupTask
          xsi:type="jdt:JRETask"
          version="JavaSE-21"
          location="${jre.location-21}">
        <description>Java 21 JRE</description>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Code Style">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.importorder"
            value="java;javax;org;com;">
          <description>Import order</description>
        </setupTask>
        <setupTask
            xsi:type="setup:CompoundTask"
            name="Manual Import if needed">
          <annotation
              source="http://www.eclipse.org/oomph/setup/UserDescription">
            <detail
                key="description">
              <value>
                If profiles not loaded: Window → Preferences
                → Java → Code Style → Import XMLs from .cfg/
              </value>
            </detail>
          </annotation>
        </setupTask>
        <setupTask
            xsi:type="jdt:JavaFormatterTask"
            profileName="FaktorIps">
				<sourceFile>
					${git.clone.faktorips.productdesigner.location}/.cfg/codeformats.xml</sourceFile>
				<description>Java Formatter</description>
			</setupTask>
        <setupTask
            xsi:type="jdt:JavaCleanupTask"
            profileName="FaktorIps">
				<sourceFile>
					${git.clone.faktorips.productdesigner.location}/.cfg/cleanup.xml</sourceFile>
				<description>Java Clean Up</description>
			</setupTask>
        <setupTask
            xsi:type="jdt:JavaCodeTemplatesTask">
				<sourceFile>
					${git.clone.faktorips.productdesigner.location}/.cfg/codetemplates.xml</sourceFile>
				<description>Code Templates</description>
			</setupTask>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="XML Editor Settings">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/lineWidth"
            value="999">
          <description>XML line width</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/indentationSize"
            value="4">
          <description>XML indentation size</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/splitMultiAttrs"
            value="false">
          <description>Do not split attributes</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/indentationChar"
            value="space">
          <description>XML indent using spaces</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/indentationSize"
            value="4">
          <description>XML indentation size</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/lineWidth"
            value="999">
          <description>XML line width</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/splitMultiAttrs"
            value="false">
          <description>Do not split attributes</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.wst.xml.core/formatCommentJoinLines"
            value="false">
          <description>Do not join lines</description>
        </setupTask>
      </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="true">
          <description>Update Maven projects on startup</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
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.ui/spelling_user_dictionary"
            value="${git.clone.faktorips.productdesigner.location}/.cfg/f10_dict.txt">
          <description>Custom spelling dictionary for FaktorIPS</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.ui/spelling_user_dictionary_encoding"
            value="UTF-8">
          <description>Dictionary encoding</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.ui.editors/spellingEnabled"
            value="true">
          <description>Enable spelling check</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
            xsi:type="setup:PreferenceTask"
            key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.codeComplete.visibilityCheck"
            value="enabled">
          <description>Enable visibility check in code completion</description>
        </setupTask>
      </setupTask>
      <setupTask
          xsi:type="setup:CompoundTask"
          name="Code Quality Tool Settings">
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/com.basistech.m2e.code.quality.checkstyle/eclipseCheckstyleGenerateFormatterSettings"
            value="true">
          <description>Generate formatter settings from Checkstyle</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/com.github.spotbugs.plugin.eclipse/run_at_full_build"
            value="false">
          <description>Don't run SpotBugs at full build (performance)</description>
        </setupTask>
        <setupTask
            xsi:type="setup:PreferenceTask"
            key="/instance/net.sf.eclipsecs.core/background.full.build"
            value="true">
          <description>Run Checkstyle in background during full build</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>FaktorIPS Product Designer development environment.</description>
</setup:Project>
