001package org.hl7.fhir.dstu2.formats; 002 003/*- 004 * #%L 005 * org.hl7.fhir.dstu2 006 * %% 007 * Copyright (C) 2014 - 2019 Health Level 7 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023 024/* 025Copyright (c) 2011+, HL7, Inc 026All rights reserved. 027 028Redistribution and use in source and binary forms, with or without modification, 029are permitted provided that the following conditions are met: 030 031 * Redistributions of source code must retain the above copyright notice, this 032 list of conditions and the following disclaimer. 033 * Redistributions in binary form must reproduce the above copyright notice, 034 this list of conditions and the following disclaimer in the documentation 035 and/or other materials provided with the distribution. 036 * Neither the name of HL7 nor the names of its contributors may be used to 037 endorse or promote products derived from this software without specific 038 prior written permission. 039 040THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 041ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 042WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 043IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 044INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 045NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 046PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 047WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 048ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 049POSSIBILITY OF SUCH DAMAGE. 050 051*/ 052 053import java.math.BigDecimal; 054import java.net.URI; 055 056import org.apache.commons.codec.binary.Base64; 057 058public abstract class FormatUtilities { 059 public static final String ID_REGEX = "[A-Za-z0-9\\-\\.]{1,64}"; 060 public static final String FHIR_NS = "http://hl7.org/fhir"; 061 public static final String XHTML_NS = "http://www.w3.org/1999/xhtml"; 062 063 protected String toString(String value) { 064 return value; 065 } 066 067 protected String toString(int value) { 068 return java.lang.Integer.toString(value); 069 } 070 071 protected String toString(boolean value) { 072 return java.lang.Boolean.toString(value); 073 } 074 075 protected String toString(BigDecimal value) { 076 return value.toString(); 077 } 078 079 protected String toString(URI value) { 080 return value.toString(); 081 } 082 083 public static String toString(byte[] value) { 084 byte[] encodeBase64 = Base64.encodeBase64(value); 085 return new String(encodeBase64); 086 } 087 088 public static boolean isValidId(String tail) { 089 return tail.matches(ID_REGEX); 090 } 091 092 public static String makeId(String candidate) { 093 StringBuilder b = new StringBuilder(); 094 for (char c : candidate.toCharArray()) 095 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '.' || c == '-') 096 b.append(c); 097 return b.toString(); 098 } 099 100 public static ParserBase makeParser(FhirFormat format) { 101 switch (format) { 102 case XML : return new XmlParser(); 103 case JSON : return new JsonParser(); 104 case TURTLE : throw new Error("unsupported Format "+format.toString()); // return new TurtleParser(); 105 case VBAR : throw new Error("unsupported Format "+format.toString()); // 106 case TEXT : throw new Error("unsupported Format "+format.toString()); // 107 } 108 throw new Error("unsupported Format "+format.toString()); 109 } 110 111 public static ParserBase makeParser(String format) { 112 if ("XML".equalsIgnoreCase(format)) return new XmlParser(); 113 if ("JSON".equalsIgnoreCase(format)) return new JsonParser(); 114 if ("TURTLE".equalsIgnoreCase(format)) throw new Error("unsupported Format "+format.toString()); // return new TurtleParser(); 115 if ("JSONLD".equalsIgnoreCase(format)) throw new Error("unsupported Format "+format.toString()); // return new JsonLdParser(); 116 if ("VBAR".equalsIgnoreCase(format)) throw new Error("unsupported Format "+format.toString()); // 117 if ("TEXT".equalsIgnoreCase(format)) throw new Error("unsupported Format "+format.toString()); // 118 throw new Error("unsupported Format "+format); 119 } 120 121 122 123 124}