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" + } +}