public boolean isPresentAndNonNull() { return isPresent() && !isNull(); } /** Whether the value is null, if present, or
public boolean isAbsentOrNull() { return isAbsent() || isNull(); } public boolean isPresentAndNonNull() {
/** * cls should always be isAbsent() * @return null for cls.isNull(). Otherwise return the exception that's contained in the Maybe. */ protected Exception getReturnException(Maybe<Class<?>> cls) { if (cls.isNull()) { return null; } try { cls.get(); return null; } catch (Exception e) { Exceptions.propagateIfFatal(e); return e; } }
/** * @throws ImmediateSupplier.ImmediateUnsupportedException if cannot evaluate this in a timely manner */ public static Maybe<String> urlEncodeImmediately(Object arg) { Maybe<?> resolvedArg = resolveImmediately(arg); if (resolvedArg.isAbsent()) return Absent.castAbsent(resolvedArg); if (resolvedArg.isNull()) return Maybe.<String>of((String)null); String resolvedString = resolvedArg.get().toString(); return Maybe.of(Urls.encode(resolvedString)); }
private void checkSpecTypeIsValid(String type, Class<? extends BrooklynObject> subType) { Maybe<RegisteredType> typeV = RegisteredTypes.tryValidate(mgmt().getTypeRegistry().get(type), RegisteredTypeLoadingContexts.spec(subType)); if (!typeV.isNull()) { // found, throw if any problem typeV.get(); return; } // not found, try classloading try { brooklyn().getCatalogClassLoader().loadClass(type); } catch (ClassNotFoundException e) { log.debug("Class not found for type '" + type + "'; reporting 404", e); throw WebResourceUtils.notFound("Undefined type '%s'", type); } log.info(JavaClassNames.simpleClassName(subType)+" type '{}' not defined in catalog but is on classpath; continuing", type); }
private static <T> Maybe<? extends T> deepMerge(Maybe<? extends T> val1, Maybe<? extends T> val2) { if (val2.isAbsent() || val2.isNull()) { return val1; } else if (val1.isAbsent()) { return val2; } else if (val1.isNull()) { return val1; // an explicit null means an override; don't merge } else if (val1.get() instanceof Map && val2.get() instanceof Map) { @SuppressWarnings({ "unchecked", "rawtypes" }) Maybe<T> result = (Maybe)Maybe.of(CollectionMerger.builder().build().merge((Map<?,?>)val1.get(), (Map<?,?>)val2.get())); return result; } else { // cannot merge; just return val1 return val1; } }
private static <T> ReferenceWithError<Maybe<? extends T>> deepMerge(Maybe<? extends T> val1, Maybe<? extends T> val2) { if (val2.isAbsent() || val2.isNull()) { return ReferenceWithError.newInstanceWithoutError(val1); } else if (val1.isAbsent()) { return ReferenceWithError.newInstanceWithoutError(val2); } else if (val1.isNull()) { return ReferenceWithError.newInstanceWithoutError(val1); // an explicit null means an override; don't merge } else if (val1.get() instanceof Map && val2.get() instanceof Map) { @SuppressWarnings({ "unchecked", "rawtypes" }) Maybe<T> result = (Maybe)Maybe.of(CollectionMerger.builder().build().merge((Map<?,?>)val1.get(), (Map<?,?>)val2.get())); return ReferenceWithError.newInstanceWithoutError(result); } else { // cannot merge; just return val1 return ReferenceWithError.newInstanceThrowingError(val1, new IllegalArgumentException("Cannot merge '"+val1.get()+"' and '"+val2.get()+"'")); } }
public static BrooklynClassLoadingContext getClassLoadingContext(Entity entity) { ManagementContext mgmt = ((EntityInternal)entity).getManagementContext(); String catId = entity.getCatalogItemId(); if (Strings.isBlank(catId)) return JavaBrooklynClassLoadingContext.create(mgmt); Maybe<RegisteredType> cat = RegisteredTypes.tryValidate(mgmt.getTypeRegistry().get(catId), RegisteredTypeLoadingContexts.spec(Entity.class)); if (cat.isNull()) { log.warn("Cannot load "+catId+" to get classloader for "+entity+"; will try with standard loader, but might fail subsequently"); return JavaBrooklynClassLoadingContext.create(mgmt); } return newClassLoadingContext(mgmt, cat.get(), JavaBrooklynClassLoadingContext.create(mgmt)); }