Coverage Summary for Class: CommonGrantResourceCreatePermissionPostCreateSysPersister (com.acciente.oacc.sql.internal.persister)

Class Class, % Method, % Line, %
CommonGrantResourceCreatePermissionPostCreateSysPersister 100% (1/ 1) 100% (9/ 9) 87.8% (101/ 115)


1 /* 2  * Copyright 2009-2018, Acciente LLC 3  * 4  * Acciente LLC licenses this file to you under the 5  * Apache License, Version 2.0 (the "License"); you 6  * may not use this file except in compliance with the 7  * License. You may obtain a copy of the License at 8  * 9  * http://www.apache.org/licenses/LICENSE-2.0 10  * 11  * Unless required by applicable law or agreed to in 12  * writing, software distributed under the License is 13  * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 14  * OR CONDITIONS OF ANY KIND, either express or implied. 15  * See the License for the specific language governing 16  * permissions and limitations under the License. 17  */ 18 package com.acciente.oacc.sql.internal.persister; 19  20 import com.acciente.oacc.Resource; 21 import com.acciente.oacc.ResourceCreatePermission; 22 import com.acciente.oacc.ResourceCreatePermissions; 23 import com.acciente.oacc.ResourcePermission; 24 import com.acciente.oacc.ResourcePermissions; 25 import com.acciente.oacc.sql.SQLProfile; 26 import com.acciente.oacc.sql.internal.persister.id.DomainId; 27 import com.acciente.oacc.sql.internal.persister.id.Id; 28 import com.acciente.oacc.sql.internal.persister.id.ResourceClassId; 29  30 import java.io.Serializable; 31 import java.sql.SQLException; 32 import java.util.HashMap; 33 import java.util.HashSet; 34 import java.util.Map; 35 import java.util.Set; 36  37 public abstract class CommonGrantResourceCreatePermissionPostCreateSysPersister extends Persister implements GrantResourceCreatePermissionPostCreateSysPersister, Serializable { 38  private static final long serialVersionUID = 1L; 39  40  protected final SQLProfile sqlProfile; 41  protected final SQLStrings sqlStrings; 42  43  public CommonGrantResourceCreatePermissionPostCreateSysPersister(SQLProfile sqlProfile, 44  SQLStrings sqlStrings) { 45  this.sqlProfile = sqlProfile; 46  this.sqlStrings = sqlStrings; 47  } 48  49  @Override 50  public abstract Set<ResourceCreatePermission> getResourceCreatePostCreateSysPermissionsIncludeInherited(SQLConnection connection, 51  Resource accessorResource, 52  Id<ResourceClassId> resourceClassId, 53  Id<DomainId> resourceDomainId); 54  55  @Override 56  public abstract Map<String, Map<String, Set<ResourceCreatePermission>>> getResourceCreatePostCreateSysPermissionsIncludeInherited( 57  SQLConnection connection, 58  Resource accessorResource); 59  60  @Override 61  public Map<String, Map<String, Set<ResourceCreatePermission>>> getResourceCreatePostCreateSysPermissions(SQLConnection connection, 62  Resource accessorResource) { 63  SQLStatement statement = null; 64  65  try { 66  Map<String, Map<String, Set<ResourceCreatePermission>>> createSysPermissionsMap = new HashMap<>(); 67  SQLResult resultSet; 68  69  // collect the system permissions that the accessor has and add it to createALLPermissionsMap 70  statement = connection.prepareStatement(sqlStrings.SQL_findInGrantResourceCreatePermissionPostCreateSys_withoutInheritance_ResourceDomainName_ResourceClassName_PostCreateSysPermissionID_PostCreateIsWithGrant_IsWithGrant_BY_AccessorID); 71  statement.setResourceId(1, accessorResource); 72  resultSet = statement.executeQuery(); 73  74  while (resultSet.next()) { 75  final String resourceDomainName; 76  final String resourceClassName; 77  Map<String, Set<ResourceCreatePermission>> permissionsForResourceDomain; 78  Set<ResourceCreatePermission> permissionsForResourceClass; 79  80  resourceDomainName = resultSet.getString("DomainName"); 81  resourceClassName = resultSet.getString("ResourceClassName"); 82  83  if ((permissionsForResourceDomain = createSysPermissionsMap.get(resourceDomainName)) == null) { 84  createSysPermissionsMap.put(resourceDomainName, 85  permissionsForResourceDomain = new HashMap<>()); 86  } 87  88  if ((permissionsForResourceClass = permissionsForResourceDomain.get(resourceClassName)) == null) { 89  permissionsForResourceDomain.put(resourceClassName, 90  permissionsForResourceClass = new HashSet<>()); 91  } 92  93  permissionsForResourceClass.add(getResourceCreatePostCreateSysPermission(resultSet)); 94  } 95  resultSet.close(); 96  97  return createSysPermissionsMap; 98  } 99  catch (SQLException e) { 100  throw new RuntimeException(e); 101  } 102  finally { 103  closeStatement(statement); 104  } 105  } 106  107  protected static ResourceCreatePermission getResourceCreatePostCreateSysPermission(SQLResult resultSet) throws SQLException { 108  ResourcePermission postCreatePermission; 109  final String postCreateSysPermissionName = resultSet.getResourceSysPermissionName("PostCreateSysPermissionId"); 110  111  if (resultSet.getBoolean("PostCreateIsWithGrant")) { 112  postCreatePermission = ResourcePermissions.getInstanceWithGrantOption(postCreateSysPermissionName); 113  } 114  else { 115  postCreatePermission = ResourcePermissions.getInstance(postCreateSysPermissionName); 116  } 117  118  if (resultSet.getBoolean("IsWithGrant")) { 119  return ResourceCreatePermissions.getInstanceWithGrantOption(postCreatePermission); 120  } 121  else { 122  return ResourceCreatePermissions.getInstance(postCreatePermission); 123  } 124  } 125  126  @Override 127  public Set<ResourceCreatePermission> getResourceCreatePostCreateSysPermissions(SQLConnection connection, 128  Resource accessorResource, 129  Id<ResourceClassId> resourceClassId, 130  Id<DomainId> resourceDomainId) { 131  SQLStatement statement = null; 132  try { 133  SQLResult resultSet; 134  Set<ResourceCreatePermission> resourceCreatePermissions = new HashSet<>(); 135  136  // collect the system permissions the accessor has to the specified resource class 137  statement = connection.prepareStatement(sqlStrings.SQL_findInGrantResourceCreatePermissionPostCreateSys_withoutInheritance_PostCreateSysPermissionID_PostCreateIsWithGrant_IsWithGrant_BY_AccessorID_AccessedDomainID_ResourceClassID); 138  statement.setResourceId(1, accessorResource); 139  statement.setResourceDomainId(2, resourceDomainId); 140  statement.setResourceClassId(3, resourceClassId); 141  resultSet = statement.executeQuery(); 142  143  while (resultSet.next()) { 144  resourceCreatePermissions.add(getResourceCreatePostCreateSysPermission(resultSet)); 145  } 146  resultSet.close(); 147  148  return resourceCreatePermissions; 149  } 150  catch (SQLException e) { 151  throw new RuntimeException(e); 152  } 153  finally { 154  closeStatement(statement); 155  } 156  } 157  158  @Override 159  public void addResourceCreatePostCreateSysPermissions(SQLConnection connection, 160  Resource accessorResource, 161  Id<ResourceClassId> accessedResourceClassId, 162  Id<DomainId> accessedResourceDomainId, 163  Set<ResourceCreatePermission> requestedResourceCreatePermissions, 164  Resource grantorResource) { 165  SQLStatement statement = null; 166  try { 167  // add the new post-create system permissions 168  statement = connection.prepareStatement(sqlStrings.SQL_createInGrantResourceCreatePermissionPostCreateSys_WITH_AccessorID_GrantorID_AccessedDomainID_IsWithGrant_PostCreateIsWithGrant_ResourceClassID_PostCreateSysPermissionID); 169  for (ResourceCreatePermission resourceCreatePermission : requestedResourceCreatePermissions) { 170  if (!resourceCreatePermission.isSystemPermission() 171  && resourceCreatePermission.getPostCreateResourcePermission().isSystemPermission()) { 172  statement.setResourceId(1, accessorResource); 173  statement.setResourceId(2, grantorResource); 174  statement.setResourceDomainId(3, accessedResourceDomainId); 175  statement.setBoolean(4, resourceCreatePermission.isWithGrantOption()); 176  statement.setBoolean(5, resourceCreatePermission.getPostCreateResourcePermission().isWithGrantOption()); 177  statement.setResourceClassId(6, accessedResourceClassId); 178  statement.setResourceSystemPermissionId(7, resourceCreatePermission.getPostCreateResourcePermission().getSystemPermissionId()); 179  180  assertOneRowInserted(statement.executeUpdate()); 181  } 182  } 183  } 184  catch (SQLException e) { 185  throw new RuntimeException(e); 186  } 187  finally { 188  closeStatement(statement); 189  } 190  } 191  192  @Override 193  public void updateResourceCreatePostCreateSysPermissions(SQLConnection connection, 194  Resource accessorResource, 195  Id<ResourceClassId> accessedResourceClassId, 196  Id<DomainId> accessedResourceDomainId, 197  Set<ResourceCreatePermission> requestedResourceCreatePermissions, 198  Resource grantorResource) { 199  SQLStatement statement = null; 200  try { 201  // add the new post-create system permissions 202  statement = connection.prepareStatement(sqlStrings.SQL_updateInGrantResourceCreatePermissionPostCreateSys_SET_GrantorID_IsWithGrant_PostCreateIsWithGrant_BY_AccessorID_AccessedDomainID_ResourceClassID_PostCreateSysPermissionID); 203  for (ResourceCreatePermission resourceCreatePermission : requestedResourceCreatePermissions) { 204  if (!resourceCreatePermission.isSystemPermission() 205  && resourceCreatePermission.getPostCreateResourcePermission().isSystemPermission()) { 206  statement.setResourceId(1, grantorResource); 207  statement.setBoolean(2, resourceCreatePermission.isWithGrantOption()); 208  statement.setBoolean(3, resourceCreatePermission.getPostCreateResourcePermission().isWithGrantOption()); 209  statement.setResourceId(4, accessorResource); 210  statement.setResourceDomainId(5, accessedResourceDomainId); 211  statement.setResourceClassId(6, accessedResourceClassId); 212  statement.setResourceSystemPermissionId(7, resourceCreatePermission.getPostCreateResourcePermission().getSystemPermissionId()); 213  214  assertOneRowUpdated(statement.executeUpdate()); 215  } 216  } 217  } 218  catch (SQLException e) { 219  throw new RuntimeException(e); 220  } 221  finally { 222  closeStatement(statement); 223  } 224  } 225  226  @Override 227  public void removeAllResourceCreatePostCreateSysPermissions(SQLConnection connection, 228  Resource accessorResource) { 229  SQLStatement statement = null; 230  try { 231  // revoke any existing post-create system permissions this accessor has to any domain + resource class 232  statement = connection.prepareStatement(sqlStrings.SQL_removeInGrantResourceCreatePermissionPostCreateSys_BY_AccessorID); 233  statement.setResourceId(1, accessorResource); 234  statement.executeUpdate(); 235  } 236  catch (SQLException e) { 237  throw new RuntimeException(e); 238  } 239  finally { 240  closeStatement(statement); 241  } 242  } 243  244  @Override 245  public abstract void removeAllResourceCreatePostCreateSysPermissions(SQLConnection connection, 246  Id<DomainId> accessedDomainId); 247  248  @Override 249  public void removeResourceCreatePostCreateSysPermissions(SQLConnection connection, 250  Resource accessorResource, 251  Id<ResourceClassId> accessedResourceClassId, 252  Id<DomainId> accessedResourceDomainId) { 253  SQLStatement statement = null; 254  try { 255  // revoke any existing post-create system permissions this accessor has to this domain + resource class 256  statement = connection.prepareStatement(sqlStrings.SQL_removeInGrantResourceCreatePermissionPostCreateSys_BY_AccessorID_AccessedDomainID_ResourceClassID); 257  statement.setResourceId(1, accessorResource); 258  statement.setResourceDomainId(2, accessedResourceDomainId); 259  statement.setResourceClassId(3, accessedResourceClassId); 260  statement.executeUpdate(); 261  } 262  catch (SQLException e) { 263  throw new RuntimeException(e); 264  } 265  finally { 266  closeStatement(statement); 267  } 268  } 269  270  @Override 271  public void removeResourceCreatePostCreateSysPermissions(SQLConnection connection, 272  Resource accessorResource, 273  Id<ResourceClassId> accessedResourceClassId, 274  Id<DomainId> accessedResourceDomainId, 275  Set<ResourceCreatePermission> requestedResourceCreatePermissions) { 276  SQLStatement statement = null; 277  try { 278  // revoke the post-create system permissions 279  statement = connection.prepareStatement(sqlStrings.SQL_removeInGrantResourceCreatePermissionPostCreateSys_BY_AccessorID_AccessedDomainID_ResourceClassID_PostCreateSysPermissionID); 280  for (ResourceCreatePermission resourceCreatePermission : requestedResourceCreatePermissions) { 281  if (!resourceCreatePermission.isSystemPermission() 282  && resourceCreatePermission.getPostCreateResourcePermission().isSystemPermission()) { 283  statement.setResourceId(1, accessorResource); 284  statement.setResourceDomainId(2, accessedResourceDomainId); 285  statement.setResourceClassId(3, accessedResourceClassId); 286  statement.setResourceSystemPermissionId(4, resourceCreatePermission.getPostCreateResourcePermission().getSystemPermissionId()); 287  288  assertOneRowUpdated(statement.executeUpdate()); 289  } 290  } 291  } 292  catch (SQLException e) { 293  throw new RuntimeException(e); 294  } 295  finally { 296  closeStatement(statement); 297  } 298  } 299 }