Example usage for org.apache.wicket.util.lang Classes simpleName

List of usage examples for org.apache.wicket.util.lang Classes simpleName

Introduction

In this page you can find the example usage for org.apache.wicket.util.lang Classes simpleName.

Prototype

public static String simpleName(Class<?> c) 

Source Link

Document

Gets the simple name (without the package) of the given class or null if the class is null.

Usage

From source file:com.francetelecom.clara.cloud.presentation.utils.PaasWicketTester.java

License:Apache License

public String lookupPath(final MarkupContainer markupContainer, final String path) {
    // try to look it up directly
    if (markupContainer.get(path) != null)
        return path;

    // if that fails, traverse the component hierarchy looking for it
    final List<Component> candidates = new ArrayList<Component>();
    markupContainer.visitChildren(new IVisitor<Component, List<Component>>() {
        Set<Component> visited = new HashSet<Component>();

        @Override/*from  w w w.  jav  a 2  s. co  m*/
        public void component(Component c, IVisit<List<Component>> visit) {
            if (!visited.contains(c)) {
                visited.add(c);

                if (c.getId().equals(path)) {
                    candidates.add(c);
                } else {
                    if (c.getPath().endsWith(path)) {
                        candidates.add(c);
                    }
                }
            }
        }
    });
    // if its unambiguous, then return the full path
    if (candidates.isEmpty()) {
        fail("path: '" + path + "' not found for " + Classes.simpleName(markupContainer.getClass()));
        return null;
    } else

    if (candidates.size() == 1) {
        String pathToContainer = markupContainer.getPath();
        String pathToComponent = candidates.get(0).getPath();
        return pathToComponent.replaceFirst(pathToContainer + ":", "");
    } else {
        String message = "path: '" + path + "' is ambiguous for "
                + Classes.simpleName(markupContainer.getClass()) + ". Possible candidates are: ";
        for (Component c : candidates) {
            message += "[" + c.getPath() + "]";
        }
        fail(message);
        return null;
    }
}

From source file:com.locke.library.event.AbstractEvent.java

License:Apache License

@Override
public String toString() {
    return "[" + Classes.simpleName(getClass()) + " source = " + getSource() + ", sentAt = "
            + getSentAt().toString("h:mm:ssa") + "]";
}

From source file:com.locke.library.persistence.dao.jpa.AbstractJpaDao.java

License:Apache License

/**
 * @return The name of this DAO
 */
String getName() {
    return Classes.simpleName(this.type);
}

From source file:com.locke.library.web.panels.ajaxindicator.AjaxWaitIndicator.java

License:Apache License

public AjaxWaitIndicator(final String id) {
    super(id);/*  ww  w  .  j  a  v  a2s.co m*/
    add(JavascriptPackageResource.getHeaderContribution(AjaxWaitIndicator.class,
            Classes.simpleName(AjaxWaitIndicator.class) + ".js"));
    add(new Image("image", "AjaxWaitIndicator.gif"));
}

From source file:com.locke.Trick.java

License:Apache License

public String getName() {
    return Classes.simpleName(getClass());
}

From source file:cz.zcu.kiv.eegdatabase.wui.components.form.PersonForm.java

License:Apache License

public PersonForm(String id, IModel<Person> model, final EducationLevelFacade educationFacade,
        final PersonFacade personFacade, final FeedbackPanel feedback) {
    super(id, new CompoundPropertyModel<Person>(model));

    final boolean isUserAdmin = EEGDataBaseSession.get().hasRole(UserRole.ROLE_ADMIN.name());

    TextField<String> name = new TextField<String>("givenname");
    name.setLabel(ResourceUtils.getModel("label.name"));
    name.setRequired(true);/*from   w  w w.j a  v a2s.  c o m*/
    name.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    FormComponentLabel nameLabel = new FormComponentLabel("nameLb", name);
    add(name, nameLabel);

    TextField<String> surname = new TextField<String>("surname");
    surname.setLabel(ResourceUtils.getModel("label.surname"));
    surname.setRequired(true);
    surname.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    FormComponentLabel surnameLabel = new FormComponentLabel("surnameLb", surname);
    add(surname, surnameLabel);

    DateTimeFieldPicker date = new DateTimeFieldPicker("dateOfBirth") {

        private static final long serialVersionUID = 1L;

        @Override
        public <C> IConverter<C> getConverter(Class<C> type) {
            return (IConverter<C>) new TimestampConverter();
        }
    };

    date.setLabel(ResourceUtils.getModel("label.dateOfBirth"));
    date.setRequired(true);
    FormComponentLabel dateLabel = new FormComponentLabel("dateLb", date);
    add(date, dateLabel);

    EmailTextField email = new EmailTextField("username");
    email.setLabel(ResourceUtils.getModel("label.email"));
    email.setRequired(true);
    FormComponentLabel emailLabel = new FormComponentLabel("emailLb", email);
    add(email, emailLabel);

    // only for admins

    final PasswordTextField password = new PasswordTextField("password", new Model<String>(""));
    password.setLabel(ResourceUtils.getModel("general.password"));
    password.add(StringValidator.minimumLength(6));
    password.setRequired(false);
    password.setVisibilityAllowed(isUserAdmin);
    password.setVisible(false);
    add(password);

    final PasswordTextField passwordVerify = new PasswordTextField("passwordVerify", new Model<String>(""));
    passwordVerify.setLabel(ResourceUtils.getModel("general.password.verify"));
    passwordVerify.add(StringValidator.minimumLength(6));
    passwordVerify.setRequired(false);
    passwordVerify.setVisibilityAllowed(isUserAdmin);
    passwordVerify.setVisible(false);
    add(passwordVerify);

    final AjaxCheckBox changePasswordBox = new AjaxCheckBox("changePassword",
            new Model<Boolean>(Boolean.FALSE)) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {

            Boolean visible = getModelObject();
            password.setVisible(visible);
            password.setRequired(visible);
            passwordVerify.setVisible(visible);
            passwordVerify.setRequired(visible);

            target.add(PersonForm.this);
        }
    };
    changePasswordBox.setVisibilityAllowed(isUserAdmin);
    add(changePasswordBox);
    // end only for admins

    TextField<String> phoneNumber = new TextField<String>("phoneNumber");
    phoneNumber.setLabel(ResourceUtils.getModel("label.phoneNumber"));
    FormComponentLabel phoneNumberLabel = new FormComponentLabel("phoneNumberLb", phoneNumber);
    add(phoneNumber, phoneNumberLabel);

    RadioChoice<Character> gender = new RadioChoice<Character>("gender", Gender.getShortcutList(),
            new ChoiceRenderer<Character>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(Character object) {
                    Gender enumValue = Gender.getGenderByShortcut(object);
                    return getString(
                            Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                }

            });
    gender.setSuffix("\n");
    gender.setRequired(true);
    gender.setLabel(ResourceUtils.getModel("label.gender"));
    FormComponentLabel genderLabel = new FormComponentLabel("genderLb", gender);
    add(gender, genderLabel);

    TextArea<String> note = new TextArea<String>("note");
    note.setLabel(ResourceUtils.getModel("label.note"));
    note.add(StringValidator.maximumLength(255));
    FormComponentLabel noteLabel = new FormComponentLabel("noteLb", note);
    add(note, noteLabel);

    DropDownChoice<Character> laterality = new DropDownChoice<Character>("laterality",
            Laterality.getShortcutList(), new ChoiceRenderer<Character>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(Character object) {
                    Laterality enumValue = Laterality.getLateralityByShortcut(object);
                    return getString(
                            Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                }

            });

    laterality.setLabel(ResourceUtils.getModel("label.laterality"));
    FormComponentLabel lateralityLabel = new FormComponentLabel("lateralityLb", laterality);
    add(laterality, lateralityLabel);

    DropDownChoice<EducationLevel> educationLevel = new DropDownChoice<EducationLevel>("educationLevel",
            educationFacade.getAllRecords(), new ChoiceRenderer<EducationLevel>("title", "educationLevelId") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(EducationLevel object) {
                    return object.getEducationLevelId() + " " + super.getDisplayValue(object);
                }

            });

    educationLevel.setLabel(ResourceUtils.getModel("label.educationLevel"));
    FormComponentLabel educationLevelLabel = new FormComponentLabel("educationLevelLb", educationLevel);
    add(educationLevel, educationLevelLabel);

    CheckBox lockCheckBox = new CheckBox("lock");
    add(lockCheckBox);

    CheckBox confirmCheckBox = new CheckBox("confirmed");
    add(confirmCheckBox);

    AjaxButton submit = new AjaxButton("submit", ResourceUtils.getModel("button.save"), this) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(feedback);
        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            Person user = PersonForm.this.getModelObject();
            user.setEmail(user.getUsername().toLowerCase());
            boolean isEdit = user.getPersonId() > 0;

            String planPassword = password.getModelObject();
            String plainPasswordVerify = passwordVerify.getModelObject();
            Boolean isPasswordChanged = changePasswordBox.getModelObject();

            if (validation(user, personFacade, isEdit, isUserAdmin, isPasswordChanged, planPassword,
                    plainPasswordVerify)) {
                if (isEdit) {

                    if (isPasswordChanged)
                        user.setPassword(encodePassword(planPassword));

                    personFacade.update(user);
                } else {
                    user.setAuthority(Util.ROLE_READER);
                    personFacade.create(user);
                }
                setResponsePage(getPage().getClass());
            }

            target.add(feedback);
        }
    };
    add(submit);
}

From source file:cz.zcu.kiv.eegdatabase.wui.components.form.PersonFormPanel.java

License:Apache License

private void init() throws IOException {
    TextField<String> name = new TextField<String>("givenname");
    name.setLabel(ResourceUtils.getModel("general.name"));
    name.setRequired(true);//from  w  w w  .  j a  v a  2s.com
    name.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    add(name);

    TextField<String> surname = new TextField<String>("surname");
    surname.setLabel(ResourceUtils.getModel("general.surname"));
    surname.setRequired(true);
    surname.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    add(surname);

    DateTimeFieldPicker date = new DateTimeFieldPicker("dateOfBirth") {

        private static final long serialVersionUID = 1L;

        @Override
        public <C> IConverter<C> getConverter(Class<C> type) {
            return (IConverter<C>) new TimestampConverter();
        }
    };
    date.setLabel(ResourceUtils.getModel("general.dateofbirth"));
    //date.setRequired(true);
    add(date);

    TextField<String> address = new TextField<String>("address");
    address.setLabel(ResourceUtils.getModel("label.address"));
    add(address);

    TextField<String> city = new TextField<String>("city");
    city.setLabel(ResourceUtils.getModel("label.city"));
    add(city);

    TextField<String> state = new TextField<String>("state");
    state.setLabel(ResourceUtils.getModel("label.state"));
    add(state);

    TextField<String> zipCode = new TextField<String>("zipCode");
    zipCode.setLabel(ResourceUtils.getModel("label.zipCode"));
    add(zipCode);

    TextField<String> url = new TextField<String>("url");
    url.setLabel(ResourceUtils.getModel("label.url"));
    add(url);

    TextField<String> phone = new TextField<String>("phone");
    phone.setLabel(ResourceUtils.getModel("label.phoneNumber"));
    add(phone);

    TextField<String> organization = new TextField<String>("organization");
    organization.setLabel(ResourceUtils.getModel("label.organization"));
    add(organization);

    TextField<String> jobTitle = new TextField<String>("jobTitle");
    jobTitle.setLabel(ResourceUtils.getModel("label.jobTitle"));
    add(jobTitle);

    TextField<String> orgAddress = new TextField<String>("orgAddress");
    orgAddress.setLabel(ResourceUtils.getModel("label.address"));
    add(orgAddress);

    TextField<String> orgCity = new TextField<String>("orgCity");
    orgCity.setLabel(ResourceUtils.getModel("label.city"));
    add(orgCity);

    TextField<String> orgState = new TextField<String>("orgState");
    orgState.setLabel(ResourceUtils.getModel("label.state"));
    add(orgState);

    TextField<String> orgZipCode = new TextField<String>("orgZipCode");
    orgZipCode.setLabel(ResourceUtils.getModel("label.zipCode"));
    add(orgZipCode);

    TextField<String> orgUrl = new TextField<String>("orgUrl");
    orgUrl.setLabel(ResourceUtils.getModel("label.url"));
    add(orgUrl);

    TextField<String> orgPhone = new TextField<String>("orgPhone");
    orgPhone.setLabel(ResourceUtils.getModel("label.phoneNumber"));
    add(orgPhone);

    TextField<String> VAT = new TextField<String>("VAT");
    VAT.setLabel(ResourceUtils.getModel("label.VAT"));
    add(VAT);

    List<String> listOfTitles = new ArrayList<String>();
    listOfTitles.add("Mr.");
    listOfTitles.add("Mrs.");
    listOfTitles.add("Ms.");

    DropDownChoice<String> title = new DropDownChoice<String>("title", listOfTitles,
            new ChoiceRenderer<String>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(String object) {
                    return object;
                }

            });

    title.setRequired(true);
    title.setLabel(ResourceUtils.getModel("label.title"));
    add(title);

    DropDownChoice<Character> laterality = new DropDownChoice<Character>("laterality",
            Laterality.getShortcutList(), new ChoiceRenderer<Character>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(Character object) {
                    Laterality enumValue = Laterality.getLateralityByShortcut(object);
                    return getString(
                            Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                }

            });

    laterality.setLabel(ResourceUtils.getModel("label.laterality"));
    FormComponentLabel lateralityLabel = new FormComponentLabel("lateralityLb", laterality);
    add(laterality, lateralityLabel);

    File file = ResourceUtils.getFile("countries.txt");
    List<String> countries = FileUtils.getFileLines(file);

    DropDownChoice<String> country = new DropDownChoice<String>("country", countries,
            new ChoiceRenderer<String>("country") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(String object) {
                    return object;
                }

            });

    country.setRequired(true);
    country.setLabel(ResourceUtils.getModel("label.country"));
    add(country);

    DropDownChoice<String> orgCountry = new DropDownChoice<String>("orgCountry", countries,
            new ChoiceRenderer<String>("orgCountry") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(String object) {
                    return object;
                }

            });

    //orgCountry.setRequired(true);
    orgCountry.setLabel(ResourceUtils.getModel("label.country"));
    add(orgCountry);

    List<String> listOfOrgTypes = new ArrayList<String>();
    listOfOrgTypes.add("Commercial");
    listOfOrgTypes.add("Non-Commercial");

    DropDownChoice<String> organizationType = new DropDownChoice<String>("organizationType", listOfOrgTypes,
            new ChoiceRenderer<String>("organizationType") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(String object) {
                    return object;
                }

            });

    organizationType.setRequired(true);
    organizationType.setLabel(ResourceUtils.getModel("label.organizationType"));
    add(organizationType);

    DropDownChoice<EducationLevel> educationLevel = new DropDownChoice<EducationLevel>("educationLevel",
            educationLevelFacade.getAllRecords(),
            new ChoiceRenderer<EducationLevel>("title", "educationLevelId") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(EducationLevel object) {
                    return object.getEducationLevelId() + " " + super.getDisplayValue(object);
                }

            });

    educationLevel.setLabel(ResourceUtils.getModel("general.educationlevel"));
    add(educationLevel);
}

From source file:cz.zcu.kiv.eegdatabase.wui.ui.experiments.forms.PersonForm.java

License:Apache License

public PersonForm(String id, final ModalWindow window) {
    super(id, new CompoundPropertyModel<Person>(new Person()));

    add(new Label("addPersonHeader", ResourceUtils.getModel("pageTitle.addPerson")));

    feedback = new FeedbackPanel("feedback");
    feedback.setOutputMarkupId(true);//from   w  w  w .ja  v a  2  s.com
    add(feedback);

    TextField<String> name = new TextField<String>("givenname");
    name.setLabel(ResourceUtils.getModel("label.name"));
    name.setRequired(true);
    name.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    add(name);

    TextField<String> surname = new TextField<String>("surname");
    surname.setLabel(ResourceUtils.getModel("label.surname"));
    surname.setRequired(true);
    surname.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
    add(surname);

    DatePicker date = new DatePicker("dateOfBirth") {

        private static final long serialVersionUID = 1L;

        @Override
        public <C> IConverter<C> getConverter(Class<C> type) {
            return (IConverter<C>) new TimestampConverter();
        }
    };

    date.setLabel(ResourceUtils.getModel("label.dateOfBirth"));
    date.setRequired(true);
    add(date);

    EmailTextField email = new EmailTextField("username");
    email.setLabel(ResourceUtils.getModel("label.email"));
    email.setRequired(true);
    add(email);

    TextField<String> phoneNumber = new TextField<String>("phoneNumber");
    phoneNumber.setLabel(ResourceUtils.getModel("label.phoneNumber"));
    add(phoneNumber);

    RadioChoice<Character> gender = new RadioChoice<Character>("gender", Gender.getShortcutList(),
            new ChoiceRenderer<Character>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(Character object) {
                    Gender enumValue = Gender.getGenderByShortcut(object);
                    return getString(
                            Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                }

            });
    gender.setSuffix("\n");
    gender.setRequired(true);
    gender.setLabel(ResourceUtils.getModel("label.gender"));
    add(gender);

    TextArea<String> note = new TextArea<String>("note");
    note.setLabel(ResourceUtils.getModel("label.note"));
    note.add(StringValidator.maximumLength(255));
    add(note);

    DropDownChoice<Character> laterality = new DropDownChoice<Character>("laterality",
            Laterality.getShortcutList(), new ChoiceRenderer<Character>() {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(Character object) {
                    Laterality enumValue = Laterality.getLateralityByShortcut(object);
                    return getString(
                            Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                }

            });

    laterality.setLabel(ResourceUtils.getModel("label.laterality"));
    add(laterality);

    DropDownChoice<EducationLevel> educationLevel = new DropDownChoice<EducationLevel>("educationLevel",
            educationFacade.getAllRecords(), new ChoiceRenderer<EducationLevel>("title", "educationLevelId") {

                private static final long serialVersionUID = 1L;

                @Override
                public Object getDisplayValue(EducationLevel object) {
                    return object.getEducationLevelId() + " " + super.getDisplayValue(object);
                }

            });

    educationLevel.setLabel(ResourceUtils.getModel("label.educationLevel"));
    add(educationLevel);

    AjaxButton submit = new AjaxButton("submitForm", ResourceUtils.getModel("button.save"), this) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(feedback);
        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            Person user = PersonForm.this.getModelObject();

            boolean isEdit = user.getPersonId() > 0;

            if (validation(user, personFacade, isEdit)) {
                if (isEdit) {
                    personFacade.update(user);
                } else {
                    user.setAuthority(Util.ROLE_READER);
                    personFacade.create(user);
                }
                window.close(target);
            }
            target.add(feedback);
        }
    };
    add(submit);

    add(new AjaxButton("closeForm", ResourceUtils.getModel("button.close"), this) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            window.close(target);
        }
    }.setDefaultFormProcessing(false));

    setOutputMarkupId(true);
}

From source file:fiftyfive.wicket.js.locator.DefaultJavaScriptDependencyLocator.java

License:Apache License

public void findAssociatedScripts(final Class<?> cls, final DependencyCollection scripts) {
    Args.notNull(cls, "cls");
    Args.notNull(scripts, "scripts");

    // Traverse up the class hierarchy until we find
    // a valid JavaScript resource or we run out of super classes.
    Class<?> scope = cls;/*from  w w  w .ja v a  2  s .c  o  m*/
    while (scope != null) {
        ResourceReference reference = newResourceReference(scope, Classes.simpleName(scope));
        LOGGER.debug("Searching for: {}", reference);
        if (load(reference) != null) {
            LOGGER.debug("Found: {}", reference);
            collectResourceAndDependencies(reference, scripts);
            break;
        }
        scope = scope.getSuperclass();
    }
}

From source file:fiftyfive.wicket.util.LoggingUtils.java

License:Apache License

/**
 * Writes to the logger a best-guess at the most concise description of
 * the exception by first unwrapping it (see {@link #unwrap upwrap}), then
 * writes a large amount of information regarding the current Wicket state
 * (see {@link #dumpWicketState dumpWicketState}), and finally writes the
 * full stack traces of the entire exception chain.
 * <p>//from   ww w.  java2 s  . com
 * Example logger output:
 * <pre class="example">
 * ParseException: Unparseable date: "1xxx07"
 *
 * Request:
 *   URL       = wicket/bookmarkable/fiftyfive.wicket.examples.formtest.FormTestPage?0&initialMonth=10.2007&startDate=1xxx07&endDate=11.10.2007
 *   Handler   = RenderPageRequestHandler
 *   Component = FormTestPage
 *   Duration  = 485 milliseconds
 * Session:
 *   ID       = 1sxy938y7qoqq942z4pnuqdqt
 *   Info     = TODO: Your session info goes here
 *   Size     = 716 bytes
 *   Duration = 310 milliseconds
 * Application:
 *   Active Sessions = 1 (1 peak)
 *   Memory Usage    = 25M used, 40M free, 533M max
 *   IP Address      = 172.16.1.14
 *   Uptime          = 10.9 seconds
 * Headers:
 *   Host            = localhost:8080
 *   User-Agent      = Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
 *   Accept          = application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,&#042;/&#042;;q=0.5
 *   Cache-Control   = max-age=0
 *   Accept-Language = en-us
 *   Accept-Encoding = gzip, deflate
 *   Cookie          = JSESSIONID=1217fv4qjpnbnv1ewzzmonevh
 *   Connection      = keep-alive
 * 
 * Message: Error calling method: public java.util.Date fiftyfive.wicket.examples.formtest.FormTestPage$1.getStartDate() on object: [ [Component id = calendar-control]]
 * 
 * Root cause:
 * 
 * java.text.ParseException: Unparseable date: "1xxx07"
 *      at java.text.DateFormat.parse(DateFormat.java:337)
 *      at fiftyfive.wicket.examples.formtest.FormTestPage$1.getStartDate(FormTestPage.java:82)
 *      at java.lang.reflect.Method.invoke(Method.java:597)
 *      at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver.java:1112)
 *      at org.apache.wicket.util.lang.PropertyResolver$ObjectAndGetSetter.getValue(PropertyResolver.java:637)
 *      at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:96)
 *      at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:122)
 *      at fiftyfive.wicket.datetime.RestrictedDatePicker.configure(RestrictedDatePicker.java:168)
 *      at org.apache.wicket.extensions.yui.calendar.DatePicker.renderHead(DatePicker.java:260)
 *      at org.apache.wicket.Component.renderHead(Component.java:2627)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:70)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:66)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:143)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:117)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:193)
 *      at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:941)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy.renderChildHeaders(ParentFirstHeaderRenderStrategy.java:64)
 *      at org.apache.wicket.markup.renderStrategy.AbstractHeaderRenderStrategy.renderHeader(AbstractHeaderRenderStrategy.java:125)
 *      at org.apache.wicket.markup.html.internal.HtmlHeaderContainer.onComponentTagBody(HtmlHeaderContainer.java:140)
 *      at org.apache.wicket.Component.renderComponent(Component.java:2518)
 *      at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1527)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1466)
 *      at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1589)
 *      at org.apache.wicket.Page.onRender(Page.java:1139)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.Page.renderPage(Page.java:1289)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:131)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:199)
 *      at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:149)
 *      at org.apache.wicket.request.RequestHandlerStack.executeRequestHandler(RequestHandlerStack.java:84)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:206)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:248)
 *      at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:131)
 *      at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:184)
 *      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
 *      at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
 *      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
 *      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
 *      at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
 *      at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
 *      at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
 *      at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
 *      at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
 *      at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
 *      at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
 *      at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
 *      at org.mortbay.jetty.Server.handle(Server.java:326)
 *      at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
 *      at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
 *      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
 *      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
 *      at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
 *      at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
 *      at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
 * 
 * 
 * Complete stack:
 * 
 * org.apache.wicket.WicketRuntimeException: Error calling method: public java.util.Date fiftyfive.wicket.examples.formtest.FormTestPage$1.getStartDate() on object: [ [Component id = calendar-control]]
 *      at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver.java:1116)
 *      at org.apache.wicket.util.lang.PropertyResolver$ObjectAndGetSetter.getValue(PropertyResolver.java:637)
 *      at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:96)
 *      at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:122)
 *      at fiftyfive.wicket.datetime.RestrictedDatePicker.configure(RestrictedDatePicker.java:168)
 *      at org.apache.wicket.extensions.yui.calendar.DatePicker.renderHead(DatePicker.java:260)
 *      at org.apache.wicket.Component.renderHead(Component.java:2627)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:70)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:66)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:143)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:117)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:193)
 *      at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:941)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy.renderChildHeaders(ParentFirstHeaderRenderStrategy.java:64)
 *      at org.apache.wicket.markup.renderStrategy.AbstractHeaderRenderStrategy.renderHeader(AbstractHeaderRenderStrategy.java:125)
 *      at org.apache.wicket.markup.html.internal.HtmlHeaderContainer.onComponentTagBody(HtmlHeaderContainer.java:140)
 *      at org.apache.wicket.Component.renderComponent(Component.java:2518)
 *      at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1527)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1466)
 *      at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1589)
 *      at org.apache.wicket.Page.onRender(Page.java:1139)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.Page.renderPage(Page.java:1289)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:131)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:199)
 *      at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:149)
 *      at org.apache.wicket.request.RequestHandlerStack.executeRequestHandler(RequestHandlerStack.java:84)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:206)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:248)
 *      at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:131)
 * 
 * java.lang.RuntimeException: java.text.ParseException: Unparseable date: "1xxx07"
 *      at fiftyfive.wicket.examples.formtest.FormTestPage$1.getStartDate(FormTestPage.java:87)
 *      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 *      at java.lang.reflect.Method.invoke(Method.java:597)
 *      at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver.java:1112)
 *      at org.apache.wicket.util.lang.PropertyResolver$ObjectAndGetSetter.getValue(PropertyResolver.java:637)
 *      at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:96)
 *      at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:122)
 *      at fiftyfive.wicket.datetime.RestrictedDatePicker.configure(RestrictedDatePicker.java:168)
 *      at org.apache.wicket.extensions.yui.calendar.DatePicker.renderHead(DatePicker.java:260)
 *      at org.apache.wicket.Component.renderHead(Component.java:2627)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:70)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy$1.component(ParentFirstHeaderRenderStrategy.java:66)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:143)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:117)
 *      at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:193)
 *      at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:941)
 *      at org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy.renderChildHeaders(ParentFirstHeaderRenderStrategy.java:64)
 *      at org.apache.wicket.markup.renderStrategy.AbstractHeaderRenderStrategy.renderHeader(AbstractHeaderRenderStrategy.java:125)
 *      at org.apache.wicket.markup.html.internal.HtmlHeaderContainer.onComponentTagBody(HtmlHeaderContainer.java:140)
 *      at org.apache.wicket.Component.renderComponent(Component.java:2518)
 *      at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1527)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1466)
 *      at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1589)
 *      at org.apache.wicket.Page.onRender(Page.java:1139)
 *      at org.apache.wicket.Component.render_(Component.java:2380)
 *      at org.apache.wicket.Component.render(Component.java:2307)
 *      at org.apache.wicket.Page.renderPage(Page.java:1289)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:131)
 *      at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:199)
 *      at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:149)
 *      at org.apache.wicket.request.RequestHandlerStack.executeRequestHandler(RequestHandlerStack.java:84)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:206)
 *      at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:248)
 *      at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:131)</pre>
 */
public static void logException(Logger logger, Exception e) {
    Args.notNull(logger, "logger");
    Args.notNull(e, "e");

    try {
        Throwable unwrapped = unwrap(e);

        logger.error(String.format("%s: %s%n%n%s%n%n%s", Classes.simpleName(unwrapped.getClass()),
                unwrapped.getMessage(), dumpWicketState(), Strings.toString(e)));
    } catch (Exception loggingEx) {
        // We should never arrive here, because it means that something
        // went terribly wrong in our logging code. Since our code failed,
        // fall back to simple logging so that Wicket error handling
        // can continue uninterrupted.
        LOGGER.error("Unexpected exception during logging", loggingEx);
        logger.error("RuntimeException", e);
    }
}