package fr.openwide.core.wicket.more.link.descriptor.impl; import org.apache.wicket.request.Url; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.lang.Args; import fr.openwide.core.wicket.more.link.descriptor.ILinkDescriptor; import fr.openwide.core.wicket.more.link.descriptor.parameter.extractor.LinkParameterExtractionRuntimeException; import fr.openwide.core.wicket.more.link.descriptor.parameter.mapping.LinkParametersMapping; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.ILinkParameterValidator; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterModelValidationException; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterSerializedFormValidationException; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterValidationException; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterValidationRuntimeException; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterValidators; public abstract class AbstractCoreExplicitelyParameterizedLinkDescriptor implements ILinkDescriptor { private static final long serialVersionUID = 2474433766347554582L; protected final LinkParametersMapping parametersMapping; protected final ILinkParameterValidator parametersValidator; public AbstractCoreExplicitelyParameterizedLinkDescriptor( LinkParametersMapping parametersMapping, ILinkParameterValidator parametersValidator) { super(); Args.notNull(parametersMapping, "parametersModel"); Args.notNull(parametersValidator, "parametersValidator"); this.parametersMapping = parametersMapping; this.parametersValidator = parametersValidator; } protected final PageParameters getValidatedParameters() { try { LinkParameterValidators.checkModel(parametersValidator); PageParameters parameters = parametersMapping.getObject(); LinkParameterValidators.checkSerialized(parameters, parametersValidator); return parameters; } catch (LinkParameterValidationException e) { throw new LinkParameterValidationRuntimeException(e); } } @Override public String fullUrl() { return fullUrl(RequestCycle.get()); } @Override public String fullUrl(RequestCycle requestCycle) { return requestCycle.getUrlRenderer().renderFullUrl(Url.parse(url(requestCycle))); } @Override public boolean isAccessible() { if (LinkParameterValidators.isModelValid(parametersValidator)) { PageParameters parameters = parametersMapping.getObject(); if (LinkParameterValidators.isSerializedValid(parameters, parametersValidator)) { return true; } } return false; } @Override public void extract(PageParameters parameters) throws LinkParameterSerializedFormValidationException, LinkParameterExtractionRuntimeException, LinkParameterModelValidationException { LinkParameterValidators.checkSerialized(parameters, parametersValidator); parametersMapping.setObject(parameters); LinkParameterValidators.checkModel(parametersValidator); } @Override public void checkModels() throws LinkParameterModelValidationException { LinkParameterValidators.checkModel(parametersValidator); } @Override public void detach() { parametersMapping.detach(); parametersValidator.detach(); } }