| /******************************************************************************* |
| * Copyright (C) 2021 the Eclipse BaSyx Authors |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| ******************************************************************************/ |
| package org.eclipse.basyx.extensions.aas.directory.tagged.proxy; |
| |
| import java.util.Collection; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.StringJoiner; |
| import java.util.stream.Collectors; |
| |
| import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy; |
| import org.eclipse.basyx.extensions.aas.directory.tagged.api.IAASTaggedDirectory; |
| import org.eclipse.basyx.extensions.aas.directory.tagged.api.TaggedAASDescriptor; |
| import org.eclipse.basyx.extensions.aas.directory.tagged.restapi.TaggedDirectoryProvider; |
| import org.eclipse.basyx.vab.coder.json.connector.JSONConnector; |
| import org.eclipse.basyx.vab.modelprovider.VABElementProxy; |
| import org.eclipse.basyx.vab.modelprovider.api.IModelProvider; |
| import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnector; |
| |
| public class TaggedDirectoryProxy extends AASRegistryProxy implements IAASTaggedDirectory { |
| |
| private IModelProvider taggedProvider; |
| |
| public TaggedDirectoryProxy(String registryUrl) { |
| super(registryUrl); |
| taggedProvider = createTaggedProxy(new JSONConnector(new HTTPConnector(registryUrl))); |
| } |
| |
| public TaggedDirectoryProxy(IModelProvider provider) { |
| super(provider); |
| taggedProvider = createTaggedProxy(provider); |
| } |
| |
| private static VABElementProxy createTaggedProxy(IModelProvider provider) { |
| return new VABElementProxy(TaggedDirectoryProvider.PREFIX, provider); |
| } |
| |
| @Override |
| public void register(TaggedAASDescriptor descriptor) { |
| taggedProvider.createValue("", descriptor); |
| } |
| |
| @Override |
| public Set<TaggedAASDescriptor> lookupTag(String tag) { |
| return performTagRequest(tag); |
| } |
| |
| @Override |
| public Set<TaggedAASDescriptor> lookupTags(Set<String> tags) { |
| StringJoiner joiner = new StringJoiner(","); |
| tags.stream().forEach(t -> joiner.add(t)); |
| |
| return performTagRequest(joiner.toString()); |
| } |
| |
| @SuppressWarnings("unchecked") |
| private Set<TaggedAASDescriptor> performTagRequest(String tagList) { |
| Collection<Map<String, Object>> desc = (Collection<Map<String, Object>>) taggedProvider.getModelPropertyValue(TaggedDirectoryProvider.API_ACCESS + tagList); |
| return desc.stream().map(m -> TaggedAASDescriptor.createAsFacade(m)).collect(Collectors.toSet()); |
| } |
| |
| } |