Mercurial > hg > orthanc-imagej
view com/orthancserver/OrthancConnection.java @ 3:929a9db62d7d
2016
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 04 Jan 2016 14:26:16 +0100 |
parents | 1092b2dca366 |
children | da7f11dcc6fd 1411a4ecd113 |
line wrap: on
line source
/** * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. **/ package com.orthancserver; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ConnectException; import java.net.URL; import java.net.URLConnection; import javax.imageio.ImageIO; import javax.xml.bind.DatatypeConverter; import org.json.simple.JSONObject; import org.json.simple.JSONValue; public class OrthancConnection { private String baseUrl_; private String authentication_; private String name_; OrthancConnection() { baseUrl_ = "http://localhost:8042/"; authentication_ = null; name_ = "Default Orthanc server"; } private static InputStream OpenUrl(String urlString) throws IOException { URL url = new URL(urlString); try { return url.openStream(); } catch (ConnectException e) { throw new IOException(); } } private static InputStream OpenUrl(String urlString, String authentication) throws IOException { try { URL url = new URL(urlString); // http://blogs.deepal.org/2008/01/sending-basic-authentication-using-url.html URLConnection uc = url.openConnection(); uc.setRequestProperty("Authorization", "Basic " + authentication); return uc.getInputStream(); } catch (ConnectException e) { throw new IOException(); } } private static String ComputeAuthentication(String username, String password) { String auth = (new StringBuffer(username).append(":").append(password)).toString(); // http://stackoverflow.com/a/14413290/881731 return DatatypeConverter.printBase64Binary(auth.getBytes()); } public InputStream OpenStream(String uri) throws IOException { String url = baseUrl_ + uri; return authentication_ == null ? OpenUrl(url) : OpenUrl(url, authentication_); } public void SetCredentials(String username, String password) { authentication_ = ComputeAuthentication(username, password); } public void SetBaseUrl(String url) { if (url.endsWith("/")) { baseUrl_ = url; } else { baseUrl_ = url + "/"; } } public String GetBaseUrl() { return baseUrl_; } public String ReadString(String uri) throws IOException { InputStream stream = OpenStream(uri); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer buffer = new StringBuffer(); int read; char[] chars = new char[1024 * 16]; while ((read = reader.read(chars)) != -1) { buffer.append(chars, 0, read); } return buffer.toString(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { } } } public Object ReadJson(String uri) throws IOException { String content = ReadString(uri); Object json = JSONValue.parse(content); if (json == null) { throw new IOException(); } else { return json; } } public BufferedImage ReadImage(String uri) throws IOException { return ImageIO.read(OpenStream(uri)); } public String GetName() { return name_; } public void SetName(String name) { name_ = name; } public JSONObject Serialize() { JSONObject json = new JSONObject(); json.put("Name", name_); json.put("Url", baseUrl_); if (authentication_ != null) { json.put("Authentication", authentication_); } return json; } public static OrthancConnection Unserialize(JSONObject json) { OrthancConnection c = new OrthancConnection(); c.SetName((String) json.get("Name")); c.SetBaseUrl((String) json.get("Url")); if (json.containsKey("Authentication")) { c.authentication_ = (String) json.get("Authentication"); } else { c.authentication_ = null; } return c; } }