Pull request handler prototype
diff --git a/prs/build.xml b/prs/build.xml
new file mode 100644
index 0000000..cac238e
--- /dev/null
+++ b/prs/build.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project name="prs" default="build" basedir=".">
+ <target name="build">
+ <ant dir="handler" target="download-ext-bins" />
+ <ant dir="handler/impl" target="clean" />
+ <ant dir="handler/impl" target="build-prs-handler" />
+ <exec executable="mvn" dir="webapp">
+ <arg value="clean" />
+ </exec>
+ <exec executable="mvn" dir="webapp">
+ <arg value="install" />
+ </exec>
+ <exec executable="mvn" dir="webapp">
+ <arg value="dependency:copy-dependencies" />
+ </exec>
+ <delete dir="build/prs" />
+ <mkdir dir="build/prs" />
+ <copy todir="build/prs/handler">
+ <fileset dir="handler/impl/build/handler"/>
+ </copy>
+ <copy todir="build/prs/webapp/dependency">
+ <fileset dir="webapp/target/dependency"/>
+ </copy>
+ <copy todir="build/prs/webapp/">
+ <fileset dir="webapp/target/" includes="webapp*" />
+ </copy>
+ <copy todir="build/prs/">
+ <fileset dir="script" includes="prs"/>
+ </copy>
+ <chmod file="build/prs/handler/bin/handler" perm="u+x" />
+ <chmod file="build/prs/prs" perm="u+x" />
+ </target>
+</project>
diff --git a/prs/handler/build.xml b/prs/handler/build.xml
new file mode 100644
index 0000000..ac82104
--- /dev/null
+++ b/prs/handler/build.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="handler" basedir=".">
+ <description>Builds the module suite handler.</description>
+ <import file="nbproject/build-impl.xml"/>
+ <target name="download-ext-bins">
+ <taskdef name="downloadbinaries" classname="org.netbeans.nbbuild.extlibs.DownloadBinaries" classpath="${harness.dir}/tasks.jar"/>
+ <property name="binaries.cache" location="${user.home}/.hgexternalcache"/>
+ <property name="binaries.server" value="http://netbeans.osuosl.org/binaries/"/>
+ <downloadbinaries cache="${binaries.cache}" server="${binaries.server}">
+ <manifest dir="${basedir}">
+ <include name="**/binaries-list"/>
+ </manifest>
+ </downloadbinaries>
+ </target>
+</project>
diff --git a/prs/handler/impl/build.xml b/prs/handler/impl/build.xml
new file mode 100644
index 0000000..808ad44
--- /dev/null
+++ b/prs/handler/impl/build.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="org.netbeans.modules.jackpot.prs.handler.impl" default="netbeans" basedir=".">
+ <description>Builds, tests, and runs the project org.netbeans.modules.jackpot.prs.handler.impl.</description>
+ <import file="nbproject/build-impl.xml"/>
+ <target name="build-prs-handler" depends="build,test-init">
+ <mkdir dir="${handler.build.dir}/bin" />
+ <mkdir dir="${handler.build.dir}/lib" />
+ <copy todir="${handler.build.dir}/lib" flatten="true" failonerror="false">
+ <path refid="test.unit.run.cp" />
+ </copy>
+ <copy todir="${handler.build.dir}/bin" file="script/handler" />
+ <copy todir="${handler.build.dir}/bin" file="script/handler.docker" />
+ <copy todir="${handler.build.dir}/bin" file="script/handler.remote" />
+ <chmod file="${handler.build.dir}/bin/handler*" perm="u+x" />
+ <delete file="${handler.build.dir}/lib/nb-javac-9-api.jar" />
+ <delete file="${handler.build.dir}/lib/nb-javac-9-impl.jar" />
+ <delete file="${handler.build.dir}/lib/org-netbeans-modules-java-source-nbjavac.jar" />
+ </target>
+ <target name="clean" depends="projectized-common.clean">
+ <delete dir="${handler.build.dir}" />
+ </target>
+</project>
diff --git a/prs/handler/impl/manifest.mf b/prs/handler/impl/manifest.mf
new file mode 100644
index 0000000..109f88c
--- /dev/null
+++ b/prs/handler/impl/manifest.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+AutoUpdate-Show-In-Client: true
+OpenIDE-Module: org.netbeans.modules.jackpot.prs.handler.impl
+OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/jackpot/prs/handler/impl/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+
diff --git a/prs/handler/impl/nbproject/build-impl.xml b/prs/handler/impl/nbproject/build-impl.xml
new file mode 100644
index 0000000..3466fc3
--- /dev/null
+++ b/prs/handler/impl/nbproject/build-impl.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+-->
+<project name="org.netbeans.modules.jackpot.prs.handler.impl-impl" basedir="..">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <property file="nbproject/private/suite-private.properties"/>
+ <property file="nbproject/suite.properties"/>
+ <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+ <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+ <property file="${suite.dir}/nbproject/platform.properties"/>
+ <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="property"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{property}" value="@{value}"/>
+ </sequential>
+ </macrodef>
+ <property file="${user.properties.file}"/>
+ <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+ <condition>
+ <not>
+ <contains string="${cluster.path.evaluated}" substring="platform"/>
+ </not>
+ </condition>
+ </fail>
+ <import file="${harness.dir}/build.xml"/>
+</project>
diff --git a/prs/handler/impl/nbproject/genfiles.properties b/prs/handler/impl/nbproject/genfiles.properties
new file mode 100644
index 0000000..7729482
--- /dev/null
+++ b/prs/handler/impl/nbproject/genfiles.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+build.xml.data.CRC32=60cfbba1
+build.xml.script.CRC32=61b1f922
+build.xml.stylesheet.CRC32=15ca8a54@2.76
+# 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=49a666be
+nbproject/build-impl.xml.script.CRC32=e6a5df10
+nbproject/build-impl.xml.stylesheet.CRC32=49aa68b0@2.76
diff --git a/prs/handler/impl/nbproject/project.properties b/prs/handler/impl/nbproject/project.properties
new file mode 100644
index 0000000..4d6f81a
--- /dev/null
+++ b/prs/handler/impl/nbproject/project.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+javac.source=11
+javac.compilerargs=-Xlint -Xlint:-serial
+handler.build.dir=build/handler
+test.run.args=--add-exports jdk.javadoc/com.sun.tools.javadoc.main=ALL-UNNAMED
diff --git a/prs/handler/impl/nbproject/project.xml b/prs/handler/impl/nbproject/project.xml
new file mode 100644
index 0000000..9bdc239
--- /dev/null
+++ b/prs/handler/impl/nbproject/project.xml
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.apisupport.project</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+ <code-name-base>org.netbeans.modules.jackpot.prs.handler.impl</code-name-base>
+ <suite-component/>
+ <module-dependencies>
+ <dependency>
+ <code-name-base>org.netbeans.bootstrap</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.core.netigso</code-name-base>
+ <run-dependency>
+ <specification-version>1.35</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.core.osgi</code-name-base>
+ <run-dependency>
+ <specification-version>1.26</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.core.startup</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.core.windows</code-name-base>
+ <run-dependency>
+ <release-version>2</release-version>
+ <specification-version>2.86</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.libs.felix</code-name-base>
+ <run-dependency>
+ <specification-version>2.19</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.libs.freemarker</code-name-base>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>2.38.0.238</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.apisupport.ant</code-name-base>
+ <run-dependency>
+ <specification-version>2.76</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>3</release-version>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.actions</code-name-base>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.35.0.55</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.lib</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>3</release-version>
+ <specification-version>4.11.0.23.3.55</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.lib2</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>2.22.0.55.3</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.mimelookup</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.44</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.tools.storage</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>1.12</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.java.editor</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.java.hints</code-name-base>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.87.0.17.25.12.1.1.32.4.1.13</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.java.j2seplatform</code-name-base>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.45</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.java.source.base</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.maven</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>2</release-version>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.netbinox</code-name-base>
+ <run-dependency>
+ <specification-version>1.45</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.parsing.nb</code-name-base>
+ <run-dependency>
+ <specification-version>1.7.0.8.1</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.projectapi</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.71</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.projectapi.nb</code-name-base>
+ <run-dependency>
+ <specification-version>1.7</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.projectuiapi.base</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.89.0.9</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.xml.xdm</code-name-base>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.38.0.1</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.spi.editor.hints</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>0</release-version>
+ <specification-version>1.46.0.7.55</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.spi.editor.hints.projects</code-name-base>
+ <run-dependency>
+ <specification-version>1.15.0.1.7</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.spi.java.hints</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <implementation-version/>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.filesystems</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>9.14</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.modules</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.52</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.text</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>6.71</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.util.lookup</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>8.37</specification-version>
+ </run-dependency>
+ </dependency>
+ </module-dependencies>
+ <test-dependencies>
+ <test-type>
+ <name>unit</name>
+ <test-dependency>
+ <code-name-base>org.netbeans.libs.junit4</code-name-base>
+ <compile-dependency/>
+ </test-dependency>
+ </test-type>
+ </test-dependencies>
+ <public-packages/>
+ <class-path-extension>
+ <runtime-relative-path>ext/commons-codec-1.7.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/commons-codec-1.7.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/commons-io-1.4.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/commons-io-1.4.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/commons-lang3-3.7.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/commons-lang3-3.7.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/github-api-1.95.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/github-api-1.95.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/jackson-databind-2.9.2.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/jackson-databind-2.9.2.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/jackson-core-2.9.2.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/jackson-core-2.9.2.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/slf4j-api-1.7.25.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/slf4j-api-1.7.25.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/diffparser-1.4.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/diffparser-1.4.jar</binary-origin>
+ </class-path-extension>
+ <class-path-extension>
+ <runtime-relative-path>ext/jackson-annotations-2.9.0.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/jackson-annotations-2.9.0.jar</binary-origin>
+ </class-path-extension>
+ </data>
+ </configuration>
+</project>
diff --git a/prs/handler/impl/nbproject/suite.properties b/prs/handler/impl/nbproject/suite.properties
new file mode 100644
index 0000000..5f42472
--- /dev/null
+++ b/prs/handler/impl/nbproject/suite.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+suite.dir=${basedir}/..
diff --git a/prs/handler/impl/release/modules/ext/.gitignore b/prs/handler/impl/release/modules/ext/.gitignore
new file mode 100644
index 0000000..d392f0e
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/.gitignore
@@ -0,0 +1 @@
+*.jar
diff --git a/prs/handler/impl/release/modules/ext/binaries-list b/prs/handler/impl/release/modules/ext/binaries-list
new file mode 100644
index 0000000..2d5ceff
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/binaries-list
@@ -0,0 +1,9 @@
+9CD61D269C88F9FB0EB36CEA1EFCD596AB74772F commons-codec:commons-codec:1.7
+A8762D07E76CFDE2395257A5DA47BA7C1DBD3DCE commons-io:commons-io:1.4
+557EDD918FD41F9260963583EBF5A61A43A6B423 org.apache.commons:commons-lang3:3.7
+4A193299C372973ECD7650F75D91853E0EA380C9 io.reflectoring.diffparser:diffparser:1.4
+381C85EE0EF95E827BA9821DCE1B7BDDA8392684 org.kohsuke:github-api:1.95
+07C10D545325E3A6E72E06381AFE469FD40EB701 com.fasterxml.jackson.core:jackson-annotations:2.9.0
+AED20E50152A2F19ADC1995C8D8F307C7EFA414D com.fasterxml.jackson.core:jackson-core:2.9.2
+1D8D8CB7CF26920BA57FB61FA56DA88CC123B21F com.fasterxml.jackson.core:jackson-databind:2.9.2
+DA76CA59F6A57EE3102F8F9BD9CEE742973EFA8A org.slf4j:slf4j-api:1.7.25
diff --git a/prs/handler/impl/release/modules/ext/commons-codec-1.7-license.txt b/prs/handler/impl/release/modules/ext/commons-codec-1.7-license.txt
new file mode 100644
index 0000000..75b5248
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-codec-1.7-license.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/prs/handler/impl/release/modules/ext/commons-codec-1.7-notice.txt b/prs/handler/impl/release/modules/ext/commons-codec-1.7-notice.txt
new file mode 100644
index 0000000..ef23138
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-codec-1.7-notice.txt
@@ -0,0 +1,14 @@
+Apache Commons Codec
+Copyright 2002-2012 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+--------------------------------------------------------------------------------
+src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java contains
+test data from http://aspell.sourceforge.net/test/batch0.tab.
+
+Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org). Verbatim copying
+and distribution of this entire article is permitted in any medium,
+provided this notice is preserved.
+--------------------------------------------------------------------------------
diff --git a/prs/handler/impl/release/modules/ext/commons-io-1.4-license.txt b/prs/handler/impl/release/modules/ext/commons-io-1.4-license.txt
new file mode 100644
index 0000000..43e91eb
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-io-1.4-license.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/prs/handler/impl/release/modules/ext/commons-io-1.4-notice.txt b/prs/handler/impl/release/modules/ext/commons-io-1.4-notice.txt
new file mode 100644
index 0000000..c482abe
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-io-1.4-notice.txt
@@ -0,0 +1,6 @@
+Apache Commons IO
+Copyright 2001-2008 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/prs/handler/impl/release/modules/ext/commons-lang3-3.7-license.txt b/prs/handler/impl/release/modules/ext/commons-lang3-3.7-license.txt
new file mode 100644
index 0000000..75b5248
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-lang3-3.7-license.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/prs/handler/impl/release/modules/ext/commons-lang3-3.7-notice.txt b/prs/handler/impl/release/modules/ext/commons-lang3-3.7-notice.txt
new file mode 100644
index 0000000..7928bfd
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/commons-lang3-3.7-notice.txt
@@ -0,0 +1,8 @@
+Apache Commons Lang
+Copyright 2001-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software from the Spring Framework,
+under the Apache License 2.0 (see: StringUtils.containsWhitespace())
diff --git a/prs/handler/impl/release/modules/ext/diffparser-1.4-license.txt b/prs/handler/impl/release/modules/ext/diffparser-1.4-license.txt
new file mode 100644
index 0000000..37ec93a
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/diffparser-1.4-license.txt
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/prs/handler/impl/release/modules/ext/diffparser-1.4-notice.txt b/prs/handler/impl/release/modules/ext/diffparser-1.4-notice.txt
new file mode 100644
index 0000000..ce0fbe2
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/diffparser-1.4-notice.txt
@@ -0,0 +1,14 @@
+ Copyright 2013-2017 Tom Hombergs (tom.hombergs@gmail.com | http://reflectoring.io)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/prs/handler/impl/release/modules/ext/jackson-annotations-2.9.0-license.txt b/prs/handler/impl/release/modules/ext/jackson-annotations-2.9.0-license.txt
new file mode 100644
index 0000000..ff94ef8
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/jackson-annotations-2.9.0-license.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor annotations is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-license.txt b/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-license.txt
new file mode 100644
index 0000000..f5f45d2
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-license.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor streaming parser/generator is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-notice.txt b/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-notice.txt
new file mode 100644
index 0000000..4c976b7
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/jackson-core-2.9.2-notice.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
diff --git a/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-license.txt b/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-license.txt
new file mode 100644
index 0000000..6acf754
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-license.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor databind module is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-notice.txt b/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-notice.txt
new file mode 100644
index 0000000..5ab1e56
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/jackson-databind-2.9.2-notice.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may be licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
diff --git a/prs/handler/impl/release/modules/ext/slf4j-api-1.7.25-license.txt b/prs/handler/impl/release/modules/ext/slf4j-api-1.7.25-license.txt
new file mode 100644
index 0000000..c8e72c2
--- /dev/null
+++ b/prs/handler/impl/release/modules/ext/slf4j-api-1.7.25-license.txt
@@ -0,0 +1,21 @@
+ Copyright (c) 2004-2017 QOS.ch
+ All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/prs/handler/impl/script/handler b/prs/handler/impl/script/handler
new file mode 100755
index 0000000..78ae54f
--- /dev/null
+++ b/prs/handler/impl/script/handler
@@ -0,0 +1,3 @@
+#!/bin/sh
+LIB=`dirname $0`/../lib
+java $JACKPOT_PRS_EXTRA_JVM_OPTIONS --add-exports jdk.javadoc/com.sun.tools.javadoc.main=ALL-UNNAMED -classpath `find $LIB -name "*.jar" | tr '\n' ':'` org.netbeans.modules.jackpot.prs.handler.impl.HandlePullRequest "$@"
diff --git a/prs/handler/impl/script/handler.docker b/prs/handler/impl/script/handler.docker
new file mode 100755
index 0000000..6a19361
--- /dev/null
+++ b/prs/handler/impl/script/handler.docker
@@ -0,0 +1,65 @@
+#!/bin/sh -x
+
+#image:
+PROXY=$(docker build -q - <<EOF
+FROM ubuntu:18.10
+
+RUN apt update && \
+ apt --yes install squid
+
+RUN echo "acl maven dstdomain central.maven.org" >/etc/squid/conf.d/proxy.conf &&\
+ echo "acl ubuntu dstdomain security.ubuntu.com" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl ubuntu dstdomain archive.ubuntu.com" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl github dstdomain github.com" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl github dstdomain api.github.com" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl github dstdomain patch-diff.githubusercontent.com" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl netbeans dstdomain netbeans.osuosl.org" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl allowed_ports port 80" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "acl allowed_ports port 443" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "http_access allow maven allowed_ports" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "http_access allow ubuntu allowed_ports" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "http_access allow github allowed_ports" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "http_access allow netbeans allowed_ports" >>/etc/squid/conf.d/proxy.conf &&\
+ echo "http_access deny all" >>/etc/squid/conf.d/proxy.conf
+
+ENTRYPOINT [ "squid", "--foreground" ]
+EOF
+)
+PROXY=`echo $PROXY | cut -d ':' -f 2`
+
+#container:
+PROXY_CONTAINER=`docker run --rm -d $PROXY`
+#docker container rename $PROXY_CONTAINER jackpot-proxy-$PROXY_CONTAINER
+
+#networking:
+docker network create --driver bridge --internal jackpot-network-$PROXY_CONTAINER
+docker network create --driver bridge jackpot-public-network-$PROXY_CONTAINER
+
+docker network disconnect bridge $PROXY_CONTAINER
+docker network connect --alias jackpot-proxy jackpot-network-$PROXY_CONTAINER $PROXY_CONTAINER
+docker network connect jackpot-public-network-$PROXY_CONTAINER $PROXY_CONTAINER
+
+WORKER=$(docker build -q -f - `dirname $0`/.. <<EOF
+FROM ubuntu:18.10
+
+RUN apt update && \
+ apt --yes install openjdk-11-jdk build-essential maven ant gradle git
+
+RUN useradd -m compute
+
+COPY . /home/compute/handler
+
+RUN chown -R compute /home/compute/handler
+
+USER compute
+
+ENTRYPOINT [ "/home/compute/handler/bin/handler", "-Dhttp.proxyHost=jackpot-proxy", "-Dhttp.proxyPort=3128", "-Dhttps.proxyHost=jackpot-proxy", "-Dhttps.proxyPort=3128"]
+EOF
+)
+
+docker run --rm --env PR_CONTENT --env OAUTH_TOKEN --env OAUTH_APP_TOKEN --network jackpot-network-$PROXY_CONTAINER --env "http_proxy=http://jackpot-proxy:3128/" --env "https_proxy=http://jackpot-proxy:3128/" --env "JACKPOT_PRS_EXTRA_JVM_OPTIONS=-Dhttp.proxyHost=jackpot-proxy -Dhttp.proxyPort=3128 -Dhttps.proxyHost=jackpot-proxy -Dhttps.proxyPort=3128" $WORKER
+
+docker container stop $PROXY_CONTAINER
+docker network rm jackpot-network-$PROXY_CONTAINER jackpot-public-network-$PROXY_CONTAINER
+
+
diff --git a/prs/handler/impl/script/handler.remote b/prs/handler/impl/script/handler.remote
new file mode 100755
index 0000000..a205007
--- /dev/null
+++ b/prs/handler/impl/script/handler.remote
@@ -0,0 +1,14 @@
+#!/bin/sh -x
+
+if [ "x$1" = "x" -o "x$2" = "x" -o "x$3" = "x" ]; then
+ echo "Incorrect parameters!"
+ exit 1;
+fi;
+
+rsync -av `dirname $0`/../ $1:$2/
+
+ssh -o "SendEnv=PR_CONTENT" -o "SendEnv=OAUTH_TOKEN" -o "SendEnv=OAUTH_APP_TOKEN" $1 /bin/bash <<EOF
+cd $2/bin;
+./$3
+EOF
+
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/Bundle.properties b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/Bundle.properties
new file mode 100644
index 0000000..c8445a6
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/Bundle.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+OpenIDE-Module-Name=PR Handler Impl
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java
new file mode 100644
index 0000000..8e2acec
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java
@@ -0,0 +1,266 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.jackpot.prs.handler.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.reflectoring.diffparser.api.UnifiedDiffParser;
+import io.reflectoring.diffparser.api.model.Diff;
+import io.reflectoring.diffparser.api.model.Hunk;
+import io.reflectoring.diffparser.api.model.Line;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.kohsuke.github.GHCommitState;
+import org.kohsuke.github.GHPullRequest;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GitHub;
+import org.netbeans.api.java.source.ClasspathInfo;
+import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.project.FileOwnerQuery;
+import org.netbeans.api.project.Project;
+import org.netbeans.api.project.ProjectManager;
+import org.netbeans.api.project.ui.OpenProjects;
+import org.netbeans.modules.java.hints.spiimpl.batch.BatchUtilities;
+import org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker;
+import org.netbeans.modules.java.hints.spiimpl.options.HintsSettings;
+import org.netbeans.modules.parsing.impl.indexing.implspi.CacheFolderProvider;
+import org.netbeans.spi.editor.hints.ErrorDescription;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+import org.openide.modules.ModuleInfo;
+import org.openide.modules.Places;
+import org.openide.util.Lookup;
+
+/**
+ *
+ * @author lahvac
+ */
+public class HandlePullRequest {
+ public static void main(String... args) throws Exception {
+ String content = System.getenv().get("PR_CONTENT");
+ String token = System.getenv().get("OAUTH_TOKEN");
+ String appToken = System.getenv().get("OAUTH_APP_TOKEN");
+ processPullRequest(content, token, appToken);
+ }
+
+ public static void processPullRequest(String inputData, String oauthToken, String oauthAppToken) throws Exception {
+ Path tempDir = Files.createTempDirectory("pull.requests");
+ File userdir = tempDir.resolve("scratch-user").toFile();
+ File cachedir = tempDir.resolve("scratch-cache").toFile();
+ System.setProperty("netbeans.user", userdir.getAbsolutePath());
+ File varLog = new File(new File(userdir, "var"), "log");
+ varLog.mkdirs();
+ System.setProperty("jdk.home", System.getProperty("java.home")); //for j2seplatform
+ Class<?> main = Class.forName("org.netbeans.core.startup.Main");
+ main.getDeclaredMethod("initializeURLFactory").invoke(null);
+ new File(cachedir, "index").mkdirs();
+// DefaultCacheFolderProvider.getInstance().setCacheFolder(FileUtil.toFileObject(new File(cachedir, "index")));
+ CacheFolderProvider.getCacheFolderForRoot(Places.getUserDirectory().toURI().toURL(), EnumSet.noneOf(CacheFolderProvider.Kind.class), CacheFolderProvider.Mode.EXISTENT);
+
+ Lookup.getDefault().lookup(ModuleInfo.class);
+
+ Map<String, Object> inputParsed = new ObjectMapper().readValue(inputData, Map.class);
+ Object action = inputParsed.get("action");
+ if (!"opened".equals(action))
+ return ;
+ Map<String, Object> pullRequest = (Map<String, Object>) inputParsed.get("pull_request");
+ if (pullRequest == null) {
+ return ;
+ }
+ Map<String, Object> base = (Map<String, Object>) pullRequest.get("base");
+ Map<String, Object> baseRepo = (Map<String, Object>) base.get("repo");
+ Map<String, Object> head = (Map<String, Object>) pullRequest.get("head");
+ Map<String, Object> headRepo = (Map<String, Object>) head.get("repo");
+
+ GitHub statusGithub = oauthToken != null ? GitHub.connectUsingOAuth(oauthToken) : GitHub.connect();
+ String fullRepoName = (String) baseRepo.get("full_name");
+ GHRepository statusTarget = statusGithub.getRepository(fullRepoName);
+ String sha = (String) head.get("sha");
+
+ statusTarget.createCommitStatus(sha, GHCommitState.PENDING, null, "Running Jackpot verification");
+
+ String cloneURL = (String) headRepo.get("clone_url");
+ new ProcessBuilder("git", "clone", cloneURL, "workdir").directory(tempDir.toFile()).inheritIO().start().waitFor();
+ FileObject workdir = FileUtil.toFileObject(tempDir.resolve("workdir").toFile());
+ new ProcessBuilder("git", "checkout", sha).directory(FileUtil.toFile(workdir)).inheritIO().start().waitFor();
+ Set<Project> projects = new HashSet<>();
+ Map<FileObject, FileData> file2Remap = new HashMap<>();
+ String diffURL = (String) pullRequest.get("diff_url");
+ URLConnection conn = new URL(diffURL).openConnection();
+ String text;
+ try (InputStream in = conn.getInputStream()) {
+ String encoding = conn.getContentEncoding();
+ if (encoding == null) encoding = "UTF-8";
+ //workaround for the diff parser, which does not handle git diffs properly:
+ text = new String(in.readAllBytes(), encoding)
+ .replace("\ndiff --git", "\n\ndiff --git");
+ }
+ List<Diff> diffs = new UnifiedDiffParser().parse(text.getBytes());
+ for (Diff diff : diffs) {
+ String filename = diff.getToFileName().substring(2);
+ if (filename.endsWith(".java")) {
+ FileObject file = workdir.getFileObject(filename);
+ if (file == null) {
+ //TODO: how to handle? log?
+ continue;
+ }
+ Project project = FileOwnerQuery.getOwner(file);
+ if (project != null) {
+ int[] remap = new int[file.asLines().size() + 1]; //TODO: encoding?
+ Arrays.fill(remap, -1);
+ int idx = 1;
+ for (Hunk hunk : diff.getHunks()) {
+ int pointer = hunk.getToFileRange().getLineStart();
+ for (Line line : hunk.getLines()) {
+ switch (line.getLineType()) {
+ case NEUTRAL: pointer++; idx++; break;
+ case TO: remap[pointer++] = idx++; break;
+ }
+ }
+ }
+ projects.add(project);
+ file2Remap.put(file, new FileData(filename, remap));
+ }
+ }
+ }
+ int prId = (int) pullRequest.get("number");
+ GHPullRequest[] pr = new GHPullRequest[1];
+ boolean[] hasWarnings = {false};
+ for (Project project : projects) {
+ switch (project.getClass().getName()) {//XXX: ensure that the environment variables are dropped here!
+ case "org.netbeans.modules.maven.NbMavenProjectImpl":
+ new ProcessBuilder("mvn", "dependency:go-offline").directory(FileUtil.toFile(project.getProjectDirectory())).inheritIO().start().waitFor();
+ break;
+ case "org.netbeans.modules.apisupport.project.NbModuleProject":
+ FileObject nbbuild = project.getProjectDirectory().getFileObject("../../nbbuild");
+ if (nbbuild == null) {
+ nbbuild = project.getProjectDirectory().getFileObject("../nbbuild");
+ }
+ if (nbbuild != null) { //TODO: only once
+ new ProcessBuilder("ant", "-autoproxy", "download-all-extbins").directory(FileUtil.toFile(nbbuild)).inheritIO().start().waitFor();
+ }
+ //TODO: download extbins!
+ break;
+ default:
+ System.err.println("project name: " + project.getClass().getName());
+ break;
+ }
+ }
+ OpenProjects.getDefault().open(projects.toArray(new Project[0]), false);
+ Map<ClasspathInfo, Collection<FileObject>> sorted = BatchUtilities.sortFiles(file2Remap.keySet());
+ for (Entry<ClasspathInfo, Collection<FileObject>> e : sorted.entrySet()) {
+ JavaSource.create(e.getKey(), e.getValue()).runWhenScanFinished(cc -> {
+ FileData fileData = file2Remap.get(cc.getFileObject());
+
+ if (fileData == null)
+ return ;
+
+ cc.toPhase(JavaSource.Phase.RESOLVED); //XXX
+
+ List<ErrorDescription> warnings = new HintsInvoker(HintsSettings.getGlobalSettings(), new AtomicBoolean()).computeHints(cc);
+ System.err.println("warnings=" + warnings);
+ for (ErrorDescription ed : warnings) {
+ int startLine = ed.getRange().getBegin().getLine() + 1;
+ int targetPosition = fileData.remap[startLine];
+ if (targetPosition == (-1))
+ continue;
+ String comment = "Jackpot:\nwarning: " + ed.getDescription();
+ //TODO: fixes
+// if (additions != null) {
+// comment += "```suggestion\n" + additions.toString() + "```";
+// }
+ hasWarnings[0] = true;
+ if (pr[0] == null) {
+ GitHub commentGithub = oauthAppToken != null ? GitHub.connectUsingOAuth(oauthAppToken) : GitHub.connect();
+ GHRepository commentTarget = commentGithub.getRepository(fullRepoName);
+ pr[0] = commentTarget.getPullRequest(prId);
+ }
+ pr[0].createReviewComment(comment, sha, fileData.filename, targetPosition);
+ }
+ }, false).get();
+ }
+// String file = (String) m.get("file");
+// int startLine = (Integer) m.get("startLine");
+// List<String> fixes = (List<String>) m.get("fixes");
+// StringBuilder additions = null;
+// if (fixes != null && fixes.size() > 1) { //TODO: or == 1?
+// List<Diff> fixDiffs = new UnifiedDiffParser().parse(fixes.get(0).getBytes("UTF-8"));
+// if (fixDiffs.size() == 1 && fixDiffs.get(0).getHunks().size() == 1) {
+// int start = fixDiffs.get(0).getHunks().get(0).getToFileRange().getLineStart();
+// additions = new StringBuilder();
+// boolean seenRemoval = false;
+// for (Line line : fixDiffs.get(0).getHunks().get(0).getLines()) {
+// if (line.getLineType() == Line.LineType.FROM) {
+// if (seenRemoval) {
+// start = -1;
+// break;
+// } else {
+// seenRemoval = true;
+// }
+// } else if (line.getLineType() == Line.LineType.TO) {
+// additions.append(line.getContent());
+// additions.append("\n");
+// }
+// }
+// if (start != (-1) && seenRemoval) {
+// startLine = start;
+// } else {
+// additions = null;
+// }
+// }
+// }
+// }
+// }
+//
+ String mainComment;
+ if (!hasWarnings[0]) {
+ mainComment = "Jackpot: no warnings.";
+ } else {
+ mainComment = "Jackpot: warnings found.";
+ }
+
+ //TODO: set status on crash/error!
+ statusTarget.createCommitStatus(sha, GHCommitState.SUCCESS, null, mainComment);
+ }
+
+ private static final class FileData {
+ public final String filename;
+ public final int[] remap;
+
+ public FileData(String filename, int[] remap) {
+ this.filename = filename;
+ this.remap = remap;
+ }
+
+ }
+
+}
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/MimeLookupImpl.java b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/MimeLookupImpl.java
new file mode 100644
index 0000000..4342738
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/MimeLookupImpl.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.jackpot.prs.handler.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.CopyOption;
+import java.nio.file.Files;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.prefs.Preferences;
+import org.netbeans.api.editor.mimelookup.MimePath;
+import org.netbeans.modules.editor.impl.DocumentFactoryImpl;
+import org.netbeans.modules.editor.java.JavaKit;
+import org.netbeans.modules.editor.tools.storage.api.ToolPreferences;
+import org.netbeans.modules.java.source.indexing.JavaCustomIndexer;
+import org.netbeans.modules.java.source.parsing.JavacParserFactory;
+import org.netbeans.spi.editor.hints.settings.FileHintPreferences;
+import org.netbeans.spi.editor.hints.settings.FileHintPreferences.GlobalHintPreferencesProvider;
+import org.netbeans.spi.editor.mimelookup.MimeDataProvider;
+import org.openide.util.Lookup;
+import org.openide.util.lookup.Lookups;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ *
+ * @author lahvac
+ */
+@ServiceProvider(service=MimeDataProvider.class)
+public class MimeLookupImpl implements MimeDataProvider {
+
+ private final Lookup JAVA = Lookups.fixed(new JavaKit(), new JavacParserFactory(), new GlobalSettingsProvider(), new JavaCustomIndexer.Factory());
+ private final Lookup EMPTY = Lookups.fixed(new DocumentFactoryImpl());
+
+ @Override
+ public Lookup getLookup(MimePath path) {
+ if (path.getPath().equals("text/x-java")) {
+ return JAVA;
+ }
+ if (path.getPath().isEmpty()) {
+ return EMPTY;
+ }
+ return Lookup.EMPTY;
+ }
+
+ public static final class GlobalSettingsProvider implements GlobalHintPreferencesProvider {
+
+ public static final String HINTS_TOOL_ID = "hints";
+
+ private Preferences prefs;
+
+ @Override
+ public synchronized Preferences getGlobalPreferences() {
+ if (prefs == null) {
+ try {
+ File cfgHints = File.createTempFile("cfg_hints", "xml");
+ try (InputStream in = MimeLookupImpl.class.getResourceAsStream("/org/netbeans/modules/jackpot/prs/handler/impl/cfg_hints.xml");
+ OutputStream out = new FileOutputStream(cfgHints)) {
+ out.write(in.readAllBytes());
+ }
+ prefs = ToolPreferences.from(cfgHints.toURI()).getPreferences(HINTS_TOOL_ID, "text/x-java");
+ } catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+
+ return prefs;
+ }
+
+ }
+}
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/cfg_hints.xml b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/cfg_hints.xml
new file mode 100644
index 0000000..09bdcc5
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/cfg_hints.xml
@@ -0,0 +1,563 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration PUBLIC "-//NetBeans//DTD Tool Configuration 1.0//EN" "http://www.netbeans.org/dtds/ToolConfiguration-1_0.dtd">
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration>
+ <tool kind="hints" type="text/x-java">
+ <node name="org.netbeans.modules.java.hints.encapsulation.ClassEncapsulation.packageCls">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.EqualsHint.arrayEquals">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintCREATE_FINAL_FIELD_CTOR">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ReturnEncapsulation.date">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="error-in-javadoc">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.StaticAccess">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.JPQLValidation">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.MalformedFormatString">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="AnnotationAsSuperInterface">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ConvertToVarHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.PublicClass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.unnecessaryTypeToString">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.resultSet">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Unbalanced$Array">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.InitializerCanBeStatic">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.AnnotationProcessors.oGSA">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.BoxingOfBoxingValue">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.FieldEncapsulation.privateField">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.PersistenceUnitPresent">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.control.RedundantIf">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.finalize.CallFinalize">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.DoubleCheck">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ClassEncapsulation.protectedCls">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.equalsNull">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.IdClassOverridesEqualsAndHashCode">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.openjdk.jtreg.ModulesHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.ThrowableNotThrown.methodInvocation">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ObsoleteCollection">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.enumSet">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="unnecessaryContinueLabel">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.suggestions.ConvertIfToSwitch">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CloneAndCloneable.cloneInNonCloneableClass">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.TryCatchFinally.finallyDiscardsException">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ClassEncapsulation.publicCls">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.ValidAttributes">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.enumMap">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.control.RedundantConditional">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.UniqueEntityName">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CloneAndCloneable.cloneWithoutThrows">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.notifyOnCondition">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintCREATE_LOCAL_VARIABLE">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.UnlockOutsideFinally">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="StringBuilderAppend">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.NoIdClassOnEntitySubclass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.AddOverrideAnnotation">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.newObject">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.testing.Tiny.incovertibleTypes">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.redundantToString">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ParamEncapsulation.collection">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.emptySynchronized">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ClassStructure.finalPrivateMethod">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jackpot.hintsimpl.LoggerStringConcat">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.UnusedAssignmentOrBranch.deadBranch">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ParamEncapsulation.array">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.canBeFinal">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ReturnEncapsulation.collection">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ThrowableInitCause">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.SuspiciousNamesCombination">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.HideFieldByVar">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.suggestions.ConstantNameHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.SyncOnNonFinal">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ThreadDumpStack">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.AssertWithSideEffects">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.stringReplaceAllDot">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.testing.Tiny.mismatchedConstantVSReal">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.LoggerNotStaticFinal">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.synchronizedOnLock">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.UseSpecificCatch">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ConvertSwitchToRuleSwitch">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.ArrayStringConversions">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintIMPORT_CLASS">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.EqualsHint">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.IdDefinedInHierarchy">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.JPAAnnotsOnlyOnAccesor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.BoxedIdentityComparison">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.StaticNonFinalUsedInInitialization">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.IncompatibleMask">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.FieldEncapsulation.packageField">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.stringConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.UnnecessaryBoxing.run">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.unsyncNotify">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.systemArrayCopy">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.MissingHashCode">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Wrong_String_Comparison">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ConvertToARM">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.threadSuspend">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Imports_SAME_PACKAGE">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Imports_EXCLUDED">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.OnlyEntityOrMappedSuperclassCanUseIdClass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CollectionRemove">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.QueriesProperlyDefined">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.Tiny.unnecessaryTempFromString">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.PointlessBitwiseExpression">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Javac_canUseDiamond">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.indentation">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.control.RemoveUnnecessary.unnecessaryContinue">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.unsyncWait">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.waitOnCondition">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.InfiniteRecursion.run">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ConvertToStringSwitch">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ExportNonAccessibleElement">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.UnusedCompoundAssignment">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.PrintStackTrace">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.FieldEncapsulation.protectedField">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.editor.htmlui.JSNI2JavaScriptBody">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.mapreduce.ForLoopToFunctionalHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.UnusedAssignmentOrBranch.unusedAssignment">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.IndexOfToContains">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ReturnEncapsulation.array">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.RemoveUnnecessaryReturn">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.sleepInLoop">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.threadStartInConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.ConsistentAccessType">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.TryCatchFinally.finallyThrowsException">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.SuspiciousToArray">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.threadYield">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.HasNoArgConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.MalformedXPathExpression">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.ComparatorParameterNotUsed.run">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.UnnecessaryUnboxing">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Unbalanced$Collection">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.IteratorToFor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.NPECheck">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.threadRun">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.WrongPackageSuggestion">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Inspection.hint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Imports_UNUSED">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.errors.ErrorFixesFakeHintSURROUND_WITH_TRY_CATCH">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.TopLevelClass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="MAVEN_SEARCH_HINT">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.testing.Tiny.assertEqualsForArrays">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.nestedSynchronized">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.MathRandomCast">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.EqualsMethodHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.finalize.FinalizeDoesNotCallSuper">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="unnecessaryBreakLabel">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.LegalCombinationOfAnnotations">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.ReplaceBufferByString">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.ValidPrimaryTableName">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.JoinCatches">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.hashCodeOnArray">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.OverridableMethodCallInConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Imports_DEFAULT_PACKAGE">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CloneAndCloneable.cloneableWithoutClone">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.SizeEqualsZero">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.SerializableClass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.jdk.ConvertVarToExplicitType">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Tiny.switchCaseLabelMismatch">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.apisupport.hints.HelpCtxHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="EmptyStatements_BLOCK">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.LeakingThisInConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.StringBufferCharConstructor">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ThisInAnonymous">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="EmptyStatements_WHILE_LOOP">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.ShiftOutOfRange">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.ConfusingVarargsParameter.primitiveArray">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.ParamEncapsulation.date">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.openjdk.jtreg.TagOrderHint">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="o.n.m.j2ee.jpa.verification.NonFinalClass">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.apisupport.hints.UseNbBundleMessages">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="create-javadoc">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CloneAndCloneable.cloneWithoutSuperClone">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.encapsulation.FieldEncapsulation.publicField">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="EmptyStatements_FOR_LOOP">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.Regexp">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.StringBuffer2Builder">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="Javac_canUseLambda">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.AnnotationsNotRuntime">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.sleepInSync">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CheckReturnValueHint">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.threading.Tiny.volatileArray">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.ManualArrayCopy">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="AssignmentToItself">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.MultipleLoggers">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.ThrowableNotThrown.newThrowable">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.bugs.CastVSInstanceOf">
+ <attribute name="enabled" value="true"/>
+ </node>
+ <node name="EmptyStatements_DO_WHILE_LOOP">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.HideField">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.perf.NoBooleanConstructor">
+ <attribute name="enabled" value="false"/>
+ </node>
+ <node name="org.netbeans.modules.java.hints.finalize.FinalizeDeclared">
+ <attribute name="enabled" value="false"/>
+ </node>
+ </tool>
+</configuration>
diff --git a/prs/handler/impl/test/unit/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequestTest.java b/prs/handler/impl/test/unit/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequestTest.java
new file mode 100644
index 0000000..5d4377e
--- /dev/null
+++ b/prs/handler/impl/test/unit/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequestTest.java
@@ -0,0 +1,27 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.netbeans.modules.jackpot.prs.handler.impl;
+
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.junit.Test;
+
+/**
+ *
+ * @author lahvac
+ */
+public class HandlePullRequestTest {
+
+ public HandlePullRequestTest() {
+ }
+
+ @Test
+ public void testMain() throws Exception {
+ HandlePullRequest.processPullRequest(Files.readString(Paths.get("/tmp/pr"), StandardCharsets.UTF_8), null, null);
+ }
+
+}
diff --git a/prs/handler/nbproject/build-impl.xml b/prs/handler/nbproject/build-impl.xml
new file mode 100644
index 0000000..c25170e
--- /dev/null
+++ b/prs/handler/nbproject/build-impl.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+-->
+<project name="handler-impl" basedir=".." xmlns:sproject="http://www.netbeans.org/ns/nb-module-suite-project/1">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <property file="nbproject/private/platform-private.properties"/>
+ <property file="nbproject/platform.properties"/>
+ <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-suite-project/1">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-suite-project/1">
+ <attribute name="property"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{property}" value="@{value}"/>
+ </sequential>
+ </macrodef>
+ <property file="${user.properties.file}"/>
+ <sproject:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir"/>
+ <sproject:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir"/>
+ <sproject:evalprops property="cluster.path.evaluated" value="${cluster.path}"/>
+ <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+ <condition>
+ <not>
+ <contains string="${cluster.path.evaluated}" substring="platform"/>
+ </not>
+ </condition>
+ </fail>
+ <ant antfile="nbproject/platform.xml"/>
+ <fail message="Cannot find NetBeans build harness. ${line.separator}Check that nbplatform.${nbplatform.active}.netbeans.dest.dir and nbplatform.${nbplatform.active}.harness.dir are defined. ${line.separator}On a developer machine these are normally defined in ${user.properties.file}=${netbeans.user}/build.properties ${line.separator}but for automated builds you should pass these properties to Ant explicitly. ${line.separator}You may instead download the harness and platform: -Dbootstrap.url=.../tasks.jar -Dautoupdate.catalog.url=.../updates.xml">
+ <condition>
+ <not>
+ <available file="${harness.dir}/suite.xml"/>
+ </not>
+ </condition>
+ </fail>
+ <import file="${harness.dir}/suite.xml"/>
+</project>
diff --git a/prs/handler/nbproject/genfiles.properties b/prs/handler/nbproject/genfiles.properties
new file mode 100644
index 0000000..9b1bcce
--- /dev/null
+++ b/prs/handler/nbproject/genfiles.properties
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+build.xml.data.CRC32=e04e43e4
+build.xml.script.CRC32=b7c00f3c
+build.xml.stylesheet.CRC32=70ce5c94@2.76
+# 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=e04e43e4
+nbproject/build-impl.xml.script.CRC32=ef4d8a53
+nbproject/build-impl.xml.stylesheet.CRC32=473dc988@2.76
+nbproject/platform.xml.data.CRC32=e04e43e4
+nbproject/platform.xml.script.CRC32=6dcbd131
+nbproject/platform.xml.stylesheet.CRC32=ae64f0b6@2.76
diff --git a/prs/handler/nbproject/platform.properties b/prs/handler/nbproject/platform.properties
new file mode 100644
index 0000000..caae5fc
--- /dev/null
+++ b/prs/handler/nbproject/platform.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cluster.path=\
+ ${nbplatform.active.dir}/apisupport:\
+ ${nbplatform.active.dir}/extide:\
+ ${nbplatform.active.dir}/harness:\
+ ${nbplatform.active.dir}/ide:\
+ ${nbplatform.active.dir}/java:\
+ ${nbplatform.active.dir}/platform
+nbplatform.active=apache-netbeans
diff --git a/prs/handler/nbproject/platform.xml b/prs/handler/nbproject/platform.xml
new file mode 100644
index 0000000..927643d
--- /dev/null
+++ b/prs/handler/nbproject/platform.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project name="platform" default="download" basedir="..">
+ <condition property="download.required">
+ <and>
+ <not>
+ <available file="${harness.dir}/suite.xml"/>
+ </not>
+ <isset property="bootstrap.url"/>
+ <isset property="autoupdate.catalog.url"/>
+ </and>
+ </condition>
+ <target name="download" if="download.required">
+ <mkdir dir="${harness.dir}"/>
+ <pathconvert pathsep="|" property="download.clusters">
+ <mapper type="flatten"/>
+ <path path="${cluster.path}"/>
+ </pathconvert>
+ <property name="disabled.modules" value=""/>
+ <pathconvert property="module.includes" pathsep="">
+ <mapper type="glob" from="${basedir}${file.separator}*" to="(?!^\Q*\E$)"/>
+ <path>
+ <filelist files="${disabled.modules}" dir="."/>
+ </path>
+ </pathconvert>
+ <echo message="Downloading clusters ${download.clusters}"/>
+ <property name="tasks.jar" location="${java.io.tmpdir}/tasks.jar"/>
+ <get src="${bootstrap.url}" dest="${tasks.jar}" usetimestamp="true" verbose="true"/>
+ <taskdef name="autoupdate" classname="org.netbeans.nbbuild.AutoUpdate" classpath="${tasks.jar}"/>
+ <autoupdate installdir="${nbplatform.active.dir}" updatecenter="${autoupdate.catalog.url}">
+ <modules includes="${module.includes}.*" clusters="${download.clusters}"/>
+ <modules includes="org[.]netbeans[.]modules[.]apisupport[.]harness" clusters="harness"/>
+ </autoupdate>
+ </target>
+</project>
diff --git a/prs/handler/nbproject/project.properties b/prs/handler/nbproject/project.properties
new file mode 100644
index 0000000..a00f0a7
--- /dev/null
+++ b/prs/handler/nbproject/project.properties
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+modules=\
+ ${project.org.netbeans.modules.jackpot.prs.handler.impl}:\
+ ${project.org.apache.commons.codec}:\
+ ${project.org.apache.commons.logging}
+project.org.apache.commons.codec=org.apache.commons.codec
+project.org.apache.commons.logging=org.apache.commons.logging
+project.org.netbeans.modules.jackpot.prs.handler.impl=impl
diff --git a/prs/handler/nbproject/project.xml b/prs/handler/nbproject/project.xml
new file mode 100644
index 0000000..ab0e9ea
--- /dev/null
+++ b/prs/handler/nbproject/project.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.apisupport.project.suite</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/nb-module-suite-project/1">
+ <name>handler</name>
+ </data>
+ </configuration>
+</project>
diff --git a/prs/handler/org.apache.commons.codec/build.xml b/prs/handler/org.apache.commons.codec/build.xml
new file mode 100644
index 0000000..9eb1b8a
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="org.apache.commons.codec" default="netbeans" basedir=".">
+ <description>Builds, tests, and runs the project org.apache.commons.codec.</description>
+ <import file="nbproject/build-impl.xml"/>
+</project>
diff --git a/prs/handler/org.apache.commons.codec/manifest.mf b/prs/handler/org.apache.commons.codec/manifest.mf
new file mode 100644
index 0000000..01276fb
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/manifest.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+AutoUpdate-Show-In-Client: true
+OpenIDE-Module: org.apache.commons.codec
+OpenIDE-Module-Localizing-Bundle: org/apache/commons/codec/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+
diff --git a/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml b/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml
new file mode 100644
index 0000000..87dc727
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+-->
+<project name="org.apache.commons.codec-impl" basedir="..">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <property file="nbproject/private/suite-private.properties"/>
+ <property file="nbproject/suite.properties"/>
+ <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+ <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+ <property file="${suite.dir}/nbproject/platform.properties"/>
+ <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="property"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{property}" value="@{value}"/>
+ </sequential>
+ </macrodef>
+ <property file="${user.properties.file}"/>
+ <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+ <condition>
+ <not>
+ <contains string="${cluster.path.evaluated}" substring="platform"/>
+ </not>
+ </condition>
+ </fail>
+ <import file="${harness.dir}/build.xml"/>
+</project>
diff --git a/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties b/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties
new file mode 100644
index 0000000..569939a
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+build.xml.data.CRC32=71271522
+build.xml.script.CRC32=3da714ee
+build.xml.stylesheet.CRC32=15ca8a54@2.76
+# 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=71271522
+nbproject/build-impl.xml.script.CRC32=67b36dc6
+nbproject/build-impl.xml.stylesheet.CRC32=49aa68b0@2.76
diff --git a/prs/handler/org.apache.commons.codec/nbproject/project.properties b/prs/handler/org.apache.commons.codec/nbproject/project.properties
new file mode 100644
index 0000000..c6ac153
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/nbproject/project.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+file.reference.commons-codec-1.3.jar=release/modules/ext/commons-codec-1.3.jar
+javac.source=1.7
+javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/prs/handler/org.apache.commons.codec/nbproject/project.xml b/prs/handler/org.apache.commons.codec/nbproject/project.xml
new file mode 100644
index 0000000..ea6e025
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/nbproject/project.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.apisupport.project</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+ <code-name-base>org.apache.commons.codec</code-name-base>
+ <suite-component/>
+ <module-dependencies/>
+ <public-packages/>
+ <class-path-extension>
+ <runtime-relative-path>ext/commons-codec-1.3.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/commons-codec-1.3.jar</binary-origin>
+ </class-path-extension>
+ </data>
+ </configuration>
+</project>
diff --git a/prs/handler/org.apache.commons.codec/nbproject/suite.properties b/prs/handler/org.apache.commons.codec/nbproject/suite.properties
new file mode 100644
index 0000000..5f42472
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/nbproject/suite.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+suite.dir=${basedir}/..
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list b/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list
new file mode 100644
index 0000000..9caf2fa
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+FD32786786E2ADB664D5ECC965DA47629DCA14BA commons-codec:commons-codec:1.3
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt
new file mode 100644
index 0000000..d428420
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt
@@ -0,0 +1,208 @@
+Name: Apache Commons Codec
+Origin: Apache Software Foundation
+Version: 1.3
+License: Apache-2.0
+Description: Provides implementations of common encoders and decoders.
+URL: http://commons.apache.org/codec/
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt
new file mode 100644
index 0000000..439eb83
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt
@@ -0,0 +1,3 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar
new file mode 100644
index 0000000..957b675
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar
Binary files differ
diff --git a/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties b/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties
new file mode 100644
index 0000000..ad64abf
--- /dev/null
+++ b/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+OpenIDE-Module-Name=org.apache.commons.codec
diff --git a/prs/handler/org.apache.commons.logging/build.xml b/prs/handler/org.apache.commons.logging/build.xml
new file mode 100644
index 0000000..284baa1
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="org.apache.commons.logging" default="netbeans" basedir=".">
+ <description>Builds, tests, and runs the project org.apache.commons.logging.</description>
+ <import file="nbproject/build-impl.xml"/>
+</project>
diff --git a/prs/handler/org.apache.commons.logging/manifest.mf b/prs/handler/org.apache.commons.logging/manifest.mf
new file mode 100644
index 0000000..aa0979d
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/manifest.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+AutoUpdate-Show-In-Client: true
+OpenIDE-Module: org.apache.commons.logging
+OpenIDE-Module-Localizing-Bundle: org/apache/commons/logging/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+
diff --git a/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml b/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml
new file mode 100644
index 0000000..806696c
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+-->
+<project name="org.apache.commons.logging-impl" basedir="..">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <property file="nbproject/private/suite-private.properties"/>
+ <property file="nbproject/suite.properties"/>
+ <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+ <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+ <property file="${suite.dir}/nbproject/platform.properties"/>
+ <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="property"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{property}" value="@{value}"/>
+ </sequential>
+ </macrodef>
+ <property file="${user.properties.file}"/>
+ <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+ <condition>
+ <not>
+ <contains string="${cluster.path.evaluated}" substring="platform"/>
+ </not>
+ </condition>
+ </fail>
+ <import file="${harness.dir}/build.xml"/>
+</project>
diff --git a/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties b/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties
new file mode 100644
index 0000000..3cd2211
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+build.xml.data.CRC32=4aa1ecde
+build.xml.script.CRC32=704985da
+build.xml.stylesheet.CRC32=15ca8a54@2.76
+# 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=4aa1ecde
+nbproject/build-impl.xml.script.CRC32=a329aae5
+nbproject/build-impl.xml.stylesheet.CRC32=49aa68b0@2.76
diff --git a/prs/handler/org.apache.commons.logging/nbproject/project.properties b/prs/handler/org.apache.commons.logging/nbproject/project.properties
new file mode 100644
index 0000000..6fdc9a6
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/nbproject/project.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+file.reference.commons-logging-1.1.1.jar=release/modules/ext/commons-logging-1.1.1.jar
+javac.source=1.7
+javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/prs/handler/org.apache.commons.logging/nbproject/project.xml b/prs/handler/org.apache.commons.logging/nbproject/project.xml
new file mode 100644
index 0000000..355e688
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/nbproject/project.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.apisupport.project</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+ <code-name-base>org.apache.commons.logging</code-name-base>
+ <suite-component/>
+ <module-dependencies/>
+ <public-packages/>
+ <class-path-extension>
+ <runtime-relative-path>ext/commons-logging-1.1.1.jar</runtime-relative-path>
+ <binary-origin>release/modules/ext/commons-logging-1.1.1.jar</binary-origin>
+ </class-path-extension>
+ </data>
+ </configuration>
+</project>
diff --git a/prs/handler/org.apache.commons.logging/nbproject/suite.properties b/prs/handler/org.apache.commons.logging/nbproject/suite.properties
new file mode 100644
index 0000000..5f42472
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/nbproject/suite.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+suite.dir=${basedir}/..
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list b/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list
new file mode 100644
index 0000000..5f56286
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+5043BFEBC3DB072ED80FBD362E7CAF00E885D8AE commons-logging:commons-logging:1.1.1
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt
new file mode 100644
index 0000000..d68b66f
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt
@@ -0,0 +1,208 @@
+Name: Apache Jakarta Commons Logging
+Origin: Apache Software Foundation
+Version: 1.1.1
+License: Apache-2.0
+Description: Logging component
+URL: http://commons.apache.org/logging/
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt
new file mode 100644
index 0000000..6e15324
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt
@@ -0,0 +1,15 @@
+// ------------------------------------------------------------------
+// NOTICE file corresponding to the section 4d of The Apache License,
+// Version 2.0, in this case for Commons Logging
+// ------------------------------------------------------------------
+
+Commons Logging
+Copyright 2001-2007 The Apache Software Foundation
+
+This product includes/uses software(s) developed by 'an unknown organization'
+ - Unnamed - avalon-framework:avalon-framework:jar:4.1.3
+ - Unnamed - log4j:log4j:jar:1.2.12
+ - Unnamed - logkit:logkit:jar:1.0.1
+
+
+
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar
new file mode 100644
index 0000000..1deef14
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar
Binary files differ
diff --git a/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties b/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties
new file mode 100644
index 0000000..3440563
--- /dev/null
+++ b/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+OpenIDE-Module-Name=org.apache.commons.logging
diff --git a/prs/script/prs b/prs/script/prs
new file mode 100755
index 0000000..716651a
--- /dev/null
+++ b/prs/script/prs
@@ -0,0 +1 @@
+java -classpath `ls webapp/dependency/*.jar | tr '\n' ':'`:webapp/webapp-1.0-SNAPSHOT.jar -Dinstall.dir=`pwd` org.netbeans.jackpot.prs.webapp.WebApp $HOME/prs-config/
diff --git a/prs/webapp/pom.xml b/prs/webapp/pom.xml
new file mode 100644
index 0000000..2e1ff46
--- /dev/null
+++ b/prs/webapp/pom.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<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>org.netbeans.jackpot.prs</groupId>
+ <artifactId>webapp</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.kohsuke</groupId>
+ <artifactId>github-api</artifactId>
+ <version>1.95</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.grizzly</groupId>
+ <artifactId>grizzly-servlet-webserver</artifactId>
+ <version>1.9.65</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-server</artifactId>
+ <version>2.27</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.containers</groupId>
+ <artifactId>jersey-container-grizzly2-servlet</artifactId>
+ <version>2.26</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.inject</groupId>
+ <artifactId>jersey-hk2</artifactId>
+ <version>2.27</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.2.11</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-core</artifactId>
+ <version>2.2.11</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ <version>2.2.11</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+
+<!-- <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-json-jackson</artifactId>
+ <version>2.17</version>
+ </dependency>-->
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>2.9.2</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <maven.compiler.source>11</maven.compiler.source>
+ <maven.compiler.target>11</maven.compiler.target>
+ </properties>
+</project>
\ No newline at end of file
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/Config.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/Config.java
new file mode 100644
index 0000000..cc93a08
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/Config.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import java.nio.file.Path;
+import java.util.prefs.Preferences;
+
+/**
+ *
+ * @author lahvac
+ */
+public class Config {
+
+ private static final Config INSTANCE = new Config();
+
+ public static Config getDefault() {
+ return INSTANCE;
+ }
+
+
+ public void setConfigDir(Path configDir) {
+ System.setProperty("java.util.prefs.userRoot", configDir.toString());
+ }
+
+ public Preferences getPreferences() {
+ return Preferences.userRoot();
+ }
+
+}
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebApp.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebApp.java
new file mode 100644
index 0000000..e81d724
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebApp.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import com.sun.grizzly.http.embed.GrizzlyWebServer;
+import com.sun.grizzly.http.servlet.ServletAdapter;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.glassfish.jersey.server.ServerProperties;
+import org.glassfish.jersey.servlet.ServletContainer;
+
+/**
+ *
+ * @author lahvac
+ */
+public class WebApp {
+ public static void main(String... origArgs) throws IOException {
+ int port = 9996;
+
+ List<String> args = new ArrayList<String>(Arrays.asList(origArgs));
+
+ if (args.size() > 1 && "--port".equals(args.get(0))) {
+ args.remove(0);
+ port = Integer.parseInt(args.remove(0));
+ }
+
+ Config.getDefault().setConfigDir(Paths.get(args.remove(0)));
+
+// if (args.size() != 1 && args.size() != 2) {
+// System.err.println("Usage: java -jar " + WebApp.class.getProtectionDomain().getCodeSource().getLocation().getPath() + " [--port <port>] <cache> [<static-content>]");
+// return ;
+// }
+//
+ GrizzlyWebServer gws;
+
+// if (args.size() == 2) {
+// gws = new GrizzlyWebServer(port, args.get(1));
+// } else {
+ gws = new GrizzlyWebServer(port);
+// }
+
+ if (port == 0) {
+ gws.getSelectorThread().setAddress(InetAddress.getByName("localhost"));
+ }
+
+ // Jersey web resources
+ ServletAdapter jerseyAdapter = new ServletAdapter();
+ jerseyAdapter.addInitParameter(ServerProperties.PROVIDER_PACKAGES, WebAppNotify.class.getPackageName());
+ jerseyAdapter.addInitParameter(ServerProperties.TRACING, "ALL");
+ jerseyAdapter.setContextPath("/");
+ jerseyAdapter.setServletInstance(new ServletContainer());
+
+ // register all above defined adapters
+ gws.addGrizzlyAdapter(jerseyAdapter);
+
+ // let Grizzly run
+ gws.start();
+
+ if (port == 0) {
+ System.out.println("Running on port: " + gws.getSelectorThread().getPortLowLevel());
+ }
+ }
+}
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppAuthTarget.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppAuthTarget.java
new file mode 100644
index 0000000..8ebd2e0
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppAuthTarget.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.net.ssl.HttpsURLConnection;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import org.kohsuke.github.GHMyself;
+import org.kohsuke.github.GitHub;
+
+/**
+ *
+ * @author lahvac
+ */
+@Path("/github/authtarget")
+public class WebAppAuthTarget {
+ @GET
+ public static Response authCallBack(@Context HttpServletRequest request, @Context UriInfo uriInfo, @QueryParam("code") String code, @QueryParam("state") String state) {
+ try {
+ //TODO: check state
+ String clientId = Config.getDefault().getPreferences().node("app").get("client_id", null);
+ String clientSecret = Config.getDefault().getPreferences().node("app").get("client_secret", null);
+ String params = "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + code;
+ byte[] data = params.getBytes("UTF-8");
+ URL accessTokenURL = new URL("https://github.com/login/oauth/access_token");
+ HttpsURLConnection conn = (HttpsURLConnection) accessTokenURL.openConnection();
+ conn.setRequestMethod("POST");
+ conn.setDoOutput(true);
+ conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
+ conn.setRequestProperty( "charset", "utf-8");
+ conn.setRequestProperty( "Content-Length", Integer.toString(data.length));
+ conn.getOutputStream().write(data);
+ ByteArrayOutputStream inp = new ByteArrayOutputStream();
+ try (InputStream in = conn.getInputStream()) {
+ int read;
+ while ((read = in.read()) != (-1)) {
+ inp.write(read);
+ }
+ }
+ String keys = new String(inp.toByteArray(), "UTF-8").replace('&', '\n');
+ Properties keysProps = new Properties();
+ keysProps.load(new StringReader(keys));
+ String oauthToken = keysProps.getProperty("access_token");
+ HttpSession session = request.getSession();
+ session.setAttribute("access_token", oauthToken);
+ GHMyself currentUser = GitHub.connectUsingOAuth(oauthToken).getMyself();
+ session.setAttribute("user_name", currentUser.getName());
+ session.setAttribute("user_login", currentUser.getLogin());
+ //XXX: how to handle the access tokens?
+ Config.getDefault().getPreferences().node("users").node(currentUser.getLogin()).put("access_token", oauthToken);
+ return Response.seeOther(uriInfo.getBaseUri().resolve("/github")).build();
+ } catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+}
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java
new file mode 100644
index 0000000..4213667
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.prefs.Preferences;
+import javax.net.ssl.HttpsURLConnection;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import org.kohsuke.github.GHEvent;
+import org.kohsuke.github.GHHook;
+import org.kohsuke.github.GHMyself;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GitHub;
+
+/**
+ *
+ * @author lahvac
+ */
+@Path("/github/enableDisable")
+public class WebAppEnableDisable {
+ private static final String NOTIFY_HOOK_URL = "http://jackpot.findusages.cloud/github/notify";
+ @GET
+ public static void authCallBack(@Context HttpServletRequest request, @QueryParam("repo") String repo) {
+ try {
+ String[] userAndRepo = repo.split("/");
+ Preferences repositories = Config.getDefault().getPreferences().node("users").node(userAndRepo[0]).node("repositories");
+ boolean enabled = !repositories.getBoolean(userAndRepo[1], false);
+ repositories.putBoolean(userAndRepo[1], enabled);
+ String accessToken = (String) request.getSession().getAttribute("access_token");
+ GHRepository repository = GitHub.connectUsingOAuth(accessToken).getRepository(repo);
+ Optional<GHHook> hook = repository.getHooks().stream().filter(h -> NOTIFY_HOOK_URL.equals(h.getConfig().get("url"))).findAny();
+ if (hook.isPresent()) {
+ if (!enabled) {
+ //TODO: would be better to simply deactive the hook
+ hook.get().delete();
+ }
+ } else {
+ if (enabled) {
+ Map<String, String> config = new HashMap<>();
+ config.put("url", NOTIFY_HOOK_URL);
+ config.put("content_type", "json");
+ config.put("content_type", "json");
+ repository.createHook("Jackpot", config, EnumSet.of(GHEvent.PULL_REQUEST), true);
+ }
+ }
+ } catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+}
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppMainPage.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppMainPage.java
new file mode 100644
index 0000000..7af0d7c
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppMainPage.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.prefs.Preferences;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GitHub;
+
+/**
+ *
+ * @author lahvac
+ */
+@Path("/github")
+public class WebAppMainPage {
+ @GET
+ @Path("/")
+ @Produces(MediaType.TEXT_HTML)
+ public static String main(@Context HttpServletRequest request) {
+ String userName = (String) request.getSession().getAttribute("user_name");
+ if (userName != null) {
+ Set<String> allowedUsers = new HashSet<>(Arrays.asList(Config.getDefault().getPreferences().node("app").get("allowed_users", "").split(",")));
+ String userLogin = (String) request.getSession().getAttribute("user_login");
+ if (!allowedUsers.contains(userLogin)) {
+ StringBuilder page = new StringBuilder();
+ page.append("<html>");
+ page.append("<body>");
+ page.append(" Sorry, this site is only for invited users at this point.");
+ page.append("</body>");
+ return page.toString();
+ }
+ StringBuilder page = new StringBuilder();
+ page.append("<html>");
+ try {
+ String accessToken = (String) request.getSession().getAttribute("access_token");
+ page.append("<body>");
+ page.append("<script>");
+ page.append("function enableDisable(repo) {");
+ page.append(" var xhr = new XMLHttpRequest();");
+ page.append(" xhr.open('GET', '/github/enableDisable?repo=' + repo, true);");
+ page.append(" xhr.send();");
+ page.append("}");
+ page.append("</script>");
+ page.append(" <a href=\"\">" + userName + "</a>");
+ page.append("Repositories:");
+ page.append("<ul>");
+ GitHub github = GitHub.connectUsingOAuth(accessToken);
+ Preferences repositories = Config.getDefault().getPreferences().node("users").node(userLogin).node("repositories");
+ for (Entry<String, GHRepository> e : github.getMyself().getRepositories().entrySet()) {//TODO: use list
+ String checked;
+ if (repositories.getBoolean(e.getValue().getName(), false)) {
+ checked = " checked='true'";
+ } else {
+ checked = "";
+ }
+ page.append("<li><input type='checkbox' onclick='enableDisable(\"" + userLogin + "/" + e.getValue().getName() + "\")'" + checked + "/>"+ e.getValue().getName() + "</li>");
+ }
+ page.append("</ul>");
+ Set<String> admins = Set.of(Config.getDefault().getPreferences().node("app").get("admins", "").split(","));
+ if (admins.contains(userLogin)) {
+ page.append("Remaining rate limit: " + github.rateLimit().toString());
+ }
+ } catch (IOException ex) {
+ //TODO: handle
+ ex.printStackTrace();
+ }
+ page.append("</body>");
+ return page.toString();
+ } else {
+ String clientId = Config.getDefault().getPreferences().node("app").get("client_id", null);
+ return "<html>" +
+ "<body>" +
+ " <a href=\"https://github.com/login/oauth/authorize?client_id=" + clientId + "&scope=write:repo_hook%20repo:status&state=9843759384\">Login with GitHub.</a>" +
+ "</body>";
+ }
+ }
+}
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java
new file mode 100644
index 0000000..11dbd19
--- /dev/null
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.jackpot.prs.webapp;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.prefs.Preferences;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.MediaType;
+
+/**
+ *
+ * @author lahvac
+ */
+@Path("/github/notify")
+public class WebAppNotify {
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ public static void webhook(String data) throws IOException {
+ Map<String, Object> inputParsed = new ObjectMapper().readValue(data, Map.class);
+ Object action = inputParsed.get("action");
+ if (!"opened".equals(action))
+ return ;
+ Map<String, Object> pullRequest = (Map<String, Object>) inputParsed.get("pull_request");
+ if (pullRequest == null) {
+ return ;
+ }
+ Map<String, Object> repository = (Map<String, Object>) inputParsed.get("repository");
+ if (repository == null) {
+ return ;
+ }
+ String[] userAndRepo = ((String) repository.get("full_name")).split("/");
+ Preferences repositories = Config.getDefault().getPreferences().node("users").node(userAndRepo[0]).node("repositories");
+ if (!repositories.getBoolean(userAndRepo[1], false)) {
+ return ;
+ }
+ Preferences handlerPrefs = Config.getDefault().getPreferences().node("handler");
+ String handler = handlerPrefs.get("handler", "handler");
+ String remoteHost = handlerPrefs.get("remoteHost", null);
+ String remotePath = handlerPrefs.get("remotePath", null);
+ ProcessBuilder builder;
+ if (remoteHost != null && remotePath != null) {
+ builder = new ProcessBuilder(System.getProperty("install.dir") + "/handler/bin/handler.remote", remoteHost, remotePath, handler);
+ } else {
+ builder = new ProcessBuilder(System.getProperty("install.dir") + "/handler/bin/" + handler);
+ }
+ builder.environment().put("PR_CONTENT", data);
+ //XXX: how to handle the access tokens?
+ builder.environment().put("OAUTH_TOKEN", Config.getDefault().getPreferences().node("users").node(userAndRepo[0]).get("access_token", ""));
+ builder.environment().put("OAUTH_APP_TOKEN", Config.getDefault().getPreferences().node("app").get("access_token", ""));
+ //TODO: logs!
+ builder.inheritIO().start();
+ }
+}