/*
* $Id: UserStatusTab.java,v 1.2.2.1 2007/01/12 19:31:51 idegaweb Exp $
*
* Copyright (C) 2000-2003 Idega Software. All Rights Reserved.
*
* This software is the proprietary information of Idega Software.
* Use is subject to license terms.
*/
package com.idega.user.presentation;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import javax.ejb.FinderException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWApplicationContext;
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.SelectDropdown;
import com.idega.presentation.ui.SelectOption;
import com.idega.user.business.UserStatusBusiness;
import com.idega.user.data.Group;
import com.idega.user.data.Status;
import com.idega.user.data.StatusHome;
/**
* A simple tab to change a users status within a group.
*/
public class UserStatusTab extends UserTab {
private static final String IW_BUNDLE_IDENTIFIER = "com.idega.user";
private static final String TAB_NAME = "usr_status_tab_name";
private static final String DEFAULT_TAB_NAME = "Status";
private static final String HELP_TEXT_KEY = "user_status_tab";
private Text _groupField;
private SelectDropdown _statusField;
private Text _groupText;
private Text _statusText;
private String _groupFieldName;
private String _statusFieldName;
public UserStatusTab() {
super();
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
setName(iwrb.getLocalizedString(TAB_NAME, DEFAULT_TAB_NAME));
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#initializeFieldNames()
*/
public void initializeFieldNames() {
this._groupFieldName = "usr_grp_status";
this._statusFieldName = "usr_stat_status";
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#initializeFieldValues()
*/
public void initializeFieldValues() {
this.fieldValues = new Hashtable();
this.fieldValues.put(this._statusFieldName, "");
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#updateFieldsDisplayStatus()
*/
public void updateFieldsDisplayStatus() {
if (getGroupID() > 0) {
Group selectedGroup = getGroup();
if (selectedGroup != null) {
this._groupField.setText(selectedGroup.getName());
}
}
else {
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
this._groupField.setText(iwrb.getLocalizedString("user_status_bar.no_group_selected","No group selected"));
}
this._statusField.setSelectedOption((String) this.fieldValues.get(this._statusFieldName));
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#initializeFields()
*/
public void initializeFields() {
this._groupField = new Text(); //see initFieldContents
this._statusField = new SelectDropdown(this._statusFieldName);
IWContext iwc = IWContext.getInstance();
List status = null;
try {
status = (List) ((StatusHome)IDOLookup.getHome(Status.class)).findAll();
}
catch (IDOLookupException e) {
e.printStackTrace();
}
catch (FinderException e) {
e.printStackTrace();
}
if (status != null) {
if (status.size() > 0) {
final IWResourceBundle iwrb = getResourceBundle(iwc);
this._statusField.addOption(new SelectOption(" ",-1));
final Collator collator = Collator.getInstance(iwc.getLocale());
Collections.sort(status,new Comparator() {
public int compare(Object arg0, Object arg1) {
return collator.compare(iwrb.getLocalizedString("usr_stat_" + ((Status) arg0).getStatusKey(), ((Status) arg0).getStatusKey()), iwrb.getLocalizedString("usr_stat_" + ((Status) arg1).getStatusKey(), ((Status) arg1).getStatusKey()));
}
});
Iterator it = status.iterator();
while (it.hasNext()) {
Status s = (Status)it.next();
String n = s.getStatusKey();
if (n != null) {
String l = iwrb.getLocalizedString("usr_stat_" + n, n);
this._statusField.addOption(new SelectOption(l, ((Integer) s.getPrimaryKey()).intValue()));
}
}
}
}
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#initializeTexts()
*/
public void initializeTexts() {
IWContext iwc = IWContext.getInstance();
IWResourceBundle iwrb = getResourceBundle(iwc);
this._groupText = new Text(iwrb.getLocalizedString(this._groupFieldName, "Group"));
this._groupText.setBold();
this._statusText = new Text(iwrb.getLocalizedString(this._statusFieldName, "Status"));
this._statusText.setBold();
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#lineUpFields()
*/
public void lineUpFields() {
empty();
Table t = new Table(2, 4);
t.setCellpadding(5);
t.setCellspacing(0);
t.add(this._groupText, 1, 1);
t.add(this._groupField, 2, 1);
t.add(this._statusText, 1, 2);
t.add(this._statusField, 2, 2);
add(t);
}
public void main(IWContext iwc) {
if (getPanel() != null) {
getPanel().addHelpButton(getHelpButton());
}
}
/* (non-Javadoc)
* @see com.idega.util.datastructures.Collectable#collect(com.idega.presentation.IWContext)
*/
public boolean collect(IWContext iwc) {
if (iwc != null) {
String status = iwc.getParameter(this._statusFieldName);
if (status != null) {
this.fieldValues.put(this._statusFieldName, status);
}
else {
this.fieldValues.put(this._statusFieldName, " ");
}
updateFieldsDisplayStatus();
}
return true;
}
/* (non-Javadoc)
* @see com.idega.util.datastructures.Collectable#store(com.idega.presentation.IWContext)
*/
public boolean store(IWContext iwc) {
try {
String status = (String)this.fieldValues.get(this._statusFieldName);
if (status != null) {
int user_id = this.getUserId();
int group_id = this.getGroupID();
int status_id = Integer.parseInt(status);
getUserStatusBusiness(iwc).setUserGroupStatus(user_id,group_id,status_id,iwc.getCurrentUserId());
}
}
catch(Exception e) {
e.printStackTrace();
}
return true;
}
/* (non-Javadoc)
* @see com.idega.user.presentation.UserTab#initFieldContents()
*/
public void initFieldContents() {
IWContext iwc = IWContext.getInstance();
this.fieldValues = new Hashtable();
int status_id = -1;
try {
int user_id = getUserId();
int group_id = getGroupID();
status_id = getUserStatusBusiness(iwc).getUserGroupStatus(user_id,group_id);
}
catch(Exception e) {
status_id = -1;
}
if (status_id > 0) {
this.fieldValues.put(this._statusFieldName, Integer.toString(status_id));
}
else {
this.fieldValues.put(this._statusFieldName, "");
}
updateFieldsDisplayStatus();
}
public Help getHelpButton() {
IWContext iwc = IWContext.getInstance();
IWBundle iwb = getBundle(iwc);
Help help = new Help();
Image helpImage = iwb.getImage("help.gif");
help.setHelpTextBundle(TAB_NAME);
help.setHelpTextKey(HELP_TEXT_KEY);
help.setImage(helpImage);
return help;
}
public UserStatusBusiness getUserStatusBusiness(IWApplicationContext iwc){
UserStatusBusiness business = null;
if(business == null){
try{
business = (UserStatusBusiness)com.idega.business.IBOLookup.getServiceInstance(iwc,UserStatusBusiness.class);
}
catch(java.rmi.RemoteException rme){
throw new RuntimeException(rme.getMessage());
}
}
return business;
}
}