package is.idega.idegaweb.travel.presentation; import is.idega.idegaweb.travel.service.presentation.InitialDataObject; import java.rmi.RemoteException; import java.sql.SQLException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Vector; import javax.ejb.FinderException; import javax.ejb.RemoveException; import com.idega.block.trade.stockroom.data.Reseller; import com.idega.block.trade.stockroom.data.Supplier; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.core.accesscontrol.business.LoginDBHandler; import com.idega.core.accesscontrol.data.LoginTable; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import com.idega.presentation.ui.CheckBox; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.PasswordInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.user.business.UserBusiness; import com.idega.user.data.Group; import com.idega.user.data.User; /** * Title: idegaWeb TravelBooking * Description: * Copyright: Copyright (c) 2001 * Company: idega * @author <a href="mailto:gimmi@idega.is">Grimur Jonsson</a> * @version 1.0 */ public class Users extends TravelManager implements InitialDataObject { private Reseller _reseller; private Supplier _supplier; private IWResourceBundle _iwrb; private IWBundle _bundle; private String sAction = "usersAction"; private String parameterNewUser = "usersNewUser"; private String parameterSaveUser = "usersSaveUser"; private String parameterDeleteUser = "usersDeleteUsers"; private String parameterUpdateUser = "usersUpdateUsers"; private String paramaterUserID = "usersUserID"; private String parameterName = "usersName"; private String parameterLogin = "usersLogin"; private String parameterPasswordOne = "usersPasswordOne"; private String parameterPasswordTwo = "usersPasswordTwo"; private String parameterAdministrator = "usersAdministrator"; private List parameterNames = new Vector(); private List parameterValues= new Vector(); public Users(IWContext iwc) throws Exception{ main(iwc); } public void main(IWContext iwc) throws Exception{ super.main(iwc); init(); } private void init() throws RemoteException{ _reseller = super.getReseller(); _supplier = super.getSupplier(); _iwrb = super.getResourceBundle(); _bundle = super.getBundle(); } public Form handleInsert(IWContext iwc) throws SQLException, RemoteException{ String action = iwc.getParameter(this.sAction); if (action == null) { return getUserList(iwc); }else if (action.equals(this.parameterNewUser)) { return getUserCreation(iwc); }else if (action.equals(this.parameterSaveUser)) { return saveUser(iwc); }else if (action.equals(this.parameterUpdateUser)) { return updateUser(iwc); }else if (action.equals(this.parameterDeleteUser)) { return deleteUser(iwc); }else { return null; } } private Text getTextWhite(String content) { Text text = (Text) super.theText.clone(); text.setText(content); return text; } /* private Text getText(String content) { Text text = getTextWhite(content); text.setFontColor(super.BLACK); return text; } */ private Form getUserList(IWContext iwc) throws RemoteException { Form form = new Form(); Table table = new Table(); table.setColor(super.WHITE); table.setCellpadding(1); table.setCellspacing(1); table.setWidth("50%"); List users = null; List lStaff = null; if (_reseller != null) { try { users = getResellerManager(iwc).getUsersInPermissionGroup(_reseller); } catch (FinderException f) { } } if (_supplier != null) { try { users = getSupplierManagerBusiness(iwc).getUsersInPermissionGroup(_supplier); lStaff = getSupplierManagerBusiness(iwc).getUsersNotInPermissionGroup(_supplier); } catch (FinderException f) { } } if (users == null) users = com.idega.util.ListUtil.getEmptyList(); User user; Link update; Link delete; int row = 1; Text tUsers = getTextWhite(_iwrb.getLocalizedString("travel.users","Users")); tUsers.setBold(true); table.add(tUsers,1,row); table.add(getTextWhite(""), 2, row); table.setRowColor(row, super.backgroundColor ); ++row; Text admins = getText(_iwrb.getLocalizedString("travel.administrators","Administrators")); admins.setBold(true); table.add(admins, 1, row); table.setRowColor(row, super.GRAY); for (int i = 0; i < users.size(); i++) { ++row; table.setRowColor(row, super.GRAY); user = (User) users.get(i); table.add(getText(user.getName()), 1, row); if (isInPermissionGroup) { update = new Link(_iwrb.getImage("buttons/update.gif")); update.addParameter(this.sAction, this.parameterUpdateUser); update.addParameter(this.paramaterUserID, user.getID()); delete = new Link(_iwrb.getImage("buttons/delete.gif")); delete.addParameter(this.sAction, this.parameterDeleteUser); delete.addParameter(this.paramaterUserID, user.getID()); for (int j = 0; j < this.parameterNames.size(); j++) { update.addParameter((String) parameterNames.get(j), (String) parameterValues.get(j)); delete.addParameter((String) parameterNames.get(j), (String) parameterValues.get(j)); } table.add(update, 2, row); table.add(getText(Text.NON_BREAKING_SPACE), 2, row); table.add(delete, 2, row); } table.setAlignment(1, row, "left"); table.setAlignment(2, row, "right"); } // if (_reseller != null) users = ResellerManager.getUsersNotInPermissionGroup(_reseller); // if (_supplier != null) users = getSupplierManagerBusiness(iwc).getUsersNotInPermissionGroup(_supplier); // if (users == null) users = com.idega.util.ListUtil.getEmptyList(); ++row; Text staff = getText(_iwrb.getLocalizedString("travel.staff","Staff")); staff.setBold(true); table.add(staff, 1, row); table.setRowColor(row, super.GRAY); for (int i = 0; i < lStaff.size(); i++) { ++row; table.setRowColor(row, super.GRAY); user = (User) lStaff.get(i); table.add(getText(user.getName()), 1, row); if (isInPermissionGroup) { update = new Link(_iwrb.getImage("buttons/update.gif")); update.addParameter(this.sAction, this.parameterUpdateUser); update.addParameter(this.paramaterUserID, user.getID()); delete = new Link(_iwrb.getImage("buttons/delete.gif")); delete.addParameter(this.sAction, this.parameterDeleteUser); delete.addParameter(this.paramaterUserID, user.getID()); for (int j = 0; j < this.parameterNames.size(); j++) { update.addParameter((String) parameterNames.get(j), (String) parameterValues.get(j)); delete.addParameter((String) parameterNames.get(j), (String) parameterValues.get(j)); } table.add(update, 2, row); table.add(getText(Text.NON_BREAKING_SPACE), 2, row); table.add(delete, 2, row); } table.setAlignment(1, row, "left"); table.setAlignment(2, row, "right"); } if (isInPermissionGroup) { ++row; table.setRowColor(row, super.GRAY); table.add(new SubmitButton(_iwrb.getImage("buttons/new.gif"),this.sAction, this.parameterNewUser),1,row); } form.add(table); return form; } private Form getUserCreation(IWContext iwc) throws SQLException, RemoteException{ return getUserCreation(iwc, -1); } private Form getUserCreation(IWContext iwc, int userId) throws SQLException, RemoteException{ Form form = new Form(); User user = null; if (userId != -1) { try { user = ((com.idega.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKey(new Integer(userId)); } catch (FinderException e) { throw new SQLException(e.getMessage()); } } Table table = new Table(); form.add(table); table.setColor(super.WHITE); table.setCellpadding(1); table.setCellspacing(1); TextInput iName = new TextInput(this.parameterName); TextInput iLogin = new TextInput(this.parameterLogin); PasswordInput iPassOne = new PasswordInput(this.parameterPasswordOne); PasswordInput iPassTwo = new PasswordInput(this.parameterPasswordTwo); CheckBox iAdmin = new CheckBox(this.parameterAdministrator); iAdmin.setChecked(false); if (user != null) { iName.setContent(user.getName()); LoginTable lt = LoginDBHandler.getUserLogin(userId); if (lt != null) { iLogin.setContent(lt.getUserLogin()); }else { iLogin.setContent("error"); } iAdmin.setChecked(super.isInPermissionGroup(iwc, user)); form.addParameter(this.paramaterUserID, userId); } Text tName = getText(_iwrb.getLocalizedString("travel.name","Name")); Text tLogin = getText(_iwrb.getLocalizedString("travel.user_name","User name")); Text tPassword = getText(_iwrb.getLocalizedString("travel.password","Password")); Text tPassword2= getText(_iwrb.getLocalizedString("travel.retype","Retype")); Text tAdmin = getText(_iwrb.getLocalizedString("travel.administrator","Administrator")); SubmitButton btnSave = new SubmitButton(_iwrb.getImage("buttons/save.gif"), this.sAction, this.parameterSaveUser); // ResetButton clrButton = new ResetButton(_iwrb.getImage("buttons/delete.gif")); int row = 1; table.add(this.getTextWhite(_iwrb.getLocalizedString("travel.new_user","New user")),1,row); table.setAlignment(1, row, "center"); table.mergeCells(1,row,2,row); table.setRowColor(row, super.backgroundColor); ++row; table.add(tName, 1, row); table.add(iName, 2, row); table.setRowColor(row, super.GRAY); ++row; table.setRowColor(row, super.GRAY); table.add(tLogin, 1, row); table.add(iLogin, 2, row); ++row; table.setRowColor(row, super.GRAY); table.setVerticalAlignment(1, row, "top"); table.add(tPassword, 1, row); table.add(iPassOne, 2, row); ++row; table.setRowColor(row, super.GRAY); table.setVerticalAlignment(1, row, "top"); table.add(tPassword2, 1, row); table.add(iPassTwo, 2, row); ++row; table.add(tAdmin,1,row); table.add(iAdmin,2,row); table.setRowColor(row, super.GRAY); ++row; table.setRowColor(row, super.GRAY); // table.add(clrButton, 1, row); table.add(btnSave, 2, row); table.setAlignment(2, row, "right"); return form; } private Form saveUser(IWContext iwc) { String name = iwc.getParameter(this.parameterName); String login = iwc.getParameter(this.parameterLogin); String passOne = iwc.getParameter(this.parameterPasswordOne); String passTwo = iwc.getParameter(this.parameterPasswordTwo); String admin = iwc.getParameter(this.parameterAdministrator); String userId = iwc.getParameter(this.paramaterUserID); boolean inUse = true; boolean passwordsOK = false; boolean passwordUpdate = true; if (passOne != null && passTwo != null && !passOne.equals("") && passOne.equals(passTwo)) { passwordsOK = true; }else if (passOne.equals("") && passTwo.equals("")) { passwordsOK = true; passwordUpdate = false; } if (login != null) { if (!login.equals("")) inUse = LoginDBHandler.isLoginInUse(login); if (userId != null) { LoginTable lt = LoginDBHandler.getUserLogin(Integer.parseInt(userId)); if (lt != null) { if (lt.getUserLogin().equals(login)) { inUse = false; } } } } if (!inUse && passwordsOK) { try { UserBusiness ub = (UserBusiness) IBOLookup.getServiceInstance(iwc, UserBusiness.class); // UserBusiness ub = new UserBusiness(); User user = null; boolean isAdmin = false; if (admin != null) isAdmin = true; if (userId == null) { user = ub.insertUser(name, "", "", name, "staff", null, null, null); LoginDBHandler.createLogin(user.getID(), login, passOne); }else { user = ((com.idega.user.data.UserHome)com.idega.data.IDOLookup.getHome(User.class)).findByPrimaryKey( new Integer(userId)); ub.updateUser(user, name, "", "", name, "staff", null, null, null, null); if (passwordUpdate) { LoginTable lt = LoginDBHandler.getUserLogin(Integer.parseInt(userId)); if (lt == null) { LoginDBHandler.createLogin(user.getID(), login, passOne); }else { LoginDBHandler.updateLogin(user.getID(), login, passOne); } } removeUserFromAllGroups(iwc, user); } if (_reseller != null) { getResellerManager(iwc).addUser(_reseller, user, isAdmin); } if (_supplier != null) { getSupplierManagerBusiness(iwc).addUser(_supplier, user, isAdmin); } return getSuccessForm(iwc); }catch (Exception e) { e.printStackTrace(System.err); return getErrorForm(iwc, inUse, passwordsOK, false); } }else { return getErrorForm(iwc, inUse, passwordsOK, false); } } private Form getErrorForm(IWContext iwc, boolean loginInUse, boolean passwordsOK, boolean userCreated) { Form form = new Form(); Table table = new Table(); form.add(table); int row = 1; table.add(getTextWhite(_iwrb.getLocalizedString("travel.error","Error")),1,row); if (loginInUse) { ++row; table.add(getTextWhite(_iwrb.getLocalizedString("travel.login_in_use","Login in use")), 1, row); } if (!passwordsOK) { ++row; table.add(getTextWhite(_iwrb.getLocalizedString("travel.passwords_not_the_same","Password not the same")), 1, row); } // if (!userCreated) { // ++row; // table.add(getTextWhite(_iwrb.getLocalizedString("travel.user_not_created","User not created")), 1, row); // } ++row; ++row; Link backLink = new Link(_iwrb.getImage("buttons/back.gif")); backLink.setOnClick("history.go(-1)"); table.add(backLink, 1,row); return form; } private Form getSuccessForm(IWContext iwc) throws RemoteException{ return getUserList(iwc); } private Form updateUser(IWContext iwc) throws SQLException, RemoteException{ try { String userId = iwc.getParameter(this.paramaterUserID); return getUserCreation(iwc, Integer.parseInt(userId)); }catch (Exception e) { e.printStackTrace(System.err); return getUserCreation(iwc); } } private Form deleteUser(IWContext iwc) throws RemoteException { String userId = iwc.getParameter(this.paramaterUserID); try { User user = ((com.idega.user.data.UserHome)com.idega.data.IDOLookup.getHome(User.class)).findByPrimaryKey( new Integer(userId)); com.idega.core.accesscontrol.business.LoginDBHandler.deleteUserLogin(user.getID()); removeUserFromAllGroups(iwc, user); add(getText(_iwrb.getLocalizedString("travel.operation_successful","Operation successful"))); }catch (RemoveException sql) { sql.printStackTrace(System.err); add(getText(_iwrb.getLocalizedString("travel.operation_failed","Operation failed"))); } catch (IDOLookupException e) { e.printStackTrace(); add(getText(_iwrb.getLocalizedString("travel.operation_failed","Operation failed"))); } catch (NumberFormatException e) { e.printStackTrace(); add(getText(_iwrb.getLocalizedString("travel.operation_failed","Operation failed"))); } catch (FinderException e) { e.printStackTrace(); add(getText(_iwrb.getLocalizedString("travel.operation_failed","Operation failed"))); } catch (SQLException e) { e.printStackTrace(); add(getText(_iwrb.getLocalizedString("travel.operation_failed","Operation failed"))); } return getUserList(iwc); } public static void removeUserFromAllGroups(IWContext iwc, User user) throws FinderException, RemoteException, RemoveException{ UserBusiness ubis = null; try { ubis = (UserBusiness) IDOLookup.getServiceInstance(iwc, UserBusiness.class); } catch (IBOLookupException e) { e.printStackTrace(); } Collection groups = ubis.getUserGroups(user); User currUser = iwc.getCurrentUser(); if (groups != null) { Group group; Iterator iter = groups.iterator(); while (iter.hasNext()) { group = (Group) iter.next(); group.removeGroup(user, currUser); } } } public void maintainParameter(String parameterName, String parameterValue) { parameterNames.add(parameterName); parameterValues.add(parameterValue); } }