001 /*************************************************************************************************** 002 * MODULE DESCRIPTION 003 **************************************************************************************************** 004 * 005 * NAME: SpaceGroupSearch.java 006 * LANGUAGE: Java2 007 * DATE: 18.12.2002 008 * AUTHOR: Miika Nurminen, Jyväskylän yliopisto 009 * 010 **************************************************************************************************** 011 * COPYRIGHT (C) KIURU-PROJEKTIRYHMÄ 012 * Limited rights granted. Please refer to license 013 **************************************************************************************************** 014 * 015 **************************************************************************************************** 016 * UPDATES 017 **************************************************************************************************** 018 * 019 * 18.12.2002 Initial release 020 * 14.1.2003 /mn 021 * part of functionality generalized to SearchHadler 022 * 023 ****************************************************************************************************/ 024 package kiurubeans; 025 import kotkabeans.*; 026 import javax.servlet.http.HttpServletRequest; 027 028 /** 029 * Implement space group searching, ordering & filtering 030 * 031 * @author Miika Nurminen 032 */ 033 public class SpaceGroupSearch extends SearchHandler { 034 // Attributes 035 036 /** 037 * Search string. Value for SQL ordering 038 */ 039 private String spaceGroupName = null; 040 041 // Constructors 042 043 /** Constructs a new instance of SpaceSearch. Defines ordeding. */ 044 public SpaceGroupSearch() { // upper() cannot be applied to aliases 045 Field[] s = {new TextField("sg.name"), 046 new Field("spacegrouptypename")}; 047 setVisibleFields(s); // spacegroupname 048 assignDefaultOrder(); 049 } 050 051 052 // Access methods 053 054 /** 055 * Getter for attribute spaceGroupName 056 * @return user's query string 057 */ 058 public String getSpaceGroupName() { 059 if (this.spaceGroupName==null) return ""; 060 return this.spaceGroupName; 061 } 062 063 /** Setter for attribute spaceGroupName 064 * @param name new name for spacegroup 065 */ 066 public void setSpaceGroupName(String name) { 067 this.spaceGroupName = KiuruString.sqlTrim(name); 068 } 069 070 071 /** Ensures empty request parameters are clearer when entity is posted. 072 * <p> 073 * If bean is used in a JSP, this should be called in the beginning of page. 074 * If form content is "" or null it is not sent via HTTP, so those fields 075 * must be cleared manually. 076 * 077 * @param request HTTP request with parameters 078 * @see SearchHandler#clearEmptyParameters(HttpServletRequest) 079 */ 080 protected void doClearEmptyParameters(HttpServletRequest request) { 081 if ((request.getParameter("spaceGroupName")!=null) && (request.getParameter("spaceGroupName").equals("") && this.spaceGroupName!=null)) { 082 setSpaceGroupName(""); 083 } 084 } 085 086 /** Default implementation of clearing action state. Descendant classes may 087 * override this. 088 * @see SearchHandler#doClearActionState(HttpServletRequest) 089 * @param request The request-object of the JSP. 090 */ 091 protected void doClearActionState(javax.servlet.http.HttpServletRequest request) { 092 if ((getEnumState()==KiuruHandler.NO_ACTION) && (this.spaceGroupName!=null)) 093 setEnumState(SUBMIT_SEARCH); // because of a bug in Mozilla when pressing enter in searchfield. 094 else super.doClearActionState(request); 095 } 096 097 /** Returns favorite spacegroupid of user with given id, null if not exists. 098 * @return RS2 field: spacegroupid 099 * @param userId user whose favorites we are searching 100 * @throws Exception if problems with db connection 101 */ 102 public static RS2 getFavoriteSpaceGroup(int userId) throws java.lang.Exception { 103 RS2 rs = SimpleDb.simpleQuery("SpaceSearch.getFavoriteSpaces db", 104 "select sg.spacegroupid from spacegroup as sg,spacegroupperson as sgp "+ 105 "where sg.spacegrouptypeid=6 "+ // 6==henkilökohtainen mielisaliryhmä 106 "and sg.spacegroupid = sgp.spacegroupid "+ 107 "and sgp.modifyright<>0 "+ 108 "and sg.deleted=false and sgp.deleted=false "+ 109 "and sgp.personid ="+userId ); 110 if (rs==null || rs.count()<1) return null; 111 return rs; 112 } 113 114 /** 115 * Implementation for SUBMIT_SEARCH 116 */ 117 public void submitSearch() { 118 if (this.spaceGroupName==null) setSpaceGroupName(""); 119 } 120 121 /** 122 * Implementation for RESET_SEARCH 123 */ 124 public void resetSearch() { 125 this.spaceGroupName=null; 126 } 127 128 129 /** Returns all accessible spacegroups with code match 130 * User must be set! 131 * @throws Exception if problems with db connection 132 * @return (spacegroupid,spacegroupname,spacegrouptypename) 133 */ 134 public RS2 getSpaceGroupsMatched() throws Exception { 135 if (this.spaceGroupName==null) return null; // getspacegroupname clears null away... 136 StringPair tables[]={ 137 new StringPair("sg","spacegroup"), 138 new StringPair("sgt","spacegrouptype"), 139 new StringPair("sgp","spacegroupperson") 140 }; 141 142 StringBuffer sb = new StringBuffer(200); 143 // removed distinct, replaced with group by /mn 144 sb.append("select sg.spacegroupid as spacegroupid, sg.name as spacegroupname, sgt.name as spacegrouptypename "); 145 sb.append(SimpleDb.addSqlFrom(tables)); 146 sb.append("where sg.spacegrouptypeid = sgt.spacegrouptypeid and sgp.spacegroupid = sg.spacegroupid "); 147 sb.append(SimpleDb.formatSearchString("sg.name", getSpaceGroupName())); 148 sb.append(SimpleDb.addSqlDeleted(tables)); 149 if (!getUser().hasAdminRight()) { 150 sb.append("and (sgp.personid="+getUser().getPersonID()+" or sgt.spacegrouptypeid<5)"); 151 // spacegrouptypes 1..4 are public 152 } 153 sb.append(" group by sg.spacegroupid, sg.name, sgt.name "); // no distinct here 154 sb.append(getOrderClause()); 155 156 return SimpleDb.simpleQuery("Getting matched spacegroups", sb.toString()); 157 } 158 159 /** Returns all spacegroups. 160 * @throws Exception if problems with db connection 161 * @return (spacegroupid,spacegroupname,spacegrouptypename) 162 */ 163 public RS2 getSpaceGroups() throws Exception { 164 return SimpleDb.simpleQuery("Getting all spacegroups", 165 "select sg.spacegroupid as spacegroupid, sg.name as spacegroupname, sgt.name as spacegrouptypename "+ 166 "from spacegroup as sg, spacegrouptype as sgt "+ 167 "where sg.spacegrouptypeid = sgt.spacegrouptypeid and sg.deleted=false "+ 168 getOrderClause()); 169 } 170 171 /** Returns all spacegroups where user has access rights. If user is 172 * Administrator returns all SpaceGroups. 173 * 174 * Note! User must be set for this method! 175 * @throws Exception if problems with db connection 176 * @return (spacegroupid,spacegroupname,spacegrouptypename) 177 */ 178 public RS2 getSpaceGroupsWithAccessLevel() throws java.lang.Exception { 179 if(getUser().hasAdminRight()) 180 return getSpaceGroups(); // all spacegroups for administrators 181 182 return SimpleDb.simpleQuery("Getting user's spacegroups", 183 "select sg.spacegroupid as spacegroupid, sg.name as spacegroupname, sgt.name as spacegrouptypename "+ 184 "from spacegroup as sg, spacegrouptype as sgt, spacegroupperson as sgp "+ 185 "where sg.spacegrouptypeid = sgt.spacegrouptypeid and sg.deleted=false "+ 186 "and sgp.spacegroupid = sg.spacegroupid "+ 187 "and sgp.deleted = false "+ 188 "and sgp.personid="+getUser().getPersonID()+ 189 getOrderClause()); 190 } 191 192 193 /** Returns all public spacegroups in which space of given spaceid belongs. 194 * note! user must be set for this method. 195 * @return (spacegroupid,spacegroupname,spacegrouptypename) 196 * @param spaceid input space id 197 * @throws Exception if problems with db connection 198 */ 199 public RS2 getSpaceGroupsOfSpace(int spaceid) throws java.lang.Exception { 200 StringPair[] sp = { // enumerating used tables 201 new StringPair("sg","spacegroup"), 202 new StringPair("sgt","spacegrouptype"), 203 new StringPair("sgs","spacegroupspace"), 204 new StringPair("sgp","spacegroupperson") 205 }; 206 StringBuffer sb = new StringBuffer(200); 207 // removed distinct to simplify ordering /mn 208 sb.append("select sg.spacegroupid as spacegroupid, sg.name as spacegroupname, sgt.name as spacegrouptypename"); 209 sb.append(SimpleDb.addSqlFrom(sp)); 210 sb.append("where sg.spacegrouptypeid = sgt.spacegrouptypeid and sgs.spacegroupid = sg.spacegroupid and sgs.spaceid ="+KiuruString.sqlQuote(spaceid)); 211 sb.append(" and sgp.spacegroupid = sg.spacegroupid "); 212 sb.append(SimpleDb.addSqlDeleted(sp)); 213 if(!getUser().hasAdminRight()) { 214 // spacegrouptypes 1..4 are public 215 sb.append("and (sgp.personid="+getUser().getPersonID()+" or sgt.spacegrouptypeid<5)"); 216 } 217 sb.append(" group by sg.spacegroupid, sg.name, sgt.name "); // no distinct here 218 sb.append(getOrderClause()); 219 return SimpleDb.simpleQuery("Getting space's spacegroup", sb.toString()); 220 } 221 222 } 223 /*************************************************************************************************** 224 * COPYRIGHT (C) KIURU-PROJECT GROUP 225 * Limited rights granted. Please refer to license 226 ****************************************************************************************************/