/** * Gets whether the class of the type of service is already registered with * this manager. This does not register or unregister any services. * * @param service The service class * @return True if there is a provider for the desired service */ default boolean isRegistered(Class<?> service) { return provide(service).isPresent(); }
@SuppressWarnings("unchecked") @Override public <T> T provideUnchecked(Class<T> service) throws ProvisioningException { checkNotNull(service, "service"); @Nullable ProviderRegistration<T> provider = (ProviderRegistration<T>) this.providers.get(service); if (provider == null) { throw new ProvisioningException("No provider is registered for the service '" + service.getName() + "'", service); } return provider.getProvider(); }
/** * Creates a new {@link Builder} to build a pagination list. * * @return The new builder */ static Builder builder() { return Sponge.getServiceManager().provideUnchecked(PaginationService.class).builder(); }
public void registerPermission(CommandCallable command, String permission) { Sponge.getGame().getServiceManager().getRegistration(PermissionService.class).ifPresent((permissionService -> { PermissionDescription.Builder permissionBuilder = permissionService.getProvider().newDescriptionBuilder(SpongeWorldEdit.inst()); permissionBuilder.id(permission).register(); })); }
@Test public void testGetProviderRegistration() { TestImplCow testImplCow = new TestImplCow(); SimpleServiceManager serviceManager = new SimpleServiceManager(this.manager); serviceManager.setProvider(this.testPlugin, TestInterface.class, testImplCow); ProviderRegistration<TestInterface> registration = serviceManager.getRegistration(TestInterface.class).get(); assertEquals(TestInterface.class, registration.getService()); assertEquals(testImplCow, registration.getProvider()); assertEquals(this.testPluginContainer, registration.getPlugin()); }
@Override protected Object getValue(String choice) throws IllegalArgumentException { return Sponge.getGame().getServiceManager().provideUnchecked(UserStorageService.class).get(choice) .orElseThrow(() -> new IllegalArgumentException("Input value '" + choice + "' was not a user!")); }
private boolean isBanned(GameProfile profile) { Optional<ProviderRegistration<BanService>> banService = Sponge.getServiceManager().getRegistration(BanService.class); boolean banned = false; if (banService.isPresent()) { banned = banService.get().getProvider().isBanned(profile); } return banned; }
@Override public Collection<MessageReceiver> getMembers() { PermissionService service = Sponge.getGame().getServiceManager().provideUnchecked(PermissionService.class); return service.getLoadedCollections().values().stream() .flatMap(input -> input.getLoadedWithPermission(this.permission).entrySet().stream() .filter(Map.Entry::getValue) .map(entry -> entry.getKey().getCommandSource().orElse(null)) .filter(source -> source != null)) .collect(ImmutableSet.toImmutableSet()); }
@SuppressWarnings("unchecked") @Override public <T> Optional<T> provide(Class<T> service) { checkNotNull(service, "service"); @Nullable ProviderRegistration<T> provider = (ProviderRegistration<T>) this.providers.get(service); return provider != null ? Optional.of(provider.getProvider()) : Optional.empty(); }
@Override protected Iterable<String> getChoices(CommandSource source) { return Sponge.getGame().getServiceManager().provideUnchecked(UserStorageService.class).getAll().stream() .map(GameProfile::getName) .filter(Optional::isPresent) .map(Optional::get) .collect(ImmutableList.toImmutableList()); }
@Test public void testDuplicateRegistrationAllowed() { SimpleServiceManager serviceManager = new SimpleServiceManager(this.manager); serviceManager.setProvider(this.testPlugin, TestInterface.class, new TestImplCow()); serviceManager.setProvider(this.testPlugin, TestInterface.class, new TestImplDog()); assertEquals("woof", serviceManager.provideUnchecked(TestInterface.class).bark()); }
@Test public void testRegisterService() { SimpleServiceManager serviceManager = new SimpleServiceManager(this.manager); serviceManager.setProvider(this.testPlugin, TestInterface.class, new TestImplCow()); Optional<TestInterface> returned = serviceManager.provide(TestInterface.class); assertTrue(returned.isPresent()); assertEquals("moo", returned.get().bark()); assertEquals("moo", serviceManager.provideUnchecked(TestInterface.class).bark()); }
/** * Gets the service that a provider is being registered for. * * @return The service */ @PropertySettings(requiredParameter = false, generateMethods = false) default Class<?> getService() { return this.getNewProviderRegistration().getService(); }
@Override public <T> void setProvider(Object plugin, Class<T> service, T provider) { checkNotNull(plugin, "plugin"); checkNotNull(service, "service"); checkNotNull(provider, "provider"); Optional<PluginContainer> containerOptional = this.pluginManager.fromInstance(plugin); if (!containerOptional.isPresent()) { throw new IllegalArgumentException( "The provided plugin object does not have an associated plugin container " + "(in other words, is 'plugin' actually your plugin object?)"); } PluginContainer container = containerOptional.get(); ProviderRegistration<?> oldProvider = this.providers.put(service, new Provider<>(container, service, provider)); try (CauseStackManager.StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) { frame.addContext(EventContextKeys.SERVICE_MANAGER, this); frame.pushCause(container); Sponge.getEventManager().post(SpongeEventFactory.createChangeServiceProviderEvent(frame.getCurrentCause(), this.providers.get(service), Optional.ofNullable(oldProvider))); } }
/** * Gets whether the class of the type of service is already registered with * this manager. This does not register or unregister any services. * * @param service The service class * @return True if there is a provider for the desired service */ default boolean isRegistered(Class<?> service) { return provide(service).isPresent(); }
@Override public void parse(CommandSource source, CommandArgs args, CommandContext context) throws ArgumentParseException { // If we're not completing, then we want to use the UserStorageService directly // to get any direct match. @Nullable Text key = getKey(); if (key != null && !context.hasAny(CommandContext.TAB_COMPLETION)) { if (this.returnSource && !args.hasNext()) { context.putArg(key, tryReturnSource(source, args)); return; } CommandArgs.Snapshot state = args.getSnapshot(); String element = args.next(); try { Optional<User> match = Sponge.getServiceManager().provideUnchecked(UserStorageService.class).get(element); if (match.isPresent()) { context.putArg(key, match.get()); return; } } catch (IllegalArgumentException ignored) { // Intentionally ignored // If it's not an exact match, we just let this carry on to parse using the pattern element } args.applySnapshot(state); } super.parse(source, args, context); }
/** * Creates a new {@link Builder} to build a pagination list * * @return The new builder */ static Builder builder() { return Sponge.getServiceManager().provideUnchecked(PaginationService.class).builder(); }
@SuppressWarnings("unchecked") @Override public <T> T provideUnchecked(Class<T> service) throws ProvisioningException { checkNotNull(service, "service"); @Nullable ProviderRegistration<T> provider = (ProviderRegistration<T>) this.providers.get(service); if (provider != null) { return provider.getProvider(); } else { throw new ProvisioningException("No provider is registered for the service '" + service.getName() + "'", service); } }
/** * Gets the new provider being registered. * * @return The provider */ @PropertySettings(requiredParameter = false, generateMethods = false) default Object getNewProvider() { return this.getNewProviderRegistration().getProvider(); }
private static <T> Optional<T> getService(Class<T> clazz) { return Sponge.getServiceManager().provide(clazz); }