blob: d11e15854a016ec61ea73f0eca50ec44e8f7b081 [file] [log] [blame]
/*
* Copyright 2011 Marc Grue.
*
* 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.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.prevnext;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.Page;
import org.apache.wicket.Session;
import org.apache.wicket.devutils.stateless.StatelessComponent;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
/**
* Previous/Next arrows navigation panel with list of ids in session.
*
* Takes care of showing disabled icons at beginning/end.
*/
@StatelessComponent
public class PrevNext extends Panel
{
private static final MetaDataKey<ArrayList<String>> PREV_NEXT_PANEL_KEY = new MetaDataKey<ArrayList<String>>()
{
private static final long serialVersionUID = 1L;
};
public static void registerIds( Session session, ArrayList<String> ids )
{
if( ids == null || ids.isEmpty() )
{
throw new RuntimeException( "Please register a list of ids." );
}
session.setMetaData( PREV_NEXT_PANEL_KEY, ids );
session.bind();
}
public static void addId( Session session, String id )
{
if( id == null || id.isEmpty() )
{
throw new RuntimeException( "Can't register empty id." );
}
ArrayList<String> ids = session.getMetaData( PREV_NEXT_PANEL_KEY );
if( ids == null || ids.isEmpty() )
{
ids = new ArrayList<String>();
}
ids.add( id );
session.setMetaData( PREV_NEXT_PANEL_KEY, ids );
session.bind();
}
public PrevNext( String id, Class<? extends Page> pageClass, String actualId )
{
super( id );
List<String> ids = getSession().getMetaData( PREV_NEXT_PANEL_KEY );
if( ids == null || ids.size() == 0 )
{
setEnabled( false );
setVisible( false );
return;
}
String prev = null;
String current;
for( Iterator<String> it = ids.iterator(); it.hasNext(); )
{
current = it.next();
if( current.equals( actualId ) )
{
if( prev == null )
{
add( new WebMarkupContainer( "prev" ).add( new AttributeModifier( "class", "prevDisabled" ) ) );
}
else
{
add( new BookmarkablePageLink<Void>( "prev", pageClass, new PageParameters().set( 0, prev ) ) );
}
if( !it.hasNext() )
{
add( new WebMarkupContainer( "next" ).add( new AttributeModifier( "class", "nextDisabled" ) ) );
}
else
{
add( new BookmarkablePageLink<Void>( "next", pageClass, new PageParameters().set( 0, it.next() ) ) );
}
return;
}
prev = current;
}
throw new RuntimeException( "Passed tracking id was not found in the PrevNextSession." );
}
}