<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>net.sf.xtext-jbase</groupId>
  <artifactId>jbase.parent</artifactId>
  <version>0.12.2</version>
  <packaging>pom</packaging>
    <!-- IMPORTANT: the parent's version (unrelated to this artifact's version) 
    must come after this artifact's version to make the increment_version.ant behave 
    correctly. -->
  <parent>
    <groupId>io.github.lorenzobettini.xtextutils</groupId>
    <artifactId>xtext-tycho-parent</artifactId>
    <version>0.6.5</version>
    <relativePath></relativePath>
  </parent>

  <name>Jbase</name>
  <url>http://xtext-jbase.sf.net</url>
  <description>Jbase: a Customization of Xtext Xbase to deal with pure Java.</description>

  <licenses>
    <license>
      <name>Eclipse Public License</name>
      <url>http://www.eclipse.org/legal/epl-v10.html</url>
    </license>
  </licenses>

  <developers>
    <developer>
      <name>Lorenzo Bettini</name>
      <email>lorenzo.bettini@gmail.com</email>
      <roles>
        <role>architect</role>
        <role>developer</role>
      </roles>
      <organization>Dip. Informatica, Univ. Torino</organization>
      <organizationUrl>http://www.di.unito.it</organizationUrl>
    </developer>
  </developers>

  <scm>
    <url>git@github.com/LorenzoBettini/jbase.git</url>
    <developerConnection>scm:git:https://github.com/LorenzoBettini/jbase.git</developerConnection>
    <connection>scm:git:git@github.com/LorenzoBettini/jbase.git</connection>
  </scm>

  <issueManagement>
    <system>Github</system>
    <url>https://github.com/LorenzoBettini/jbase/issues</url>
  </issueManagement>

  <properties>
    <junit-version>4.13.1</junit-version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <memoryArgs>-Xms256M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError</memoryArgs>
    <xtext-version>${xtextVersion}</xtext-version>

    <eclipse-version>2021-09</eclipse-version>
    <target-file-name>jbase.target</target-file-name>

    <!-- <jacoco.reportPath>../target/jacoco.exec</jacoco.reportPath> -->

    <!-- Sonar -->
    <!-- <sonar.junit.reportsPath>../${project.artifactId}.tests/target/surefire-reports/</sonar.junit.reportsPath> -->

    <jacoco-aggregate-report>jbase.tests.report/target/site/jacoco-aggregate/jacoco.xml</jacoco-aggregate-report>

    <sonar.coverage.jacoco.xmlReportPaths>
      ../${jacoco-aggregate-report}
    </sonar.coverage.jacoco.xmlReportPaths>

    <!-- For this class code coverage information doesn't seem to be picked 
      correctly.
      Exclude Xtend generated files from code coverage:
      we cover the original Xtend files, using xtendAsPrimaryDebugSource.
      Exclude also our test DSLs generated sources -->
    <sonar.coverage.exclusions>
      **/JbaseIssueCodes.java,
      **/xtend-gen/**/*.java,
      **/generated-sources/**/*.java,
    </sonar.coverage.exclusions>

    <!-- By default we exclude all projects from Sonarqube analysis,
      and we explicitly enable the ones we want to analyze. -->
    <sonar.skip>true</sonar.skip>

    <sonar.exclusions>
      **/testlanguage/**,
      **/example/**,
      **/mwe2/**,
      **/New*FileWizard*.java,
      **/src-gen/**,
      **/emf-gen/**,
      **/impl/*ImplCustom.java,
      **/tests/**,
      **/*RuntimeModule.java,
      **/*UiModule.java,
      **/*XcoreReader.java,
      **/*UiExamples.java,
      **/*TypeSystemGen*.java,
      **/*StandaloneSetup*.java,
      **/jbase/lib/**,
      **/jbase/ide/**,
      **/jbase/internal/**,
      **/jbase/serializer/**,
      **/*LabelProvider.*,
      **/*TreeProvider.*,
      **/*XbasePatchedFormatter.*
    </sonar.exclusions>

    <!-- To make SonarQube detect JUnit tests in generated Java code from Xtend -->
    <sonar.scm.exclusions.disabled>true</sonar.scm.exclusions.disabled>

    <!-- see http://sonarqube.15.x6.nabble.com/sonar-issue-ignore-multicriteria-td5021722.html 
      and http://stackoverflow.com/questions/21825469/configure-sonar-sonar-issue-ignore-multicriteria-through-maven 
      for the multicriteria property -->
    <sonar.issue.ignore.multicriteria>e11,e12,e13,e14,e15,e2,e3,e4,e5,e6,e7,e8</sonar.issue.ignore.multicriteria>

    <!-- standard convention for method names: in the outline tree provider 
      we must use methods that start with _ and they'd violate the rule squid:S00100 -->
    <sonar.issue.ignore.multicriteria.e11.ruleKey>java:S100</sonar.issue.ignore.multicriteria.e11.ruleKey>
    <sonar.issue.ignore.multicriteria.e11.resourceKey>**/*OutlineTreeProvider.java</sonar.issue.ignore.multicriteria.e11.resourceKey>

    <sonar.issue.ignore.multicriteria.e12.ruleKey>java:S100</sonar.issue.ignore.multicriteria.e12.ruleKey>
    <sonar.issue.ignore.multicriteria.e12.resourceKey>**/*AbstractXbaseProposalProvider.java</sonar.issue.ignore.multicriteria.e12.resourceKey>

    <sonar.issue.ignore.multicriteria.e13.ruleKey>java:S100</sonar.issue.ignore.multicriteria.e13.ruleKey>
    <sonar.issue.ignore.multicriteria.e13.resourceKey>**/*XbaseCompiler.java</sonar.issue.ignore.multicriteria.e13.resourceKey>

    <sonar.issue.ignore.multicriteria.e14.ruleKey>java:S100</sonar.issue.ignore.multicriteria.e14.ruleKey>
    <sonar.issue.ignore.multicriteria.e14.resourceKey>**/*ValueConverterService.java</sonar.issue.ignore.multicriteria.e14.resourceKey>

    <sonar.issue.ignore.multicriteria.e15.ruleKey>java:S100</sonar.issue.ignore.multicriteria.e15.ruleKey>
    <sonar.issue.ignore.multicriteria.e15.resourceKey>**/*TypeComputer.java</sonar.issue.ignore.multicriteria.e15.resourceKey>

    <!-- "Tabulation characters should not be used" sorry... I don't agree 
      :) -->
    <sonar.issue.ignore.multicriteria.e2.ruleKey>squid:S00105</sonar.issue.ignore.multicriteria.e2.ruleKey>
    <sonar.issue.ignore.multicriteria.e2.resourceKey>**/*.java</sonar.issue.ignore.multicriteria.e2.resourceKey>

    <!-- Unused parameters are needed in these files for polymorphic dispatching -->
    <sonar.issue.ignore.multicriteria.e3.ruleKey>java:S1172</sonar.issue.ignore.multicriteria.e3.ruleKey>
    <sonar.issue.ignore.multicriteria.e3.resourceKey>**/*XbaseCompiler.java</sonar.issue.ignore.multicriteria.e3.resourceKey>

    <!-- Unused parameters are needed in these files for polymorphic dispatching -->
    <sonar.issue.ignore.multicriteria.e4.ruleKey>java:S1172</sonar.issue.ignore.multicriteria.e4.ruleKey>
    <sonar.issue.ignore.multicriteria.e4.resourceKey>**/*AbstractXbaseProposalProvider.java</sonar.issue.ignore.multicriteria.e4.resourceKey>

    <!-- Useless parenthesis; these files use code automatically generated -->
    <sonar.issue.ignore.multicriteria.e5.ruleKey>squid:UselessParenthesesCheck</sonar.issue.ignore.multicriteria.e5.ruleKey>
    <sonar.issue.ignore.multicriteria.e5.resourceKey>**/*AbstractXbaseProposalProvider.java</sonar.issue.ignore.multicriteria.e5.resourceKey>

    <!-- since we extend Xbase it's normal to have a deep inheritance -->
    <sonar.issue.ignore.multicriteria.e6.ruleKey>squid:MaximumInheritanceDepth</sonar.issue.ignore.multicriteria.e6.ruleKey>
    <sonar.issue.ignore.multicriteria.e6.resourceKey>**/*.java</sonar.issue.ignore.multicriteria.e6.resourceKey>

    <!-- The return value of "parseByte" and "parseShort" must be used. We 
      just need to check whether they're parsable -->
    <sonar.issue.ignore.multicriteria.e7.ruleKey>squid:S2201</sonar.issue.ignore.multicriteria.e7.ruleKey>
    <sonar.issue.ignore.multicriteria.e7.resourceKey>**/*PatchedTypeComputer.java</sonar.issue.ignore.multicriteria.e7.resourceKey>

    <!-- Disable rule for undocumented API (we have no API) -->
    <sonar.issue.ignore.multicriteria.e8.ruleKey>squid:UndocumentedApi</sonar.issue.ignore.multicriteria.e8.ruleKey>
    <sonar.issue.ignore.multicriteria.e8.resourceKey>**/*.java</sonar.issue.ignore.multicriteria.e8.resourceKey>

    <!-- sonar.skippedModules is deprecated: https://jira.codehaus.org/browse/SONAR-5109 -->
    <!-- instead we must use advanced reactor options: https://jira.codehaus.org/browse/MSONAR-61 -->
    <!-- Example: mvn sonar:sonar -pl :jbase.parent,:jbase.runtime,:jbase,:jbase.ui -->

    <!-- Otherwise we'll have problems due to generated sources, which are 
      not in the git repository (since Sonarqube 5) -->
    <!-- <sonar.scm.disabled>true</sonar.scm.disabled> -->

    <smoke.tests.skip>false</smoke.tests.skip>

    <!-- since this is used in the pluginManagement section, we need to make 
      sure the path always points to this pom's directory; project.basedir will 
      always point to the directory of the pom where the pluginManagement's plugins 
      are used -->
    <ant-files-path>${project.basedir}/../jbase.parent/ant</ant-files-path>

    <!-- properties for deploying the composite update site
      on GitHub Pages -->
    <github-update-repo>git@github.com:LorenzoBettini/jbase-releases.git</github-update-repo>
    <github-local-clone>${project.build.directory}/checkout</github-local-clone>
    <releases-directory>${github-local-clone}/releases</releases-directory>
    <current-release-directory>${releases-directory}/${qualifiedVersion}</current-release-directory>
    <!-- The label for the Composite sites -->
    <site.label>Jbase Site</site.label>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.eclipse.xtext</groupId>
        <artifactId>xtext-dev-bom</artifactId>
        <version>${xtextVersion}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <profiles>
    <profile>
      <id>local</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>

      <properties>
        <target-file-name>local</target-file-name>
      </properties>
    </profile>

    <profile>
      <id>sonatype-oss-release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.3</version>
            <extensions>true</extensions>
            <configuration>
              <serverId>ossrh</serverId>
              <nexusUrl>https://oss.sonatype.org/</nexusUrl>
              <autoReleaseAfterClose>true</autoReleaseAfterClose>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
                <!-- Use the following configuration with Java 8 -->
                <configuration>
                  <additionalparam>-Xdoclint:none</additionalparam>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-p2-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-p2-metadata</id>
              </execution>
            </executions>
            <configuration>
              <defaultP2Metadata>false</defaultP2Metadata>
              <attachP2Metadata>false</attachP2Metadata>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>1.5</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>release-composite</id>
      <properties>
        <xtext.maven.skip>true</xtext.maven.skip>
        <skipTests>true</skipTests>
      </properties>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <executions>
                <execution>
                  <id>default-install</id>
                  <phase>none</phase>
                </execution>
              </executions>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <configuration>
                <skip>true</skip>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.eluder.coveralls</groupId>
          <artifactId>coveralls-maven-plugin</artifactId>
          <version>4.3.0</version>
          <configuration>
            <jacocoReports>
              <!-- by default Jacoco generates its report here -->
              <jacocoReport>${sonar.coverage.jacoco.xmlReportPaths}</jacocoReport>
            </jacocoReports>
          </configuration>
          <dependencies>
            <!-- This is required when using JDK 9 or higher since javax.xml.bind has 
              been removed from the JDK -->
            <dependency>
              <groupId>javax.xml.bind</groupId>
              <artifactId>jaxb-api</artifactId>
              <version>2.3.1</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.9.0.2155</version>
        </plugin>
        <plugin>
          <groupId>org.eclipse.tycho</groupId>
          <artifactId>tycho-packaging-plugin</artifactId>
          <version>${tycho-version}</version>
          <dependencies>
            <dependency>
              <groupId>org.eclipse.tycho.extras</groupId>
              <artifactId>tycho-buildtimestamp-jgit</artifactId>
              <version>${tycho-version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <timestampProvider>jgit</timestampProvider>
            <jgit.ignore>
              pom.xml
              .polyglot.build.properties
              ui-tests.txt
            </jgit.ignore>
            <format>'v'yyyyMMdd'-'HHmm</format>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <configuration>
          <target>
            <artifact>
              <groupId>net.sf.xtext-jbase</groupId>
              <artifactId>jbase.targetplatform</artifactId>
              <version>${project.version}</version>
              <classifier>${target-file-name}</classifier>
            </artifact>
          </target>
          <dependency-resolution>
            <extraRequirements combine.children="append">
              <requirement>
                <type>eclipse-plugin</type>
                <id>org.eclipse.xtext.ui.codemining</id>
                <versionRange>0.0.0</versionRange>
              </requirement>
            </extraRequirements>
          </dependency-resolution>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <distributionManagement>
    <snapshotRepository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>

</project>
