public KeyModuleListPair(ConnectModuleMeta key, List<ModuleBean> modules) { this.key = key.getDescriptorKey(); this.modules = modules; } }
@SuppressWarnings("unchecked") private Class<? extends ModuleBean> getBeanClass(ConnectModuleMeta moduleMeta) { return moduleMeta.getBeanClass(); }
@Override public boolean multipleModulesAllowed(String moduleType) { ConnectModuleMeta meta = getModuleMeta(moduleType); return meta == null || meta.multipleModulesAllowed(); } }
@Nullable public ConnectModuleMeta getModuleMeta(String type) { for (ConnectModuleMeta moduleMeta : moduleMetas) { if (moduleMeta.getDescriptorKey().equals(type)) { return moduleMeta; } } return null; }
/** * Asserts that the module type only accepts a single module. * * @param moduleMeta the metadata for the module being deserialized * @param descriptor the add-on descriptor (without the module list) * @throws ConnectModuleValidationException if the assertion fails */ private void assertMultipleModulesNotAllowed(ConnectModuleMeta<?> moduleMeta, ShallowConnectAddonBean descriptor) throws ConnectModuleValidationException { if (moduleMeta.multipleModulesAllowed()) { throw new ConnectModuleValidationException(descriptor, moduleMeta, "A single module should be provided as a JSON object.", null, null); } } }
@SuppressWarnings("unchecked") private Class<? extends ModuleBean> getBeanClass(ConnectModuleMeta moduleMeta) { return moduleMeta.getBeanClass(); }
@Nullable public ConnectModuleMeta getModuleMeta(String type) { for (ConnectModuleMeta moduleMeta : moduleMetas) { if (moduleMeta.getDescriptorKey().equals(type)) { return moduleMeta; } } return null; }
@Override public boolean multipleModulesAllowed(String moduleType) { ConnectModuleMeta meta = getModuleMeta(moduleType); return meta == null || meta.multipleModulesAllowed(); } }
T module = gson.fromJson(jsonModuleListEntry, getMeta().getBeanClass()); beans = Collections.singletonList(module); for (JsonElement moduleElement : modulesElement.getAsJsonArray()) beans.add(gson.fromJson(moduleElement, getMeta().getBeanClass()));
public RegistrationResult(ConnectModuleProvider<?> provider, List<ModuleDescriptor<?>> moduleDescriptors, Collection<ConnectModuleProvider.TypedPluginModule> pluginModules) { this.moduleDescriptors = moduleDescriptors; this.pluginModules = pluginModules; providerDescriptorKey = provider.getMeta().getDescriptorKey(); // Warning, do NOT hang on to the provider }
/** * Asserts that the module type accepts multiple modules. * * @param moduleMeta the metadata for the module being deserialized * @param descriptor the add-on descriptor (without the module list) * @throws ConnectModuleValidationException if the assertion fails */ private void assertMultipleModulesAllowed(ConnectModuleMeta<?> moduleMeta, ShallowConnectAddonBean descriptor) throws ConnectModuleValidationException { if (!moduleMeta.multipleModulesAllowed()) { throw new ConnectModuleValidationException(descriptor, moduleMeta, "Modules should be provided as a JSON array of objects.", null, null); } }
if (modulesElement.isJsonObject()) { assertMultipleModulesNotAllowed(moduleMeta, descriptor); T module = gson.fromJson(jsonModuleListEntry, moduleMeta.getBeanClass()); beans = Collections.singletonList(module); } else { beans = new ArrayList<>(); for (JsonElement moduleElement : modulesElement.getAsJsonArray()) { beans.add(gson.fromJson(moduleElement, moduleMeta.getBeanClass()));
public ConnectAddonDeserializeFailedEvent(ConnectAddonBean addon, ConnectModuleMeta meta, Collection<?> beans, boolean isExpectedException, String deserializerIdentifier) { super(addon.getKey()); descriptorKey = meta.getDescriptorKey(); moduleBeanCount = beans.size(); this.isExpectedException = isExpectedException; this.deserializerIdentifier = deserializerIdentifier; }
/** * Asserts that the module type accepts multiple modules. * * @param moduleMeta the metadata for the module being deserialized * @param descriptor the add-on descriptor (without the module list) * @throws ConnectModuleValidationException if the assertion fails */ private void assertMultipleModulesAllowed(ConnectModuleMeta<?> moduleMeta, ShallowConnectAddonBean descriptor) throws ConnectModuleValidationException { if (!moduleMeta.multipleModulesAllowed()) { throw new ConnectModuleValidationException(descriptor, moduleMeta, "Modules should be provided as a JSON array of objects.", null, null); } }
if (modulesElement.isJsonObject()) { assertMultipleModulesNotAllowed(moduleMeta, descriptor); T module = gson.fromJson(jsonModuleListEntry, moduleMeta.getBeanClass()); beans = Collections.singletonList(module); } else { beans = new ArrayList<>(); for (JsonElement moduleElement : modulesElement.getAsJsonArray()) { beans.add(gson.fromJson(moduleElement, moduleMeta.getBeanClass()));
public ConnectAddonSerializeFailedEvent(ConnectAddonBean addon, ConnectModuleMeta meta, Collection<?> beans, boolean isEventExpected) { super(addon.getKey()); descriptorKey = meta.getDescriptorKey(); moduleBeanCount = beans.size(); isExpectedException = isEventExpected; }
/** * Asserts that the module type only accepts a single module. * * @param moduleMeta the metadata for the module being deserialized * @param descriptor the add-on descriptor (without the module list) * @throws ConnectModuleValidationException if the assertion fails */ private void assertMultipleModulesNotAllowed(ConnectModuleMeta<?> moduleMeta, ShallowConnectAddonBean descriptor) throws ConnectModuleValidationException { if (moduleMeta.multipleModulesAllowed()) { throw new ConnectModuleValidationException(descriptor, moduleMeta, "A single module should be provided as a JSON object.", null, null); } } }
private ConnectModuleProvider<?> findProviderOrThrow(String descriptorKey, Collection<ConnectModuleProvider<?>> moduleProviders) throws ConnectModuleRegistrationException { return moduleProviders.stream() .filter(provider -> provider.getMeta().getDescriptorKey().equals(descriptorKey)) .findFirst() .orElseThrow(() -> new ConnectModuleRegistrationException(String.format("Could not find module provider %s for descriptor registration", descriptorKey))); }
@Override public boolean multipleModulesAllowed(String moduleType) { return getModuleProviders().get(moduleType).getMeta().multipleModulesAllowed(); }
private Map<String, ConnectModuleProvider<? extends ModuleBean>> getModuleProviders() { return pluginAccessor.getModules(new ModuleDescriptorOfClassPredicate<>(ConnectModuleProviderModuleDescriptor.class)) .stream().collect(Collectors.toMap(provider -> provider.getMeta().getDescriptorKey(), identity())); } }