public static void updateRegionHappenings(
     Connection conn,
     DatabaseAccess access,
     int nationId,
     int happeningId,
     String happening,
     HappeningType type)
     throws SQLException, ExecutionException {
   String region1Happening = type.transformToRegion1Happening(happening);
   String region2Happening = type.transformToRegion2Happening(happening);
   List<Integer> regionIds = new ArrayList<Integer>(2);
   Matcher regions = Utils.REGION_PATTERN.matcher(happening);
   while (regions.find()) {
     regionIds.add(
         access
             .getRegionIdCache()
             .get(happening.substring(regions.start() + 2, regions.end() - 2)));
   }
   if (regionIds.size() == 0 && nationId > -1) {
     PreparedStatement select =
         conn.prepareStatement("SELECT region FROM assembly.nation WHERE id = ?");
     select.setInt(1, nationId);
     ResultSet result = select.executeQuery();
     if (result.next()) {
       regionIds.add(result.getInt(1));
     }
     DbUtils.closeQuietly(result);
     DbUtils.closeQuietly(select);
   }
   PreparedStatement insert =
       conn.prepareStatement(
           "INSERT INTO assembly.regional_happenings (global_id, region, happening) VALUES (?, ?, ?)");
   if (region1Happening != null && regionIds.size() > 0) {
     insert.setInt(1, happeningId);
     insert.setInt(2, regionIds.get(0));
     insert.setString(3, region1Happening);
     insert.executeUpdate();
   }
   if (region2Happening != null && regionIds.size() > 1) {
     insert.setInt(1, happeningId);
     insert.setInt(2, regionIds.get(1));
     insert.setString(3, region2Happening);
     insert.executeUpdate();
   }
   DbUtils.closeQuietly(insert);
 }