16a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen/* 26a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * Copyright (C) 2015 The Android Open Source Project 36a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * 46a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * Licensed under the Apache License, Version 2.0 (the "License"); 56a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * you may not use this file except in compliance with the License. 66a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * You may obtain a copy of the License at 76a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * 86a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * http://www.apache.org/licenses/LICENSE-2.0 96a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * 106a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * Unless required by applicable law or agreed to in writing, software 116a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * distributed under the License is distributed on an "AS IS" BASIS, 126a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * See the License for the specific language governing permissions and 146a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * limitations under the License. 156a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen */ 166a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 176a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wenpackage com.android.statementservice.retriever; 186a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 196a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wenimport org.json.JSONException; 206a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wenimport org.json.JSONObject; 216a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 226a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen/** 236a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen * Factory to create asset matcher from JSON string. 246a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen */ 256a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen/* package private */ final class AssetMatcherFactory { 266a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 276a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen private static final String FIELD_NOT_STRING_FORMAT_STRING = "Expected %s to be string."; 286a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen private static final String NAMESPACE_NOT_SUPPORTED_STRING = "Namespace %s is not supported."; 296a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 306a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen public static AbstractAssetMatcher create(String query) throws AssociationServiceException, 316a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen JSONException { 326a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen JSONObject queryObject = new JSONObject(query); 336a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 346a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen String namespace = queryObject.optString(Utils.NAMESPACE_FIELD, null); 356a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen if (namespace == null) { 366a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen throw new AssociationServiceException(String.format( 376a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen FIELD_NOT_STRING_FORMAT_STRING, Utils.NAMESPACE_FIELD)); 386a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen } 396a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen 406a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen if (namespace.equals(Utils.NAMESPACE_WEB)) { 416a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen return new WebAssetMatcher(WebAsset.create(queryObject)); 426a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen } else if (namespace.equals(Utils.NAMESPACE_ANDROID_APP)) { 436a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen return new AndroidAppAssetMatcher(AndroidAppAsset.create(queryObject)); 446a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen } else { 456a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen throw new AssociationServiceException( 466a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen String.format(NAMESPACE_NOT_SUPPORTED_STRING, namespace)); 476a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen } 486a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen } 496a34bb2d6a6cbc7a70bdf0c53d238dc28e0b1d58Joseph Wen} 50