/**
* 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 demo.jaxrs.search.client;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.cxf.helpers.IOUtils;
public final class Client {
private Client() {
}
public static void main(String args[]) throws Exception {
final String url = "http://localhost:9000/catalog";
final HttpClient httpClient = new HttpClient();
uploadToCatalog(url, httpClient, "jsr339-jaxrs-2.0-final-spec.pdf");
uploadToCatalog(url, httpClient, "JavaWebSocketAPI_1.0_Final.pdf");
uploadToCatalog(url, httpClient, "apache-cxf-tika-lucene.odt");
list(url, httpClient);
search(url, httpClient, "ct==java");
search(url, httpClient, "ct==websockets");
search(url, httpClient, "ct==Java");
search(url, httpClient, "ct==WebSockets");
search(url, httpClient, "ct==jaxrs,source==*jaxrs*");
search(url, httpClient, "ct==tika");
delete(url, httpClient);
}
private static void list(final String url, final HttpClient httpClient)
throws IOException, HttpException {
System.out.println("Sent HTTP GET request to query all books in catalog");
final GetMethod get = new GetMethod(url);
try {
int status = httpClient.executeMethod(get);
if (status == 200) {
System.out.println(get.getResponseBodyAsString());
}
} finally {
get.releaseConnection();
}
}
private static void search(final String url, final HttpClient httpClient, final String expression)
throws IOException, HttpException {
System.out.println("Sent HTTP GET request to search the books in catalog: " + expression);
final GetMethod get = new GetMethod(url + "/search");
get.setQueryString("$filter=" + expression);
try {
int status = httpClient.executeMethod(get);
if (status == 200) {
System.out.println(get.getResponseBodyAsString());
}
} finally {
get.releaseConnection();
}
}
private static void uploadToCatalog(final String url, final HttpClient httpClient,
final String filename) throws IOException, HttpException {
System.out.println("Sent HTTP POST request to upload the file into catalog: " + filename);
final PostMethod post = new PostMethod(url);
final Part[] parts = {
new FilePart(filename,
new ByteArrayPartSource(filename,
IOUtils.readBytesFromStream(Client.class.getResourceAsStream("/" + filename))
)
)
};
post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
try {
int status = httpClient.executeMethod(post);
if (status == 201) {
System.out.println(post.getResponseHeader("Location"));
} else if (status == 409) {
System.out.println("Document already exists: " + filename);
}
} finally {
post.releaseConnection();
}
}
private static void delete(final String url, final HttpClient httpClient)
throws IOException, HttpException {
System.out.println("Sent HTTP DELETE request to remove all books from catalog");
final DeleteMethod delete = new DeleteMethod(url);
try {
int status = httpClient.executeMethod(delete);
if (status == 200) {
System.out.println(delete.getResponseBodyAsString());
}
} finally {
delete.releaseConnection();
}
}
}