Revert "Fixes WAVE-435, Refactoring of PST compiler and general cleanup https://reviews.apache.org/r/42114"
This reverts commit b15695b9e15f1b68a5a64b1e539a9438e9efcc00. Project: http://git-wip-us.apache.org/repos/asf/incubator-wave/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-wave/commit/ee2dadf8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-wave/tree/ee2dadf8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-wave/diff/ee2dadf8 Branch: refs/heads/master Commit: ee2dadf8ac28698c0602c72d7b88927adba69dc2 Parents: b15695b Author: yuri.zelikov <[email protected]> Authored: Tue Jan 12 09:42:49 2016 +0200 Committer: yuri.zelikov <[email protected]> Committed: Tue Jan 12 09:42:49 2016 +0200 ---------------------------------------------------------------------- .gitignore | 2 +- build.gradle | 160 +++-- pst/LICENSE | 235 ------- pst/build.gradle | 224 +----- pst/src/dist/LICENSE | 244 ------- pst/src/dist/NOTICE | 8 - pst/src/main/java/org/apache/wave/pst/Pst.java | 189 ----- .../org/apache/wave/pst/PstCommandLine.java | 151 ---- .../java/org/apache/wave/pst/PstException.java | 67 -- .../org/apache/wave/pst/PstFileDescriptor.java | 345 ---------- .../main/java/org/apache/wave/pst/PstMain.java | 92 --- .../org/apache/wave/pst/model/EnumValue.java | 60 -- .../java/org/apache/wave/pst/model/Field.java | 283 -------- .../java/org/apache/wave/pst/model/Message.java | 343 --------- .../wave/pst/model/MessageProperties.java | 112 --- .../org/apache/wave/pst/model/ProtoEnum.java | 140 ---- .../java/org/apache/wave/pst/model/Type.java | 244 ------- .../java/org/apache/wave/pst/model/Util.java | 46 -- .../org/apache/wave/pst/style/PstStyler.java | 513 -------------- .../java/org/apache/wave/pst/style/Styler.java | 45 -- .../pst/testing/RandomProtobufGenerator.java | 170 ----- .../main/proto/google/protobuf/descriptor.proto | 687 ------------------- .../apache/wave/pst/protobuf/extensions.proto | 34 - scripts/vagrant/setup-fedora.sh | 2 +- scripts/vagrant/setup-ubuntu.sh | 2 +- settings.gradle | 2 +- sonar-project.properties | 22 - wave/build.gradle | 402 +++++------ .../box/attachment/attachment.proto | 50 -- .../box/common/comms/waveclient-rpc.proto | 199 ------ .../org/waveprotocol/box/profile/profiles.proto | 51 -- .../org/waveprotocol/box/search/search.proto | 68 -- .../persistence/protos/account-store.proto | 78 --- .../server/persistence/protos/delta-store.proto | 38 - .../org/waveprotocol/box/server/rpc/rpc.proto | 66 -- .../wave/concurrencycontrol/clientserver.proto | 268 -------- .../proto/org/waveprotocol/wave/diff/build.xml | 28 - .../proto/org/waveprotocol/wave/diff/diff.proto | 114 --- .../wave/federation/federation.protodevel | 247 ------- .../wave/federation/federation_error.protodevel | 81 --- 40 files changed, 290 insertions(+), 5822 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index b3db961..dafa041 100755 --- a/.gitignore +++ b/.gitignore @@ -48,7 +48,7 @@ distributions/ ### Reports reports/ ### Generated Sources -**/generated/ +wave/src/generated/ ### Gwt Testing wave/gwt-unitCache ### config http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/build.gradle ---------------------------------------------------------------------- diff --git a/build.gradle b/build.gradle index 2f445c9..a96142d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,52 +1,64 @@ -// 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. - -//============================================================================= -// Plugins -//============================================================================= buildscript { - repositories { - mavenCentral() - } dependencies { - classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.3' + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' } } + plugins { id "org.nosphere.apache.rat" version "0.2.0" + id "org.sonarqube" version "1.1" } + allprojects { apply plugin: 'eclipse'; apply plugin: 'idea'; apply plugin: 'jacoco' group = 'apache-wave' + version = '0.4' +} + +// Repositories +repositories { + mavenCentral() +} + +subprojects { + apply plugin: 'java'; + //apply plugin: 'scala'; + //apply plugin: 'checkstyle' + sourceCompatibility = 1.7 + targetCompatibility = 1.7 + test.ignoreFailures = true + + compileJava{ + options.incremental = true + } + + task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource + } +} + +project(':wave'){ + dependencies { + compile project(':pst') + } } -//============================================================================= -// Project Level Settings -//============================================================================= -version = 0.4 //only applies to the wave server & client, should be changed once split +project(':pst'){ + dependencies { + compile project(':wave-proto') + } +} -//============================================================================= -// Apache Rat Configuration -//============================================================================= +// Apache Rat Plugin rat { + // Input directory, defaults to '.' inputDir = '.' + // XML and HTML reports directory, defaults to project.buildDir + '/reports/rat' reportDir = project.file('reports/rat') + // List of exclude directives, defaults to ['**/.gradle/**'] excludes = [ '**/build/**', 'reports/**', @@ -57,8 +69,10 @@ rat { '**/*.iml', '**/generated/**' ] + // Fail the build on rat errors, defaults to true failOnError = false } + rat.doFirst { println '' println '----------------------------------------------' @@ -68,51 +82,62 @@ rat.doFirst { println '' } -//============================================================================= -// Source Distribution -//============================================================================= - -def srcName = this.group + "-src-" + this.version -def srcExcludes = [ - 'distributions/', - '.gradle/', - '.git/', - '.vagrant/', - '*/build/*', - '*/_*', - '*/gwt-unitCache/', - '*.iml', - '*/*.iml', - '*.iws', - '*.ipr', - '*.project', - '*/*.project', - '*/*.classpath', - '*/.settings/', - '*/*.log*', - 'reports/', - 'wave/war/WEB-INF', - 'wave/war/webclient' -] - task createDistSourceZip(type: Zip) { - baseName = srcName + baseName = this.group + "-src-" + this.version destinationDir = file('distributions') from('./') { into 'apache-wave-src' } - excludes = srcExcludes + excludes = [ + 'distributions/', + '.gradle/', + '.git/', + '.vagrant/', + '*/build/*', + '*/_*', + '*/gwt-unitCache/', + '*.iml', + '*/*.iml', + '*.iws', + '*.ipr', + '*.project', + '*/*.project', + '*/*.classpath', + '*/.settings/', + '*/*.log*', + 'reports/', + 'wave/war/WEB-INF', + 'wave/war/webclient' + ] } task createDistSourceTar(type: Tar) { - compression = Compression.GZIP - extension = 'tar.gz' - baseName = srcName + baseName = this.group + "-src-" + this.version destinationDir = file('distributions') from('./') { into 'apache-wave-src' } - excludes = srcExcludes + excludes = [ + 'distributions/', + '.gradle/', + '.git/', + '.vagrant/', + '*/build/*', + '*/_*', + '*/gwt-unitCache/', + '*.iml', + '*/*.iml', + '*.iws', + '*.ipr', + '*.project', + '*/*.project', + '*/*.classpath', + '*/.settings/', + '*/*.log*', + 'reports/', + 'wave/war/WEB-INF', + 'wave/war/webclient' + ] } task createDistSource() { @@ -125,11 +150,8 @@ task createDistSource() { } } -createDistSource.dependsOn createDistSourceZip, createDistSourceTar, ":pst:createDistSource" +createDistSource.dependsOn createDistSourceZip, createDistSourceTar -//============================================================================= -// Distribution's -//============================================================================= task createDist() { doFirst { println '' @@ -141,4 +163,4 @@ task createDist() { } } -createDist.dependsOn createDistSource, ":wave:createDistBin", ":pst:createDist" \ No newline at end of file +createDist.dependsOn createDistSource, ":wave:createDistBin" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/LICENSE ---------------------------------------------------------------------- diff --git a/pst/LICENSE b/pst/LICENSE deleted file mode 100644 index 1dd0347..0000000 --- a/pst/LICENSE +++ /dev/null @@ -1,235 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2013 The Apache Software Foundation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -***THE FOLLOWING LICENSE APPLIES TO*** -- Protobuf Descriptors located at /src/google/protobuf/descriptor.proto - -Protocol Buffers - Google's data interchange format -Copyright 2008 Google Inc. All rights reserved. -http://code.google.com/p/protobuf/ - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/build.gradle ---------------------------------------------------------------------- diff --git a/pst/build.gradle b/pst/build.gradle index 0e53b8b..530ee83 100644 --- a/pst/build.gradle +++ b/pst/build.gradle @@ -1,64 +1,34 @@ -// 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. - -//============================================================================= // Plugins -//============================================================================= -plugins { - id 'java' - id 'com.github.johnrengelman.shadow' version '1.2.2' -} -apply plugin: 'com.google.protobuf' +apply plugin: 'java' -//============================================================================= -// Project Level Settings -//============================================================================= +// Settings version = 0.1 -sourceCompatibility = 1.7 -targetCompatibility = 1.7 -def title = 'Apache Wave PST Compiler' -def vendor = 'The Apache Software Foundation' -jar { - manifest { - attributes "Specification-Vendor": vendor, - "Specification-Title": title, - "Specification-Version": version, - "Implementation-Vendor": vendor, - "Implementation-Title": title, - "Implementation-Version": version, - "Built-By": "No one in particular", - "Main-Class": "org.apache.wave.pst.PstMain" - } +// Dependencies +repositories { + mavenCentral() } -//============================================================================= -// Source's -//============================================================================= +// - Project - Compile +dependencies { + compile group: 'com.google.protobuf', name: 'protobuf-java', version: '2.6.1' + compile group: 'com.google.guava', name: 'guava', version: '15.0' + compile group: 'org.antlr', name: 'antlr', version: '3.2' + compile group: 'commons-cli', name: 'commons-cli', version: '1.2' + compile fileTree(dir: '../wave-proto/build/libs', include: "**/*.jar") +// - Project - Testing + testCompile group: 'junit', name: 'junit', version: '4.11' +} + +// Source Sets sourceSets { main { java { - srcDirs = [ - 'src/main/java', - 'generated/main/java' - ] + srcDir 'src/main/java' + //srcDir '../wave-proto/build/classes/main/' } - proto { - srcDir 'src/main/proto' + resources { + srcDir 'src/main/resources' } } @@ -66,152 +36,8 @@ sourceSets { java { srcDir 'src/test/java' } + resources { + srcDir 'src/test/resources' + } } -} - -//============================================================================= -// Dependencies -// Note: next to each dependency is a review stamp [last review, next review]. -// If a dependency is past its review date pls create a jira issue. -// https://issues.apache.org/jira/browse/WAVE -//============================================================================= -repositories { - mavenCentral() -} - -dependencies { - compile group: 'com.google.protobuf', name: 'protobuf-java', version: '2.6.1' // [12/2015, 3/2016] - compile group: 'com.google.guava', name: 'guava', version: '19.0' // [1/2016, 6/2016] - compile group: 'org.antlr', name: 'antlr', version: '3.2' // [12/2015, 3/2016] - compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1' // [1/2016, 6/2016] - - testCompile group: 'junit', name: 'junit', version: '4.12' // [1/2016, 1/2017] -} - -//============================================================================= -// Protobuf Config -//============================================================================= -protobuf { - protoc { - artifact = 'com.google.protobuf:protoc:2.6.1' - } - generatedFilesBaseDir = "$projectDir/generated" -} - -//============================================================================= -// UberJar (shadowJar) config -//============================================================================= - -shadowJar { - baseName = 'wave-pst' - classifier = '' - exclude 'META-INF/**/*' -} - -//============================================================================= -// Clean - Must remove generated sources. -//============================================================================= -clean { - delete "generated/" -} - -//============================================================================= -// Source Distribution -//============================================================================= - -def srcName = this.group + "-" + this.name + "-src" -def srcExcludes = [ - 'build/*', - '*.iml' -] - -task createDistSourceTar(type: Tar) { - compression = Compression.GZIP - extension = 'tar.gz' - baseName = srcName - destinationDir = file('../distributions') - from('./') { - into 'apache-wave-pst-src' - } - excludes = srcExcludes - -} - -task createDistSourceZip(type: Zip) { - baseName = srcName - destinationDir = file('../distributions') - from('./') { - into 'apache-wave-pst-src' - } - excludes = srcExcludes -} - -task createDistSource() { - doFirst { - println '' - println '--------------------------------------------------------' - println ' Creating Deployment Source - Apache Wave PST ' - println '--------------------------------------------------------' - println '' - } -} - -createDistSource.dependsOn createDistSourceTar, createDistSourceZip - -//============================================================================= -// Binary Distribution -//============================================================================= - -def binName = this.group + "-" + this.name + "-bin" - -task createDistBinTar(type: Tar) { - compression = Compression.GZIP - extension = 'tar.gz' - baseName = binName - destinationDir = file('../distributions') - from(shadowJar) { - into 'apache-wave-pst/bin' - } - from('src/dist') { - into 'apache-wave-pst' - } -} - -task createDistBinZip(type: Zip) { - baseName = binName - destinationDir = file('../distributions') - from(shadowJar) { - into 'apache-wave-pst/bin' - } - from('src/dist') { - into 'apache-wave-pst' - } -} - -task createDistBin() { - doFirst { - println '' - println '--------------------------------------------------------' - println ' Creating Deployment Binary - Apache Wave PST ' - println '--------------------------------------------------------' - println '' - } -} - -createDistBin.dependsOn createDistBinTar, createDistBinZip - -//============================================================================= -// Distribution's -//============================================================================= - -task createDist() { - doFirst { - println '' - println '--------------------------------------------------------' - println ' Creating Deployments - Apache Wave PST ' - println '--------------------------------------------------------' - println '' - } -} - -createDist.dependsOn createDistSource, createDistBin \ No newline at end of file +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/dist/LICENSE ---------------------------------------------------------------------- diff --git a/pst/src/dist/LICENSE b/pst/src/dist/LICENSE deleted file mode 100644 index c60ce90..0000000 --- a/pst/src/dist/LICENSE +++ /dev/null @@ -1,244 +0,0 @@ - ***THE FOLLOWING LICENSE APPLIES TO*** -- Apache Wave PST -- Apache Commons CLI included in the generated jar files -- Google Guava included in the generated jar files - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2013 The Apache Software Foundation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -***THE FOLLOWING LICENSE APPLIES TO*** -- Protobuf Java libraries included in the generated jar files - -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. - http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/dist/NOTICE ---------------------------------------------------------------------- diff --git a/pst/src/dist/NOTICE b/pst/src/dist/NOTICE deleted file mode 100644 index ac0e02a..0000000 --- a/pst/src/dist/NOTICE +++ /dev/null @@ -1,8 +0,0 @@ - Apache Wave - PST - Copyright 2011-2016 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (http://www.apache.org/). - - Portions of this software were developed at Google Inc. and - have been kindly donated to the Apache Software Foundation. http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/Pst.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/Pst.java b/pst/src/main/java/org/apache/wave/pst/Pst.java deleted file mode 100644 index 1265899..0000000 --- a/pst/src/main/java/org/apache/wave/pst/Pst.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.Strings; -import com.google.common.collect.Lists; -import com.google.protobuf.Descriptors.Descriptor; -import com.google.protobuf.Descriptors.FileDescriptor; - -import org.antlr.stringtemplate.StringTemplate; -import org.antlr.stringtemplate.StringTemplateGroup; - -import org.apache.wave.pst.model.Message; -import org.apache.wave.pst.model.MessageProperties; -import org.apache.wave.pst.style.Styler; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.util.List; - -/** - * PST stands for protobuf-stringtemplate. - * - * The tool allows arbitrary code generation given a series of string - * templates, each passed the description of a protocol buffer file. This allows - * protobuf- based file generation beyond what existing protocol compilers - * (protoc, protostuff, etc) are capable of (without modification), using the - * convenience and safety of <a href="http://stringtemplate.org">string - * template</a>. - * - * A number of sample templates are bundles (in templates), so see these as - * examples. These templates give a complete client/server JSON message stack: - * <ul> - * <li><em>message</em> is a common interface.</li> - * <li><em>messageTestImpl</em> is a simple/pure Java in-memory implementation - * of the interface, for testing.</li> - * <li><em>messagePojoImpl</em> is a like messageTestImpl with JSON - * serialization and deserialization using the Gson library.</li> - * <li><em>messageServerImpl</em> is a protobuf-backed implementation, useful - * for a multi-server environment where the efficient serialization of protocol - * buffers is an advantage. JSON is also supported.</li> - * <li><em>messageClientImpl</em> is an efficent javascript implementation for - * use with GWT.</li> - * </ul> - * - * There is no particular reason why PST can only be used to generate Java, for - * example, a pure JS rather than GWT implementation of the client JSON message - * component could be generated[1]. - * - * PST is implemented using the protocol buffer reflection generated by protoc - * alongside the actual Message classes it generates; these are converted into - * simple Java model objects with simple accessors suitable for accessing from - * stringtemplate. - * - * The code generated by stringtemplate is then post-processed using a simple - * custom code formatter since the output from stringtemplate can be hard to - * humanly read (e.g. the indentation is unpredictable). - * - * [1] although, currently it is hardcoded in PST to generate .java files, and - * the model has Java-centric methods. The code formatter also assumes that - * it is run over a Java file. These all could be easily modified, however. - * - * @author [email protected] (Benjamin Kalman) - */ -public final class Pst { - - private final File outputDir; - private final FileDescriptor fd; - private final Styler styler; - private final Iterable<File> templates; - private final boolean saveBackups; - private final boolean useInt52; - - /** - * @param outputDir the base directory to write the generated files - * @param fd the {@link FileDescriptor} of the protobuf to use (i.e. pass to - * each string template) - * @param styler the code styler to post-process generated code with - * @param templates the collection of string templates to use - * @param saveBackups whether to save intermediate generated files - * @param useInt52 whether we use doubles to serialize 64-bit integers - */ - public Pst(File outputDir, FileDescriptor fd, Styler styler, Iterable<File> templates, - boolean saveBackups, boolean useInt52) { - this.outputDir = checkNotNull(outputDir, "outputDir cannot be null"); - this.fd = checkNotNull(fd, "fd cannot be null"); - this.styler = checkNotNull(styler, "styler cannot be null"); - this.templates = checkNotNull(templates, "templates cannot be null"); - this.saveBackups = saveBackups; - this.useInt52 = useInt52; - } - - /** - * Runs the code generation for all templates. - */ - public void run() throws PstException { - List<PstException.TemplateException> exceptions = Lists.newArrayList(); - for (File template : templates) { - try { - MessageProperties properties = createProperties(template); - String groupName = stripSuffix(".st", template.getName()); - String templateName = properties.hasTemplateName() ? - properties.getTemplateName() : ""; - StringTemplateGroup group = new StringTemplateGroup(groupName + "Group", dir(template)); - StringTemplate st = group.getInstanceOf(groupName); - for (Descriptor messageDescriptor : fd.getMessageTypes()) { - Message message = new Message(messageDescriptor, templateName, properties); - st.reset(); - st.setAttribute("m", message); - write(st, new File( - outputDir.getPath() + File.separator + - message.getFullJavaType().replace('.', File.separatorChar) + "." + - (properties.hasFileExtension() ? properties.getFileExtension() : "java"))); - } - } catch (Exception e) { - exceptions.add(new PstException.TemplateException(template.getPath(), e)); - } - } - if (!exceptions.isEmpty()) { - throw new PstException(exceptions); - } - } - - /** - * @return the path to the directory which contains a file, or just the path - * to the file itself if it's already a directory - */ - private String dir(File f) { - return f.isDirectory() - ? f.getPath() - : (Strings.isNullOrEmpty(f.getParent()) ? "." : f.getParent()); - } - - private String stripSuffix(String suffix, String s) { - return s.endsWith(suffix) ? s.substring(0, s.length() - suffix.length()) : s; - } - - private void write(StringTemplate st, File output) throws IOException { - output.getParentFile().mkdirs(); - BufferedWriter writer = new BufferedWriter(new FileWriter(output)); - try { - writer.write(st.toString()); - } finally { - try { - writer.close(); - } catch (IOException e) { - // If another exception is already propagating, we don't - // want to throw a secondary one. - // This means that exceptions on close() are ignored, - // but what could usefully be done for a close() - // exception anyway? - } - } - styler.style(output, saveBackups); - } - - private MessageProperties createProperties(File template) - throws FileNotFoundException, IOException { - File propertiesFile = - new File(template.getParentFile().getPath() + File.separator + "properties"); - MessageProperties properties = propertiesFile.exists() - ? MessageProperties.createFromFile(propertiesFile) : MessageProperties.createEmpty(); - properties.setUseInt52(useInt52); - return properties; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/PstCommandLine.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/PstCommandLine.java b/pst/src/main/java/org/apache/wave/pst/PstCommandLine.java deleted file mode 100644 index b725704..0000000 --- a/pst/src/main/java/org/apache/wave/pst/PstCommandLine.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; - -import org.apache.wave.pst.style.PstStyler; -import org.apache.wave.pst.style.Styler; - -import java.io.File; -import java.util.Map; - -/** - * Encapsulates the command line options to protobuf-stringtemplate. - * - * @author [email protected] (Benjamin Kalman) - */ -public final class PstCommandLine { - - private static final String DEFAULT_OUTPUT_DIR = "."; - private static final String DEFAULT_PROTO_PATH = "."; - private static final Map<String, Styler> STYLERS = ImmutableMap.<String, Styler> builder() - .put("none", Styler.EMPTY) - .put("pst", new PstStyler()) - .build(); - - private final CommandLine cl; - - public PstCommandLine(String... args) throws ParseException { - cl = new DefaultParser().parse(getOptions(), args); - checkArgs(); - } - - private void checkArgs() throws ParseException { - if (!hasFile()) { - throw new ParseException("Must specify file"); - } - if (cl.getArgList().isEmpty()) { - throw new ParseException("Must specify at least one template"); - } - } - - private static Options getOptions() { - Options options = new Options(); - options.addOption("h", "help", false, "Show this help"); - options.addOption("f", "file", true, "The protobuf specification file to use"); - options.addOption("d", "dir", true, String.format( - "The base directory to output generated files to (default: %s)", DEFAULT_OUTPUT_DIR)); - options.addOption("s", "styler", true, "The styler to use, if any (default: none). " + - "Available options: " + STYLERS.keySet()); - options.addOption("i", "save_pre_styled", false, "Save the intermediate pre-styled files"); - options.addOption("j", "save_java", false, "Save the protoc-generated Java file, if any"); - options.addOption("I", "proto_path", true, "Extra path to search for proto extensions. " - + "This needs to be specified if the target file is a .proto file with any of the PST-" - + "specific extensions, in which case the path should include both PST source " - + "base and the protoc source base; i.e., /PATH/TO/PST/src:/PATH/TO/PROTOC/src"); - options.addOption("t", "int52", true, - "Specifies if pst should store 64-bit integers should be serialized to" - + "doubles which will use 52-bit precision. It's useful " - + "when data is meant to be serialized/deserialized in JavaScript, since it doesn't " - + "support 64-bit integers (default: false)."); - return options; - } - - public boolean hasHelp() { - return cl.hasOption('h'); - } - - // NOTE: private because it's always true, checked in checkArgs(). - private boolean hasFile() { - return cl.hasOption('f'); - } - - public static void printHelp() { - new HelpFormatter().printHelp( - PstMain.class.getSimpleName() + " [options] templates...", getOptions()); - } - - public File getProtoFile() { - return new File(cl.getOptionValue('f')); - } - - @SuppressWarnings("unchecked") - public Iterable<File> getTemplateFiles() { - return Iterables.transform(cl.getArgList(), new Function<String, File>() { - @Override public File apply(String filename) { - return new File(filename); - } - }); - } - - public File getOutputDir() { - return new File(cl.hasOption('d') ? cl.getOptionValue('d') : DEFAULT_OUTPUT_DIR); - } - - public File getProtoPath() { - return new File(cl.hasOption('I') ? cl.getOptionValue('I') : DEFAULT_PROTO_PATH); - } - - public Styler getStyler() { - if (cl.hasOption('s')) { - String stylerName = cl.getOptionValue('s'); - if (STYLERS.containsKey(stylerName)) { - return STYLERS.get(stylerName); - } else { - System.err.println("WARNING: unrecognised styler: " + stylerName + ", using none"); - return Styler.EMPTY; - } - } else { - return Styler.EMPTY; - } - } - - public boolean shouldSavePreStyled() { - return cl.hasOption('p'); - } - - public boolean shouldSaveJava() { - return cl.hasOption('j'); - } - - public boolean shouldUseInt52() { - return !cl.hasOption('t') // - || (cl.hasOption('t') && "true".equals(cl.getOptionValue('t'))); - } -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/PstException.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/PstException.java b/pst/src/main/java/org/apache/wave/pst/PstException.java deleted file mode 100644 index 9b17bd7..0000000 --- a/pst/src/main/java/org/apache/wave/pst/PstException.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst; - -import com.google.common.collect.ImmutableList; - -import java.util.List; - -/** - * Exception caused by any errors caused in code generation. - * - * @author [email protected] (Benjamin Kalman) - */ -public final class PstException extends Exception { - - public static final class TemplateException extends Exception { - private final String templateName; - - public TemplateException(String templateName, String message, Throwable cause) { - super(message, cause); - this.templateName = templateName; - } - - public TemplateException(String templateName, Throwable cause) { - super(cause); - this.templateName = templateName; - } - - /** - * @return the name of the template being parsed when the exception occurred - */ - public String getTemplateName() { - return templateName; - } - } - - private final ImmutableList<TemplateException> exceptions; - - public PstException(List<TemplateException> exceptions) { - super(); - this.exceptions = ImmutableList.copyOf(exceptions); - } - - /** - * @return all exceptions caused - */ - public ImmutableList<TemplateException> getTemplateExceptions() { - return exceptions; - } -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/PstFileDescriptor.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/PstFileDescriptor.java b/pst/src/main/java/org/apache/wave/pst/PstFileDescriptor.java deleted file mode 100644 index 9c870ba..0000000 --- a/pst/src/main/java/org/apache/wave/pst/PstFileDescriptor.java +++ /dev/null @@ -1,345 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst; - -import com.google.common.base.Joiner; -import com.google.common.base.Predicate; -import com.google.common.io.CharStreams; -import com.google.common.io.Files; -import com.google.protobuf.Descriptors.FileDescriptor; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * A loader for a {@link FileDescriptor}, accepting and handling a proto file - * specified as: - * <ul> - * <li>A path to a .proto file.</li> - * <li>A path to a .java (protoc-)compiled proto spec.</li> - * <li>A path to a .class (javac-) compiled proto spec.</li> - * <li>A proto spec that is already on the classpath.</li> - * </ul> - * - * @author [email protected] (Benjamin Kalman) - */ -public final class PstFileDescriptor { - - private final FileDescriptor descriptor; - - /** - * Loads the {@link FileDescriptor} from a path. The path may be a class name - * (e.g. foo.Bar), path to a class (e.g. bin/foo/Bar.class), or a path to a - * Java source file (e.g. src/foo/Bar.java). - * - * In each case it is the caller's responsibility to ensure that the classpath - * of the Java runtime is correct. - * - * @param path the path to load the proto description from - * @param saveintermediateJavaDir path to save the intermediate protoc- - * generated Java file (if any) - * @param protoPath any additional path to pass to the protoc compiler - */ - public static FileDescriptor load(String path, File intermediateJavaDir, File protoPath) { - return new PstFileDescriptor(path, intermediateJavaDir, protoPath).get(); - } - - private PstFileDescriptor(String path, File intermediateJavaDir, File protoPath) { - Class<?> clazz = null; - if (path.endsWith(".class")) { - clazz = fromPathToClass(path); - } else if (path.endsWith(".java")) { - clazz = fromPathToJava(path); - } else if (path.endsWith(".proto")) { - clazz = fromPathToProto(path, intermediateJavaDir, protoPath); - } else { - clazz = fromClassName(path); - } - - if (clazz == null) { - descriptor = null; - } else { - descriptor = asFileDescriptor(clazz); - } - } - - private FileDescriptor get() { - return descriptor; - } - - private Class<?> fromClassName(String className) { - try { - return Class.forName(className); - } catch (ClassNotFoundException e) { - return null; - } - } - - private Class<?> fromPathToClass(String pathToClass) { - String currentBaseDir = new File(pathToClass).isAbsolute() ? "" : "."; - String currentPath = pathToClass; - Class<?> clazz = null; - while (clazz == null) { - clazz = loadClassAtPath(currentBaseDir, currentPath); - if (clazz == null) { - int indexOfSep = currentPath.indexOf(File.separatorChar); - if (indexOfSep == -1) { - break; - } else { - currentBaseDir += File.separator + currentPath.substring(0, indexOfSep); - currentPath = currentPath.substring(indexOfSep + 1); - } - } - } - return clazz; - } - - private Class<?> loadClassAtPath(String baseDir, String path) { - try { - ClassLoader classLoader = new URLClassLoader(new URL[] {new File(baseDir).toURI().toURL()}); - return classLoader.loadClass(getBinaryName(path)); - } catch (Throwable t) { - return null; - } - } - - private String getBinaryName(String path) { - return path.replace(File.separatorChar, '.').substring(0, path.length() - ".class".length()); - } - - private Class<?> fromPathToJava(String pathToJava) { - try { - File dir = Files.createTempDir(); - String[] javacCommand = new String[] { - "javac", pathToJava, "-d", dir.getAbsolutePath(), "-verbose", - "-cp", determineClasspath(pathToJava) + ":" + determineSystemClasspath() - }; - Process javac = Runtime.getRuntime().exec(javacCommand); - consumeStdOut(javac); - List<String> stdErr = readLines(javac.getErrorStream()); - int exitCode = javac.waitFor(); - if (exitCode != 0) { - // Couldn't compile the file. - System.err.printf("ERROR: running \"%s\" failed (%s):", - Joiner.on(' ').join(javacCommand), exitCode); - for (String line : stdErr) { - System.err.println(line); - } - return null; - } else { - // Compiled the file! Now to determine where javac put it. - Pattern pattern = Pattern.compile("\\[wrote ([^\\]]*)\\]"); - String pathToClass = null; - for (String line : stdErr) { - Matcher lineMatcher = pattern.matcher(line); - if (lineMatcher.matches()) { - pathToClass = lineMatcher.group(1); - // NOTE: don't break, as the correct path is the last one matched. - } - } - if (pathToClass != null) { - return fromPathToClass(pathToClass); - } else { - System.err.println("WARNING: couldn't find javac output from javac " + pathToJava); - return null; - } - } - } catch (Exception e) { - System.err.println("WARNING: exception while processing " + pathToJava + ": " - + e.getMessage()); - return null; - } - } - - /** - * Fires off a background thread to consume anything written to a process' - * standard output. Without running this, a process that outputs too much data - * will block. - */ - private void consumeStdOut(Process p) { - final InputStream o = p.getInputStream(); - Thread t = new Thread() { - @Override - public void run() { - try { - while (o.read() != -1) {} - } catch (IOException e) { - e.printStackTrace(); - } - } - }; - t.setDaemon(true); - t.start(); - } - - private String determineClasspath(String pathToJava) { - // Try to determine the classpath component of a path by looking at the - // path components. - StringBuilder classpath = new StringBuilder(); - if (new File(pathToJava).isAbsolute()) { - classpath.append(File.separator); - } - - // This is just silly, but it will get by for now. - for (String component : pathToJava.split(File.separator)) { - if (component.equals("org") - || component.equals("com") - || component.equals("au")) { - return classpath.toString(); - } else { - classpath.append(component + File.separator); - } - } - - System.err.println("WARNING: couldn't determine classpath for " + pathToJava); - return "."; - } - - private String determineSystemClasspath() { - StringBuilder s = new StringBuilder(); - boolean needsColon = false; - for (URL url : ((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs()) { - if (needsColon) { - s.append(':'); - } - s.append(url.getPath()); - needsColon = true; - } - return s.toString(); - } - - private Class<?> fromPathToProto(String pathToProto, File intermediateJavaDir, File protoPath) { - try { - intermediateJavaDir.mkdirs(); - File proto = new File(pathToProto); - String[] protocCommand = new String[] { - "protoc", tryGetRelativePath(proto), - "-I" + protoPath.getPath(), - "--java_out", intermediateJavaDir.getAbsolutePath() - }; - Process protoc = Runtime.getRuntime().exec(protocCommand); - // TODO(ben): configure timeout? - killProcessAfter(10, TimeUnit.SECONDS, protoc); - int exitCode = protoc.waitFor(); - if (exitCode != 0) { - // Couldn't compile the file. - System.err.printf("ERROR: running \"%s\" failed (%s):", - Joiner.on(' ').join(protocCommand), exitCode); - for (String line : readLines(protoc.getErrorStream())) { - System.err.println(line); - } - return null; - } else { - final String javaFileName = capitalize(stripSuffix(".proto", proto.getName())) + ".java"; - String maybeJavaFilePath = find(intermediateJavaDir, new Predicate<File>() { - @Override public boolean apply(File f) { - return f.getName().equals(javaFileName); - } - }); - if (maybeJavaFilePath == null) { - System.err.println("ERROR: couldn't find result of protoc in " + intermediateJavaDir); - return null; - } - return fromPathToJava(maybeJavaFilePath); - } - } catch (Exception e) { - System.err.println("WARNING: exception while processing " + pathToProto + ": " - + e.getMessage()); - e.printStackTrace(); - return null; - } - } - - private String find(File dir, Predicate<File> predicate) { - for (File file : dir.listFiles()) { - if (file.isDirectory()) { - String path = find(file, predicate); - if (path != null) { - return path; - } - } - if (predicate.apply(file)) { - return file.getAbsolutePath(); - } - } - return null; - } - - private String tryGetRelativePath(File file) { - String pwd = System.getProperty("user.dir"); - return stripPrefix(pwd + File.separator, file.getAbsolutePath()); - } - - private String stripPrefix(String prefix, String s) { - return s.startsWith(prefix) ? s.substring(prefix.length()) : s; - } - - private String stripSuffix(String suffix, String s) { - return s.endsWith(suffix) ? s.substring(0, s.length() - suffix.length()) : s; - } - - private String capitalize(String s) { - return Character.toUpperCase(s.charAt(0)) + s.substring(1); - } - - private List<String> readLines(InputStream is) { - try { - return CharStreams.readLines(new InputStreamReader(is)); - } catch (IOException e) { - e.printStackTrace(); - // TODO(kalman): this is a bit hacky, deal with it properly. - return Collections.singletonList("(Error, couldn't read lines from the input stream. " + - "Try running the command external to PST to view the output.)"); - } - } - - private FileDescriptor asFileDescriptor(Class<?> clazz) { - try { - Method method = clazz.getMethod("getDescriptor"); - return (FileDescriptor) method.invoke(null); - } catch (Exception e) { - return null; - } - } - - private void killProcessAfter(final long delay, final TimeUnit unit, final Process process) { - Thread processKiller = new Thread() { - @Override public void run() { - try { - Thread.sleep(unit.toMillis(delay)); - process.destroy(); - } catch (InterruptedException e) { - } - } - }; - processKiller.setDaemon(true); - processKiller.start(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/PstMain.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/PstMain.java b/pst/src/main/java/org/apache/wave/pst/PstMain.java deleted file mode 100644 index 3faeba1..0000000 --- a/pst/src/main/java/org/apache/wave/pst/PstMain.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst; - -import com.google.common.collect.Lists; -import com.google.common.io.Files; -import com.google.protobuf.Descriptors.FileDescriptor; - -import org.apache.commons.cli.ParseException; - -import java.io.File; -import java.util.List; - -/** - * Entry point for command line protobuf-stringtemplate. - * - * @author [email protected] (Benjamin Kalman) - */ -public final class PstMain { - - public static void main(String[] args) { - PstCommandLine cl = null; - try { - cl = new PstCommandLine(args); - } catch (ParseException e) { - System.err.println("Error parsing command line arguments: " + e.getMessage()); - PstCommandLine.printHelp(); - System.exit(1); - } - - if (cl.hasHelp()) { - PstCommandLine.printHelp(); - System.exit(0); - } - - FileDescriptor fd = PstFileDescriptor.load( - cl.getProtoFile().getPath(), - cl.shouldSaveJava() ? cl.getOutputDir() : Files.createTempDir(), - cl.getProtoPath()); - if (fd == null) { - System.err.println("Error: cannot find file descriptor for " + cl.getProtoFile()); - System.exit(1); - } - - boolean failed = false; - - List<File> templates = Lists.newArrayList(); - for (File maybeTemplate : cl.getTemplateFiles()) { - if (maybeTemplate.exists()) { - templates.add(maybeTemplate); - } else { - System.err.println("ERROR: template " + maybeTemplate.getPath() + " does not exist."); - failed = true; - } - } - - Pst pst = new Pst(cl.getOutputDir(), fd, cl.getStyler(), templates, cl.shouldSavePreStyled(), - cl.shouldUseInt52()); - try { - pst.run(); - } catch (PstException e) { - System.err.printf("ERROR: generation failed for %d/%d templates:\n", - e.getTemplateExceptions().size(), templates.size()); - for (PstException.TemplateException te : e.getTemplateExceptions()) { - System.err.println('\n' + te.getTemplateName() + " failed:"); - te.printStackTrace(System.err); - } - failed = true; - } - - if (failed) { - System.exit(1); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/ee2dadf8/pst/src/main/java/org/apache/wave/pst/model/EnumValue.java ---------------------------------------------------------------------- diff --git a/pst/src/main/java/org/apache/wave/pst/model/EnumValue.java b/pst/src/main/java/org/apache/wave/pst/model/EnumValue.java deleted file mode 100644 index f246d13..0000000 --- a/pst/src/main/java/org/apache/wave/pst/model/EnumValue.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.wave.pst.model; - -import com.google.protobuf.Descriptors.EnumValueDescriptor; - -/** - * Wraps a {@link EnumValueDescriptor} with methods suitable for stringtemplate. - * - * @author [email protected] (Benjamin Kalman) - */ -public final class EnumValue { - - private final EnumValueDescriptor descriptor; - - public EnumValue(EnumValueDescriptor descriptor) { - this.descriptor = descriptor; - } - - /** - * Gets the name of the enum value, for example: - * <ul> - * <li>org.waveprotocol.pst.examples.Example1.Person.Gender.MALE = "MALE".</li> - * </ul> - * - * @return the name of the enum value - */ - public String getName() { - return descriptor.getName(); - } - - /** - * Gets the number of the enum value, for example: - * <ul> - * <li>org.waveprotocol.pst.examples.Example1.Person.Gender.MALE = 1.</li> - * </ul> - * - * @return the name of the enum value - */ - public int getNumber() { - return descriptor.getNumber(); - } -}
