@GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Gets all available config descriptions.", response = ConfigDescriptionDTO.class, responseContainer = "List") @ApiResponses(value = @ApiResponse(code = 200, message = "OK", response = ConfigDescriptionDTO.class, responseContainer = "List")) public Response getAll(@HeaderParam("Accept-Language") @ApiParam(value = "Accept-Language") String language, // @QueryParam("scheme") @ApiParam(value = "scheme filter", required = false) @Nullable String scheme) { Locale locale = localeService.getLocale(language); Collection<ConfigDescription> configDescriptions = configDescriptionRegistry.getConfigDescriptions(locale); return Response.ok(new Stream2JSONInputStream(configDescriptions.stream().filter(configDescription -> { return scheme == null || scheme.equals(configDescription.getUID().getScheme()); }).map(ConfigDescriptionDTOMapper::map))).build(); }
/** * Filter existing metadata namespaces against the given namespaeSelector. The given String might consist of a comma * separated list of namespaces as well as a regular expression. * * @param namespaceSelector a comma separated list of namespaces or regular expression. * @param locale the locale for config descriptions with the scheme "metadata". * @return a {@link Set} of matching namespaces. */ public Set<String> filterNamespaces(String namespaceSelector, Locale locale) { if (namespaceSelector == null || namespaceSelector.isEmpty()) { return Collections.emptySet(); } else { Set<String> originalNamespaces = Arrays.stream(namespaceSelector.split(",")) // .filter(n -> !metadataRegistry.isInternalNamespace(n)) // .map(n -> n.trim()) // .collect(Collectors.toSet()); String namespacePattern = originalNamespaces.stream().collect(Collectors.joining("|")); Pattern pattern = Pattern.compile(METADATA_SCHEME_PREFIX + "(" + namespacePattern + ")$"); Collection<ConfigDescription> configDescriptions = configDescriptionRegistry.getConfigDescriptions(locale); Set<String> configNamespaces = configDescriptions.stream() .filter(cd -> cd.getUID().getScheme().equals(METADATA_SCHEME)).map(cd -> cd.getUID().toString()) .filter(pattern.asPredicate()).map(uri -> uri.substring(METADATA_SCHEME_PREFIX.length())) .collect(toSet()); // merge configDescription namespaces and namespaces from the namespace selector: Set<String> result = new HashSet<>(originalNamespaces); result.addAll(configNamespaces); // filter all name spaces which do not match the UID segment pattern (this will be the regex tokens): return result.stream().filter(namespace -> namespace.matches(AbstractUID.SEGMENT_PATTERN)).collect(toSet()); } }
@Override public ConfigDescription getConfigDescription(URI uri, Locale locale) { if (configDescription != null && configDescription.getUID().equals(uri)) { return configDescription; } if ("channel".equals(uri.getScheme()) == false) { return null; } ChannelUID channelUID = new ChannelUID(uri.getSchemeSpecificPart()); // Is this a zigbee thing? if (!channelUID.getBindingId().equals(ZigBeeBindingConstants.BINDING_ID)) { return null; } // Do we know this channel? if (channels.get(channelUID) == null) { return null; } ZigBeeBaseChannelConverter converter = channels.get(channelUID); return new ConfigDescription(uri, converter.getConfigDescription()); }
/** * Returns the value of the {@code config-description-ref} and the {@code config-description} tags from the specific * XML type definition. * * @param nodeIterator the iterator to be used to extract the information (must not be null) * * @return the URI and configuration object * (contains two elements: URI - could be null, ConfigDescription - could be null) */ protected Object[] getConfigDescriptionObjects(NodeIterator nodeIterator) { URI configDescriptionURI = readConfigDescriptionURI(nodeIterator); ConfigDescription configDescription = null; if (configDescriptionURI == null) { configDescription = readConfigDescription(nodeIterator); if (configDescription != null) { configDescriptionURI = configDescription.getUID(); } } return new Object[] { configDescriptionURI, configDescription }; }
localizedConfigDescriptionGroups.add(localizedConfigDescriptionGroup); return new ConfigDescription(configDescription.getUID(), localizedConfigDescriptionParameters, localizedConfigDescriptionGroups);
/** * Maps configuration description into configuration description DTO object. * * @param configDescription the configuration description (not null) * @return the configuration description DTO object */ public static ConfigDescriptionDTO map(ConfigDescription configDescription) { List<ConfigDescriptionParameterGroupDTO> parameterGroups = mapParameterGroups( configDescription.getParameterGroups()); List<ConfigDescriptionParameterDTO> parameters = mapParameters(configDescription.getParameters()); return new ConfigDescriptionDTO(toDecodedString(configDescription.getUID()), parameters, parameterGroups); }
/** * Localize a config description parameter group. * * @param bundle the bundle the i18n resources are located * @param configDescription the config description the parameter group is part of * @param group the parameter group that should be localized * @param locale the locale it should be localized to * @return a localized parameter group on success, a non-localized one on error (e.g. no translation is found). */ public ConfigDescriptionParameterGroup getLocalizedConfigDescriptionGroup(final Bundle bundle, final ConfigDescription configDescription, final ConfigDescriptionParameterGroup group, final @Nullable Locale locale) { final URI configDescriptionURI = configDescription.getUID(); final String name = group.getName(); final String label = this.configDescriptionGroupI18nUtil.getGroupLabel(bundle, configDescriptionURI, name, group.getLabel(), locale); final String description = this.configDescriptionGroupI18nUtil.getGroupDescription(bundle, configDescriptionURI, name, group.getDescription(), locale); final ConfigDescriptionParameterGroup localizedGroup = new ConfigDescriptionParameterGroup(name, group.getContext(), group.isAdvanced(), label, description); return localizedGroup; }
@Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { BindingInfoXmlResult bindingInfoXmlResult = null; BindingInfo bindingInfo = null; // read attributes Map<String, String> attributes = this.attributeMapValidator.readValidatedAttributes(reader); String id = attributes.get("id"); // set automatically extracted URI for a possible 'config-description' section context.put("config-description.uri", "binding:" + id); // read values List<?> nodes = (List<?>) context.convertAnother(context, List.class); NodeIterator nodeIterator = new NodeIterator(nodes); String name = (String) nodeIterator.nextValue("name", true); String description = (String) nodeIterator.nextValue("description", false); String author = (String) nodeIterator.nextValue("author", false); String serviceId = (String) nodeIterator.nextValue("service-id", false); URI configDescriptionURI = readConfigDescriptionURI(nodeIterator); ConfigDescription configDescription = null; if (configDescriptionURI == null) { configDescription = readConfigDescription(nodeIterator); if (configDescription != null) { configDescriptionURI = configDescription.getUID(); } } nodeIterator.assertEndOfType(); // create object bindingInfo = new BindingInfo(id, name, description, author, serviceId, configDescriptionURI); bindingInfoXmlResult = new BindingInfoXmlResult(bindingInfo, configDescription); return bindingInfoXmlResult; }
final ConfigDescription configDescription, final ConfigDescriptionParameter parameter, final @Nullable Locale locale) { final URI configDescriptionURI = configDescription.getUID(); final String parameterName = parameter.getName();