Builder for Pipe creation
// http://myServer/myProject/foo
Pipe <Foo > fooPipe = pipeline .pipe (Foo .class ).buildAndAdd ();
// http://myServer/myProject/my-crazy-endpoint
Pipe <Bar > barPipe = pipeline .pipe (Bar .class )
.endpoint ("my-crazy-endpoint" )
.name ("bad name" )
.buildAndAdd ();
public class Pipeline {
private URL baseURL ;
public Pipeline (URL baseURL ) {
this .baseURL = baseURL ;
}
public PipeBuilder pipe (Class klass ) {
return new BuilderImpl (klass , baseURL );
}
private final class BuilderImpl implements PipeBuilder {
private final Class klass ;
private URL url ;
private String name ;
private String endpoint ;
private Type type = REST ;
public BuilderImpl (Class klass , URL baseURL ) {
this .klass = klass ;
this .url = baseURL ;
this .name = klass .getSimpleName ().toLowerCase ();
this .endpoint = name ;
}
@ Override
public PipeBuilder name (String name ) {
this .name = name ;
return this ;
}
@ Override
public PipeBuilder endpoint (String endpoint ) {
this .endpoint = endpoint ;
return this ;
}
@ Override
public PipeBuilder type (Type type ) {
this .type = type ;
return this ;
}
@ Override
public PipeBuilder url (URL url ) {
this .url = url ;
return this ;
}
@ Override
public Pipe buildAndAdd () {
Pipe pipe = AdapterFactory .createPipe (type , klass , appendEndpoint (url , endpoint ));
pipes .put (name , pipe );
return pipe ;
}
private URL appendEndpoint (URL baseURL , String endpoint ) {
try {
if ( !baseURL .toString ().endsWith ("/" )) {
endpoint = "/" + endpoint ;
}
return new URL (baseURL + endpoint + "/" );
} catch (MalformedURLException e ) {
Log .e ("AeroGear" , e .getMessage ());
return null ;
}
}
}
public static interface PipeBuilder {
public PipeBuilder name (String name );
public PipeBuilder endpoint (String endpoint );
public PipeBuilder type (Type type );
public PipeBuilder url (URL url );
public Pipe buildAndAdd ();
}
}