@@ -145,30 +145,54 @@ public List<UserIdentity> getUserIdentitiesFromSubjectAndIssuer(Connection con,
145145 lg .trace ("UserDbDriver.getUserIdentityFromSubjectAndIssuer(userid=" + subject + ")" );
146146 }
147147 sql = "SELECT " + UserTable .table .userid .getUnqualifiedColName () + "," +
148- UserIdentityTable .userRef .getUnqualifiedColName () + "," +
149- UserIdentityTable .authSubject .getUnqualifiedColName () + "," +
150- UserIdentityTable .authIssuer .getUnqualifiedColName () + "," +
148+ UserIdentityTable .userRef .getQualifiedColName () + "," +
151149 UserIdentityTable .table .id .getQualifiedColName () + " as user_identity_key " + "," +
152- UserIdentityTable .insertDate .getQualifiedColName () +
150+ UserIdentityTable .insertDate .getQualifiedColName () + "," +
151+ SpecialUsersTable .table .special .getQualifiedColName () +
153152 " FROM " + userTable .getTableName () +
154153 " JOIN " + UserIdentityTable .table .getTableName () +
155154 " ON " + UserIdentityTable .table .userRef .getUnqualifiedColName ()+"=" +userTable .id .getQualifiedColName () +
155+ " LEFT JOIN " + SpecialUsersTable .table .getTableName () +
156+ " ON " + SpecialUsersTable .table .userRef .getQualifiedColName ()+"=" +userTable .id .getQualifiedColName () +
156157 " WHERE " + UserIdentityTable .authSubject .getUnqualifiedColName () + " = '" + subject + "'" +
157158 " AND " + UserIdentityTable .authIssuer .getUnqualifiedColName () + " = '" + issuer + "'" ;
158159
159160 if (lg .isTraceEnabled ()) {
160161 lg .trace (sql );
161162 }
162163 stmt = con .createStatement ();
163- ArrayList <UserIdentity > userIdentities = new ArrayList <>();
164+ ArrayList <UserIdentityBuilder > userIdentities = new ArrayList <>();
164165 try {
165166 rset = stmt .executeQuery (sql );
166167 while (rset .next ()) {
167- BigDecimal userBD = rset .getBigDecimal (UserIdentityTable .userRef .getUnqualifiedColName ());
168- String userID = rset .getString (UserTable .table .userid .getUnqualifiedColName ());
169- User userFromDB = new User (userID , new KeyValue (userBD ));
170- UserIdentity userIdentity = UserIdentityTable .table .getUserIdentity (rset , userFromDB , "user_identity_key" );
171- userIdentities .add (userIdentity );
168+ BigDecimal userKey = rset .getBigDecimal (UserIdentityTable .userRef .getUnqualifiedColName ());
169+ String claim = rset .getString (SpecialUsersTable .table .special .getUnqualifiedColName ());
170+
171+ int lastUserAdded = userIdentities .size ()-1 ;
172+ boolean sameUser = !userIdentities .isEmpty () && userIdentities .get (lastUserAdded ).getId ().equals (userKey );
173+ if (sameUser && claim != null ){
174+ userIdentities .get (lastUserAdded ).getUserBuilder ().addSpecial (User .SPECIAL_CLAIM .fromDatabase (claim ));
175+ } else {
176+ String userID = rset .getString (UserTable .table .userid .getUnqualifiedColName ());
177+ User .SpecialUserBuilder builder = new User .SpecialUserBuilder (userID , new KeyValue (userKey ));
178+ if (claim != null ){
179+ builder .addSpecial (User .SPECIAL_CLAIM .fromDatabase (claim ));
180+ }
181+ userIdentities .add (new UserIdentityBuilder (userKey , builder ,
182+ subject , issuer , UserIdentityTable .table .getUserIdentityDate (rset )));
183+ }
184+ }
185+ } finally {
186+ stmt .close ();
187+ }
188+
189+ ArrayList <UserIdentity > identities = new ArrayList <>();
190+ for (UserIdentityBuilder userIdentityBuilder : userIdentities ) {
191+ identities .add (userIdentityBuilder .build ());
192+ }
193+
194+ return identities ;
195+ }
172196
173197 public User getVCellSupportUser (Connection con ) throws SQLException {
174198 Statement stmt ;
0 commit comments