/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you 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 org.apache.openmeetings.web.components.admin.users; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.List; | |
import org.apache.openmeetings.data.basic.FieldLanguageDao; | |
import org.apache.openmeetings.data.basic.dao.ConfigurationDao; | |
import org.apache.openmeetings.data.basic.dao.OmTimeZoneDao; | |
import org.apache.openmeetings.data.user.OrganisationManager; | |
import org.apache.openmeetings.data.user.dao.SalutationDao; | |
import org.apache.openmeetings.data.user.dao.StateDao; | |
import org.apache.openmeetings.data.user.dao.UsersDao; | |
import org.apache.openmeetings.persistence.beans.basic.OmTimeZone; | |
import org.apache.openmeetings.persistence.beans.domain.Organisation; | |
import org.apache.openmeetings.persistence.beans.domain.Organisation_Users; | |
import org.apache.openmeetings.persistence.beans.lang.FieldLanguage; | |
import org.apache.openmeetings.persistence.beans.user.Salutation; | |
import org.apache.openmeetings.persistence.beans.user.State; | |
import org.apache.openmeetings.persistence.beans.user.User; | |
import org.apache.openmeetings.utils.crypt.ManageCryptStyle; | |
import org.apache.openmeetings.web.app.Application; | |
import org.apache.openmeetings.web.app.WebSession; | |
import org.apache.openmeetings.web.components.admin.AdminBaseForm; | |
import org.apache.wicket.ajax.AjaxRequestTarget; | |
import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior; | |
import org.apache.wicket.datetime.markup.html.basic.DateLabel; | |
import org.apache.wicket.extensions.markup.html.form.DateTextField; | |
import org.apache.wicket.extensions.yui.calendar.DatePicker; | |
import org.apache.wicket.markup.html.WebMarkupContainer; | |
import org.apache.wicket.markup.html.form.CheckBox; | |
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.IChoiceRenderer; | |
import org.apache.wicket.markup.html.form.ListMultipleChoice; | |
import org.apache.wicket.markup.html.form.PasswordTextField; | |
import org.apache.wicket.markup.html.form.RadioChoice; | |
import org.apache.wicket.markup.html.form.RequiredTextField; | |
import org.apache.wicket.markup.html.form.TextArea; | |
import org.apache.wicket.markup.html.form.TextField; | |
import org.apache.wicket.model.CompoundPropertyModel; | |
import org.apache.wicket.model.IModel; | |
import org.apache.wicket.util.time.Duration; | |
import org.apache.wicket.validation.validator.EmailAddressValidator; | |
import org.apache.wicket.validation.validator.StringValidator; | |
/** | |
* CRUD operations in form for {@link User} | |
* | |
* @author swagner | |
* | |
*/ | |
public class UserForm extends AdminBaseForm<User> { | |
private static final long serialVersionUID = 1L; | |
private WebMarkupContainer listContainer; | |
private User user; | |
private final List<Salutation> saluationList = Application.getBean( | |
SalutationDao.class).getUserSalutations( | |
WebSession.getLanguage()); | |
private final List<FieldLanguage> languageList = Application.getBean( | |
FieldLanguageDao.class).getLanguages(); | |
private PasswordTextField passwordField; | |
/** | |
* Get id list of {@link Salutation} | |
* | |
* @return | |
*/ | |
private List<Long> getSalutationsIds() { | |
ArrayList<Long> saluationIdList = new ArrayList<Long>( | |
saluationList.size()); | |
for (Salutation saluation : saluationList) { | |
saluationIdList.add(saluation.getSalutations_id()); | |
} | |
return saluationIdList; | |
} | |
/** | |
* Get a name for a given id of {@link Salutation} | |
* | |
* @param id | |
* @return | |
*/ | |
private String getSaluationLabelById(Long id) { | |
for (Salutation saluation : saluationList) { | |
if (id.equals(saluation.getSalutations_id())) { | |
return saluation.getLabel().getValue(); | |
} | |
} | |
throw new RuntimeException("Could not find Salutations for id " + id); | |
} | |
/** | |
* Id list of {@link FieldLanguage} | |
* | |
* @return | |
*/ | |
private List<Long> getFieldLanguageIds() { | |
ArrayList<Long> languageIdList = new ArrayList<Long>( | |
languageList.size()); | |
for (FieldLanguage language : languageList) { | |
languageIdList.add(language.getLanguage_id()); | |
} | |
return languageIdList; | |
} | |
/** | |
* Get name of {@link FieldLanguage} by its id | |
* | |
* @param id | |
* @return | |
*/ | |
private String getFieldLanguageLabelById(Long id) { | |
for (FieldLanguage language : languageList) { | |
if (id.equals(language.getLanguage_id())) { | |
return language.getName(); | |
} | |
} | |
throw new RuntimeException("Could not find FieldLanguage for id " + id); | |
} | |
public UserForm(String id, WebMarkupContainer listContainer, | |
final User user) { | |
super(id, new CompoundPropertyModel<User>(user)); | |
setOutputMarkupId(true); | |
this.listContainer = listContainer; | |
this.user = user; | |
// Add form fields | |
addFormFields(); | |
// attach an ajax validation behavior to all form component's keydown | |
// event and throttle it down to once per second | |
AjaxFormValidatingBehavior.addToAllFormComponents(this, "keydown", | |
Duration.ONE_SECOND); | |
} | |
@Override | |
protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) { | |
User u = getModelObject(); | |
// TODO: Why the password field is not set via the Model is because its | |
// FetchType is Lazy, this extra hook here might be not needed with a | |
// different mechanism to protect the password from being read | |
// sebawagner, 01.10.2012 | |
try { | |
String pass = passwordField.getConvertedInput(); | |
if (pass != null&& !pass.isEmpty()) { | |
u.updatePassword( | |
Application.getBean(ManageCryptStyle.class) | |
, Application.getBean(ConfigurationDao.class) | |
, passwordField.getConvertedInput()); | |
} | |
Application.getBean(UsersDao.class).update(u, WebSession.getUserId()); | |
} catch (Exception e) { | |
//FIXME update feedback with the error details | |
} | |
setModelObject(u); | |
hideNewRecord(); | |
target.add(this); | |
target.add(listContainer); | |
target.appendJavaScript("omUserPanelInit();"); | |
} | |
@Override | |
protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) { | |
UsersDao usersDaoImpl = Application.getBean(UsersDao.class); | |
setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl | |
.get(WebSession.getUserId()))); | |
target.add(this); | |
target.appendJavaScript("omUserPanelInit();"); | |
} | |
@Override | |
protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) { | |
User user = getModelObject(); | |
if (user.getUser_id() <= 0) { | |
user = Application.getBean(UsersDao.class).get( | |
user.getUser_id()); | |
} else { | |
user = new User(); | |
} | |
setModelObject(user); | |
target.add(this); | |
target.appendJavaScript("omUserPanelInit();"); | |
} | |
@Override | |
protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) { | |
UsersDao usersDaoImpl = Application.getBean(UsersDao.class); | |
usersDaoImpl.delete(this.getModelObject(), | |
WebSession.getUserId()); | |
this.setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl | |
.get(WebSession.getUserId()))); | |
target.add(listContainer); | |
target.add(this); | |
target.appendJavaScript("omUserPanelInit();"); | |
} | |
/** | |
* Add the fields to the form | |
*/ | |
private void addFormFields() { | |
RequiredTextField<String> login = new RequiredTextField<String>("login"); | |
login.add(new StringValidator(4, null)); | |
// login.setLabel(new Model<String>("testname")); | |
add(login); | |
passwordField = new PasswordTextField("password"); | |
add(passwordField); | |
passwordField.setRequired(false); | |
add(new DropDownChoice<Long>("salutations_id", getSalutationsIds(), | |
new IChoiceRenderer<Long>() { | |
private static final long serialVersionUID = 1L; | |
public Object getDisplayValue(Long id) { | |
return getSaluationLabelById(id); | |
} | |
public String getIdValue(Long id, int index) { | |
return "" + id; | |
} | |
})); | |
add(new TextField<String>("firstname")); | |
add(new TextField<String>("lastname")); | |
add(new DropDownChoice<OmTimeZone>("omTimeZone", Application.getBean( | |
OmTimeZoneDao.class).getOmTimeZones(), | |
new ChoiceRenderer<OmTimeZone>("frontEndLabel", "jname"))); | |
add(new DropDownChoice<Long>("language_id", getFieldLanguageIds(), | |
new IChoiceRenderer<Long>() { | |
private static final long serialVersionUID = 1L; | |
public Object getDisplayValue(Long id) { | |
return getFieldLanguageLabelById(id); | |
} | |
public String getIdValue(Long id, int index) { | |
return "" + id; | |
} | |
})); | |
add(DateLabel.forDatePattern("starttime", "dd.MM.yyyy HH:mm:ss")); | |
add(DateLabel.forDatePattern("updatetime", "dd.MM.yyyy HH:mm:ss")); | |
add(new CheckBox("forceTimeZoneCheck")); | |
RequiredTextField<String> email = new RequiredTextField<String>( | |
"adresses.email"); | |
// email.setLabel(new Model<String>("testemail")); | |
email.add(EmailAddressValidator.getInstance()); | |
add(email); | |
add(new TextField<String>("adresses.phone")); | |
add(new CheckBox("sendSMS")); | |
DateTextField age = new DateTextField("age"); | |
DatePicker datePicker = new DatePicker() { | |
private static final long serialVersionUID = 1L; | |
@Override | |
protected String getAdditionalJavaScript() { | |
return "${calendar}.cfg.setProperty(\"navigator\",true,false); ${calendar}.render();"; | |
} | |
}; | |
datePicker.setShowOnFieldClick(true); | |
datePicker.setAutoHide(true); | |
age.add(datePicker); | |
add(age); | |
add(new TextField<String>("adresses.street")); | |
add(new TextField<String>("adresses.additionalname")); | |
add(new TextField<String>("adresses.zip")); | |
add(new TextField<String>("adresses.town")); | |
add(new DropDownChoice<State>("adresses.states", Application.getBean( | |
StateDao.class).getStates(), new ChoiceRenderer<State>( | |
"name", "state_id"))); | |
final String field159 = WebSession.getString(159); | |
final String field160 = WebSession.getString(160); | |
add(new DropDownChoice<Integer>("status", Arrays.asList(0, 1), | |
new IChoiceRenderer<Integer>() { | |
private static final long serialVersionUID = 1L; | |
public Object getDisplayValue(Integer id) { | |
if (id.equals(0)) { | |
return field159; | |
} else if (id.equals(1)) { | |
return field160; | |
} | |
return null; | |
} | |
public String getIdValue(Integer id, int index) { | |
return "" + id; | |
} | |
})); | |
final String field166 = WebSession.getString(166); | |
final String field167 = WebSession.getString(167); | |
final String field168 = WebSession.getString(168); | |
final String field1311 = WebSession.getString(1311); | |
add(new DropDownChoice<Long>("level_id", Arrays.asList(1L, 2L, 3L, 4L), | |
new IChoiceRenderer<Long>() { | |
private static final long serialVersionUID = 1L; | |
public Object getDisplayValue(Long id) { | |
if (id.equals(1L)) { | |
return field166; | |
} else if (id.equals(2L)) { | |
return field167; | |
} else if (id.equals(3L)) { | |
return field168; | |
} else if (id.equals(4L)) { | |
return field1311; | |
} | |
return null; | |
} | |
public String getIdValue(Long id, int index) { | |
return "" + id; | |
} | |
})); | |
add(new TextArea<String>("adresses.comment")); | |
List<Organisation> orgList = Application.getBean( | |
OrganisationManager.class).getOrganisations(3L); | |
List<Organisation_Users> orgUsers = new ArrayList<Organisation_Users>( | |
orgList.size()); | |
for (Organisation org : orgList) { | |
orgUsers.add(new Organisation_Users(org)); | |
} | |
ListMultipleChoice<Organisation_Users> orgChoiceList = new ListMultipleChoice<Organisation_Users>( | |
"organisation_users", orgUsers, | |
new ChoiceRenderer<Organisation_Users>("organisation.name", | |
"organisation.organisation_id")); | |
add(orgChoiceList); | |
final String field1160 = WebSession.getString(1160); // 1160 everybody | |
final String field1168 = WebSession.getString(1168); // 1168 contact | |
final String field1169 = WebSession.getString(1169); // 1169 nobody | |
add(new RadioChoice<Long>("community_settings", new IModel<Long>() { | |
private static final long serialVersionUID = 1L; | |
public Long getObject() { | |
if (user.getShowContactData() != null | |
&& user.getShowContactData()) { | |
return 1L; | |
} else if (user.getShowContactDataToContacts() != null | |
&& user.getShowContactDataToContacts()) { | |
return 2L; | |
} | |
return 3L; | |
} | |
public void setObject(Long choice) { | |
if (choice.equals(1L)) { | |
user.setShowContactData(true); | |
user.setShowContactDataToContacts(false); | |
} else if (choice.equals(2L)) { | |
user.setShowContactData(false); | |
user.setShowContactDataToContacts(true); | |
} else { | |
user.setShowContactData(false); | |
user.setShowContactDataToContacts(false); | |
} | |
} | |
public void detach() { | |
} | |
}, Arrays.asList(1L, 2L, 3L), new IChoiceRenderer<Long>() { | |
private static final long serialVersionUID = 1L; | |
public Object getDisplayValue(Long id) { | |
if (id.equals(1L)) { | |
return field1160; | |
} else if (id.equals(2L)) { | |
return field1168; | |
} else { | |
return field1169; | |
} | |
} | |
public String getIdValue(Long id, int index) { | |
return "" + id; | |
} | |
})); | |
add(new TextArea<String>("userOffers")); | |
add(new TextArea<String>("userSearchs")); | |
} | |
} |