package is.idega.idegaweb.golf.service; import is.idega.idegaweb.golf.business.GolfCacher; import is.idega.idegaweb.golf.entity.Group; import is.idega.idegaweb.golf.entity.GroupHome; import is.idega.idegaweb.golf.entity.Member; import is.idega.idegaweb.golf.entity.MemberHome; import is.idega.idegaweb.golf.entity.Union; import java.io.IOException; import java.sql.SQLException; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import javax.ejb.FinderException; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.PresentationObject; 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.CloseButton; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HeaderTable; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SelectionBox; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; /** * Title: * Description: * Copyright: Copyright (c) 2001 * Company: * @author * @version 1.0 */ public class GroupMemberInsertWindow extends com.idega.presentation.ui.Window{ private Member member = null; private Union union = null; private SelectionBox selectGroups; private String headerText = "Setja � flokk"; private String styleAttribute = "font-size: 8pt"; private String[] selectGroupsValues = new String[0]; private IWResourceBundle iwrb; private final static String IW_BUNDLE_IDENTIFIER="is.idega.idegaweb.golf"; public String getBundleIdentifier(){ return IW_BUNDLE_IDENTIFIER; } public GroupMemberInsertWindow() { } public GroupMemberInsertWindow(Member mem, Union uni, boolean isAdmin)throws java.sql.SQLException { construct(mem, uni, isAdmin); setTitle("Setja � flokk"); } public SelectionBox getSelectionGroups() { return this.selectGroups; } public void oldmain(IWContext modinfo) { this.empty(); add(getInputTable(modinfo)); } public Form getInputTable(IWContext modinfo){ Form form = new Form(); try { form.setAction(modinfo.getRequest().getRequestURI()+"?cmd=save"); HeaderTable hTable = new HeaderTable(); hTable.setHeaderText(headerText); Table table = new Table(2, 2); table.mergeCells(1, 1, 2, 1); table.add(new SubmitButton("Vista"), 2, 2); table.add(new CloseButton("Loka"), 1, 2); hTable.add(table); table.add(selectGroups, 1, 1); if(modinfo.getRequest().getParameter("cmd") != null) { oldstore(modinfo); setParentToReload(); close(); } form.add(hTable); } catch(Exception e) { e.printStackTrace(); } return form; } public void oldstore(IWContext modinfo)throws SQLException, IOException, FinderException { selectGroupsValues = modinfo.getRequest().getParameterValues(((Group) IDOLookup.instanciateEntity(Group.class)).getEntityName()); selectGroupsValues = removeFrom(selectGroupsValues,member); for(int i = 0; i < selectGroupsValues.length; i++) { member.addTo(((GroupHome) IDOLookup.getHomeLegacy(Group.class)).findByPrimaryKey(Integer.parseInt(selectGroupsValues[i]))); } } private void construct(Member mem, Union uni, boolean isAdmin) { try { member = mem; union = uni; Group group = (Group) IDOLookup.instanciateEntity(Group.class); Group[] groupArr = null; if(isAdmin) groupArr = (Group[]) group.findAll(); else { //groupArr = (Group[]) group.findAll("select * from group_ where group_type = 'union_group' and group_.group_type not like 'accesscontrol'"); //select * from group_, union_, union_group where union_.union_id = union_group.union_id and union_.union_id = 3 or union_.union_id = 81 groupArr = getGroupArray(union.getUnionGroupsRecursive()); } selectGroups = new SelectionBox(groupArr); selectGroups.setHeight(10); groupArr = member.getGroups(); if(groupArr != null) { for(int i = 0; i < groupArr.length; i++) { selectGroups.setSelectedElement(String.valueOf(groupArr[i].getID())); } } } catch(Exception e ) { e.printStackTrace(); } } public String[] removeFrom(String[] arr,Member member)throws SQLException, IOException { Vector vToArr = new Vector(); Vector vCompare = new Vector(); Group[] groupArr = member.getGroups(); for (int i = 0; i < groupArr.length; i++) { vCompare.add(""+groupArr[i].getID()); } for (int i = 0; i < arr.length; i++) { vToArr.add(arr[i]); } vToArr.removeAll(vCompare); return (String[]) vToArr.toArray(new String[0]); } public Group[] getGroupArray(List list) { Group[] groupArray = new Group[list.size()]; for (int i = 0; i < groupArray.length; i++) { groupArray[i] = (Group) list.get(i); } return groupArray; } public void main(IWContext iwc) { /* Enumeration enum = iwc.getParameterNames(); while(enum.hasMoreElements()){ String prm = (String) enum.nextElement(); System.err.println("prm "+prm+" val :"+iwc.getParameter(prm)); } */ if(iwc.isParameterSet("close")){ setParentToReload(); close(); } else{ iwrb = getResourceBundle(iwc); String sMemberId = iwc.getParameter("member_id"); String sMainUnionId = iwc.getParameter("main_union"); String sMemberUnionId = iwc.getParameter("member_union"); Member member = null; try { int memberid = Integer.parseInt(sMemberId); int mainUnion = Integer.parseInt(sMainUnionId); int memberUnion = Integer.parseInt(sMemberUnionId); member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(memberid); if(iwc.isParameterSet("save")){ store(iwc,member); } else if(iwc.isParameterSet("add_group")){ int addUnion = Integer.parseInt(iwc.getParameter("add_union")); String name = iwc.getParameter("group_name"); saveGroup(addUnion,name); } if(member!=null){ add(getMemberGroupTable(mainUnion,memberUnion,member)); } } catch (Exception ex) {add("Error"); } } } public void store(IWContext iwc,Member member)throws SQLException, IOException { String[] selectGroupsValues = iwc.getParameterValues("use_group"); Hashtable H = null; if(selectGroupsValues!=null){ H = new Hashtable(selectGroupsValues.length); for(int i = 0; i < selectGroupsValues.length; i++) { H.put(new Integer(selectGroupsValues[i]),selectGroupsValues[i]); } } List groups = getGroups(-1,member.getID()); if(groups!=null){ Iterator iter = groups.iterator(); Group group; while(iter.hasNext()){ group = (Group) iter.next(); if(H!=null && H.containsKey(new Integer(group.getID()))){ H.remove(new Integer(group.getID())); } else{ member.removeFrom(group); } } } if(H!=null && !H.isEmpty()){ Enumeration enumer = H.keys(); while(enumer.hasMoreElements()){ member.addTo(Group.class,((Integer) enumer.nextElement()).intValue()); } } } public PresentationObject getMemberGroupTable(int MainUnion,int memberUnion,Member member){ Table T = new Table(2,4); T.mergeCells(1,1,2,1); T.mergeCells(1,4,2,4); T.setAlignment(1,4,"right"); T.setVerticalAlignment(1,2,"top"); T.setVerticalAlignment(2,1,"top"); T.add(member.getName(),1,1); T.add(getGroupTable(member,memberUnion,true,true,true),1,2); T.add(getGroupTable(member,MainUnion,true,false,true),2,2); Table T2 = new Table(5,1); T2.add(new SubmitButton(iwrb.getImage("buttons/close.gif"),"close"),2,1); T2.add(new SubmitButton(iwrb.getImage("buttons/save.gif"),"save"),4,1); T.add(T2,1,2); T.add(new HiddenInput("main_union",String.valueOf(MainUnion))); T.add(new HiddenInput("member_union",String.valueOf(memberUnion))); T.add(new HiddenInput("member_id",String.valueOf(member.getID()))); Form F = new Form(); F.add(T); return F; } public Table getGroupTable(Member member,int iUnionId,boolean admin,boolean newGroup,boolean showall){ Table T = new Table(); Union union = GolfCacher.getCachedUnion(iUnionId); int iMemberId = member!=null?member.getID():-1; List groups = getGroups(iUnionId,iMemberId); Map memberGroups = getMemberGroups(groups); if(showall) groups = getGroups(iUnionId,-1); boolean memberHasGroups = memberGroups!=null; int row = 1; int col = 1; T.add(union.getAbbrevation()+" "+iwrb.getLocalizedString("groups","Flokkar"),col,row++); if(groups!=null){ java.util.Iterator iter = groups.iterator(); Group group; CheckBox use; while(iter.hasNext()){ group = (Group) iter.next(); if(admin){ use = new CheckBox("use_group",String.valueOf(group.getID())); if(memberHasGroups && memberGroups.containsKey(new Integer(group.getID())) ){ use.setChecked(true); } T.add(use,col++,row); } T.add(getText(group.getName()),col,row); row++; col = 1; } } if(newGroup){ TextInput GroupBox = new TextInput("group_name"); GroupBox.setStyleAttribute(styleAttribute); SubmitButton addGroup = new SubmitButton(iwrb.getImage("buttons/add.gif"),"add_group"); addGroup.setStyleAttribute(styleAttribute); Table nt = new Table(2,1); nt.add(GroupBox,1,1); nt.add(addGroup,2,1); nt.add(new HiddenInput("add_union",String.valueOf(iUnionId))); T.mergeCells(1,row,T.getColumns(),row); T.add(nt,1,row); //"#CEDFD0", MiddleColor = "#ADCAB1" } T.mergeCells(1,1,T.getColumns(),1); T.setHorizontalZebraColored("#ADCAB1","#CEDFD0"); return T; } private Text getText(String text){ Text t = new Text(text); t.setFontSize(1); return t; } private List getGroups(int unionId,int memberId){ try{ return com.idega.data.EntityFinder.findAll((Group) IDOLookup.instanciateEntity(Group.class),getUnionGroupSQL(unionId,memberId)); } catch(SQLException ex){ } return null; } private Map getMemberGroups(List L){ if(L!=null){ Hashtable H = new Hashtable(); java.util.Iterator iter = L.iterator(); Group group; while(iter.hasNext()){ group = (Group) iter.next(); H.put(new Integer(group.getID()),group); } return H; } return null; } private String getUnionGroupSQL(int unionId,int memberId){ StringBuffer sql = new StringBuffer("select g.* from group_ g "); if(unionId > 0) sql.append(" ,union_group ug"); if(memberId > 0) sql.append(",group_member mg "); sql.append(" where g.group_type = 'union_group' "); if(unionId > 0) sql.append(" and ug.group_id = g.group_id "); if(memberId > 0) sql.append("and mg.group_id = g.group_id "); if(unionId > 0){ sql.append(" and ug.union_id = "); sql.append(unionId); } if(memberId > 0){ sql.append(" and mg.member_id = "); sql.append(memberId); } //System.err.println(sql.toString()); return sql.toString(); } private void saveGroup(int unionId,String name){ //System.err.println("adding new group to union "+unionId); try { Group group = (Group) IDOLookup.createLegacy(Group.class); group.setName(name); group.setGroupType("union_group"); Union union = GolfCacher.getCachedUnion(unionId); group.insert(); group.addTo(union); } catch (Exception ex) { ex.printStackTrace(); } } public static Link getLink(PresentationObject object,int memberId,int memberUnionId,int mainUnionId){ Link L = new Link(object); L.addParameter("main_union",mainUnionId); L.addParameter("member_union",memberUnionId); L.addParameter("member_id",memberId); return L; } }