package fr.openwide.core.basicapp.web.application.common.typedescriptor.user;
import fr.openwide.core.basicapp.core.business.user.model.BasicUser;
import fr.openwide.core.basicapp.core.business.user.model.TechnicalUser;
import fr.openwide.core.basicapp.core.business.user.model.User;
import fr.openwide.core.basicapp.web.application.administration.page.AdministrationBasicUserDescriptionPage;
import fr.openwide.core.basicapp.web.application.administration.page.AdministrationBasicUserPortfolioPage;
import fr.openwide.core.basicapp.web.application.administration.page.AdministrationTechnicalUserDescriptionPage;
import fr.openwide.core.basicapp.web.application.administration.page.AdministrationTechnicalUserPortfolioPage;
import fr.openwide.core.basicapp.web.application.administration.template.AdministrationUserDescriptionTemplate;
import fr.openwide.core.basicapp.web.application.administration.template.AdministrationUserPortfolioTemplate;
import fr.openwide.core.basicapp.web.application.common.typedescriptor.AbstractGenericEntityChildTypeDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.IPageLinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
public abstract class AdministrationUserTypeDescriptor<U extends User> extends
AbstractGenericEntityChildTypeDescriptor<UserTypeDescriptor<U>, U> {
private static final long serialVersionUID = -1128901861897146296L;
public static final AdministrationUserTypeDescriptor<TechnicalUser> TECHNICAL_USER = new AdministrationUserTypeDescriptor<TechnicalUser>(
UserTypeDescriptor.TECHNICAL_USER, AdministrationTechnicalUserDescriptionPage.class,
AdministrationTechnicalUserPortfolioPage.class) {
private static final long serialVersionUID = 1L;
@Override
protected Object readResolve() {
return TECHNICAL_USER;
}
@Override
public TechnicalUser newInstance() {
return new TechnicalUser();
}
};
public static final AdministrationUserTypeDescriptor<BasicUser> BASIC_USER = new AdministrationUserTypeDescriptor<BasicUser>(
UserTypeDescriptor.BASIC_USER, AdministrationBasicUserDescriptionPage.class,
AdministrationBasicUserPortfolioPage.class) {
private static final long serialVersionUID = 1L;
@Override
protected Object readResolve() {
return BASIC_USER;
}
@Override
public BasicUser newInstance() {
return new BasicUser();
}
};
private final Class<? extends AdministrationUserDescriptionTemplate<U>> descriptionPageClazz;
private final Class<? extends AdministrationUserPortfolioTemplate<U>> portfolioPageClazz;
private AdministrationUserTypeDescriptor(UserTypeDescriptor<U> typeDescriptor,
Class<? extends AdministrationUserDescriptionTemplate<U>> descriptionPageClazz,
Class<? extends AdministrationUserPortfolioTemplate<U>> portfolioPageClazz) {
super(typeDescriptor);
this.descriptionPageClazz = descriptionPageClazz;
this.portfolioPageClazz = portfolioPageClazz;
}
public Class<? extends AdministrationUserDescriptionTemplate<U>> getDescriptionClass() {
return descriptionPageClazz;
}
public Class<? extends AdministrationUserPortfolioTemplate<U>> getPortfolioClass() {
return portfolioPageClazz;
}
public IPageLinkDescriptor portfolio() {
return LinkDescriptorBuilder.start().page(portfolioPageClazz);
}
public abstract U newInstance();
}