blob: ae1cd4a3c4df7d28b8f214a58dca207a8854fae0 [file] [log] [blame]
/*******************************************************************************
* 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());
}
}