/**
* Copyright 2009 Roland Foerther, Carl-Eric-Menzel, Olaf Siefart
*
* 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 com.senacor.wbs.web.user;
import java.util.Arrays;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.PackageResource;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
import org.apache.wicket.markup.html.form.ListChoice;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.resource.ByteArrayResource;
import org.apache.wicket.security.components.markup.html.form.SecureForm;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.lang.Bytes;
import com.senacor.domain.user.Gender;
import com.senacor.domain.user.Knowledge;
import com.senacor.domain.user.MaritalStatus;
import com.senacor.domain.user.User;
import com.senacor.domain.user.UserManager;
import com.senacor.wbs.web.border.ToggleBorder;
import com.senacor.wbs.web.core.EnumChoiceRenderer;
import com.senacor.wbs.web.core.security.WBSSession;
public class EditUserPanel extends Panel {
@SpringBean
private UserManager userManager;
private UserForm userForm;
public EditUserPanel(String id) {
super(id);
User user = userManager.retrieve(WBSSession.get().getUser().getId());
add(new ToggleBorder("border", new Model("Passwort ändern")).add(new ChangePasswordPanel("changePasswordPanel", user, false)));
userForm = new UserForm("userForm", user);
add(new ToggleBorder("border2", new Model("Stammdaten ändern")).add(userForm));
}
public class UserForm extends SecureForm {
private EditContactsPanel editContactDataPanel;
private FileUploadField fotoUploadField = new FileUploadField("fotoUpload", new Model<FileUpload>());
private transient FileUpload fotoUpload;
private Image foto;
public UserForm(final String componentName, final User user) {
super(componentName, new CompoundPropertyModel(user));
ToggleBorder borderLeft = new ToggleBorder("borderPerson1", new Model("Persönliche Daten"));
add(borderLeft);
borderLeft.add(new TextField("name").setRequired(true));
borderLeft.add(new TextField("vorname").setRequired(true));
// Beispiel für das Arbeiten mit Datumsangaben
borderLeft.add(DateTextField.forShortStyle("birthDate").add(new DatePicker()));
// Beispiel für Options
borderLeft.add(new RadioChoice("gender", Arrays.asList(Gender.values()), new EnumChoiceRenderer()));
// Beispiel für ListChoice
borderLeft.add(new ListChoice("maritalStatus", Arrays.asList(MaritalStatus.values()), new EnumChoiceRenderer()));
ToggleBorder borderRight = new ToggleBorder("borderPerson2", new Model("Mitarbeiterdaten"));
add(borderRight);
foto = new Image("foto", PackageResource.get(EditUserPanel.class, "photoPlaceholder.jpg").setCacheable(false));
borderRight.add(foto);
// Beispiel für File-Upload
borderRight.add(fotoUploadField);
// Beispiel für eine Checkbox
borderRight.add(new CheckBox("senacorEmployee"));
// Beispiel für CheckBoxMultipleChoice
borderRight.add(new CheckBoxMultipleChoice("knowledges", Arrays.asList(Knowledge.values()), new EnumChoiceRenderer()));
// Fileupload funktioniert nur mit Multipart-Requests
setMultiPart(true);
// File-Groesse kann pro Form oder global beschraenkt
// werden
setMaxSize(Bytes.megabytes(50));
// default:
// getApplication().getApplicationSettings().getDefaultMaximumUploadSize();
add(new UploadProgressBar("progress", UserForm.this));
add(new EditAddressPanel("addressPanel", user.getAddress()));
editContactDataPanel = new EditContactsPanel("contactDataPanel", user.getContactData());
add(editContactDataPanel);
add(new Button("Speichern"));
}
@Override
protected void onSubmit() {
super.onSubmit();
User user = (User) getModelObject();
fotoUpload = fotoUploadField.getFileUpload();
if (fotoUpload != null) {
foto.setImageResource(new ByteArrayResource(fotoUpload.getContentType(), fotoUpload.getBytes()).setCacheable(false));
}
userManager.saveOrUpdate(user);
}
}
public EditContactsPanel getEditContactDataPanel() {
return userForm.editContactDataPanel;
}
}