package com.idega.user.presentation;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Iterator;
import java.util.StringTokenizer;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.block.media.presentation.ImageInserter;
import com.idega.data.IDOLookup;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.help.presentation.Help;
import com.idega.presentation.IWContext;
import com.idega.presentation.Image;
import com.idega.presentation.Table;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.CheckBox;
import com.idega.presentation.ui.DateInput;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.TextArea;
import com.idega.presentation.ui.TextInput;
import com.idega.user.data.Gender;
import com.idega.user.data.GenderHome;
import com.idega.user.data.Group;
import com.idega.user.data.User;
import com.idega.user.util.ICUserConstants;
import com.idega.util.IWTimestamp;
/**
* Title: User
* Copyright: Copyright (c) 2001
* Company: idega.is
* @author 2000 - idega team - <a href="mailto:gummi@idega.is">Gu�mundur �g�st S�mundsson</a>
* @version 1.0
*/
public class GeneralUserInfoTab extends UserTab {
private static final String IW_BUNDLE_IDENTIFIER = "com.idega.user";
private static final String TAB_NAME = "usr_info_tab_name";
private static final String DEFAULT_TAB_NAME = "General";
private static final String HELP_TEXT_KEY = "tabbed_property_panel";
private TextInput idField;
private TextInput fullNameField;
private TextInput displayNameField;
private TextArea descriptionField;
private DateInput dateOfBirthField;
private DropdownMenu genderField;
private TextInput personalIDField;
private DateInput createdField;
private ImageInserter imageField;
private CheckBox removeImageField;
private String idFieldName;
private String fullNameFieldName;
private String displayNameFieldName;
private String descriptionFieldName;
private String dateOfBirthFieldName;
private String genderFieldName;
private String personalIDFieldName;
private String createdFieldName;
private String imageFieldName;
private String removeImageFieldName;
private Text idText;
private Text fullNameText;
private Text displayNameText;
private Text descriptionText;
private Text dateOfBirthText;
private Text genderText;
private Text personalIDText;
private Text createdText;
private Text imageText;
private Text removeImageText;
private User user = null;
private int systemImageId = -1;
public GeneralUserInfoTab() {
super();
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
setName(iwrb.getLocalizedString(TAB_NAME, DEFAULT_TAB_NAME));
}
public GeneralUserInfoTab(int userId) {
this();
setUserID(userId);
}
public void initializeFieldNames() {
this.idFieldName = "usr_info_UMid";
this.fullNameFieldName = "usr_info_UMflname";
this.displayNameFieldName = "usr_info_UMdname";
this.descriptionFieldName = "usr_info_UMdesc";
this.dateOfBirthFieldName = "usr_info_UMdateofbirth";
this.genderFieldName = "usr_info_UMgender";
this.personalIDFieldName = "usr_info_UMpersonalID";
this.createdFieldName = "usr_info_UMcreated";
this.imageFieldName = "usr_imag_userSystemImageId";
this.removeImageFieldName = "image_removeImageFieldName";
}
public void initializeFieldValues() {
this.fieldValues.put(this.idFieldName, "");
this.fieldValues.put(this.fullNameFieldName, "");
this.fieldValues.put(this.displayNameFieldName, "");
this.fieldValues.put(this.descriptionFieldName, "");
this.fieldValues.put(this.dateOfBirthFieldName, "");
this.fieldValues.put(this.genderFieldName, "");
this.fieldValues.put(this.personalIDFieldName, "");
this.fieldValues.put(this.createdFieldName, "");
this.systemImageId = -1;
this.fieldValues.put(this.removeImageFieldName, new Boolean(false));
updateFieldsDisplayStatus();
}
public void updateFieldsDisplayStatus() {
this.idField.setContent((String) this.fieldValues.get(this.idFieldName));
this.fullNameField.setContent((String) this.fieldValues.get(this.fullNameFieldName));
this.displayNameField.setContent((String) this.fieldValues.get(this.displayNameFieldName));
this.descriptionField.setContent((String) this.fieldValues.get(this.descriptionFieldName));
StringTokenizer date = new StringTokenizer((String) this.fieldValues.get(this.dateOfBirthFieldName), " -");
if (date.hasMoreTokens()) {
this.dateOfBirthField.setYear(date.nextToken());
}
if (date.hasMoreTokens()) {
this.dateOfBirthField.setMonth(date.nextToken());
}
if (date.hasMoreTokens()) {
this.dateOfBirthField.setDay(date.nextToken());
}
this.genderField.setSelectedElement((String) this.fieldValues.get(this.genderFieldName));
this.personalIDField.setContent((String) this.fieldValues.get(this.personalIDFieldName));
IWContext iwc = IWContext.getInstance();
boolean unlockPersonalIDField = iwc.getAccessController().hasRole(ICUserConstants.ROLE_KEY_EDIT_PERSONAL_ID,iwc);
if (!unlockPersonalIDField){
this.personalIDField.setDisabled(true);
}
StringTokenizer created = new StringTokenizer((String) this.fieldValues.get(this.createdFieldName), " -");
if (created.hasMoreTokens()) {
this.createdField.setYear(created.nextToken());
}
if (created.hasMoreTokens()) {
this.createdField.setMonth(created.nextToken());
}
if (created.hasMoreTokens()) {
this.createdField.setDay(created.nextToken());
}
this.imageField.setImageId(this.systemImageId);
this.removeImageField.setChecked(((Boolean)this.fieldValues.get(this.removeImageFieldName)).booleanValue());
}
public void initializeFields() {
this.idField = new TextInput(this.idFieldName);
this.idField.setLength(20);//changed from 12 - birna
this.fullNameField = new TextInput(this.fullNameFieldName);
this.fullNameField.setLength(20);
this.displayNameField = new TextInput(this.displayNameFieldName);
this.displayNameField.setLength(20);//changed from 12 - birna
this.displayNameField.setMaxlength(20);
this.descriptionField = new TextArea(this.descriptionFieldName);
this.descriptionField.setHeight(7);//changed from (5) - birna
this.descriptionField.setWidth(42); //changed from (42)
this.descriptionField.setWrap(true);
this.dateOfBirthField = new DateInput(this.dateOfBirthFieldName);
IWTimestamp time = IWTimestamp.RightNow();
this.dateOfBirthField.setYearRange(time.getYear(), time.getYear() - 100);
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
this.genderField = new DropdownMenu(this.genderFieldName);
this.genderField.addMenuElement("", iwrb.getLocalizedString(this.genderFieldName,"Gender"));
Collection genders = null;
try {
GenderHome g = (GenderHome) IDOLookup.getHome(Gender.class);
genders = g.findAllGenders();
}
catch (Exception ex) {
// do nothing
}
Iterator iter = genders.iterator();
while (iter.hasNext()) {
Gender item = (Gender) iter.next();
try {
this.genderField.addMenuElement(((Integer) item.getPrimaryKey()).intValue(), iwrb.getLocalizedString(item.getName(),item.getName()));
}
catch (Exception ex) {
}
}
this.personalIDField = new TextInput(this.personalIDFieldName);
this.personalIDField.setLength(20); //changed from 12 - birna
this.createdField = new DateInput(this.createdFieldName);
this.createdField.setYearRange(time.getYear(), time.getYear() - 50);
this.imageField = new ImageInserter(this.imageFieldName + getUserId());
this.imageField.setWidth(String.valueOf(107));
this.imageField.setMaxImageWidth(107);
this.imageField.setHasUseBox(false);
this.removeImageField = new CheckBox(this.removeImageFieldName);
this.removeImageField.setWidth("10");
this.removeImageField.setHeight("10");
}
public void initializeTexts() {
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
this.idText = new Text(iwrb.getLocalizedString(this.idFieldName,"ID") + ":");
this.idText.setBold();
this.fullNameText = new Text(iwrb.getLocalizedString(this.fullNameFieldName,"Name") + ":");
this.fullNameText.setBold();
this.displayNameText = new Text(iwrb.getLocalizedString(this.displayNameFieldName,"Display name") + ":");
this.displayNameText.setBold();
this.descriptionText = new Text(iwrb.getLocalizedString(this.descriptionFieldName,"Description") + ":");
this.descriptionText.setBold();
this.dateOfBirthText = new Text(iwrb.getLocalizedString(this.dateOfBirthFieldName,"Date of birth") + ":");
this.dateOfBirthText.setBold();
this.genderText = new Text(iwrb.getLocalizedString(this.genderFieldName,"Gender") + ":");
this.genderText.setBold();
this.personalIDText = new Text(iwrb.getLocalizedString(this.personalIDFieldName,"Personal ID") + ":");
this.personalIDText.setBold();
this.createdText = new Text(iwrb.getLocalizedString(this.createdFieldName,"Created") + ":");
this.createdText.setBold();
this.imageText = new Text(iwrb.getLocalizedString(this.imageFieldName, "Image") + ":");
this.imageText.setBold();
this.removeImageText = new Text(iwrb.getLocalizedString(this.removeImageFieldName, "do not show an image"));
}
public Help getHelpButton() {
IWContext iwc = IWContext.getInstance();
IWBundle iwb = getBundle(iwc);
Help help = new Help();
Image helpImage = iwb.getImage("help.gif");
help.setHelpTextBundle( UserConstants.HELP_BUNDLE_IDENTFIER);
help.setHelpTextKey(HELP_TEXT_KEY);
help.setImage(helpImage);
return help;
}
public void lineUpFields() {
resize(1, 1);
Table table = new Table(); //changed from (2,5) - birna
table.setWidth("100%");
table.setCellpadding(5);
table.setCellspacing(0);
table.setBorder(0);
table.add(this.fullNameText,1,1);//(idText, 1, 1);
table.add(Text.getBreak(), 1, 1);
table.add(this.fullNameField,1,1);//(idField, 2, 1);
table.add(this.personalIDText,2,1);//(personalIDText, 1, 2);
table.add(Text.getBreak(), 2, 1);
table.add(this.personalIDField,2,1);//(personalIDField, 2, 2);
table.add(this.idText,1,2);//(fullNameText, 1, 3);
table.add(Text.getBreak(), 1, 2);
table.add(this.idField,1,2);//(fullNameField, 2, 3);
table.add(this.displayNameText,2,2);//(displayNameText, 1, 4);
table.add(Text.getBreak(), 2, 2);
table.add(this.displayNameField, 2, 2);
table.add(this.genderText, 1,3);
table.add(Text.getBreak(), 1, 3);
table.add(this.genderField,1,3);//(genderField, 2, 5);
table.mergeCells(1, 4, 2, 4);
table.add(this.dateOfBirthText, 1, 4);
table.add(Text.getBreak(), 1, 4);
table.add(this.dateOfBirthField, 1, 4);//changed from ...,2,1) - birna
table.mergeCells(1, 5, 2, 5);
table.add(this.createdText, 1, 5);
table.add(Text.getBreak(), 1, 5);
table.add(this.createdField, 1, 5);//changed from ...,2,2) - birna
IWBundle iwb = getBundle(IWContext.getInstance());
String displayDescription = iwb.getProperty("display_description_column_in_grouppropertywindow","true");
if (IWContext.getInstance().isSuperAdmin() || displayDescription.equalsIgnoreCase("true")) {
table.mergeCells(1, 6, 2, 6);
table.add(this.descriptionText, 1, 6);
table.add(Text.getBreak(), 1, 6);
table.add(this.descriptionField, 1, 6);//changed from ...,1,2)
}
table.mergeCells(3,1,3,6);
table.setVerticalAlignment(3, 1, Table.VERTICAL_ALIGN_TOP);
table.add(this.imageText,3,1);
table.add(Text.getBreak(), 3, 1);
table.add(this.imageField,3,1);
table.add(this.removeImageField,3,1);
//table.add(Text.getNonBrakingSpace(),3,1);
table.add(this.removeImageText,3,1);
add(table, 1, 1);
}
public void main(IWContext iwc) {
getPanel().addHelpButton(getHelpButton());
}
public boolean collect(IWContext iwc) {
if (iwc != null) {
String name = iwc.getParameter(this.fullNameFieldName);
String ID = iwc.getParameter(this.idFieldName);
String dname = iwc.getParameter(this.displayNameFieldName);
String desc = iwc.getParameter(this.descriptionFieldName);
String dateofbirth = iwc.getParameter(this.dateOfBirthFieldName);
String gender = iwc.getParameter(this.genderFieldName);
String personalID = iwc.getParameter(this.personalIDFieldName);
String created = iwc.getParameter(this.createdFieldName);
String imageID = iwc.getParameter(this.imageFieldName + this.getUserId());
if(ID!=null){
this.fieldValues.put(this.idFieldName, ID);
}
if (name != null) {
this.fieldValues.put(this.fullNameFieldName, name);
}
if (dname != null) {
this.fieldValues.put(this.displayNameFieldName, dname);
}
if (desc != null) {
this.fieldValues.put(this.descriptionFieldName, desc);
}
if (dateofbirth != null) {
this.fieldValues.put(this.dateOfBirthFieldName, dateofbirth);
}
if (gender != null) {
this.fieldValues.put(this.genderFieldName, gender);
}
if (personalID != null) {
this.fieldValues.put(this.personalIDFieldName, personalID);
}
if (created != null) {
this.fieldValues.put(this.createdFieldName, created);
}
if (imageID != null) {
this.fieldValues.put(this.imageFieldName, imageID);
}
this.fieldValues.put(this.removeImageFieldName, new Boolean(iwc.isParameterSet(this.removeImageFieldName)));
updateFieldsDisplayStatus();
return true;
}
return false;
}
public boolean store(IWContext iwc) {
try {
if (getUserId() > 0) {
if(getGroupID()>0){//temp remove with other IWMember stuff
Group club = getClubForGroup(getGroup());
if(club!=null){
boolean success = setClubMemberNumberForUser((String)this.fieldValues.get(this.idFieldName),getUser(),club);
if(!success){//number already taken
this.idField.setStyleAttribute("color:#FF0000");
}
else {
this.idField.setStyleAttribute("color:#000000");
}
}
}
IWTimestamp dateOfBirthTS = null;
String st = (String) this.fieldValues.get(this.dateOfBirthFieldName);
Integer gen = (this.fieldValues.get(this.genderFieldName).equals("")) ? null : new Integer((String) this.fieldValues.get(this.genderFieldName));
if (st != null && !st.equals("")) {
try {
dateOfBirthTS = new IWTimestamp(st);
}
catch (IllegalArgumentException iae) {
dateOfBirthTS = null;
}
}
IWTimestamp createdTS = null;
String createdString = (String) this.fieldValues.get(this.createdFieldName);
if (createdString != null & !createdString.equals("")) {
try {
createdTS = new IWTimestamp(createdString);
}
catch (IllegalArgumentException iae) {
createdTS = null;
}
}
super.getUserBusiness(iwc).updateUser(
getUserId(),
null,
null,
null,
(String) this.fieldValues.get(this.displayNameFieldName),
(String) this.fieldValues.get(this.descriptionFieldName),
gen,
(String) this.fieldValues.get(this.personalIDFieldName),
dateOfBirthTS,
null,
(String) this.fieldValues.get(this.fullNameFieldName)
);
if (createdTS != null) {
getUser().setCreated(createdTS.getTimestamp());
}
}
if (getUserId() > -1) {
String image = (String)this.fieldValues.get(this.imageFieldName);
if ((image != null) && (!image.equals("-1")) && (!image.equals(""))) {
if (this.user == null) {
this.user = getUser();
}
int tempId;
if (((Boolean) this.fieldValues.get(this.removeImageFieldName)).booleanValue()) {
this.user.setSystemImageID(null);
// set variables to default values
this.systemImageId = -1;
this.fieldValues.put(this.imageFieldName, "-1");
this.user.store();
updateFieldsDisplayStatus();
}
else if ((tempId = Integer.parseInt(image)) != this.systemImageId) {
this.systemImageId = tempId;
this.user.setSystemImageID(this.systemImageId);
this.user.store();
updateFieldsDisplayStatus();
}
iwc.removeSessionAttribute(this.imageFieldName + getUserId());
}
}
}
catch (Exception e) {
e.printStackTrace(System.err);
throw new RuntimeException("update user exception");
}
return true;
}//end store
public void initFieldContents() {
try {
User user = getUser();
String memberNumber =null;
try {
memberNumber = getMemberNumber(getUser());
this.imageField.setImSessionImageName(this.imageFieldName + getUserId());
this.systemImageId = getSelectedImageId(user);
if (this.systemImageId != -1) {
this.fieldValues.put(this.imageFieldName, Integer.toString(this.systemImageId));
}
}
catch (RemoteException e) {
e.printStackTrace();
}
this.fieldValues.put(this.idFieldName, (memberNumber != null) ? memberNumber : "");
this.fieldValues.put(this.fullNameFieldName, (user.getName() != null) ? user.getName() : "");
this.fieldValues.put(this.displayNameFieldName, (user.getDisplayName() != null) ? user.getDisplayName() : "");
this.fieldValues.put(this.descriptionFieldName, (user.getDescription() != null) ? user.getDescription() : "");
this.fieldValues.put(this.dateOfBirthFieldName, (user.getDateOfBirth() != null) ? new IWTimestamp(user.getDateOfBirth()).toSQLDateString() : "");
this.fieldValues.put(this.genderFieldName, (user.getGenderID() != -1) ? Integer.toString(user.getGenderID()) : "");
this.fieldValues.put(this.personalIDFieldName, (user.getPersonalID() != null) ? user.getPersonalID() : "");
this.fieldValues.put(this.createdFieldName, (user.getCreated() != null) ? new IWTimestamp(user.getCreated()).toSQLDateString() : "");
this.fieldValues.put(this.removeImageFieldName, new Boolean(false));
updateFieldsDisplayStatus();
}
catch (Exception e) {
System.err.println("GeneralUserInfoTab error initFieldContents, userId : " + getUserId());
}
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
//TODO Eiki inherit from this class and use plugin stuff
//START REMOVE
private String getMemberNumber(User user) throws RemoteException {
String memberNumber = null;
Group selectedGroup = getGroup();
if(selectedGroup!=null){
Group club = getClubForGroup(selectedGroup);
if(club!=null){
memberNumber = getClubMemberNumberForUser(user,club);
}
//else System.out.print("CLUB GROUP IS NULL");
}
//else System.out.print("SELECTED GROUP IS NULL");
return memberNumber;
}
/*
* Returns the club that is a parent for this group.
*/
public Group getClubForGroup(Group group) throws EJBException, RemoteException{
Collection parents = getGroupBusiness(this.getIWApplicationContext()).getParentGroupsRecursive(group);
if(parents!=null && !parents.isEmpty()){
Iterator iter = parents.iterator();
while (iter.hasNext()) {
Group parentGroup = (Group) iter.next();
//if(IWMemberConstants.GROUP_TYPE_CLUB.equals(parentGroup.getGroupType())){
if("iwme_club".equals(parentGroup.getGroupType())){
return parentGroup;//there should only be one
}
}
}
return null;
}
public String getClubMemberNumberForUser(User user, Group club){
String id = user.getMetaData("CLUB_MEMB_NR_"+club.getPrimaryKey().toString());
if(id!=null){
return id;
}else{
return null;
}
}
/**
* @return false if number is already taken, else true
*/
public synchronized boolean setClubMemberNumberForUser(String number, User user, Group club){
boolean setNumber = false;
String clubId = club.getPrimaryKey().toString();
if(number.equals("")){
user.removeMetaData("CLUB_MEMB_NR_"+clubId);
user.store();
return true;
}
try {
Collection users = getUserBusiness(getIWApplicationContext()).getUserHome().findUsersByMetaData("CLUB_MEMB_NR_"+clubId,number);
if( users!=null && !users.isEmpty()){
Iterator iter = users.iterator();
while (iter.hasNext()) {
User thingy = (User) iter.next();
if(thingy.getPrimaryKey().equals(user.getPrimaryKey())){
setNumber = true;//updating
}
break;//only one user should have this number
}
}
else {
setNumber = true;
}
}
catch (EJBException e) {
e.printStackTrace();
return false;
}
catch (FinderException e) {
setNumber = true;
}
catch (RemoteException e) {
e.printStackTrace();
}
if(setNumber){
user.setMetaData("CLUB_MEMB_NR_"+clubId,number);
user.store();
return true;
}
return false;
}
//END REMOVE
private void setSelectedImageId() {
try {
String image = (String)this.fieldValues.get(this.imageFieldName);
if ((image != null)
&& (!image.equals("-1"))
&& (!image.equals(""))
&& (!image.equals("0"))) {
this.systemImageId = Integer.parseInt(image);
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
private int getSelectedImageId(User user) {
try {
int tempImageId = user.getSystemImageID();
if ((this.systemImageId == -1) && (tempImageId != -1)) {
this.systemImageId = tempImageId;
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
return this.systemImageId;
}
} // Class GeneralUserInfoTab