blob: 409ae107fd6de8ae85c036fc10fa226fd6073434 [file] [log] [blame]
/**
*
* Copyright 2009-2011 Rickard Öberg AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.qi4j.library.rest.common.link;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.qi4j.api.common.Optional;
import org.qi4j.api.value.ValueBuilder;
import org.qi4j.api.value.ValueBuilderFactory;
/**
* Builder for making it easier to create LinksValue/LinkValue
*/
public class LinksBuilder<T extends LinksBuilder>
{
protected ValueBuilder<? extends Links> linksBuilder;
protected ValueBuilder<Link> linkBuilder;
protected ValueBuilderFactory vbf;
private String path;
private String rel;
private String classes;
private String command;
public LinksBuilder( ValueBuilderFactory vbf )
{
this.vbf = vbf;
linksBuilder = vbf.newValueBuilder( Links.class );
linkBuilder = vbf.newValueBuilder( Link.class );
}
public T path( @Optional String subPath )
{
path = subPath;
return (T) this;
}
public T rel( String rel )
{
this.rel = rel;
return (T) this;
}
public T classes( String classes )
{
this.classes = classes;
return (T) this;
}
public T command( String commandName )
{
this.command = commandName;
this.rel = commandName;
return (T) this;
}
public T addLink( Link link )
{
linksBuilder.prototype().links().get().add( link );
linkBuilder = vbf.newValueBuilderWithPrototype( link );
return (T) this;
}
public T addLink( String description, String id )
{
try
{
linkBuilder.prototype().text().set( description );
linkBuilder.prototype().id().set( id );
if( command != null )
{
linkBuilder.prototype().href().set( command + "?entity=" + id );
}
else
{
linkBuilder.prototype()
.href()
.set( ( path == null ? "" : path + "/" ) + URLEncoder.encode( id, "UTF-8" ) + "/" );
}
linkBuilder.prototype().rel().set( rel );
linkBuilder.prototype().classes().set( classes );
addLink( linkBuilder.newInstance() );
return (T) this;
}
catch( UnsupportedEncodingException e )
{
e.printStackTrace();
return (T) this;
}
}
public T addLink( String description, String id, String rel, String href, String classes )
{
linkBuilder.prototype().text().set( description );
linkBuilder.prototype().id().set( id );
linkBuilder.prototype().rel().set( rel );
linkBuilder.prototype().href().set( href );
linkBuilder.prototype().classes().set( classes );
addLink( linkBuilder.newInstance() );
return (T) this;
}
public Links newLinks()
{
return linksBuilder.newInstance();
}
}