<!DOCTYPE html>
<html lang='en'>
<head>
<title>mobile.scss « css « files_sharing « apps - nextcloud-server.git - Nextcloud server, a safe home for all your data: https://github.com/nextcloud/server</title>
<meta name='generator' content='cgit v1.2.3'/>
<meta name='robots' content='index, nofollow'/>
<link rel='stylesheet' type='text/css' href='/cgit.css'/>
<link rel='shortcut icon' href='/favicon.ico'/>
<link rel='alternate' title='Atom feed' href='https://source.dussan.org/nextcloud-server.git/atom/apps/files_sharing/css/mobile.scss?h=hasTableTaskprocessingTasks' type='application/atom+xml'/>
</head>
<body>
<div id='cgit'><table id='header'>
<tr>
<td class='logo' rowspan='2'><a href='/'><img src='/cgit.png' alt='cgit logo'/></a></td>
<td class='main'><a href='/'>index</a> : <a href='/nextcloud-server.git/'>nextcloud-server.git</a></td><td class='form'><form method='get'>
<select name='h' onchange='this.form.submit();'>
<option value='27-shared-null-storage-merged'>27-shared-null-storage-merged</option>
<option value='3rdparty-aws-diet'>3rdparty-aws-diet</option>
<option value='3rdparty/justinrainbow/json-schema'>3rdparty/justinrainbow/json-schema</option>
<option value='3rdparty/stable28/sabre-dav-itip-broker'>3rdparty/stable28/sabre-dav-itip-broker</option>
<option value='3rdparty/stable29/sabre-dav-itip-broker'>3rdparty/stable29/sabre-dav-itip-broker</option>
<option value='3rdparty/stable30/sabre-dav-itip-broker'>3rdparty/stable30/sabre-dav-itip-broker</option>
<option value='44287-fix-avatar-fed-share-receiver'>44287-fix-avatar-fed-share-receiver</option>
<option value='44319-fix-fed-share-user-avatars'>44319-fix-fed-share-user-avatars</option>
<option value='Dennis1993-patch-1'>Dennis1993-patch-1</option>
<option value='Fix/app-menu-overflow'>Fix/app-menu-overflow</option>
<option value='Fix/mp3_regex'>Fix/mp3_regex</option>
<option value='Jerome-Herbinet-better-devices-wipe-action-wording'>Jerome-Herbinet-better-devices-wipe-action-wording</option>
<option value='Jerome-Herbinet-better-new-wording-better-than-delete-and-unshare'>Jerome-Herbinet-better-new-wording-better-than-delete-and-unshare</option>
<option value='Jerome-Herbinet-internal-shares-parameter-better-distinction'>Jerome-Herbinet-internal-shares-parameter-better-distinction</option>
<option value='Jerome-Herbinet-patch-1'>Jerome-Herbinet-patch-1</option>
<option value='Jerome-Herbinet-replace-remove-wording-with-delete'>Jerome-Herbinet-replace-remove-wording-with-delete</option>
<option value='Valdnet-patch-1'>Valdnet-patch-1</option>
<option value='add-VersionCreatedEvent'>add-VersionCreatedEvent</option>
<option value='add-caldav-repair-middleware'>add-caldav-repair-middleware</option>
<option value='add-command-to-cleanup-preview'>add-command-to-cleanup-preview</option>
<option value='add-default-request-timeout-const'>add-default-request-timeout-const</option>
<option value='add-integration-tests-for-deleting-a-file-copied-from-a-share'>add-integration-tests-for-deleting-a-file-copied-from-a-share</option>
<option value='add-integration-tests-for-moving-a-file-from-and-to-a-shared-folder'>add-integration-tests-for-moving-a-file-from-and-to-a-shared-folder</option>
<option value='add-integration-tests-for-renaming-a-share-by-a-user-with-stale-shares'>add-integration-tests-for-renaming-a-share-by-a-user-with-stale-shares</option>
<option value='addAllToGroupBy'>addAllToGroupBy</option>
<option value='addConstrDep'>addConstrDep</option>
<option value='admin-audit-listen-failed-login'>admin-audit-listen-failed-login</option>
<option value='admin_audit/enh/move-to-event-listeners'>admin_audit/enh/move-to-event-listeners</option>
<option value='allowMkcolAndPut'>allowMkcolAndPut</option>
<option value='allowUnderCustLink'>allowUnderCustLink</option>
<option value='appStoreCacheFolder'>appStoreCacheFolder</option>
<option value='appStoreDisabledOcc'>appStoreDisabledOcc</option>
<option value='artonge/backport/52121/stable29'>artonge/backport/52121/stable29</option>
<option value='artonge/backport/stable27/47770'>artonge/backport/stable27/47770</option>
<option value='artonge/backport/stable29/48207'>artonge/backport/stable29/48207</option>
<option value='artonge/chore/increase_log_in_trashbin'>artonge/chore/increase_log_in_trashbin</option>
<option value='artonge/chore/ldap_wizard_rewrite'>artonge/chore/ldap_wizard_rewrite</option>
<option value='artonge/chore/update_nc_cypress_beta.11'>artonge/chore/update_nc_cypress_beta.11</option>
<option value='artonge/chore/update_nc_pwd_confirmation_v5.3.1'>artonge/chore/update_nc_pwd_confirmation_v5.3.1</option>
<option value='artonge/chore/update_password_confirmation_v5.3.1'>artonge/chore/update_password_confirmation_v5.3.1</option>
<option value='artonge/chore/user_retry_trait'>artonge/chore/user_retry_trait</option>
<option value='artonge/debt/core_main.js'>artonge/debt/core_main.js</option>
<option value='artonge/feat/add_retry_support_to_query_builder'>artonge/feat/add_retry_support_to_query_builder</option>
<option value='artonge/feat/allow_deleting_metadata'>artonge/feat/allow_deleting_metadata</option>
<option value='artonge/feat/allow_partial_seen_users'>artonge/feat/allow_partial_seen_users</option>
<option value='artonge/feat/compare_hashed_password_when_updating_global_cred_in_files_external'>artonge/feat/compare_hashed_password_when_updating_global_cred_in_files_external</option>
<option value='artonge/feat/do_not_require_samesite_strict_cookie_on_public.php'>artonge/feat/do_not_require_samesite_strict_cookie_on_public.php</option>
<option value='artonge/feat/files_trashbin_parallel_expire_job'>artonge/feat/files_trashbin_parallel_expire_job</option>
<option value='artonge/feat/forward_sizeDifference_on_write'>artonge/feat/forward_sizeDifference_on_write</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage'>artonge/feat/implement_custom_updater_for_object_storage</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage-squashed'>artonge/feat/implement_custom_updater_for_object_storage-squashed</option>
<option value='artonge/feat/implement_custom_updater_for_object_storage-squashed-29'>artonge/feat/implement_custom_updater_for_object_storage-squashed-29</option>
<option value='artonge/feat/maintenance_warn_encrypt_all'>artonge/feat/maintenance_warn_encrypt_all</option>
<option value='artonge/feat/pwd_confirmation_allow_set_period'>artonge/feat/pwd_confirmation_allow_set_period</option>
<option value='artonge/feat/reset_route_when_sidebar_and_viewer_are_close'>artonge/feat/reset_route_when_sidebar_and_viewer_are_close</option>
<option value='artonge/feat/skip-trash-header'>artonge/feat/skip-trash-header</option>
<option value='artonge/feat/validate_keychecksum'>artonge/feat/validate_keychecksum</option>
<option value='artonge/fix/access_list_unaccepted_shares'>artonge/fix/access_list_unaccepted_shares</option>
<option value='artonge/fix/attribute_in_sidebar'>artonge/fix/attribute_in_sidebar</option>
<option value='artonge/fix/catch_exception_in_expire_trash'>artonge/fix/catch_exception_in_expire_trash</option>
<option value='artonge/fix/color_debounce'>artonge/fix/color_debounce</option>
<option value='artonge/fix/copy_cache_during_copy_operations'>artonge/fix/copy_cache_during_copy_operations</option>
<option value='artonge/fix/copy_subfolders_s3'>artonge/fix/copy_subfolders_s3</option>
<option value='artonge/fix/count_users'>artonge/fix/count_users</option>
<option value='artonge/fix/displayname_in_sidebar'>artonge/fix/displayname_in_sidebar</option>
<option value='artonge/fix/do_not_pass_parent_for_activity_tab_comments_plugin'>artonge/fix/do_not_pass_parent_for_activity_tab_comments_plugin</option>
<option value='artonge/fix/drop_unecessary_exit'>artonge/fix/drop_unecessary_exit</option>
<option value='artonge/fix/epehmeral_sessions'>artonge/fix/epehmeral_sessions</option>
<option value='artonge/fix/extra_files_integrity_check'>artonge/fix/extra_files_integrity_check</option>
<option value='artonge/fix/file_list_jump_on_viewer_close'>artonge/fix/file_list_jump_on_viewer_close</option>
<option value='artonge/fix/forward_extra'>artonge/fix/forward_extra</option>
<option value='artonge/fix/generate_metadata_perf'>artonge/fix/generate_metadata_perf</option>
<option value='artonge/fix/getting_cache_entry'>artonge/fix/getting_cache_entry</option>
<option value='artonge/fix/handle_folders_copy_live_photos'>artonge/fix/handle_folders_copy_live_photos</option>
<option value='artonge/fix/hash_return_type'>artonge/fix/hash_return_type</option>
<option value='artonge/fix/listen_to_group_removal_for_share'>artonge/fix/listen_to_group_removal_for_share</option>
<option value='artonge/fix/login_flow_v2_sessions'>artonge/fix/login_flow_v2_sessions</option>
<option value='artonge/fix/login_flow_v2_sessions_2'>artonge/fix/login_flow_v2_sessions_2</option>
<option value='artonge/fix/make_error_a_info'>artonge/fix/make_error_a_info</option>
<option value='artonge/fix/metadata_field_search'>artonge/fix/metadata_field_search</option>
<option value='artonge/fix/min_age_rentention_files_versions'>artonge/fix/min_age_rentention_files_versions</option>
<option value='artonge/fix/missing_dot'>artonge/fix/missing_dot</option>
<option value='artonge/fix/opening_a_secondly_created_file'>artonge/fix/opening_a_secondly_created_file</option>
<option value='artonge/fix/prevent_missing_users_from_crashing_disabled_users_search'>artonge/fix/prevent_missing_users_from_crashing_disabled_users_search</option>
<option value='artonge/fix/publicpage_attribute'>artonge/fix/publicpage_attribute</option>
<option value='artonge/fix/remove_duplicate_propfind_call'>artonge/fix/remove_duplicate_propfind_call</option>
<option value='artonge/fix/remove_unnecessary_formating'>artonge/fix/remove_unnecessary_formating</option>
<option value='artonge/fix/restoring_encrypted_version'>artonge/fix/restoring_encrypted_version</option>
<option value='artonge/fix/sidebar_davpath'>artonge/fix/sidebar_davpath</option>
<option value='artonge/fix/skip_blurhash_if_previews_are_disabled'>artonge/fix/skip_blurhash_if_previews_are_disabled</option>
<option value='artonge/fix/storage_full_warning'>artonge/fix/storage_full_warning</option>
<option value='artonge/fix/systemtag_rendering'>artonge/fix/systemtag_rendering</option>
<option value='artonge/fix/transfer_ownership'>artonge/fix/transfer_ownership</option>
<option value='artonge/fix/uid_type'>artonge/fix/uid_type</option>
<option value='artonge/fix/use_loginname_to_check_password'>artonge/fix/use_loginname_to_check_password</option>
<option value='artonge/fix/use_preview_api_for_blurhash_generation'>artonge/fix/use_preview_api_for_blurhash_generation</option>
<option value='artonge/fix/vue_app_names'>artonge/fix/vue_app_names</option>
<option value='artonge/local/IONOS/feat/config_unified_search_providers_allowed'>artonge/local/IONOS/feat/config_unified_search_providers_allowed</option>
<option value='artonge/local/IONOS/tl/dev/disable-mailing'>artonge/local/IONOS/tl/dev/disable-mailing</option>
<option value='artonge/local/georglauterbach/feat/skip_cname'>artonge/local/georglauterbach/feat/skip_cname</option>
<option value='artonge/optim/close_connection_before_s3_upload'>artonge/optim/close_connection_before_s3_upload</option>
<option value='artonge/support_oc_checksum_in_bulk_upload'>artonge/support_oc_checksum_in_bulk_upload</option>
<option value='artonge/test/remove_only_calls'>artonge/test/remove_only_calls</option>
<option value='authPropertyPromotion'>authPropertyPromotion</option>
<option value='automated/noid/main-fix-npm-audit'>automated/noid/main-fix-npm-audit</option>
<option value='automated/noid/master-fix-npm-audit'>automated/noid/master-fix-npm-audit</option>
<option value='automated/noid/master-update-ca-cert-bundle'>automated/noid/master-update-ca-cert-bundle</option>
<option value='automated/noid/master-update-code-signing-crl'>automated/noid/master-update-code-signing-crl</option>
<option value='automated/noid/master-update-psalm-baseline'>automated/noid/master-update-psalm-baseline</option>
<option value='automated/noid/stable22-update-ca-cert-bundle'>automated/noid/stable22-update-ca-cert-bundle</option>
<option value='automated/noid/stable22-update-code-signing-crl'>automated/noid/stable22-update-code-signing-crl</option>
<option value='automated/noid/stable23-update-ca-cert-bundle'>automated/noid/stable23-update-ca-cert-bundle</option>
<option value='automated/noid/stable23-update-code-signing-crl'>automated/noid/stable23-update-code-signing-crl</option>
<option value='automated/noid/stable24-update-ca-cert-bundle'>automated/noid/stable24-update-ca-cert-bundle</option>
<option value='automated/noid/stable24-update-code-signing-crl'>automated/noid/stable24-update-code-signing-crl</option>
<option value='automated/noid/stable25-update-ca-cert-bundle'>automated/noid/stable25-update-ca-cert-bundle</option>
<option value='automated/noid/stable25-update-code-signing-crl'>automated/noid/stable25-update-code-signing-crl</option>
<option value='automated/noid/stable26-update-ca-cert-bundle'>automated/noid/stable26-update-ca-cert-bundle</option>
<option value='automated/noid/stable26-update-code-signing-crl'>automated/noid/stable26-update-code-signing-crl</option>
<option value='automated/noid/stable27-fix-npm-audit'>automated/noid/stable27-fix-npm-audit</option>
<option value='automated/noid/stable27-update-ca-cert-bundle'>automated/noid/stable27-update-ca-cert-bundle</option>
<option value='automated/noid/stable27-update-code-signing-crl'>automated/noid/stable27-update-code-signing-crl</option>
<option value='automated/noid/stable28-fix-npm-audit'>automated/noid/stable28-fix-npm-audit</option>
<option value='automated/noid/stable28-update-ca-cert-bundle'>automated/noid/stable28-update-ca-cert-bundle</option>
<option value='automated/noid/stable28-update-code-signing-crl'>automated/noid/stable28-update-code-signing-crl</option>
<option value='automated/noid/stable28-update-psalm-baseline'>automated/noid/stable28-update-psalm-baseline</option>
<option value='automated/noid/stable29-fix-npm-audit'>automated/noid/stable29-fix-npm-audit</option>
<option value='automated/noid/stable29-update-ca-cert-bundle'>automated/noid/stable29-update-ca-cert-bundle</option>
<option value='automated/noid/stable29-update-code-signing-crl'>automated/noid/stable29-update-code-signing-crl</option>
<option value='automated/noid/stable29-update-psalm-baseline'>automated/noid/stable29-update-psalm-baseline</option>
<option value='automated/noid/stable30-fix-npm-audit'>automated/noid/stable30-fix-npm-audit</option>
<option value='automated/noid/stable30-update-ca-cert-bundle'>automated/noid/stable30-update-ca-cert-bundle</option>
<option value='automated/noid/stable30-update-code-signing-crl'>automated/noid/stable30-update-code-signing-crl</option>
<option value='automated/noid/stable30-update-psalm-baseline'>automated/noid/stable30-update-psalm-baseline</option>
<option value='automated/noid/stable31-fix-npm-audit'>automated/noid/stable31-fix-npm-audit</option>
<option value='automated/noid/stable31-update-ca-cert-bundle'>automated/noid/stable31-update-ca-cert-bundle</option>
<option value='automated/noid/stable31-update-code-signing-crl'>automated/noid/stable31-update-code-signing-crl</option>
<option value='automated/update-workflows/default'>automated/update-workflows/default</option>
<option value='avatar-work-29'>avatar-work-29</option>
<option value='avoidStatusSessions'>avoidStatusSessions</option>
<option value='background-job-list-reserved'>background-job-list-reserved</option>
<option value='background-scan-eq'>background-scan-eq</option>
<option value='backport/29-openfile'>backport/29-openfile</option>
<option value='backport/30/fix_move_on_same_bucket'>backport/30/fix_move_on_same_bucket</option>
<option value='backport/38630/stable28'>backport/38630/stable28</option>
<option value='backport/38630/stable29'>backport/38630/stable29</option>
<option value='backport/38630/stable30'>backport/38630/stable30</option>
<option value='backport/39607/stable26'>backport/39607/stable26</option>
<option value='backport/39611/stable30'>backport/39611/stable30</option>
<option value='backport/40367/stable25'>backport/40367/stable25</option>
<option value='backport/40367/stable26'>backport/40367/stable26</option>
<option value='backport/40394/stable25'>backport/40394/stable25</option>
<option value='backport/40394/stable26'>backport/40394/stable26</option>
<option value='backport/40394/stable27'>backport/40394/stable27</option>
<option value='backport/40394/stable28'>backport/40394/stable28</option>
<option value='backport/40394/stable29'>backport/40394/stable29</option>
<option value='backport/40394/stable30'>backport/40394/stable30</option>
<option value='backport/41065/stable29'>backport/41065/stable29</option>
<option value='backport/41065/stable30'>backport/41065/stable30</option>
<option value='backport/41065/stable31'>backport/41065/stable31</option>
<option value='backport/41327/stable26'>backport/41327/stable26</option>
<option value='backport/42099/stable29'>backport/42099/stable29</option>
<option value='backport/42099/stable31'>backport/42099/stable31</option>
<option value='backport/42170/stable28'>backport/42170/stable28</option>
<option value='backport/42172/stable26'>backport/42172/stable26</option>
<option value='backport/42548/stable22'>backport/42548/stable22</option>
<option value='backport/42930/stable26'>backport/42930/stable26</option>
<option value='backport/42971/stable25'>backport/42971/stable25</option>
<option value='backport/43025/stable28'>backport/43025/stable28</option>
<option value='backport/43025/stable29'>backport/43025/stable29</option>
<option value='backport/43025/stable30'>backport/43025/stable30</option>
<option value='backport/43252/stable26'>backport/43252/stable26</option>
<option value='backport/43580/stable26'>backport/43580/stable26</option>
<option value='backport/44017/stable26'>backport/44017/stable26</option>
<option value='backport/44130/stable26'>backport/44130/stable26</option>
<option value='backport/44218/stable29'>backport/44218/stable29</option>
<option value='backport/44236/stable28'>backport/44236/stable28</option>
<option value='backport/44295/stable29'>backport/44295/stable29</option>
<option value='backport/44533/stable29'>backport/44533/stable29</option>
<option value='backport/44555/stable27'>backport/44555/stable27</option>
<option value='backport/44745/stable27'>backport/44745/stable27</option>
<option value='backport/44745/stable28'>backport/44745/stable28</option>
<option value='backport/44838/stable27'>backport/44838/stable27</option>
<option value='backport/44912/stable27'>backport/44912/stable27</option>
<option value='backport/44945/stable30'>backport/44945/stable30</option>
<option value='backport/44956/stable28'>backport/44956/stable28</option>
<option value='backport/45026/stable26'>backport/45026/stable26</option>
<option value='backport/45098/stable28'>backport/45098/stable28</option>
<option value='backport/45098/stable29'>backport/45098/stable29</option>
<option value='backport/45364/stable29'>backport/45364/stable29</option>
<option value='backport/45364/stable30'>backport/45364/stable30</option>
<option value='backport/45364/stable31'>backport/45364/stable31</option>
<option value='backport/45765/master'>backport/45765/master</option>
<option value='backport/45765/stable30'>backport/45765/stable30</option>
<option value='backport/45848/stable28'>backport/45848/stable28</option>
<option value='backport/46013/stable26'>backport/46013/stable26</option>
<option value='backport/46013/stable27'>backport/46013/stable27</option>
<option value='backport/46013/stable28'>backport/46013/stable28</option>
<option value='backport/46114/stable30'>backport/46114/stable30</option>
<option value='backport/46124/stable28'>backport/46124/stable28</option>
<option value='backport/46124/stable29'>backport/46124/stable29</option>
<option value='backport/46124/stable30'>backport/46124/stable30</option>
<option value='backport/46140/stable28'>backport/46140/stable28</option>
<option value='backport/46140/stable29'>backport/46140/stable29</option>
<option value='backport/46140/stable30'>backport/46140/stable30</option>
<option value='backport/46218/stable27'>backport/46218/stable27</option>
<option value='backport/46218/stable28'>backport/46218/stable28</option>
<option value='backport/46218/stable29'>backport/46218/stable29</option>
<option value='backport/46218/stable30'>backport/46218/stable30</option>
<option value='backport/46222/stable30'>backport/46222/stable30</option>
<option value='backport/46307/stable29'>backport/46307/stable29</option>
<option value='backport/46418/stable29'>backport/46418/stable29</option>
<option value='backport/46480/stable28'>backport/46480/stable28</option>
<option value='backport/46480/stable29'>backport/46480/stable29</option>
<option value='backport/46480/stable30'>backport/46480/stable30</option>
<option value='backport/46534/stable27'>backport/46534/stable27</option>
<option value='backport/46691/stable30'>backport/46691/stable30</option>
<option value='backport/46780/stable30'>backport/46780/stable30</option>
<option value='backport/46780/stable31'>backport/46780/stable31</option>
<option value='backport/46887/stable29'>backport/46887/stable29</option>
<option value='backport/46931/stable28'>backport/46931/stable28</option>
<option value='backport/47180/stable26'>backport/47180/stable26</option>
<option value='backport/47180/stable28'>backport/47180/stable28</option>
ss="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.Constants.AccessRestrictionType</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.Constants.PermissionType</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.Constants.RegistrantType</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.Constants.Unused</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.gitblit.utils.StringUtils</span><span class="p">;</span>

<span class="cm">/**</span>
<span class="cm"> * TeamModel is a serializable model class that represents a group of users and</span>
<span class="cm"> * a list of accessible repositories.</span>
<span class="cm"> * </span>
<span class="cm"> * @author James Moger</span>
<span class="cm"> * </span>
<span class="cm"> */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">TeamModel</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Serializable</span><span class="p">,</span><span class="w"> </span><span class="n">Comparable</span><span class="o">&lt;</span><span class="n">TeamModel</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>

<span class="w">	</span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">serialVersionUID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1L</span><span class="p">;</span>

<span class="w">	</span><span class="c1">// field names are reflectively mapped in EditTeam page</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">canAdmin</span><span class="p">;</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">canFork</span><span class="p">;</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">canCreate</span><span class="p">;</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Set</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HashSet</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">	</span><span class="c1">// retained for backwards-compatibility with RPC clients</span>
<span class="w">	</span><span class="nd">@Deprecated</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Set</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">repositories</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HashSet</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="o">&gt;</span><span class="w"> </span><span class="n">permissions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">LinkedHashMap</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Set</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">mailingLists</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HashSet</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">preReceiveScripts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">postReceiveScripts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="nf">TeamModel</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">this</span><span class="p">.</span><span class="na">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * @use hasRepositoryPermission</span>
<span class="cm">	 * @param name</span>
<span class="cm">	 * @return</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="nd">@Deprecated</span>
<span class="w">	</span><span class="nd">@Unused</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">hasRepository</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">hasRepositoryPermission</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Deprecated</span>
<span class="w">	</span><span class="nd">@Unused</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addRepository</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">addRepositoryPermission</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="nd">@Deprecated</span>
<span class="w">	</span><span class="nd">@Unused</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addRepositories</span><span class="p">(</span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">names</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">addRepositoryPermissions</span><span class="p">(</span><span class="n">names</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Deprecated</span>
<span class="w">	</span><span class="nd">@Unused</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeRepository</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">removeRepositoryPermission</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span>
<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Returns a list of repository permissions for this team.</span>
<span class="cm">	 * </span>
<span class="cm">	 * @return the team&#39;s list of permissions</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">RegistrantAccessPermission</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">getRepositoryPermissions</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">List</span><span class="o">&lt;</span><span class="n">RegistrantAccessPermission</span><span class="o">&gt;</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">RegistrantAccessPermission</span><span class="o">&gt;</span><span class="p">();</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">canAdmin</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// team has REWIND access to all repositories</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="n">list</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">Map</span><span class="p">.</span><span class="na">Entry</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="o">&gt;</span><span class="w"> </span><span class="n">entry</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">entrySet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">String</span><span class="w"> </span><span class="n">registrant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">entry</span><span class="p">.</span><span class="na">getKey</span><span class="p">();</span>
<span class="w">			</span><span class="n">String</span><span class="w"> </span><span class="n">source</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">			</span><span class="kt">boolean</span><span class="w"> </span><span class="n">editable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">			</span><span class="n">PermissionType</span><span class="w"> </span><span class="n">pType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PermissionType</span><span class="p">.</span><span class="na">EXPLICIT</span><span class="p">;</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">findInvalidCharacter</span><span class="p">(</span><span class="n">registrant</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="c1">// a regex will have at least 1 invalid character</span>
<span class="w">				</span><span class="n">pType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PermissionType</span><span class="p">.</span><span class="na">REGEX</span><span class="p">;</span>
<span class="w">				</span><span class="n">source</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">registrant</span><span class="p">;</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">			</span><span class="n">list</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">RegistrantAccessPermission</span><span class="p">(</span><span class="n">registrant</span><span class="p">,</span><span class="w"> </span><span class="n">entry</span><span class="p">.</span><span class="na">getValue</span><span class="p">(),</span><span class="w"> </span><span class="n">pType</span><span class="p">,</span><span class="w"> </span><span class="n">RegistrantType</span><span class="p">.</span><span class="na">REPOSITORY</span><span class="p">,</span><span class="w"> </span><span class="n">source</span><span class="p">,</span><span class="w"> </span><span class="n">editable</span><span class="p">));</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="n">Collections</span><span class="p">.</span><span class="na">sort</span><span class="p">(</span><span class="n">list</span><span class="p">);</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">list</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Returns true if the team has any type of specified access permission for</span>
<span class="cm">	 * this repository.</span>
<span class="cm">	 * </span>
<span class="cm">	 * @param name</span>
<span class="cm">	 * @return true if team has a specified access permission for the repository</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">hasRepositoryPermission</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">repositoryFromRole</span><span class="p">(</span><span class="n">name</span><span class="p">).</span><span class="na">toLowerCase</span><span class="p">();</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">permissions</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">repository</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// exact repository permission specified</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// search for regex permission match</span>
<span class="w">			</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">keySet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="p">.</span><span class="na">matches</span><span class="p">(</span><span class="n">key</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">key</span><span class="p">);</span>
<span class="w">					</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">						</span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">					</span><span class="p">}</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Returns true if the team has an explicitly specified access permission for</span>
<span class="cm">	 * this repository.</span>
<span class="cm">	 * </span>
<span class="cm">	 * @param name</span>
<span class="cm">	 * @return if the team has an explicitly specified access permission</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">hasExplicitRepositoryPermission</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">repositoryFromRole</span><span class="p">(</span><span class="n">name</span><span class="p">).</span><span class="na">toLowerCase</span><span class="p">();</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="cm">/**</span>
<span class="cm">	 * Adds a repository permission to the team.</span>
<span class="cm">	 * &lt;p&gt;</span>
<span class="cm">	 * Role may be formatted as:</span>
<span class="cm">	 * &lt;ul&gt;</span>
<span class="cm">	 * &lt;li&gt; myrepo.git &lt;i&gt;(this is implicitly RW+)&lt;/i&gt;</span>
<span class="cm">	 * &lt;li&gt; RW+:myrepo.git</span>
<span class="cm">	 * &lt;/ul&gt;</span>
<span class="cm">	 * @param role</span>
<span class="cm">	 */</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addRepositoryPermission</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">role</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">permission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">permissionFromRole</span><span class="p">(</span><span class="n">role</span><span class="p">);</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">repositoryFromRole</span><span class="p">(</span><span class="n">role</span><span class="p">).</span><span class="na">toLowerCase</span><span class="p">();</span>
<span class="w">		</span><span class="n">repositories</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">		</span><span class="n">permissions</span><span class="p">.</span><span class="na">put</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">permission</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addRepositoryPermissions</span><span class="p">(</span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">roles</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">role</span><span class="p">:</span><span class="n">roles</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">addRepositoryPermission</span><span class="p">(</span><span class="n">role</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="n">AccessPermission</span><span class="w"> </span><span class="nf">removeRepositoryPermission</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">String</span><span class="w"> </span><span class="n">repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">repositoryFromRole</span><span class="p">(</span><span class="n">name</span><span class="p">).</span><span class="na">toLowerCase</span><span class="p">();</span>
<span class="w">		</span><span class="n">repositories</span><span class="p">.</span><span class="na">remove</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">remove</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setRepositoryPermission</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">permission</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">permissions</span><span class="p">.</span><span class="na">put</span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">(),</span><span class="w"> </span><span class="n">permission</span><span class="p">);</span>
<span class="w">		</span><span class="n">repositories</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="n">RegistrantAccessPermission</span><span class="w"> </span><span class="nf">getRepositoryPermission</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">RegistrantAccessPermission</span><span class="w"> </span><span class="n">ap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RegistrantAccessPermission</span><span class="p">();</span>
<span class="w">		</span><span class="n">ap</span><span class="p">.</span><span class="na">registrant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w">		</span><span class="n">ap</span><span class="p">.</span><span class="na">registrantType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RegistrantType</span><span class="p">.</span><span class="na">TEAM</span><span class="p">;</span>
<span class="w">		</span><span class="n">ap</span><span class="p">.</span><span class="na">permission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">NONE</span><span class="p">;</span>
<span class="w">		</span><span class="n">ap</span><span class="p">.</span><span class="na">mutable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">		</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">canAdmin</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">ap</span><span class="p">.</span><span class="na">permissionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PermissionType</span><span class="p">.</span><span class="na">ADMINISTRATOR</span><span class="p">;</span>
<span class="w">			</span><span class="n">ap</span><span class="p">.</span><span class="na">permission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">REWIND</span><span class="p">;</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="n">ap</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">permissions</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">()))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// exact repository permission specified</span>
<span class="w">			</span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">			</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="n">ap</span><span class="p">.</span><span class="na">permissionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PermissionType</span><span class="p">.</span><span class="na">EXPLICIT</span><span class="p">;</span>
<span class="w">				</span><span class="n">ap</span><span class="p">.</span><span class="na">permission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p</span><span class="p">;</span>
<span class="w">				</span><span class="n">ap</span><span class="p">.</span><span class="na">mutable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">				</span><span class="k">return</span><span class="w"> </span><span class="n">ap</span><span class="p">;</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="c1">// search for case-insensitive regex permission match</span>
<span class="w">			</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">keySet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">				</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">StringUtils</span><span class="p">.</span><span class="na">matchesIgnoreCase</span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">name</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">					</span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">permissions</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">key</span><span class="p">);</span>
<span class="w">					</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">						</span><span class="c1">// take first match</span>
<span class="w">						</span><span class="n">ap</span><span class="p">.</span><span class="na">permissionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PermissionType</span><span class="p">.</span><span class="na">REGEX</span><span class="p">;</span>
<span class="w">						</span><span class="n">ap</span><span class="p">.</span><span class="na">permission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p</span><span class="p">;</span>
<span class="w">						</span><span class="n">ap</span><span class="p">.</span><span class="na">source</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">key</span><span class="p">;</span>
<span class="w">						</span><span class="k">return</span><span class="w"> </span><span class="n">ap</span><span class="p">;</span>
<span class="w">					</span><span class="p">}</span>
<span class="w">				</span><span class="p">}</span>
<span class="w">			</span><span class="p">}</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">ap</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="kd">protected</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canAccess</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="w"> </span><span class="n">ifRestriction</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="w"> </span><span class="n">requirePermission</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">accessRestriction</span><span class="p">.</span><span class="na">atLeast</span><span class="p">(</span><span class="n">ifRestriction</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">RegistrantAccessPermission</span><span class="w"> </span><span class="n">ap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getRepositoryPermission</span><span class="p">(</span><span class="n">repository</span><span class="p">);</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="n">ap</span><span class="p">.</span><span class="na">permission</span><span class="p">.</span><span class="na">atLeast</span><span class="p">(</span><span class="n">requirePermission</span><span class="p">);</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>
<span class="w">	</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canView</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">VIEW</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">VIEW</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canClone</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">CLONE</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">CLONE</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canPush</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">isFrozen</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">PUSH</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">PUSH</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canCreateRef</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">isFrozen</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">PUSH</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">CREATE</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canDeleteRef</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">isFrozen</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">PUSH</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">DELETE</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">canRewindRef</span><span class="p">(</span><span class="n">RepositoryModel</span><span class="w"> </span><span class="n">repository</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">repository</span><span class="p">.</span><span class="na">isFrozen</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">canAccess</span><span class="p">(</span><span class="n">repository</span><span class="p">,</span><span class="w"> </span><span class="n">AccessRestrictionType</span><span class="p">.</span><span class="na">PUSH</span><span class="p">,</span><span class="w"> </span><span class="n">AccessPermission</span><span class="p">.</span><span class="na">REWIND</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">hasUser</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">users</span><span class="p">.</span><span class="na">contains</span><span class="p">(</span><span class="n">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addUser</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">users</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addUsers</span><span class="p">(</span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">names</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="n">names</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">users</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeUser</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">users</span><span class="p">.</span><span class="na">remove</span><span class="p">(</span><span class="n">name</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addMailingLists</span><span class="p">(</span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">addresses</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">address</span><span class="p">:</span><span class="n">addresses</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">			</span><span class="n">mailingLists</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">address</span><span class="p">.</span><span class="na">toLowerCase</span><span class="p">());</span>
<span class="w">		</span><span class="p">}</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Override</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">toString</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="nd">@Override</span>
<span class="w">	</span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">compareTo</span><span class="p">(</span><span class="n">TeamModel</span><span class="w"> </span><span class="n">o</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="na">compareTo</span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="na">name</span><span class="p">);</span>
<span class="w">	</span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-07-24 23:33:14 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
