package com.revolsys.record.io.format.esri.rest; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.TreeMap; import com.revolsys.collection.list.Lists; import com.revolsys.spring.resource.UrlResource; import com.revolsys.webservice.WebServiceResource; public class ArcGisRestServiceContainer extends ArcGisResponse<ArcGisRestService> implements CatalogElement { private List<ArcGisRestService> services = Collections.emptyList(); private final Map<String, ArcGisRestService> serviceByType = new TreeMap<>(); private final String name; private final UrlResource serviceUrl; private final boolean useProxy; public ArcGisRestServiceContainer(final ArcGisRestCatalog parent, final String name) { super(parent); this.name = name; this.serviceUrl = parent.getServiceUrl(name); this.useProxy = parent.isUseProxy(); } public void addService(final ArcGisRestService service) { final String serviceType = service.getServiceType(); this.serviceByType.put(serviceType, service); this.services = Collections.unmodifiableList(Lists.toArray(this.serviceByType.values())); } @SuppressWarnings("unchecked") @Override public <C extends WebServiceResource> C getChild(final String name) { final ArcGisRestService service = this.serviceByType.get(name); if (service == null) { if (this.services.size() == 1) { return this.services.get(0).getChild(name); } else { return null; } } else { return (C)service; } } @Override public List<ArcGisRestService> getChildren() { return this.services; } @Override public String getIconName() { return "folder:world"; } @Override public String getName() { return this.name; } @Override public UrlResource getServiceUrl() { return this.serviceUrl; } @Override public String getWebServiceTypeName() { return null; } @Override public boolean isUseProxy() { return this.useProxy; } }