package com.dimuthuupeksha.viewer.android.applib; import java.util.List; import java.util.Map; import java.util.Set; import com.dimuthuupeksha.viewer.android.applib.constants.Resource; /* Author - Dimuthu Upeksha*/ public class RORequest { private String _path; private Resource _resource; private String[] _pathElements; private Map<String, String> _pathElementMap; public String _baseUri; public static RORequest To(String path) { RORequest roRequest = new RORequest(); roRequest._path = path.trim().replace(" ", "%20"); return roRequest; } public static RORequest To(String baseUri, Resource resource, String[] pathElements) { RORequest roRequest = new RORequest(); roRequest._baseUri = baseUri; roRequest._resource = resource; roRequest._pathElements = pathElements; return roRequest; } public static RORequest To(String baseUri, Resource resource, Map<String, String> pathElementMap) { RORequest roRequest = new RORequest(); roRequest._baseUri = baseUri; roRequest._resource = resource; roRequest._pathElementMap = pathElementMap; return roRequest; } public String asUriStr() throws Exception { if (_path != null) { return _path; } else if (_pathElements != null) { UrlTemplate template = _resource.get_uriTemplateStr() != null ? new UrlTemplate(_resource.get_uriTemplateStr()) : new UrlTemplate(_resource.get_uriStr()); List<String> allParams = template.getPrameterNames(); if (allParams.size() != _pathElements.length) { throw new Exception("Mismatch between parameters in uriTemplate and supplied elements"); } for (int i = 0; i < allParams.size(); i++) { String parm = allParams.get(i); template.putParameter(parm, _pathElements[i]); } if (_baseUri.endsWith("/")) { return _baseUri.substring(0, _baseUri.length() - 1) + template.getResultUrl(); } else { return _baseUri + template.getResultUrl(); } } else { UrlTemplate template = _resource.get_uriTemplateStr() != null ? new UrlTemplate(_resource.get_uriTemplateStr()) : new UrlTemplate(_resource.get_uriStr()); List<String> allParams = template.getPrameterNames(); Set<String> keySet = _pathElementMap.keySet(); if (keySet.size() == allParams.size()) { for (String param : allParams) { keySet.remove(param); } if (keySet.isEmpty()) { for (String param : allParams) { template.putParameter(param, _pathElementMap.get(param)); } if (_baseUri.endsWith("/")) { return _baseUri.substring(0, _baseUri.length() - 1) + template.getResultUrl(); } else { return _baseUri + template.getResultUrl(); } } else { throw new Exception("Mismatch between parameters in uriTemplate and supplied map"); } } else { throw new Exception("Mismatch between parameters in uriTemplate and supplied map"); } } } }