I'm going mad.... I can't get this working.
Here is some code. It is quite a bit so
ItemListPage
package se.edgesoft.hairless.web.page.site.item;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import se.edgesoft.hairless.entities.brand.Brand;
import se.edgesoft.hairless.entities.category.Category;
import se.edgesoft.hairless.entities.colorstory.ColorStory;
import se.edgesoft.hairless.entities.department.Department;
import se.edgesoft.hairless.entities.item.Item;
import se.edgesoft.hairless.entities.presentation.Presentation;
import se.edgesoft.hairless.entities.translation.Translation;
import se.edgesoft.hairless.model.filter.item.BalanceFilter;
import se.edgesoft.hairless.model.filter.item.BrandFilter;
import se.edgesoft.hairless.model.filter.item.CategoryFilter;
import se.edgesoft.hairless.model.filter.item.ColorStoryFilter;
import se.edgesoft.hairless.model.filter.item.DepartmentFilter;
import se.edgesoft.hairless.model.filter.item.GenderFilter;
import se.edgesoft.hairless.model.filter.item.ItemBreadcrumb;
import se.edgesoft.hairless.model.filter.item.ItemFilter;
import se.edgesoft.hairless.model.filter.item.ItemResourceBreadcrumb;
import se.edgesoft.hairless.model.filter.item.ObjectFilter;
import se.edgesoft.hairless.model.filter.item.OutletFilter;
import se.edgesoft.hairless.model.filter.item.Presentational;
import se.edgesoft.hairless.model.filter.item.StoreFilter;
import se.edgesoft.hairless.model.filter.item.TypePresentational;
import se.edgesoft.hairless.model.format.item.ItemFormatter;
import se.edgesoft.hairless.model.presentation.PresentationManager;
import se.edgesoft.hairless.model.sort.item.ItemSort;
import se.edgesoft.hairless.model.sort.item.Sort;
import se.edgesoft.hairless.model.translation.Translator;
import se.edgesoft.hairless.model.translation.TranslatorManager;
import se.edgesoft.hairless.web.components.ExternalImageUrl;
import se.edgesoft.hairless.web.components.models.TranslatableCategoryModel;
import
se.edgesoft.hairless.web.page.administration.renderers.BrandChoiceRenderer;
import
se.edgesoft.hairless.web.page.administration.renderers.CategoryChoiceRenderer;
import
se.edgesoft.hairless.web.page.administration.renderers.ColorStoryChoiceRenderer;
import se.edgesoft.hairless.web.page.site.RootPage;
import se.edgesoft.hairless.web.panels.ItemPageNavigation;
public class ItemListPage extends RootPage{
List<ItemFilter> filters;
List<ItemSort> sorts;
private Presentation presentation;
private Translation translation;
public List<ItemFilter> getFilters() {
return filters;
}
public void setFilters(List<ItemFilter> filters) {
this.filters = filters;
/**
* Check if the outlet filter exists. This can
* happen if the outlet is pressed
* If no outlet filter is present we add a new outlet filter
* to filter only the items that is in date scope.
*/
if( ! containsFilter( OutletFilter.class ) ){
addFilter( new OutletFilter( false ));
}
/** Always add balance and store filter when getting items */
if( ! containsFilter( BalanceFilter.class ) ){
addFilter( new BalanceFilter( new Long( 1 ) ));
}
/** Add store filter */
if( ! containsFilter( StoreFilter.class ) ){
addFilter( new StoreFilter( getStore() ) );
}
/**
* Add default family as gender filter
*/
if( ! containsFilter( GenderFilter.class ) ){
addFilter( new GenderFilter( Item.Gender.FAMILY ) );
}
}
public List<ItemBreadcrumb> getBreadCrumbs(){
if( getFilters() == null || getFilters().isEmpty() ) return
null;
ItemFilter f = getFilters().get(0);
List<ItemBreadcrumb> itemBreadcrumbs = new
LinkedList<ItemBreadcrumb>();
for( ItemFilter filter : getFilters() ){
if( filter instanceof ItemBreadcrumb ){
if( filter instanceof OutletFilter ){
/**
* Don't append outlet filter
* unless it is outlet true. This means
that the outlet
* has been requested. Otherwise, we
will always have
* a filter to exlude outlets, outlet
false
*/
if( ! ((OutletFilter)
filter).isOutlet() ){
continue;
}
}
/**
* Don't include Gender as breadcrumb unless it
is the first filter.
* This means that a direct request has been
made for gender.
* @see RootPage( maleLink, femaleLink,
juniorLink )
*/
if( filter instanceof GenderFilter ){
if( ! filter.equals( f )){
continue;
}
}
itemBreadcrumbs.add( (ItemBreadcrumb) filter );
}
}
return itemBreadcrumbs;
}
public List<ItemFilter> getFiltersByBreadcrumb( ItemBreadcrumb
breadcrumb
){
List<ItemFilter> filters = new LinkedList<ItemFilter>();
for( ItemFilter filter : getFilters() ){
filters.add( filter );
if( filter instanceof ItemBreadcrumb ){
if( ((ItemBreadcrumb) filter).equals(
breadcrumb ) ){
break;
}
}
}
return filters;
}
public ItemListPage( List<ItemFilter> filters){
this( filters, null );
}
public ItemListPage( List<ItemFilter> filters, Sort sort ){
if( sort != null) getItemListSetting().setSort(sort);
setFilters( filters );
IModel colorStoryModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
@Override
protected Object load() {
return
getItemDao().getColorStories(getFilters());
}
};
IModel brandModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
@Override
protected Object load() {
return getItemDao().getBrands(getFilters());
}
};
IModel categoryModel = new TranslatableCategoryModel(
getStore(), filters
);
Form itemFilterForm = new Form( "itemFilterForm" );
final DropDownChoice brandChoice = new
DropDownChoice("brandChoice", new
Model(), brandModel,new BrandChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected boolean wantOnSelectionChangedNotifications(){
return true;
}
@Override
protected void onSelectionChanged(Object newSelection ){
if( newSelection == null ){
removeFilter( BrandFilter.class );
}else{
/**
* If the filter list contains a brand
filter
* find the filter and replace it. It
is critical
* that the filter is at the same
position due
* to bread crumbs and null valid drop
down lists.
*/
if( containsFilter( BrandFilter.class
)){
for( ItemFilter filter :
getFilters() ){
if( filter instanceof
BrandFilter ){
getFilters().set( getFilters().indexOf( filter ), new
BrandFilter((Brand) newSelection));
break;
}
}
}else{
addFilter( new
BrandFilter((Brand) newSelection));
}
}
setResponsePage( new ItemListPage( getFilters()
));
}
};
final DropDownChoice categoryChoice = new
DropDownChoice("categoryChoice",
new Model(), categoryModel,new CategoryChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected boolean wantOnSelectionChangedNotifications(){
return true;
}
@Override
protected void onSelectionChanged(Object newSelection ){
if( newSelection == null ){
removeFilter( CategoryFilter.class );
}else{
/**
* If the filter list contains a
category filter
* find the filter and replace it. It
is critical
* that the filter is at the same
position due
* to bread crumbs and null valid drop
down lists.
*/
if( containsFilter(
CategoryFilter.class )){
for( ItemFilter filter :
getFilters() ){
if( filter instanceof
CategoryFilter ){
getFilters().set( getFilters().indexOf( filter ), new
CategoryFilter((Category) newSelection));
break;
}
}
}else{
addFilter( new
CategoryFilter((Category) newSelection) );
}
}
setResponsePage( new ItemListPage( getFilters()
));
}
};
final DropDownChoice colorStoryChoice = new
DropDownChoice("colorStoryChoice", new Model(), colorStoryModel,new
ColorStoryChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected boolean wantOnSelectionChangedNotifications(){
return true;
}
@Override
protected void onSelectionChanged(Object newSelection ){
if( newSelection == null ){
removeFilter( ColorStoryFilter.class );
}else{
/**
* If the filter list contains a
category filter
* find the filter and replace it. It
is critical
* that the filter is at the same
position due
* to bread crumbs and null valid drop
down lists.
*/
if( containsFilter(
ColorStoryFilter.class )){
for( ItemFilter filter :
getFilters() ){
if( filter instanceof
ColorStoryFilter ){
getFilters().set( getFilters().indexOf( filter ), new
ColorStoryFilter((ColorStory) newSelection));
break;
}
}
}else{
addFilter( new
ColorStoryFilter((ColorStory) newSelection) );
}
}
setResponsePage( new ItemListPage( getFilters()
));
}
};
final DropDownChoice sortChoice = new DropDownChoice(
"sortChoice", new
Model( getItemListSetting().getSort() ), Arrays.asList( Sort.values() ),new
ChoiceRenderer(){
public Object getDisplayValue(Object object) {
return new
StringResourceModel(((Sort)object).getResourceKey(),
ItemListPage.this, new Model() ).getString();
}
public String getIdValue(Object key, int index)
{
return ((Sort)key).getName();
}
}){
private static final long serialVersionUID = 1L;
@Override
protected boolean wantOnSelectionChangedNotifications(){
return true;
}
@Override
protected void onSelectionChanged(Object newSelection ){
Sort newSort = (Sort) newSelection;
getItemListSetting().setSort( newSort );
setResponsePage( new ItemListPage( getFilters()
));
}
};
colorStoryChoice.setNullValid( true );
brandChoice.setNullValid( true );
categoryChoice.setNullValid( true );
sortChoice.setNullValid( false );
if( getFilters() != null && ! getFilters().isEmpty() ){
ItemFilter f = getFilters().get(0);
for( ItemFilter filter : getFilters() ){
if( filter instanceof ObjectFilter ){
if( filter instanceof BrandFilter ){
brandChoice.setModelObject(
((ObjectFilter) filter).getFilterObject()
);
if( filter.equals( f ) ){
brandChoice.setNullValid( false );
}
}
if( filter instanceof CategoryFilter ){
categoryChoice.setModelObject(
((ObjectFilter)
filter).getFilterObject() );
if( filter.equals( f ) ){
categoryChoice.setNullValid( false );
}
}
if( filter instanceof ColorStoryFilter
){
colorStoryChoice.setModelObject( ((ObjectFilter)
filter).getFilterObject() );
}
}
}
}
categoryChoice.setEscapeModelStrings( false );
itemFilterForm.add( colorStoryChoice );
itemFilterForm.add( categoryChoice );
itemFilterForm.add( brandChoice );
itemFilterForm.add( sortChoice );
itemFilterForm.add( new ListView( "genderList",
Arrays.asList(Item.Gender.values()) ){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem genderItem) {
Item.Gender gender = (Item.Gender)
genderItem.getModelObject();
Link genderLink = new Link( "genderLink" ,
genderItem.getModel() ){
private static final long
serialVersionUID = 1L;
@Override
public void onClick() {
/** This should always occur */
if( containsFilter(
GenderFilter.class )){
for( ItemFilter filter
: getFilters() ){
if( filter
instanceof GenderFilter ){
getFilters().set( getFilters().indexOf( filter ), new GenderFilter(
(Item.Gender) getModelObject() ) );
break;
}
}
}
setResponsePage( new
ItemListPage( getFilters() ));
}
};
genderLink.add(getGenderImage(gender) );
genderItem.add( genderLink );
}
});
ListView breadcrumbs = new ListView( "breadcrumbs" ,
getBreadCrumbs() ){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem listItem ) {
ItemBreadcrumb breadcrumb = (ItemBreadcrumb)
listItem.getModelObject();
Link link = new Link( "breadcrumbLink" ,
listItem.getModel() ){
private static final long
serialVersionUID = 1L;
@Override
public void onClick() {
setResponsePage( new
ItemListPage( getFiltersByBreadcrumb(
(ItemBreadcrumb) getModelObject() ) ));
}
};
String linkData = "";
if( breadcrumb instanceof
ItemResourceBreadcrumb){
linkData = new StringResourceModel(
breadcrumb.getName() ,
ItemListPage.this, new Model()).getString();
}else{
linkData = breadcrumb.getName();
}
if( ! ( listItem.getIndex() ==
getBreadCrumbs().size() - 1 ) ){
linkData += " / ";
}
link.add( new Label( "breadcrumbLabel" ,
linkData ));
listItem.add(link);
}
};
itemFilterForm.add( breadcrumbs );
final DataView itemRepeater = new DataView( "itemRepeater", new
ItemProvider(), getItemListSetting().getListSize().intValue() ) {
private static final long serialVersionUID = 1L;
private Translator translator = new Translator(
getStore() );
@Override
protected void populateItem(
org.apache.wicket.markup.repeater.Item
listItem ) {
se.edgesoft.hairless.entities.item.Item item =
(se.edgesoft.hairless.entities.item.Item) listItem.getModelObject();
translator.translate( item );
new ItemFormatter( item, true ).format(
getStore() );
Link itemLink = new Link( "itemLink",
listItem.getModel() ){
private static final long
serialVersionUID = 1L;
@Override
public void onClick() {
PageParameters parameters = new
PageParameters();
parameters.add( "ItemId",
((se.edgesoft.hairless.entities.item.Item)getModelObject()).getId().toString());
setResponsePage( new ItemPage(
parameters, ItemListPage.this ) );
}
};
listItem.add( itemLink );
ExternalImageUrl imageUrl = new
ExternalImageUrl( "image" ,
"ItemResourceServlet?itemId=" + item.getId() );
imageUrl.appendAlternate(
item.getBrand().getName() + " " +
item.getName() );
itemLink.add( imageUrl );
itemLink.add( new ListView( "genderList",
item.getGenderList() ){
private static final long
serialVersionUID = 1L;
@Override
protected void populateItem(ListItem
genderItem) {
Item.Gender gender =
(Item.Gender) genderItem.getModelObject();
switch( gender ){
case MALE:
genderItem.add(
new ExternalImageUrl( "gender", new
StringResourceModel( "item.gender.male.image" , ItemListPage.this, new
Model()).getString() ) );
break;
case FEMALE:
genderItem.add(
new ExternalImageUrl( "gender", new
StringResourceModel( "item.gender.female.image" , ItemListPage.this, new
Model()).getString() ) );
break;
case JUNIOR:
genderItem.add(
new ExternalImageUrl( "gender", new
StringResourceModel( "item.gender.junior.image" , ItemListPage.this, new
Model()).getString() ) );
break;
}
}
});
itemLink.add( new Label( "brandName",
item.getBrand().getName() ));
itemLink.add( new Label( "name",
item.getName() ));
itemLink.add( new Label( "collection",
item.getCollection().getIdentifier() ));
itemLink.add( new ExternalImageUrl(
"brandLogo" ,
item.getBrand().getLogo().getFile() ) );
Label sale = new Label( "sale" , new
StringResourceModel( "sale.label" ,
ItemListPage.this, new Model()).getString() );
itemLink.add( sale );
if( item.isOnSale() ){
itemLink.add( new ItemSaleFragment(
"pricePanel" , "itemSaleFragment",
item ) );
}else{
itemLink.add( new ItemNoSaleFragment(
"pricePanel" ,
"itemNoSaleFragment", item ) );
sale.setVisible( false );
}
}
};
add( itemFilterForm );
add(itemRepeater);
add(new ItemPageNavigation("itemTopNavigation", itemRepeater));
add(new ItemPageNavigation("itemBottomNavigation", itemRepeater));
extractOverviewData();
setBackground( presentation );
WebMarkupContainer descriptionContainer = new WebMarkupContainer(
"descriptionContainer" );
if( this.translation != null ){
Label headline = new Label( "headline" ,
this.translation.getName()
);
Label description = new Label( "description" ,
this.translation.getShortDescription() );
if( this.presentation != null ){
if( presentation.getTextColor() != null )
description.add( new AttributeAppender( "style", true ,
new
Model("color: "+ presentation.getTextColor() +";" ), ""));
if( presentation.getHeadlineColor() != null )
headline.add( new AttributeAppender( "style", true , new
Model("color: "+ presentation.getHeadlineColor() +";" ), ""));
if( presentation.getOverviewImage() != null )
descriptionContainer.add( new
AttributeAppender( "style", true,
new Model( "background-image: url( " +
presentation.getOverviewImage().getFile() + "); background-repeat:
no-repeat;" ) , "" ));
}
descriptionContainer.add( description );
descriptionContainer.add( headline );
}else{
descriptionContainer.add( new Label( "headline" , "" ));
descriptionContainer.add( new Label( "description" , "" ));
}
add( descriptionContainer );
final RadioGroup productsPerPage = new RadioGroup(
"productsPerPage", new Model( getItemListSetting().getListSize() ) ){
private static final long serialVersionUID = 1L;
@Override
protected boolean wantOnSelectionChangedNotifications(){
return true;
}
@Override
protected void onSelectionChanged(Object newSelection ){
getItemListSetting().setListSize( (Long)
newSelection );
setResponsePage( new ItemListPage( getFilters()
));
}
};
productsPerPage.add(new Radio("16", new Model( new Long( 16 ) )));
productsPerPage.add(new Radio("24", new Model(new Long( 24 ) )));
productsPerPage.add(new Radio("32", new Model(new Long( 32 ))));
itemFilterForm.add( productsPerPage );
}
private ExternalImageUrl getGenderImage( Item.Gender gender ){
Item.Gender selectedGender = null;
String resource = "";
for( ItemFilter filter : getFilters() ){
if( filter instanceof GenderFilter ){
selectedGender = (( GenderFilter) filter
).getGender();
break;
}
}
switch( gender ){
case MALE:
if( selectedGender != null &&
selectedGender.equals( Item.Gender.MALE
)){
resource = "gender.male.image.selected";
}else{
resource = "gender.male.image";
}
break;
case FEMALE:
if( selectedGender != null &&
selectedGender.equals( Item.Gender.FEMALE
)){
resource =
"gender.female.image.selected";
}else{
resource = "gender.female.image";
}
break;
case JUNIOR:
if( selectedGender != null &&
selectedGender.equals( Item.Gender.JUNIOR
)){
resource =
"gender.junior.image.selected";
}else{
resource = "gender.junior.image";
}
break;
case FAMILY:
if( selectedGender != null &&
selectedGender.equals( Item.Gender.FAMILY
)){
resource =
"gender.family.image.selected";
}else{
resource = "gender.family.image";
}
break;
}
return new ExternalImageUrl( "genderImage", new
StringResourceModel(
resource , ItemListPage.this, new Model()).getString() );
}
@SuppressWarnings( "unchecked" )
class ItemProvider implements IDataProvider{
private static final long serialVersionUID = 1L;
public Iterator iterator(int first, int count) {
return getItemDao().getItems(getFilters(), Arrays.asList(
getItemListSetting().getSort() ), first, count ).iterator();
}
public int size() {
return getItemDao().getItemCount( getFilters());
}
public IModel model(Object object) {
return new Model((Item) object);
}
public void detach() {
}
}
public void extractOverviewData(){
if( getFilters() != null && ! getFilters().isEmpty() ){
ItemFilter filter = getFilters().get(0);
if( filter instanceof Presentational ){
if( filter instanceof TypePresentational ){
this.presentation = new
PresentationManager( getStore()
).getPresentation(((TypePresentational) filter ).getPresentationType() );
this.translation = new
TranslatorManager( getStore()
).getTranslation(((TypePresentational) filter ).getTranslationType() );
}
if( filter instanceof ObjectFilter ){
if( filter instanceof BrandFilter ){
this.presentation = new
PresentationManager( getStore()
).getPresentation((Brand)((ObjectFilter) filter ).getFilterObject() );
this.translation = new
TranslatorManager(
getStore()).getTranslation((Brand)((ObjectFilter) filter
).getFilterObject());
}
if( filter instanceof CategoryFilter ){
this.presentation = new
PresentationManager( getStore()
).getPresentation((Category)((ObjectFilter) filter ).getFilterObject() );
this.translation = new
TranslatorManager(
getStore()).getTranslation((Category)((ObjectFilter) filter
).getFilterObject());
}
if( filter instanceof DepartmentFilter
){
this.presentation = new
PresentationManager( getStore()
).getPresentation((Department)((ObjectFilter) filter ).getFilterObject() );
this.translation = new
TranslatorManager(
getStore()).getTranslation((Department)((ObjectFilter) filter
).getFilterObject());
}
}
}
}
}
final class ItemSaleFragment extends Fragment{
private static final long serialVersionUID = 1L;
public ItemSaleFragment( String panel, String id, Item item ){
super( panel, id, ItemListPage.this );
add( new Label( "price" ,
item.getFormattedPriceString() ) );
add( new Label( "sale" , new StringResourceModel(
"item.sale.label" ,
ItemListPage.this, new Model(), new Object[]{
item.getFormattedMemberPriceString() } ).getString() ));
}
}
final class ItemNoSaleFragment extends Fragment{
private static final long serialVersionUID = 1L;
public ItemNoSaleFragment( String panel, String id, Item item ){
super( panel, id, ItemListPage.this );
add( new Label( "price" , new StringResourceModel(
"item.member.label" ,
ItemListPage.this, new Model(), new Object[]{
item.getFormattedMemberPriceString() } ).getString() ));
}
}
@SuppressWarnings( "unchecked" )
public boolean containsFilter( Class clazz ){
Iterator<ItemFilter> iter = getFilters().iterator();
while( iter.hasNext() ){
ItemFilter filter = (ItemFilter)iter.next();
if( clazz.equals( filter.getClass() )){
return true;
}
}
return false;
}
@SuppressWarnings( "unchecked" )
public void removeFilter( Class clazz ){
Iterator<ItemFilter> iter = getFilters().iterator();
while( iter.hasNext() ){
ItemFilter filter = (ItemFilter)iter.next();
if( clazz.equals( filter.getClass() )){
iter.remove();
break;
}
}
}
public void addFilter( ItemFilter f ){
removeFilter( f.getClass() );
getFilters().add( f );
}
}
Item page. The page holding a reference back to ItemPage
package se.edgesoft.hairless.web.page.site.item;
import java.io.File;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import se.edgesoft.hairless.entities.cart.Cart;
import se.edgesoft.hairless.entities.cart.CartItem;
import se.edgesoft.hairless.entities.category.MainCategory;
import se.edgesoft.hairless.entities.category.SubCategory;
import se.edgesoft.hairless.entities.item.Item;
import se.edgesoft.hairless.entities.item.SubItem;
import se.edgesoft.hairless.entities.item.attribute.Attribute;
import se.edgesoft.hairless.entities.item.image.Image;
import se.edgesoft.hairless.entities.item.image.ImageResource;
import se.edgesoft.hairless.entities.presentation.Presentation;
import se.edgesoft.hairless.entities.presentation.brand.BrandPresentation;
import se.edgesoft.hairless.entities.translation.brand.BrandTranslation;
import se.edgesoft.hairless.model.format.item.ItemFormatter;
import
se.edgesoft.hairless.model.image.processing.ItemImageProcessing.JpegSize;
import se.edgesoft.hairless.model.presentation.PresentationManager;
import se.edgesoft.hairless.model.translation.Translator;
import se.edgesoft.hairless.web.components.ExternalImageUrl;
import se.edgesoft.hairless.web.page.site.Base;
import se.edgesoft.hairless.web.page.site.RootPage;
import se.edgesoft.hairless.web.panels.item.ItemBackPanel;
/**
* @author Mathias Nilsson
*/
public class ItemPage extends RootPage {
Long itemId;
Item item;
WebPage backPage;
private Translator translator;
private WebMarkupContainer largeImageContainer;
public ItemPage(){
throw new RestartResponseAtInterceptPageException(Base.class);
}
public ItemPage( PageParameters parameters ){
this( parameters , null );
}
public ItemPage( PageParameters parameters, WebPage backPage ){
this.backPage = backPage;
try{
itemId = new Long( parameters.getString( "ItemId", "" )
);
}catch( NumberFormatException nex ){
throw new
RestartResponseAtInterceptPageException(Base.class);
}
translator = new Translator( getStore() );
item = getItemDao().getItem( itemId );
translator.translate( item );
new ItemFormatter( item ).format( getStore() );
if( item == null )throw new
RestartResponseAtInterceptPageException(Base.class);
IModel cartItemsModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
@Override
protected Object load() {
List<SubItem> subItems =
getItemDao().getSubItems(item);
List<CartListItem> cartItems = new
LinkedList<CartListItem>();
for( SubItem subItem : subItems ){
if( subItem.getBalance() > 0 ){
StringBuffer buf = new
StringBuffer();
for( Attribute attribute :
subItem.getAttributes() ){
buf.append(
attribute.getData() + " : " );
}
if( buf.length() > 0 ){
buf.delete(buf.length()
- 3, buf.length() );
}
CartListItem item = new
CartListItem();
item.setSubItem(subItem);
item.setAttribute(
buf.toString() );
cartItems.add( item );
}
}
return cartItems;
}
};
IModel itemImageModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
@Override
protected Object load() {
List<Image> images = getItemDao().getImages(
item );
int length = images.size();
for( int i = length; i <= 5; i ++ ){
images.add( new Image() );
}
if( images.size() > 6 ){
Iterator iter = images.iterator();
int c = 0;
while( iter.hasNext() ){
iter.next();
if( c > 5 ) iter.remove();
c++;
}
}
return images;
}
};
final DropDownChoice choice = new DropDownChoice( "subItems",
new Model(),
cartItemsModel, new ChoiceRenderer( "attribute", "subItem.id" ) );
choice.setNullValid( true );
Form itemForm = new Form( "itemForm" );
AjaxButton addToCart = new AjaxButton( "addToCart", itemForm ){
private static final long serialVersionUID = 1L;
@Override
public void onSubmit( AjaxRequestTarget target, Form
form ) {
if( choice.getModelObject() instanceof
CartListItem ){
Cart cart = getCart();
CartItem item = new CartItem();
item.setAmount( new Long( 1 ) );
item.setSubItem( ((CartListItem)
choice.getModelObject() ).getSubItem()
);
cart.addCartItem( item );
getCartDao().updateCart( cart );
PageParameters params = new
PageParameters();
params.add( "ItemId", itemId.toString()
);
updateCart( target );
//setResponsePage( new ItemPage(
params, getBackPage() ) );
}
}
};
addToCart.setOutputMarkupId( true );
itemForm.add( addToCart );
itemForm.add( choice );
add( itemForm );
add( new ExternalImageUrl( "brandLogo" ,
item.getBrand().getLogo().getFile() ) );
add( new ListView( "itemImages" , itemImageModel ){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem listItem ) {
Image image = (Image) listItem.getModelObject();
ImageResource resource = null;
ExternalImageUrl imageUrl = null;
if( image.getId() != null ){
for( ImageResource img :
image.getImageResources() ){
if( img.getJpegSize().equals(
JpegSize.SMALL )){
resource = img;
break;
}
}
}
if( resource != null && new File(
getHairlessApplicationSettings().getFileResourcePath(),resource.getFileResource().getFile()
).exists() ){
imageUrl = new ExternalImageUrl(
"image" ,
resource.getFileResource().getFile() );
}else{
imageUrl = new ExternalImageUrl(
"image" ,
"images/site/empty_small.jpg" );
}
imageUrl.appendAlternate(
item.getBrand().getName() + " " +
item.getName() );
AjaxLink link = new AjaxLink( "imageLink", new
Model( image ) ){
private static final long
serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget
target ) {
target.addComponent(
largeImageContainer );
updateLargeImage( (Image)
getModelObject() );
}
};
link.add( imageUrl );
if( resource == null ) link.setEnabled( false );
listItem.add( link );
}
});
largeImageContainer = new WebMarkupContainer(
"largeImageContainer" );
largeImageContainer.setOutputMarkupId( true );
largeImageContainer.addOrReplace( new ExternalImageUrl(
"largeImage" , ""
) );
List<Image> images = (List) itemImageModel.getObject();
if( images != null && images.size() > 0 ){
updateLargeImage( images.get( 0 ));
}
add( largeImageContainer );
add( new Label( "name" , item.getName() ));
add( new Label( "fullName" , item.getBrand().getName() + " " +
item.getName() ));
add( new Label( "collection" ,
item.getCollection().getIdentifier() ));
SubCategory subCategory = item.getSubCategory();
MainCategory mainCategory = subCategory.getParent();
translator.translate(mainCategory);
translator.translate(subCategory);
add( new MultiLineLabel( "shortDescription",
item.getShortDescription()
));
// add( new Label( "priceLabel" , new StringResourceModel(
"item.label.price" , ItemPage.this, new Model()).getString() ));
WebMarkupContainer brandPromotionContainer = new
WebMarkupContainer(
"brandPromotionContainer" );
BrandPresentation brandPresentation =
getPresentationDao().getPresentation( getStore(),item.getBrand( ));
BrandTranslation brandTranslation =
getTranslationDao().getTranslation(
getStore(),item.getBrand());
brandPromotionContainer.add( new ExternalImageUrl(
"promotionImage" ,
brandPresentation.getPromotionImage().getFile() ));
brandPromotionContainer.add( new ExternalImageUrl(
"brandLogo" ,
item.getBrand().getLogo().getFile() ) );
brandPromotionContainer.add( new ExternalLink( "brandLink" ,
item.getBrand().getLink(), item.getBrand().getLink().replaceAll( "http://",
"") ));
brandPromotionContainer.add( new MultiLineLabel(
"brandPromotionText",
brandTranslation.getPromotionText() ) );
add( brandPromotionContainer );
Presentation presentation = new PresentationManager( getStore()
).getPresentation( item.getBrand() );
setBackground( presentation );
add( new ItemBackPanel( "upperBackPanel" , item, getBackPage()
));
add( new ItemBackPanel( "lowerBackPanel" , item, getBackPage()
));
}
public void updateLargeImage( Image image ){
ImageResource resource = null;
if( image.getId() != null ){
resource = getItemDao().getImageResource( image.getId()
, JpegSize.LARGE
);
}
if( resource != null && new File(
getHairlessApplicationSettings().getFileResourcePath(),resource.getFileResource().getFile()
).exists() ){
largeImageContainer.addOrReplace( new ExternalImageUrl(
"largeImage" ,
resource.getFileResource().getFile() ) );
}else{
largeImageContainer.addOrReplace( new ExternalImageUrl(
"largeImage" ,
"images/site/empty_small.jpg" ) );
}
}
public WebPage getBackPage() {
return backPage;
}
private class CartListItem implements Serializable{
private static final long serialVersionUID = 1L;
private SubItem subItem;
private String attribute;
public SubItem getSubItem() {
return subItem;
}
public void setSubItem(SubItem subItem) {
this.subItem = subItem;
}
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
}
}
--
View this message in context:
http://www.nabble.com/Clone-a-WebPage-tp17468163p17544102.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]