class ItemFacade implements Item {

    @SuppressWarnings("WeakerAccess")
    public static @NotNull Item
    ensureBestWrapper(final @NotNull Item primaryItem, final @NotNull SessionFacade<?> session) {
        if (primaryItem instanceof ItemFacade) {
            return primaryItem;
        } else if (primaryItem instanceof Node) {
            return NodeFacade.wrap((Node) primaryItem, session);
        } else if (primaryItem instanceof Property) {
            return new PropertyFacade<>((Property) primaryItem, session);
        } else {
            return new ItemFacade<>(primaryItem, session);
        }
    }

    @SuppressWarnings("WeakerAccess") public  ItemFacade(final @NotNull J delegate, final @NotNull SessionFacade<S> session);

}