<S> S callbackPatchAdaptee( @Nonnull PatchAdaptee<S> adaptee, Object resource, Identifier identifier ) { S remoteRequest; try { remoteRequest = adaptee.preparePatch( resource, identifier ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } return remoteRequest; }
@Override public T execute( Map<String, Object> parameters, Locale locale ) { if ( remoteRequest == null ) { try { return resource.newInstance(); } catch ( InstantiationException | IllegalAccessException e ) { throw new ClientErrorException( 400, e.getMessage() ); } } return adapter.callbackNewInstance( adaptee, remoteRequest, resource, parameters, locale ); } }
@Override public <T> ListRequest<T> list( @Nonnull Class<T> resource, @Nullable Identifier parent ) { checkNotNull( resource ); ListExecutorAdaptee adaptee = adaptee( ListExecutorAdaptee.class, resource ); Object remoteRequest; try { //noinspection unchecked remoteRequest = adaptee.prepareList( parent ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } return new ListRequest<>( resource, this, adaptee, remoteRequest ); }
@Override public <T> SingleRequest<T> newInstance( @Nonnull Class<T> resource, @Nullable Map<String, Object> parameters, @Nullable Locale locale ) { checkNotNull( resource ); NewExecutorAdaptee adaptee = adaptee( NewExecutorAdaptee.class, resource ); Object remoteRequest; try { remoteRequest = adaptee.prepareNew( resource.getSimpleName(), parameters, locale ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } return new NewInstanceRequest<>( resource, this, adaptee, remoteRequest ); }
@Override public <T> PayloadRequest<T> newInstance( @Nonnull Class<T> resource ) { checkNotNull( resource ); NewExecutorAdaptee adaptee = adaptee( NewExecutorAdaptee.class, resource ); Object remoteRequest; try { remoteRequest = adaptee.prepareNew( resource.getSimpleName() ); } catch ( IOException e ) { throw new ClientErrorException( e.getMessage() ); } return new NewInstanceRequest<>( resource, this, adaptee, remoteRequest ); }
<T> RetrievalRequest<T> internalGet( @Nonnull Class<T> resource, @Nonnull Identifier identifier ) { checkNotNull( resource ); checkNotNull( identifier, Identifier.class.getSimpleName() + " for GET operation cannot be null." ); GetExecutorAdaptee adaptee = adaptee( GetExecutorAdaptee.class, resource ); Object remoteRequest; try { //noinspection unchecked remoteRequest = adaptee.prepareGet( identifier ); } catch ( IOException e ) { throw new ClientErrorException( e.getMessage() ); } return new GetRequest<>( resource, identifier.root(), this, adaptee, remoteRequest ); }
@Override public <T> SingleRequest<T> get( @Nonnull Class<T> resource, @Nonnull Identifier identifier ) { checkNotNull( resource ); checkNotNull( identifier ); GetExecutorAdaptee adaptee = adaptee( GetExecutorAdaptee.class, resource ); Object remoteRequest; try { //noinspection unchecked remoteRequest = adaptee.prepareGet( identifier ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } return new GetRequest<>( resource, identifier, this, adaptee, remoteRequest ); }
@Override @SuppressWarnings( "unchecked" ) public <T> SingleRequest<T> delete( @Nonnull Class<T> resource, @Nonnull Identifier identifier ) { checkNotNull( resource ); checkNotNull( identifier ); DeleteExecutorAdaptee adaptee = adaptee( DeleteExecutorAdaptee.class, resource ); Object remoteRequest; try { remoteRequest = adaptee.prepareDelete( identifier ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } return ( SingleRequest ) new DeleteRequest( resource, identifier, this, adaptee, remoteRequest ); }
@SuppressWarnings( "unchecked" ) <T> PayloadRequest<T> internalDelete( @Nonnull Class<T> resource, @Nonnull Identifier identifier ) { checkNotNull( resource ); checkNotNull( identifier ); DeleteExecutorAdaptee adaptee = adaptee( DeleteExecutorAdaptee.class, resource ); Object remoteRequest; try { remoteRequest = adaptee.prepareDelete( identifier.root() ); } catch ( IOException e ) { throw new ClientErrorException( e.getMessage() ); } // by default response type is not being provided (resulting in null), client can configure if expected return new DeleteRequest( identifier, this, adaptee, remoteRequest ); }
@Override public T finish( @Nullable Map<String, Object> parameters, @Nullable Locale locale ) { if ( remoteRequest == null ) { try { return resource.newInstance(); } catch ( InstantiationException | IllegalAccessException e ) { throw new ClientErrorException( e.getMessage() ); } } if ( parameters != null ) { params.putAll( parameters ); } filler.acceptLanguage( locale ); if ( token != null ) { filler.authorization( token ); } return adapter.callbackNewInstance( adaptee, remoteRequest, resource, params, locale ); }
@Override public <T> ListRequest<T> list( @Nonnull Class<T> resource, @Nullable Identifier parent ) { checkNotNull( resource ); ListExecutorAdaptee adaptee = adaptee( ListExecutorAdaptee.class, resource ); Object remoteRequest; try { //noinspection unchecked remoteRequest = adaptee.prepareList( parent == null ? null : parent.root() ); } catch ( IOException e ) { throw new ClientErrorException( e.getMessage() ); } return new ListRequest<>( resource, this, adaptee, remoteRequest ); }
throw new ClientErrorException( 400, e.getMessage() );
<T> SingleRequest<T> internalInsert( @Nonnull T resource, @Nullable Identifier parentKey, @Nullable MediaProvider<?> provider ) { checkNotNull( resource ); Class<?> remoteResource = evaluateRemoteResource( resource.getClass() ); Object source; if ( resource.getClass() == remoteResource ) { source = resource; } else { source = mapper.map( resource, remoteResource ); } @SuppressWarnings( "unchecked" ) InsertExecutorAdaptee<Object> adaptee = adaptee( InsertExecutorAdaptee.class, resource.getClass() ); Object remoteRequest; try { remoteRequest = adaptee.prepareInsert( source, parentKey, provider ); } catch ( IOException e ) { throw new ClientErrorException( 400, e.getMessage() ); } @SuppressWarnings( "unchecked" ) Class<T> resourceClass = ( Class<T> ) resource.getClass(); return new InsertRequest<>( resourceClass, parentKey, this, adaptee, remoteRequest ); }
throw new ClientErrorException( e.getMessage() );
<T> PayloadRequest<T> internalInsert( @Nonnull T resource, @Nullable Identifier parentKey, @Nullable MediaProvider provider ) { checkNotNull( resource ); Class<?> remoteResource = evaluateRemoteResource( resource.getClass() ); Object source; if ( resource.getClass() == remoteResource ) { source = resource; } else { source = mapper.map( resource, remoteResource ); } @SuppressWarnings( "unchecked" ) InsertExecutorAdaptee<Object> adaptee = adaptee( InsertExecutorAdaptee.class, resource.getClass() ); Object remoteRequest; try { remoteRequest = adaptee.prepareInsert( source, parentKey == null ? null : parentKey.root(), provider ); } catch ( IOException e ) { throw new ClientErrorException( e.getMessage() ); } @SuppressWarnings( "unchecked" ) Class<T> resourceClass = ( Class<T> ) resource.getClass(); return new InsertRequest<>( resourceClass, parentKey, this, adaptee, remoteRequest ); }
toBeThrown = new ClientErrorException( statusCode, statusMessage ); toBeThrown = new ClientErrorException( statusCode, statusMessage ); toBeThrown = new ClientErrorException( statusCode, statusMessage ); toBeThrown = new ClientErrorException( statusCode, statusMessage );
throw new ClientErrorException( 400, e.getMessage() );
toBeThrown = new ClientErrorException( statusMessage );