/** * * Copyright (C) norad.fr * * 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. */ package fr.norad.visuwall.providers.common; import static com.google.common.base.Preconditions.checkNotNull; import java.io.InputStream; import java.net.URL; import java.security.cert.X509Certificate; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import javax.ws.rs.core.MediaType; import com.google.common.io.ByteStreams; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientHandlerException; import com.sun.jersey.api.client.UniformInterfaceException; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; public class GenericSoftwareClient { private Client client; private static final ResourceCache CACHE = new ResourceCache(); static { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { } } public GenericSoftwareClient() { ClientConfig clientConfig = new DefaultClientConfig(); client = Client.create(clientConfig); } public GenericSoftwareClient(String login, String password) { checkNotNull(login, "login is mandatory"); checkNotNull(password, "password is mandatory"); ClientConfig clientConfig = new DefaultClientConfig(); client = Client.create(clientConfig); client.addFilter(new HTTPBasicAuthFilter(login, password)); } public <T> T resource(String url, Class<T> clazz) throws ResourceNotFoundException { checkUrl(url); checkClass(clazz); try { T object = CACHE.get(url, clazz); if (object == null) { WebResource resource = client.resource(url); object = resource.get(clazz); CACHE.put(object, url, clazz); } return object; } catch (Throwable t) { String errorMessage = "Can't get resource of type " + clazz.getName() + " at '" + url + "'"; throw new ResourceNotFoundException(errorMessage, t); } } public <T> boolean exist(String url, Class<T> clazz) { try { resource(url, clazz); return true; } catch (ResourceNotFoundException e) { return false; } } public <T> T resource(String url, Class<T> clazz, MediaType mediaType) throws ResourceNotFoundException { checkUrl(url); checkClass(clazz); checkMediaType(mediaType); try { T object = CACHE.get(url, clazz, mediaType); if (object == null) { WebResource resource = client.resource(url); object = resource.accept(mediaType).get(clazz); CACHE.put(object, url, clazz, mediaType); } return object; } catch (UniformInterfaceException e) { throw new ResourceNotFoundException(e); } catch (ClientHandlerException e) { throw new ResourceNotFoundException(e); } } public <T> T existingResource(String url, Class<T> clazz, MediaType mediaType) { try { return resource(url, clazz, mediaType); } catch (ResourceNotFoundException e) { throw new RuntimeException("You should check your url before calling existingResource()", e); } } private void checkMediaType(MediaType mediaType) { checkNotNull(mediaType, "mediaType is mandatory"); } private <T> void checkClass(Class<T> clazz) { checkNotNull(clazz, "clazz is mandatory"); } private void checkUrl(String url) { checkNotNull(url, "url is mandatory"); } public boolean contains(URL url, String word) { try { InputStream stream = url.openStream(); byte[] byteArray = ByteStreams.toByteArray(stream); String string = new String(byteArray); return string.contains(word); } catch (Exception e) { return false; } } }