package ca.uhn.fhir.rest.param; /* * #%L * HAPI FHIR - Core Library * %% * Copyright (C) 2014 - 2017 University Health Network * %% * 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. * #L% */ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import ca.uhn.fhir.context.ConfigurationException; public class CollectionBinder // implements IParamBinder { /** * @param thePositionDescription Just used in exceptions if theCollectionType is invalid */ @SuppressWarnings({ "rawtypes", "cast" }) public static Class<? extends Collection> getInstantiableCollectionType(Class<? extends Collection<?>> theCollectionType, String thePositionDescription) { if (theCollectionType.equals(List.class) || theCollectionType .equals(ArrayList.class)) { return (Class<? extends Collection>) ArrayList.class; } else if (theCollectionType .equals( Set.class )|| theCollectionType .equals( HashSet.class)) { return (Class<? extends Collection>) HashSet.class; } else if (theCollectionType.equals(Collection.class)) { return (Class<? extends Collection>) ArrayList.class; } else { throw new ConfigurationException("Unsupported binding collection type '" + theCollectionType.getCanonicalName() + "' for " + thePositionDescription); } } // private Class<?> myCollectionType; // private IParamBinder myWrap; // // public CollectionBinder(IParamBinder theWrap, Class<? extends java.util.Collection<?>> theCollectionType) { // myWrap = theWrap; // if (theCollectionType == List.class || theCollectionType == ArrayList.class) { // myCollectionType = ArrayList.class; // } else if (theCollectionType == Set.class || theCollectionType == HashSet.class) { // myCollectionType = HashSet.class; // } else if (theCollectionType == Collection.class) { // myCollectionType = ArrayList.class; // } else { // throw new ConfigurationException("Unsupported binding collection type: " + theCollectionType.getCanonicalName()); // } // } // @Override // public String encode(Object theString) throws InternalErrorException { // Collection<?> obj = (Collection<?>) theString; // StringBuilder b = new StringBuilder(); // for (Object object : obj) { // String next = myWrap.encode(object); // if (b.length() > 0) { // b.append(","); // } // b.append(next.replace(",", "\\,")); // } // return b.toString(); // } // // @SuppressWarnings("unchecked") // @Override // public Object parse(String theString) throws InternalErrorException { // Collection<Object> retVal; // try { // retVal = (Collection<Object>) myCollectionType.newInstance(); // } catch (Exception e) { // throw new InternalErrorException("Failed to instantiate " + myCollectionType, e); // } // // List<String> params = QueryUtil.splitQueryStringByCommasIgnoreEscape(theString); // for (String string : params) { // Object nextParsed = myWrap.parse(string); // retVal.add(nextParsed); // } // // return retVal; // } }