Author: sboehme
Date: Mon Feb 16 18:14:21 2015
New Revision: 1660179

URL: http://svn.apache.org/r1660179
Log:
SLING-4364 :: Integrate new JavaScript node type library

Added:
    sling/trunk/contrib/commons/js/nodetypes/LICENSE.txt
    sling/trunk/contrib/commons/js/nodetypes/README.md
    sling/trunk/contrib/commons/js/nodetypes/pom.xml
    sling/trunk/contrib/commons/js/nodetypes/src/
    sling/trunk/contrib/commons/js/nodetypes/src/main/
    sling/trunk/contrib/commons/js/nodetypes/src/main/java/
    sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/
    sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONItemDefinition.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeDefinition.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeType.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONPropertyDefinition.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONValue.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/NodeTypesJSONServlet.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AbstractPropertyMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AutoCreatedMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueServlet.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MandatoryMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MultipleMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/OnParentVersionMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyNameMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/ProtectedMatcher.java
    
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/RequiredPropertyTypeMatcher.java
    sling/trunk/contrib/commons/js/nodetypes/src/main/javascript/
    sling/trunk/contrib/commons/js/nodetypes/src/main/resources/
    sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/
    sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/content.json
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/documentation/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/documentation/html.jsp
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/js/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/js/defaultNT/
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/js/defaultNT/defaultNT.json
    
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/js/jsnodetypes.js
    sling/trunk/contrib/commons/js/nodetypes/src/test/
    sling/trunk/contrib/commons/js/nodetypes/src/test/java/
    sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/
    sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/ChildNodeDefGenerationTest.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/DefaultNodeTypeTest.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/GenerationConstants.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/NodeTypeGenerationTest.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/PropertyDefGenerationTest.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueTest.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockNodeTypeGenerator.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockPropertyDefGenerator.java
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/JSONAssert.java
    sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/NodeTypesSpec.js
    sling/trunk/contrib/commons/js/nodetypes/src/test/resources/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/applicableChildNodeTypesDatastructure.jpg
   (with props)
    sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBinaryPropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBooleanPropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteChildNodeDefinitions.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDatePropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDoublePropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteLongPropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNamePropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNodeTypes.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompletePathPropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteReferencePropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteStringPropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithServlet.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithoutServlet.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleConstraints.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleDefaultValues.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testNodeTypeWithEmptyName.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleChildNodeDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleNodeType.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimplePropertyDefinition.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testResidualChildNodeDefinitions.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleChildNodeDefinitions.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleNodeTypes.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSupertypeList.json
    
sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testTwoResidualPropertyDefinitions.json
Modified:
    sling/trunk/contrib/commons/js/nodetypes/   (props changed)

Propchange: sling/trunk/contrib/commons/js/nodetypes/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Feb 16 18:14:21 2015
@@ -0,0 +1,4 @@
+.settings
+target
+.classpath
+.project

Added: sling/trunk/contrib/commons/js/nodetypes/LICENSE.txt
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/LICENSE.txt?rev=1660179&view=auto
==============================================================================
--- sling/trunk/contrib/commons/js/nodetypes/LICENSE.txt (added)
+++ sling/trunk/contrib/commons/js/nodetypes/LICENSE.txt Mon Feb 16 18:14:21 
2015
@@ -0,0 +1,175 @@
+
+                                 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.

Added: sling/trunk/contrib/commons/js/nodetypes/README.md
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/README.md?rev=1660179&view=auto
==============================================================================
--- sling/trunk/contrib/commons/js/nodetypes/README.md (added)
+++ sling/trunk/contrib/commons/js/nodetypes/README.md Mon Feb 16 18:14:21 2015
@@ -0,0 +1,5 @@
+jsNodeTypes - The JavaScript Node Types library for Apache Sling
+=============
+
+A public documentation of the library can be found at: 
http://www.jcrbrowser.org/sling/libs/jsnodetypes/content/documentation.html.
+The documentation of the library version you deployed is shipped with the 
bundle. It can be found at 
http://[yourserver]:[yourport]/libs/jsnodetypes/content/documentation.html

Added: sling/trunk/contrib/commons/js/nodetypes/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/pom.xml?rev=1660179&view=auto
==============================================================================
--- sling/trunk/contrib/commons/js/nodetypes/pom.xml (added)
+++ sling/trunk/contrib/commons/js/nodetypes/pom.xml Mon Feb 16 18:14:21 2015
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- 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/maven-v4_0_0.xsd";>
+
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.apache.sling</groupId>
+               <artifactId>sling</artifactId>
+               <version>22</version>
+               <relativePath>../../../../parent/pom.xml</relativePath>
+       </parent>
+
+       <artifactId>org.apache.sling.commons.js.nodetypes</artifactId>
+       <packaging>bundle</packaging>
+       <version>0.1.0-SNAPSHOT</version>
+
+       <name>jsNodeTypes</name>
+       <description>
+       Uses Apache Sling to generate a JavaScript representation of JCR node 
types.
+    </description>
+
+       <licenses>
+               <license>
+                       <name>The Apache Software License, Version 2.0</name>
+                       
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+                       <distribution>repo</distribution>
+               </license>
+       </licenses>
+
+       <scm>
+               
<connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/commons/jsnodetypes</connection>
+               
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/commons/jsnodetypes</developerConnection>
+               
<url>http://svn.apache.org/viewvc/sling/trunk/contrib/commons/jsnodetypes</url>
+       </scm>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>com.github.searls</groupId>
+                                       
<artifactId>jasmine-maven-plugin</artifactId>
+                                       <version>1.3.1.0</version>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>com.github.searls</groupId>
+                               <artifactId>jasmine-maven-plugin</artifactId>
+                               <version>1.3.1.0</version>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>test</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                               <configuration>
+                                       
<specRunnerTemplate>DEFAULT</specRunnerTemplate>
+                                       
<jsSrcDir>${project.basedir}/src/main/resources/SLING-INF/libs/jsnodetypes/js</jsSrcDir>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               
<Sling-Initial-Content>SLING-INF/libs/jsnodetypes;overwrite:=true;path:=/libs/jsnodetypes;uninstall:=true,SLING-INF/libs/jsnodetypes/documentation;overwrite:=true;path:=/libs/jsnodetypes/documentation;ignoreImportProviders:=json;uninstall:=true,SLING-INF/libs/jsnodetypes/js;overwrite:=true;path:=/libs/jsnodetypes/js;ignoreImportProviders:=json;uninstall:=true</Sling-Initial-Content>
+                                               
<Export-Package>de.sandroboehme.jsnodetypes.javascript</Export-Package>
+                                               
<Provide-Capability>${project.artifactId}; 
version:Version=1.0.7</Provide-Capability>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-scr-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.sling</groupId>
+                               <artifactId>maven-sling-plugin</artifactId>
+                               <executions>
+                                       <execution>
+                                               <id>install-bundle</id>
+                                               <goals>
+                                                       <goal>validate</goal>
+                                                       <goal>install</goal>
+                                               </goals>
+                                               <configuration>
+                                                       
<mountByFS>false</mountByFS>
+                                                       
<slingUrl>http://localhost:8080/system/console</slingUrl>
+                                                       <user>admin</user>
+                                                       
<password>admin</password>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                               <configuration>
+                                       <argLine>-Xmx448m</argLine>
+                               </configuration>
+                       </plugin>
+               </plugins>
+               <extensions>
+                       <extension>
+                               <groupId>org.apache.maven.wagon</groupId>
+                               <artifactId>wagon-webdav-jackrabbit</artifactId>
+                               <version>2.2</version>
+                       </extension>
+               </extensions>
+       </build>
+       <dependencies>
+               <dependency>
+                       <groupId>org.apache.sling</groupId>
+                       <artifactId>org.apache.sling.commons.json</artifactId>
+                       <version>2.0.10</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.jackrabbit</groupId>
+                       <artifactId>jackrabbit-jcr-commons</artifactId>
+                       <version>2.7.5</version>
+               </dependency>
+               <dependency>
+                       <groupId>javax.servlet</groupId>
+                       <artifactId>servlet-api</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>javax.jcr</groupId>
+                       <artifactId>jcr</artifactId>
+                       <version>2.0</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.sling</groupId>
+                       <artifactId>org.apache.sling.api</artifactId>
+                       <version>2.0.8</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.sling</groupId>
+                       <artifactId>org.apache.sling.commons.osgi</artifactId>
+                       <version>2.0.6</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.core</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.compendium</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-api</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.felix</groupId>
+                       
<artifactId>org.apache.felix.scr.annotations</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <!-- Testing -->
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-all</artifactId>
+                       <version>1.9.5</version>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-simple</artifactId>
+                       <scope>test</scope>
+               </dependency>
+       </dependencies>
+</project>
\ No newline at end of file

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONItemDefinition.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONItemDefinition.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONItemDefinition.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONItemDefinition.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,59 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import javax.jcr.nodetype.ItemDefinition;
+import javax.jcr.version.OnParentVersionAction;
+
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+
+/**
+ * Represents an ItemDefinition in JSON.
+ */
+public class JSONItemDefinition {
+
+       protected JSONObject jsonObj = new JSONObject();
+       
+       public JSONItemDefinition(ItemDefinition itemDefinition) throws 
JSONException {
+               
+               jsonObj.put("name", itemDefinition.getName());
+               
+               if (itemDefinition.isAutoCreated()){
+                       jsonObj.put("autoCreated", true);
+               }
+               if (itemDefinition.isMandatory()){
+                       jsonObj.put("mandatory", true);
+               }
+               if (itemDefinition.isProtected()){
+                       jsonObj.put("protected", true);
+               }
+               boolean onParentVersionIsUnset = 
itemDefinition.getOnParentVersion() == 0;
+               int onParentVersion = onParentVersionIsUnset ? 
OnParentVersionAction.COPY : itemDefinition.getOnParentVersion();
+               String onParentVersionAction = 
OnParentVersionAction.nameFromValue(onParentVersion);
+               if (!"COPY".equals(onParentVersionAction)){
+                       jsonObj.put("onParentVersion", onParentVersionAction);
+               }
+       }
+       
+       JSONObject getJSONObject(){
+               return jsonObj;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeDefinition.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeDefinition.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeDefinition.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeDefinition.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,63 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+
+import org.apache.sling.commons.json.JSONArray;
+import org.apache.sling.commons.json.JSONException;
+
+/**
+ * Represents a NodeDefinition in JSON.
+ *
+ */
+public class JSONNodeDefinition extends JSONItemDefinition {
+
+       public JSONNodeDefinition(NodeDefinition childNodeDefinition) throws 
JSONException {
+               super(childNodeDefinition);
+
+               if (childNodeDefinition.allowsSameNameSiblings()){
+                       jsonObj.put("allowsSameNameSiblings", true);
+               }
+               NodeType defaultPrimaryType = 
childNodeDefinition.getDefaultPrimaryType();
+               if (defaultPrimaryType!=null){
+                       String defaultPrimaryTypeName = 
defaultPrimaryType.getName();
+                       if (defaultPrimaryTypeName != null && 
!defaultPrimaryTypeName.equals("")){
+                               jsonObj.put("defaultPrimaryType", 
defaultPrimaryTypeName);
+                       }
+               }
+
+               NodeType[] primaryTypes = 
childNodeDefinition.getRequiredPrimaryTypes();
+               List<String> primaryTypeNames = new ArrayList<String>();
+               for (NodeType primaryType : primaryTypes) {
+                       String primaryTypeName = primaryType.getName();
+                       if (primaryTypeName != null) {
+                               primaryTypeNames.add(primaryTypeName);
+                       }
+               }
+               if (primaryTypeNames.size()>0 && !(primaryTypeNames.size()==1 
&& primaryTypeNames.get(0).equals("nt:base")) ){
+                       jsonObj.put("requiredPrimaryTypes", new 
JSONArray(primaryTypeNames));
+               }
+       }
+
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeType.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeType.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeType.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONNodeType.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,94 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.ValueFormatException;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.sling.commons.json.JSONArray;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+
+/**
+ * Represents a NodeType in JSON.
+ *
+ */
+public class JSONNodeType {
+
+       private JSONObject jsonObj = new JSONObject();
+
+       public JSONNodeType(NodeType nodeType) throws ValueFormatException, 
RepositoryException, JSONException {
+               NodeDefinition[] declaredChildNodeDefinitions = 
nodeType.getDeclaredChildNodeDefinitions();
+               if (declaredChildNodeDefinitions != null) {
+                       JSONArray jsonChildNodeDefArray = new JSONArray();
+                       for (NodeDefinition childNodeDefinition : 
nodeType.getDeclaredChildNodeDefinitions()) {
+                               String childNodeName = 
childNodeDefinition.getName();
+                               if (childNodeName != null) {
+                                       JSONNodeDefinition 
jsonChildNodeDefinition = new JSONNodeDefinition(childNodeDefinition);
+                                       
jsonChildNodeDefArray.put(jsonChildNodeDefinition.getJSONObject());
+                               }
+                       }
+                       if (jsonChildNodeDefArray.length()>0){
+                               
jsonObj.put("declaredChildNodeDefinitions",jsonChildNodeDefArray);
+                       }
+               }
+
+               PropertyDefinition[] declaredPropertyDefinitions = 
nodeType.getDeclaredPropertyDefinitions();
+               if (declaredPropertyDefinitions != null) {
+                       JSONArray jsonPropDefArray = new JSONArray();
+                       for (PropertyDefinition propertyDefinition : 
declaredPropertyDefinitions) {
+                               JSONPropertyDefinition jsonPropertyDefinition = 
new JSONPropertyDefinition(propertyDefinition);
+                               
jsonPropDefArray.put(jsonPropertyDefinition.getJSONObject());
+                       }
+                       if (jsonPropDefArray.length()>0){
+                               
jsonObj.put("declaredPropertyDefinitions",jsonPropDefArray);
+                       }
+               }
+
+               NodeType[] superTypes = nodeType.getDeclaredSupertypes();
+               List<String> superTypeNames = new ArrayList<String>();
+               for (NodeType superType : superTypes) {
+                       superTypeNames.add(superType.getName());
+               }
+               if (superTypeNames.size()>0 && 
!("nt:base".equals(superTypeNames.get(0)) && superTypeNames.size()==1)){
+                       jsonObj.put("declaredSupertypes", new 
JSONArray(superTypeNames));
+               }
+               if (nodeType.isMixin()){
+                       jsonObj.put("mixin", true);
+               }
+               if (nodeType.hasOrderableChildNodes()){
+                       jsonObj.put("orderableChildNodes", true);
+               }
+               String thePrimaryItemName = nodeType.getPrimaryItemName();
+               if (thePrimaryItemName != null && 
!thePrimaryItemName.equals("")){
+                       jsonObj.put("primaryItemName", 
nodeType.getPrimaryItemName());
+               }
+       }
+       
+       JSONObject getJson(){
+               return jsonObj;
+       }
+
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONPropertyDefinition.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONPropertyDefinition.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONPropertyDefinition.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONPropertyDefinition.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,71 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.sling.commons.json.JSONArray;
+import org.apache.sling.commons.json.JSONException;
+
+/**
+ * Represents a PropertyDefinition in JSON.
+ *
+ */
+public class JSONPropertyDefinition extends JSONItemDefinition {
+
+       public JSONPropertyDefinition(PropertyDefinition propertyDefinition) 
throws ValueFormatException, RepositoryException, JSONException {
+               super(propertyDefinition);
+
+               Value[] defaultValues = propertyDefinition.getDefaultValues();
+               JSONArray defaultValueArray = new JSONArray();
+               if (defaultValues != null) {
+                       if (defaultValues !=null){
+                               for (int i=0; i<defaultValues.length; i++){
+                                       Value defaultValue = defaultValues[i];
+                                       JSONValue jsonValue = new 
JSONValue(defaultValue, i, propertyDefinition);
+                                       
defaultValueArray.put(jsonValue.getJSONObject());
+                               }
+                       }
+               }
+
+               if (defaultValueArray.length()>0){
+                       jsonObj.put("defaultValues", defaultValueArray);
+               }
+               String theRequiredType = 
PropertyType.nameFromValue(propertyDefinition.getRequiredType());
+               if (theRequiredType!=null && !theRequiredType.equals("") && 
!("String".equals(theRequiredType))){
+                       jsonObj.put("requiredType", theRequiredType);
+               }
+               if (propertyDefinition.getValueConstraints()!=null){
+                       List<String> theValueConstraints = 
Arrays.asList(propertyDefinition.getValueConstraints());
+                       if (theValueConstraints != null && 
theValueConstraints.size()>0){
+                               jsonObj.put("valueConstraints", 
theValueConstraints);
+                       }
+               }
+               if (propertyDefinition.isMultiple()){
+                       jsonObj.put("multiple", true);
+               }
+       }
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONValue.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONValue.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONValue.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/JSONValue.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,109 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import javax.jcr.nodetype.PropertyDefinition;
+import javax.jcr.version.OnParentVersionAction;
+
+import org.apache.jackrabbit.util.ISO8601;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+
+/**
+ * Represents a javax.jcr.Value in JSON.
+ *
+ */
+public class JSONValue {
+
+       transient JSONObject jsonObj = new JSONObject();
+       
+    public JSONValue(Value aValue, int index, PropertyDefinition propertyDef) 
throws ValueFormatException, RepositoryException, IllegalStateException, 
JSONException{
+       switch (aValue.getType()) {
+               case PropertyType.STRING:
+                       jsonObj.put("string", aValue.getString());
+                       break;
+               case PropertyType.DATE:
+               String date = aValue.getDate() == null ? "" : 
ISO8601.format(aValue.getDate());
+                       jsonObj.put("date", date);
+                       break;
+               case PropertyType.BINARY:
+                       String binary = 
getBinaryDownloadURLFromPropertyDef(index, propertyDef);
+                       jsonObj.put("binary", binary);
+                       break;
+               case PropertyType.DOUBLE:
+                       jsonObj.put("double", aValue.getDouble());
+                       break;
+               case PropertyType.LONG:
+                       jsonObj.put("long", aValue.getLong());
+                       break;
+               case PropertyType.BOOLEAN:
+                       jsonObj.put("boolean", aValue.getBoolean());
+                       break;
+               case PropertyType.NAME:
+                       jsonObj.put("name",  aValue.getString());
+                       break;
+               case PropertyType.PATH:
+                       jsonObj.put("path",  aValue.getString());
+                       break;
+               case PropertyType.REFERENCE:
+                       jsonObj.put("reference",  aValue.getString());
+                       break;
+               case PropertyType.UNDEFINED:
+                       jsonObj.put("undefined",  aValue.getString());
+                       break;
+/// The following property types are from JSR-283 / JCR 2.0
+               case PropertyType.WEAKREFERENCE:
+                       jsonObj.put("weakReference",  aValue.getString());
+                       break;
+               case PropertyType.URI:
+                       jsonObj.put("uri",  aValue.getString());
+                       break;
+               case PropertyType.DECIMAL:
+                       String decimal = aValue.getDecimal() == null ? "" : 
aValue.getDecimal().toString();
+                       jsonObj.put("decimal", decimal);
+                       break;
+
+               default:
+                       break;
+               }
+       String type = PropertyType.nameFromValue(aValue.getType());
+               jsonObj.put("type", type);
+       }
+
+       private String getBinaryDownloadURLFromPropertyDef(int index, 
PropertyDefinition propertyDef) {
+               String nodeTypeName = 
propertyDef.getDeclaringNodeType().getName();
+               String propertyName = propertyDef.getName();
+               String propertyType = 
PropertyType.nameFromValue(propertyDef.getRequiredType());
+               boolean isAutoCreated = propertyDef.isAutoCreated();
+               boolean isMandatory = propertyDef.isMandatory();
+               boolean isProtected = propertyDef.isProtected();
+               boolean isMultiple = propertyDef.isMultiple();
+               String onParentVersionAction = 
OnParentVersionAction.nameFromValue(propertyDef.getOnParentVersion());
+               return 
String.format("/%s/%s/%s/%s/%s/%s/%s/%s/%s.default_binary_value.bin", 
nodeTypeName, propertyName,
+                               propertyType, isAutoCreated, isMandatory, 
isProtected, isMultiple, onParentVersionAction, index);
+       }
+       
+    JSONObject getJSONObject(){
+       return jsonObj;
+    }
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/NodeTypesJSONServlet.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/NodeTypesJSONServlet.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/NodeTypesJSONServlet.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/NodeTypesJSONServlet.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,101 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Returns all completely registered node types of the repository in JSON 
format. Nodetypes without names will not end up in the JSON file.
+ * The binary default values of properties will not be part of the JSON file. 
They will have a String containing a URL. Use this URL to
+ * download the binary content.
+ *  
+ * The URL is <code>/libs/jsnodetypes/content/nodetypes.json</code>.
+ */
+@Component
+@Service(Servlet.class)
+@Properties({ @Property(name = "service.description", value = "Returns the 
node types as a JSON file"),
+               @Property(name = "service.vendor", value = "Sandro Boehme"),
+               @Property(name = "sling.servlet.extensions", value = "json"),
+               @Property(name = "sling.servlet.resourceTypes", value = 
"jsnodetypes")
+
+})
+public class NodeTypesJSONServlet extends SlingSafeMethodsServlet {
+       /*
+        * In /src/main/resources/libs/jsnodetypes/content.json there is an 
automatically loaded node with a child node
+        * that has the resource type 'jsnodetypes'. This servlet can render 
this resource type and thus provides the JSON
+        * content at the URL as written in the JavaDoc.
+        */
+
+       private static final long serialVersionUID = -1L;
+
+       /** default log */
+       private final Logger log = 
LoggerFactory.getLogger(NodeTypesJSONServlet.class);
+
+       @Override
+       protected void doGet(SlingHttpServletRequest request, 
SlingHttpServletResponse response) throws ServletException, IOException {
+               response.setContentType("application/json; charset=UTF-8");
+               PrintWriter writer = response.getWriter();
+               Resource resource = request.getResource();
+               Node currentNode = resource.adaptTo(Node.class);
+               try {
+                       NodeTypeIterator nodeTypeIterator = 
currentNode.getSession().getWorkspace().getNodeTypeManager().getAllNodeTypes();
+               JSONObject nodeTypes = new JSONObject();
+                       while (nodeTypeIterator.hasNext()) {
+                               NodeType nodeType = 
nodeTypeIterator.nextNodeType();
+                               if (nodeType.getName() != null) {
+                                       JSONNodeType jsonNodeType = new 
JSONNodeType(nodeType);
+                                       nodeTypes.put(nodeType.getName(), 
jsonNodeType.getJson());
+                               }
+                       }
+                       writer.println(nodeTypes.toString(2));
+                       writer.flush();
+                       writer.close();
+               } catch (RepositoryException e) {
+                       log.error("Could not generate the node types.", e);
+                       
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               } catch (JSONException e) {
+                       log.error("Could not generate the node types.", e);
+                       
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+
+       }
+
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AbstractPropertyMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AbstractPropertyMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AbstractPropertyMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AbstractPropertyMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,36 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+/**
+ * Makes it possible to specify the array and index but retrieving it on 
demand lazily. 
+ */
+public class AbstractPropertyMatcher {
+       
+       protected String[] idFields;
+       protected int index;
+
+       public String getArrayValue(String[] idFields, int index) {
+               if (index <= idFields.length-1){
+                       return idFields[index];
+               }
+               return null;
+       }
+
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AutoCreatedMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AutoCreatedMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AutoCreatedMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/AutoCreatedMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,40 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public class AutoCreatedMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public AutoCreatedMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       boolean isAutoCreated = 
Boolean.parseBoolean(arrayValue);
+                       return isAutoCreated == 
propertyDefinition.isAutoCreated();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueServlet.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueServlet.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueServlet.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/DownloadDefaultBinaryValueServlet.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,198 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.PropertyDefinition;
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provides a download for binary default values.
+ * 
+ * The fully qualified URL to specify a default value looks like this:
+ * 
<code>/ns:ntName/binPropDef/binary/true/true/true/true/version/1.default_binary_value.bin</code>
+ * The fully qualified format is: <code>/node type/property definition
+ * name/required property type name/is autoCreated/is mandatory/is
+ * protected/is multiple/on parent version action name/index of the
+ * default value.default_binary_value.bin</code>
+ * 
+ * In case you know which elements identify a property definition unambiguously
+ * you can shorten the URL. E.g. if you are sure the property definition
+ * 'binPropDef' does not exist twice within the node type 'ns:ntName' you can
+ * use the URL <code>/ns:ntName/binPropDef/1.default_binary_value.bin</code> to
+ * download the second binary default value from that property definition.
+ * 
+ * If you want to download the first binary default value you can shorten the
+ * URL even more by skipping the index in the URL like this:
+ * <code>/ns:ntName/binPropDef/default_binary_value.bin</code>
+ * 
+ * The type name, the boolean Strings and the parent version action name are
+ * case insensitive.
+ * 
+ * This long identification is needed as a property definition name with its
+ * type may not be unique within a node type. This is not only the case for
+ * residual property definitions. The JCR does not specify that there can be
+ * only one combination of property definition name / required property type
+ * name. Thats the reason why it is qualified like this.
+ * 
+ */
+
+@Component
+@Service(Servlet.class)
+@Properties({ @Property(name = "service.description", value = "Download 
Servlet for binary properties"),
+               @Property(name = "service.vendor", value = "Sandro Boehme"),
+               @Property(name = "sling.servlet.selectors", value = 
"default_binary_value"),
+               @Property(name = "sling.servlet.extensions", value = "bin"),
+               @Property(name = "sling.servlet.resourceTypes", value = 
"sling/servlet/default")
+
+})
+public class DownloadDefaultBinaryValueServlet extends SlingSafeMethodsServlet 
{
+
+       private static final long serialVersionUID = -1L;
+
+       /** default log */
+       private final Logger log = 
LoggerFactory.getLogger(DownloadDefaultBinaryValueServlet.class);
+
+       @SuppressWarnings("deprecation")
+       @Override
+       protected void doGet(SlingHttpServletRequest request, 
SlingHttpServletResponse response) throws ServletException, IOException {
+               response.setContentType("application/octet-stream; 
charset=UTF-8");
+               String requestURI = request.getRequestURI();
+               String[] idFields = requestURI.substring(1).split("/");
+               try {
+                       NodeTypeManager nodeTypeManager = 
request.getResourceResolver().getResource("/").adaptTo(Node.class).getSession()
+                                       .getWorkspace().getNodeTypeManager();
+                       NodeType nodeType = 
nodeTypeManager.getNodeType(idFields[0]);
+                       PropertyDefinition[] propertyDefinitions = 
nodeType.getPropertyDefinitions();
+                       List<PropertyDefinition> propertyDefinitionList = 
Arrays.asList(propertyDefinitions);
+                       if (propertyDefinitionList != null) {
+                               
+                               // Every matcher represents a path element in 
the URL and is initialized with its value.
+                               // It will try to match the value of a path 
element with the corresponding property 
+                               // element of all property definitions from the 
node type in findMatchingPropertyDef().
+                               PropertyMatcher[] propertyMatcher = new 
PropertyMatcher[] { new PropertyNameMatcher(idFields, 1),
+                                               new 
RequiredPropertyTypeMatcher(idFields, 2), new AutoCreatedMatcher(idFields, 3),
+                                               new MandatoryMatcher(idFields, 
4), new ProtectedMatcher(idFields, 5), new MultipleMatcher(idFields, 6),
+                                               new 
OnParentVersionMatcher(idFields, 7) };
+
+                               PropertyDefinition propDef = 
findMatchingPropertyDef(propertyDefinitionList, new LinkedList<PropertyMatcher>(
+                                               
Arrays.asList(propertyMatcher)));
+                               if (propDef != null) {
+                                       Value[] defaultValues = 
propDef.getDefaultValues();
+                                       if (defaultValues != null && 
defaultValues.length > 0) {
+                                               int startIndex = 
requestURI.lastIndexOf('/') + 1;
+                                               int endIndex = 
requestURI.indexOf("default_binary_value.bin") - 1;
+                                               int defaultValueIndex = 0;
+                                               if (endIndex - startIndex == 1) 
{
+                                                       String indexString = 
requestURI.substring(startIndex, endIndex);
+                                                       defaultValueIndex = 
Integer.parseInt(indexString);
+                                               }
+                                               try {
+                                                       if (defaultValueIndex < 
defaultValues.length) {
+                                                               Value 
defaultValue = defaultValues[defaultValueIndex];
+                                                               InputStream 
stream = defaultValue.getStream();
+                                                               BufferedReader 
bufferedReader = new BufferedReader(new InputStreamReader(stream));
+                                                               PrintWriter 
writer = response.getWriter();
+                                                               String line = 
null;
+                                                               while ((line = 
bufferedReader.readLine()) != null) {
+                                                                       
writer.write(line);
+                                                               }
+                                                               writer.flush();
+                                                               writer.close();
+                                                               
response.setStatus(HttpServletResponse.SC_OK);
+                                                       } else {
+                                                               
response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                                                       }
+                                               } catch (NumberFormatException 
nfe) {
+                                                       
response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                                               }
+                                       } else {
+                                               
response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                                       }
+                               } else {
+                                       
response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                               }
+                       }
+               } catch (RepositoryException e) {
+                       log.error("Could not return the binary file.", e);
+                       throw new ServletException(e);
+               }
+       }
+
+       /**
+        * This method pulls the first matcher out of the list and iterates 
over the list of specified property definitions to find matches. 
+        * Lets say this is a PropertyNameMatcher that has been initialized 
with the property name from the URL. Than it will match for every
+        * property definition who's name is equal to the one specified in the 
URL. The matched property definitions and the rest of the matchers
+        * will be provided for the next recursive call of the method to work 
through the other path elements until all matchers are processed or
+        * until only one property definition matches. In the first case null 
is returned and in the second case the identified property definition
+        * is returned. 
+        * @param propertyDefinitions The list of property definitions.
+        * @param propertyMatcherList The list of matcher in the order of 
appearance of their type in the URL. A matcher checks if the
+        * content of a path element it was initialized with matches its 
corresponding value in the property definition.
+        * @return Returns the property definition that is identified by the 
URL or null if no property definition matches the values specified in the URL.
+        */
+       private PropertyDefinition 
findMatchingPropertyDef(List<PropertyDefinition> propertyDefinitions,
+                       List<PropertyMatcher> propertyMatcherList) {
+               if (propertyMatcherList.size() > 0) {
+                       // retrieve the matcher to be used for this iteration
+                       PropertyMatcher propertyMatcher = 
propertyMatcherList.get(0);
+                       // remove the matcher to make the next matcher 
available for the
+                       // next iteration
+                       propertyMatcherList.remove(0);
+                       List<PropertyDefinition> matchedPropDefs = new 
LinkedList<PropertyDefinition>();
+                       // try to match all property definitions with the top 
matcher
+                       for (PropertyDefinition propertyDefinition : 
propertyDefinitions) {
+                               if (propertyMatcher.match(propertyDefinition)) {
+                                       matchedPropDefs.add(propertyDefinition);
+                               }
+                       }
+                       if (matchedPropDefs.size() == 1) {
+                               return matchedPropDefs.get(0);
+                       } else if (matchedPropDefs.size() > 1) {
+                               return findMatchingPropertyDef(matchedPropDefs, 
propertyMatcherList);
+                       }
+               }
+               return null;
+       }
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MandatoryMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MandatoryMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MandatoryMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MandatoryMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,40 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public class MandatoryMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public MandatoryMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       boolean isMandatory = Boolean.parseBoolean(arrayValue);
+                       return isMandatory == propertyDefinition.isMandatory();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MultipleMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MultipleMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MultipleMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/MultipleMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,40 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public class MultipleMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public MultipleMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       boolean isMultiple = Boolean.parseBoolean(arrayValue);
+                       return isMultiple == propertyDefinition.isMultiple();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/OnParentVersionMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/OnParentVersionMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/OnParentVersionMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/OnParentVersionMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,45 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+import javax.jcr.version.OnParentVersionAction;
+
+/**
+ * The names are not case sensitive.
+ *
+ */
+public class OnParentVersionMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public OnParentVersionMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       int onParentVersion = 
OnParentVersionAction.valueFromName(arrayValue.toUpperCase());
+                       return onParentVersion == 
propertyDefinition.getOnParentVersion();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,27 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public interface PropertyMatcher {
+
+       boolean match(PropertyDefinition propertyDefinition);
+
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyNameMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyNameMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyNameMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/PropertyNameMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,40 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public class PropertyNameMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public PropertyNameMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       String propName = propertyDefinition.getName();
+                       return arrayValue.equals(propName);
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/ProtectedMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/ProtectedMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/ProtectedMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/ProtectedMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,40 @@
+/*
+ * 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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.nodetype.PropertyDefinition;
+
+public class ProtectedMatcher extends AbstractPropertyMatcher implements 
PropertyMatcher{
+
+       public ProtectedMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       boolean isProtected = Boolean.parseBoolean(arrayValue);
+                       return isProtected == propertyDefinition.isProtected();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/RequiredPropertyTypeMatcher.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/RequiredPropertyTypeMatcher.java?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/RequiredPropertyTypeMatcher.java
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/java/de/sandroboehme/jsnodetypes/downloaddefaultbinary/RequiredPropertyTypeMatcher.java
 Mon Feb 16 18:14:21 2015
@@ -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 de.sandroboehme.jsnodetypes.downloaddefaultbinary;
+
+import javax.jcr.PropertyType;
+import javax.jcr.nodetype.PropertyDefinition;
+
+/**
+ * The names are not case sensitive.
+ *
+ */
+public class RequiredPropertyTypeMatcher extends AbstractPropertyMatcher 
implements PropertyMatcher{
+
+       public RequiredPropertyTypeMatcher(String[] idFields, int index){
+               super.idFields = idFields;
+               super.index = index;
+       }
+       
+       @Override
+       public boolean match(PropertyDefinition propertyDefinition) {
+               String arrayValue = super.getArrayValue(idFields, index);
+               if (arrayValue!=null){
+                       String propTypeName = 
(""+arrayValue.charAt(0)).toUpperCase()+arrayValue.substring(1).toLowerCase();
+                       int requiredType = 
PropertyType.valueFromName(propTypeName);
+                       return requiredType == 
propertyDefinition.getRequiredType();
+               }
+               return false;
+       }
+       
+}

Added: 
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/content.json
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/content.json?rev=1660179&view=auto
==============================================================================
--- 
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/content.json
 (added)
+++ 
sling/trunk/contrib/commons/js/nodetypes/src/main/resources/SLING-INF/libs/jsnodetypes/content.json
 Mon Feb 16 18:14:21 2015
@@ -0,0 +1,9 @@
+{
+       "primaryNodeType": "nt:unstructured",
+       "nodetypes" : {
+               "sling:resourceType" : "jsnodetypes"
+       },
+       "documentation" : {
+               "sling:resourceType" : "jsnodetypes/documentation"
+       }
+}


Reply via email to