Skip to content

Commit e486daf

Browse files
Takashi Matsuolesv
Takashi Matsuo
authored andcommitted
Adding Search API sample code. (GoogleCloudPlatform#167)
* Adding Search API sample code. * Added tests, correct style checks. Change-Id: Ib568b0ae397501f4b437478b2f6c1564fb50e0b1
1 parent ced4fa6 commit e486daf

18 files changed

+1163
-1
lines changed

appengine/search/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Eclipse files
2+
.project
3+
.classpath
4+
.settings
5+
6+
# Target folders
7+
target/

appengine/search/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Google App Engine Standard Environment Search API Sample
2+
3+
This sample demonstrates how to use App Engine Search API.
4+
5+
See the [Google App Engine Search API documentation][search-api-docs] for more
6+
detailed instructions.
7+
8+
[search-api-docs]: https://cloud.google.com/appengine/docs/java/search/
9+
10+
## Setup
11+
1. Update the `<application>` tag in `src/main/webapp/WEB-INF/appengine-web.xml`
12+
with your project name.
13+
1. Update the `<version>` tag in `src/main/webapp/WEB-INF/appengine-web.xml`
14+
with your version name.
15+
16+
## Running locally
17+
$ mvn appengine:devserver
18+
19+
## Deploying
20+
$ mvn appengine:update

appengine/search/google-checks.xml

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE module PUBLIC
3+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
5+
<!--
6+
Copyright 2016 Google Inc. All Rights Reserved.
7+
8+
Licensed under the Apache License, Version 2.0 (the "License");
9+
you may not use this file except in compliance with the License.
10+
You may obtain a copy of the License at
11+
12+
http://www.apache.org/licenses/LICENSE-2.0
13+
14+
Unless required by applicable law or agreed to in writing, software
15+
distributed under the License is distributed on an "AS IS" BASIS,
16+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
See the License for the specific language governing permissions and
18+
limitations under the License.
19+
-->
20+
21+
<!--
22+
Checkstyle configuration that checks the Google coding conventions from:
23+
24+
- Google Java Style
25+
https://google-styleguide.googlecode.com/svn-history/r130/trunk/javaguide.html
26+
27+
Checkstyle is very configurable. Be sure to read the documentation at
28+
http://checkstyle.sf.net (or in your downloaded distribution).
29+
Most Checks are configurable, be sure to consult the documentation.
30+
To completely disable a check, just comment it out or delete it from the file.
31+
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
32+
-->
33+
<module name = "Checker">
34+
<property name="charset" value="UTF-8"/>
35+
36+
<property name="severity" value="error"/>
37+
38+
<property name="fileExtensions" value="java, properties, xml"/>
39+
<!-- Checks for whitespace -->
40+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
41+
<module name="FileTabCharacter">
42+
<property name="eachLine" value="true"/>
43+
</module>
44+
45+
<module name="TreeWalker">
46+
<!-- Make @SuppressWarnings available to checkstyle http://stackoverflow.com/a/22556386/101923 -->
47+
<module name="SuppressWarningsHolder" />
48+
<module name="UnusedImports"/>
49+
<module name="OuterTypeFilename"/>
50+
<module name="IllegalTokenText">
51+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
52+
<property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
53+
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
54+
</module>
55+
<module name="AvoidEscapedUnicodeCharacters">
56+
<property name="allowEscapesForControlCharacters" value="true"/>
57+
<property name="allowByTailComment" value="true"/>
58+
<property name="allowNonPrintableEscapes" value="true"/>
59+
</module>
60+
<module name="LineLength">
61+
<property name="max" value="100"/>
62+
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
63+
</module>
64+
<module name="AvoidStarImport"/>
65+
<module name="OneTopLevelClass"/>
66+
<module name="NoLineWrap"/>
67+
<module name="EmptyBlock">
68+
<property name="option" value="TEXT"/>
69+
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
70+
</module>
71+
<module name="NeedBraces"/>
72+
<module name="LeftCurly">
73+
<property name="maxLineLength" value="100"/>
74+
</module>
75+
<module name="RightCurly"/>
76+
<module name="RightCurly">
77+
<property name="option" value="alone"/>
78+
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
79+
</module>
80+
<module name="WhitespaceAround">
81+
<property name="allowEmptyConstructors" value="true"/>
82+
<property name="allowEmptyMethods" value="true"/>
83+
<property name="allowEmptyTypes" value="true"/>
84+
<property name="allowEmptyLoops" value="true"/>
85+
<message key="ws.notFollowed"
86+
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
87+
<message key="ws.notPreceded"
88+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
89+
</module>
90+
<module name="OneStatementPerLine"/>
91+
<module name="MultipleVariableDeclarations"/>
92+
<module name="ArrayTypeStyle"/>
93+
<module name="MissingSwitchDefault"/>
94+
<module name="FallThrough"/>
95+
<module name="UpperEll"/>
96+
<module name="ModifierOrder"/>
97+
<module name="EmptyLineSeparator">
98+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
99+
<property name="tokens" value="CLASS_DEF, ENUM_DEF, INTERFACE_DEF, CTOR_DEF, METHOD_DEF, STATIC_INIT, INSTANCE_INIT, VARIABLE_DEF" />
100+
</module>
101+
<module name="SeparatorWrap">
102+
<property name="tokens" value="DOT"/>
103+
<property name="option" value="nl"/>
104+
</module>
105+
<module name="SeparatorWrap">
106+
<property name="tokens" value="COMMA"/>
107+
<property name="option" value="EOL"/>
108+
</module>
109+
<module name="PackageName">
110+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
111+
<message key="name.invalidPattern"
112+
value="Package name ''{0}'' must match pattern ''{1}''."/>
113+
</module>
114+
<module name="TypeName">
115+
<message key="name.invalidPattern"
116+
value="Type name ''{0}'' must match pattern ''{1}''."/>
117+
</module>
118+
<module name="MemberName">
119+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
120+
<message key="name.invalidPattern"
121+
value="Member name ''{0}'' must match pattern ''{1}''."/>
122+
</module>
123+
<module name="ParameterName">
124+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
125+
<message key="name.invalidPattern"
126+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
127+
</module>
128+
<module name="LocalVariableName">
129+
<property name="tokens" value="VARIABLE_DEF"/>
130+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
131+
<property name="allowOneCharVarInForLoop" value="true"/>
132+
<message key="name.invalidPattern"
133+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
134+
</module>
135+
<module name="ClassTypeParameterName">
136+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
137+
<message key="name.invalidPattern"
138+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
139+
</module>
140+
<module name="MethodTypeParameterName">
141+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
142+
<message key="name.invalidPattern"
143+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
144+
</module>
145+
<module name="NoFinalizer"/>
146+
<module name="GenericWhitespace">
147+
<message key="ws.followed"
148+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
149+
<message key="ws.preceded"
150+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
151+
<message key="ws.illegalFollow"
152+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
153+
<message key="ws.notPreceded"
154+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
155+
</module>
156+
<module name="Indentation">
157+
<property name="basicOffset" value="2"/>
158+
<property name="braceAdjustment" value="0"/>
159+
<property name="caseIndent" value="2"/>
160+
<property name="throwsIndent" value="4"/>
161+
<property name="lineWrappingIndentation" value="4"/>
162+
<property name="arrayInitIndent" value="2"/>
163+
</module>
164+
<module name="AbbreviationAsWordInName">
165+
<property name="ignoreFinal" value="false"/>
166+
<property name="allowedAbbreviationLength" value="1"/>
167+
</module>
168+
<module name="OverloadMethodsDeclarationOrder"/>
169+
<module name="CustomImportOrder">
170+
<property name="specialImportsRegExp" value="^javax\."/>
171+
<property name="sortImportsInGroupAlphabetically" value="true"/>
172+
<property name="customImportOrderRules" value="STATIC###SAME_PACKAGE(2)###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS"/>
173+
</module>
174+
<module name="MethodParamPad"/>
175+
<module name="OperatorWrap">
176+
<property name="option" value="NL"/>
177+
<property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/>
178+
</module>
179+
<module name="AnnotationLocation">
180+
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
181+
</module>
182+
<module name="AnnotationLocation">
183+
<property name="tokens" value="VARIABLE_DEF"/>
184+
<property name="allowSamelineMultipleAnnotations" value="true"/>
185+
</module>
186+
<module name="NonEmptyAtclauseDescription"/>
187+
<module name="JavadocTagContinuationIndentation"/>
188+
<module name="SummaryJavadocCheck">
189+
<property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
190+
</module>
191+
<module name="AtclauseOrder">
192+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
193+
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
194+
</module>
195+
<module name="JavadocMethod">
196+
<property name="scope" value="public"/>
197+
<property name="allowMissingJavadoc" value="true"/>
198+
<property name="allowMissingParamTags" value="true"/>
199+
<property name="allowMissingThrowsTags" value="true"/>
200+
<property name="allowMissingReturnTag" value="true"/>
201+
<property name="minLineCount" value="2"/>
202+
<property name="allowedAnnotations" value="Override, Test"/>
203+
<property name="allowThrowsTagsForSubclasses" value="true"/>
204+
</module>
205+
<module name="MethodName">
206+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
207+
<message key="name.invalidPattern"
208+
value="Method name ''{0}'' must match pattern ''{1}''."/>
209+
</module>
210+
<module name="SingleLineJavadoc">
211+
<property name="ignoreInlineTags" value="false"/>
212+
</module>
213+
<module name="EmptyCatchBlock">
214+
<property name="exceptionVariableName" value="expected"/>
215+
</module>
216+
<module name="FileContentsHolder"/>
217+
</module>
218+
219+
<!-- Allow silencing rules with annotations http://stackoverflow.com/a/22556386/101923 -->
220+
<module name="SuppressWarningsFilter" />
221+
<!-- Allow silencing with comment http://stackoverflow.com/questions/4023185 -->
222+
<module name="SuppressionCommentFilter" />
223+
</module>

appengine/search/pom.xml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<!--
2+
Copyright 2015 Google Inc. All Rights Reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
-->
16+
<project>
17+
<modelVersion>4.0.0</modelVersion>
18+
<packaging>war</packaging>
19+
<version>1.0-SNAPSHOT</version>
20+
<groupId>com.example.appengine</groupId>
21+
<artifactId>appengine-search</artifactId>
22+
<parent>
23+
<groupId>com.google.cloud</groupId>
24+
<artifactId>doc-samples</artifactId>
25+
<version>1.0.0</version>
26+
<relativePath>../..</relativePath>
27+
</parent>
28+
<dependencies>
29+
<dependency>
30+
<groupId>com.google.appengine</groupId>
31+
<artifactId>appengine-api-1.0-sdk</artifactId>
32+
<version>${appengine.sdk.version}</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>javax.servlet</groupId>
36+
<artifactId>servlet-api</artifactId>
37+
<version>2.5</version>
38+
<type>jar</type>
39+
<scope>provided</scope>
40+
</dependency>
41+
42+
<!-- Test Dependencies -->
43+
<dependency>
44+
<groupId>junit</groupId>
45+
<artifactId>junit</artifactId>
46+
<version>4.10</version>
47+
<scope>test</scope>
48+
</dependency>
49+
<dependency>
50+
<groupId>org.mockito</groupId>
51+
<artifactId>mockito-all</artifactId>
52+
<version>1.10.19</version>
53+
<scope>test</scope>
54+
</dependency>
55+
<dependency>
56+
<groupId>com.google.appengine</groupId>
57+
<artifactId>appengine-testing</artifactId>
58+
<version>${appengine.sdk.version}</version>
59+
<scope>test</scope>
60+
</dependency>
61+
<dependency>
62+
<groupId>com.google.appengine</groupId>
63+
<artifactId>appengine-api-stubs</artifactId>
64+
<version>${appengine.sdk.version}</version>
65+
<scope>test</scope>
66+
</dependency>
67+
<dependency>
68+
<groupId>com.google.appengine</groupId>
69+
<artifactId>appengine-tools-sdk</artifactId>
70+
<version>${appengine.sdk.version}</version>
71+
<scope>test</scope>
72+
</dependency>
73+
<dependency>
74+
<groupId>com.google.truth</groupId>
75+
<artifactId>truth</artifactId>
76+
<version>0.28</version>
77+
<scope>test</scope>
78+
</dependency>
79+
</dependencies>
80+
<build>
81+
<!-- for hot reload of the web application -->
82+
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
83+
<plugins>
84+
<plugin>
85+
<groupId>org.apache.maven.plugins</groupId>
86+
<artifactId>maven-checkstyle-plugin</artifactId>
87+
<version>2.17</version>
88+
<configuration>
89+
<configLocation>google-checks.xml</configLocation>
90+
<consoleOutput>true</consoleOutput>
91+
<failOnViolation>true</failOnViolation>
92+
<failsOnError>true</failsOnError>
93+
<includeTestSourceDirectory>true</includeTestSourceDirectory>
94+
<suppressionsLocation>suppressions.xml</suppressionsLocation>
95+
</configuration>
96+
<executions>
97+
<execution><goals><goal>check</goal></goals></execution>
98+
</executions>
99+
</plugin>
100+
<plugin>
101+
<groupId>org.apache.maven.plugins</groupId>
102+
<version>3.3</version>
103+
<artifactId>maven-compiler-plugin</artifactId>
104+
<configuration>
105+
<source>1.7</source>
106+
<target>1.7</target>
107+
</configuration>
108+
</plugin>
109+
<!-- Parent POM defines ${appengine.sdk.version} (updates frequently). -->
110+
<plugin>
111+
<groupId>com.google.appengine</groupId>
112+
<artifactId>appengine-maven-plugin</artifactId>
113+
<version>${appengine.sdk.version}</version>
114+
</plugin>
115+
</plugins>
116+
</build>
117+
</project>

0 commit comments

Comments
 (0)