code: public void writePropertyObjects(CmsRequestContext context, CmsResource resource, List<CmsProperty> properties)
      throws CmsException, CmsSecurityException {
  
          CmsDbContext dbc = m_dbContextFactory.getDbContext(context);
          try {
              checkOfflineProject(dbc);
              checkPermissions(dbc, resource, CmsPermissionSet.ACCESS_WRITE, true, CmsResourceFilter.IGNORE_EXPIRATION);
              // write the properties
              m_driverManager.writePropertyObjects(dbc, resource, properties, true);
          } catch (Exception e) {
              dbc.report(null, Messages.get().container(Messages.ERR_WRITE_PROPS_1, context.getSitePath(resource)), e);
          } finally {
              dbc.clear();
          }
      }
docs: Writes a list of properties for a specified resource.<p>
  
  Code calling this method has to ensure that the no properties
  <code>a, b</code> are contained in the specified list so that <code>a.equals(b)</code>,
  otherwise an exception is thrown.<p>
  
  @param context the current request context
  @param resource the resource to write the properties for
  @param properties the list of properties to write
  
  @throws CmsException if something goes wrong
  @throws CmsSecurityException if the user has insufficient permission for the given resource ({@link CmsPermissionSet#ACCESS_WRITE} required)
  
  @see CmsObject#writePropertyObjects(String, List)
  @see org.opencms.file.types.I_CmsResourceType#writePropertyObjects(CmsObject, CmsSecurityManager, CmsResource, List)