All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.lteconsulting.angular2gwt.client.Ajax Maven / Gradle / Ivy

There is a newer version: 1.8
Show newest version
package fr.lteconsulting.angular2gwt.client;

import fr.lteconsulting.angular2gwt.client.interop.ng.AngularTools;
import fr.lteconsulting.angular2gwt.client.interop.promise.Executor;
import fr.lteconsulting.angular2gwt.client.interop.promise.Promise;
import fr.lteconsulting.angular2gwt.client.interop.promise.Rejector;
import fr.lteconsulting.angular2gwt.client.interop.promise.Resolver;
import fr.lteconsulting.angular2gwt.client.interop.xmlhttprequest.XMLHttpRequest;

public class Ajax
{
	public static Promise sendRequest( String method, String url )
	{
		return sendRequest( method, url, null );
	}

	public static Promise sendRequest( String method, String url, Object data )
	{
		return new Promise<>( new Executor()
		{
			@Override
			public void execute( Resolver resolver, Rejector rejecter )
			{
				XMLHttpRequest req = new XMLHttpRequest();

				req.open( method, url, true );

				if( data != null )
				{
					req.setRequestHeader( "Content-Type", "application/json" );
				}

				req.setOnreadystatechange( event -> {
					if( req.getReadyState() == 4 )
					{
						if( req.getStatus() == 200 )
							resolver.resolve( req.getResponseText() );
						else
							rejecter.reject( "error fetching service (status: " + req.getStatus() + ") data with url " + url );
					}
				} );

				req.send( data != null ? JSON.stringify( data ) : null );
			}
		} );
	}

	public static  Promise sendRequestAndConvertDto( String method, String url, Class convertedClass )
	{
		return sendRequestAndConvertDto( method, url, null, convertedClass );
	}

	public static  Promise sendRequestAndConvertDto( String method, String url, Object data, Class convertedClass )
	{
		return new Promise<>( new Executor()
		{
			@Override
			public void execute( Resolver resolver, Rejector rejecter )
			{
				Ajax.sendRequest( method, url, data ).then( value -> {
					Object dto = JSON.parse( value );
					T convertedDto = AngularTools.convertDto( dto, convertedClass );

					resolver.resolve( convertedDto );
					return null;
				}, ( error ) -> {
					rejecter.reject( "error getting heroes because of: " + error );
					return null;
				} );
			}
		} );
	}

	public static  Promise> sendRequestAndConvertDtoList( String method, String url, Class convertedClass )
	{
		return sendRequestAndConvertDtoList( method, url, null, convertedClass );
	}

	public static  Promise> sendRequestAndConvertDtoList( String method, String url, Object data, Class convertedClass )
	{
		return new Promise<>( ( resolver, rejecter ) -> {
			Ajax.sendRequest( method, url, data ).then( value -> {
				JsArray dtoList = JSON.parse( value );
				JsArray convertedList = AngularTools.convertDtoList( dtoList, convertedClass );

				resolver.resolve( convertedList );
				return null;
			}, ( error ) -> {
				rejecter.reject( "error getting heroes because of: " + error );
				return null;
			} );
		} );
	}
}