Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

RegistrantPermissionsPanel.java 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /*
  2. * Copyright 2012 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.client;
  17. import java.awt.BorderLayout;
  18. import java.awt.Color;
  19. import java.awt.Component;
  20. import java.awt.Dimension;
  21. import java.awt.event.ActionEvent;
  22. import java.awt.event.ActionListener;
  23. import java.text.MessageFormat;
  24. import java.util.ArrayList;
  25. import java.util.Collections;
  26. import java.util.List;
  27. import javax.swing.DefaultCellEditor;
  28. import javax.swing.DefaultComboBoxModel;
  29. import javax.swing.JButton;
  30. import javax.swing.JComboBox;
  31. import javax.swing.JPanel;
  32. import javax.swing.JScrollPane;
  33. import javax.swing.JTable;
  34. import javax.swing.SwingConstants;
  35. import javax.swing.table.DefaultTableCellRenderer;
  36. import com.gitblit.Constants.AccessPermission;
  37. import com.gitblit.Constants.PermissionType;
  38. import com.gitblit.Constants.RegistrantType;
  39. import com.gitblit.client.Utils.RowRenderer;
  40. import com.gitblit.models.RegistrantAccessPermission;
  41. import com.gitblit.utils.StringUtils;
  42. public class RegistrantPermissionsPanel extends JPanel {
  43. private static final long serialVersionUID = 1L;
  44. private JTable permissionsTable;
  45. private RegistrantPermissionsTableModel tableModel;
  46. private DefaultComboBoxModel registrantModel;
  47. private JComboBox registrantSelector;
  48. private JComboBox permissionSelector;
  49. private JButton addButton;
  50. private JPanel addPanel;
  51. public RegistrantPermissionsPanel(final RegistrantType registrantType) {
  52. super(new BorderLayout(5, 5));
  53. tableModel = new RegistrantPermissionsTableModel();
  54. permissionsTable = Utils.newTable(tableModel, Utils.DATE_FORMAT, new RowRenderer() {
  55. Color clear = new Color(0, 0, 0, 0);
  56. Color iceGray = new Color(0xf0, 0xf0, 0xf0);
  57. @Override
  58. public void prepareRow(Component c, boolean isSelected, int row, int column) {
  59. if (isSelected) {
  60. c.setBackground(permissionsTable.getSelectionBackground());
  61. } else {
  62. if (tableModel.permissions.get(row).mutable) {
  63. c.setBackground(clear);
  64. } else {
  65. c.setBackground(iceGray);
  66. }
  67. }
  68. }
  69. });
  70. permissionsTable.setModel(tableModel);
  71. permissionsTable.setPreferredScrollableViewportSize(new Dimension(400, 150));
  72. JScrollPane jsp = new JScrollPane(permissionsTable);
  73. add(jsp, BorderLayout.CENTER);
  74. permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Registrant.ordinal())
  75. .setCellRenderer(new NameRenderer());
  76. permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Type.ordinal())
  77. .setCellRenderer(new PermissionTypeRenderer());
  78. permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Permission.ordinal())
  79. .setCellEditor(new AccessPermissionEditor());
  80. registrantModel = new DefaultComboBoxModel();
  81. registrantSelector = new JComboBox(registrantModel);
  82. permissionSelector = new JComboBox(AccessPermission.NEWPERMISSIONS);
  83. addButton = new JButton(Translation.get("gb.add"));
  84. addButton.addActionListener(new ActionListener() {
  85. public void actionPerformed(ActionEvent e) {
  86. if (registrantSelector.getSelectedIndex() < 0) {
  87. return;
  88. }
  89. if (permissionSelector.getSelectedIndex() < 0) {
  90. return;
  91. }
  92. RegistrantAccessPermission rp = new RegistrantAccessPermission(registrantType);
  93. rp.registrant = registrantSelector.getSelectedItem().toString();
  94. rp.permission = (AccessPermission) permissionSelector.getSelectedItem();
  95. if (StringUtils.findInvalidCharacter(rp.registrant) != null) {
  96. rp.permissionType = PermissionType.REGEX;
  97. rp.source = rp.registrant;
  98. } else {
  99. rp.permissionType = PermissionType.EXPLICIT;
  100. }
  101. tableModel.permissions.add(rp);
  102. // resort permissions after insert to convey idea of eval order
  103. Collections.sort(tableModel.permissions);
  104. registrantModel.removeElement(rp.registrant);
  105. registrantSelector.setSelectedIndex(-1);
  106. registrantSelector.invalidate();
  107. addPanel.setVisible(registrantModel.getSize() > 0);
  108. tableModel.fireTableDataChanged();
  109. }
  110. });
  111. addPanel = new JPanel();
  112. addPanel.add(registrantSelector);
  113. addPanel.add(permissionSelector);
  114. addPanel.add(addButton);
  115. add(addPanel, BorderLayout.SOUTH);
  116. }
  117. @Override
  118. public void setEnabled(boolean enabled) {
  119. super.setEnabled(enabled);
  120. permissionsTable.setEnabled(enabled);
  121. registrantSelector.setEnabled(enabled);
  122. permissionSelector.setEnabled(enabled);
  123. addButton.setEnabled(enabled);
  124. }
  125. public void setObjects(List<String> registrants, List<RegistrantAccessPermission> permissions) {
  126. List<String> filtered;
  127. if (registrants == null) {
  128. filtered = new ArrayList<String>();
  129. } else {
  130. filtered = new ArrayList<String>(registrants);
  131. }
  132. if (permissions == null) {
  133. permissions = new ArrayList<RegistrantAccessPermission>();
  134. }
  135. for (RegistrantAccessPermission rp : permissions) {
  136. if (rp.mutable) {
  137. // only remove editable duplicates
  138. // this allows for specifying an explicit permission
  139. filtered.remove(rp.registrant);
  140. } else if (rp.isAdmin()) {
  141. // administrators can not have their permission changed
  142. filtered.remove(rp.registrant);
  143. } else if (rp.isOwner()) {
  144. // owners can not have their permission changed
  145. filtered.remove(rp.registrant);
  146. }
  147. }
  148. for (String registrant : filtered) {
  149. registrantModel.addElement(registrant);
  150. }
  151. tableModel.setPermissions(permissions);
  152. registrantSelector.setSelectedIndex(-1);
  153. permissionSelector.setSelectedIndex(-1);
  154. addPanel.setVisible(filtered.size() > 0);
  155. }
  156. public List<RegistrantAccessPermission> getPermissions() {
  157. return tableModel.permissions;
  158. }
  159. private class AccessPermissionEditor extends DefaultCellEditor {
  160. private static final long serialVersionUID = 1L;
  161. public AccessPermissionEditor() {
  162. super(new JComboBox(AccessPermission.values()));
  163. }
  164. }
  165. private class PermissionTypeRenderer extends DefaultTableCellRenderer {
  166. private static final long serialVersionUID = 1L;
  167. public PermissionTypeRenderer() {
  168. super();
  169. setHorizontalAlignment(SwingConstants.CENTER);
  170. }
  171. @Override
  172. protected void setValue(Object value) {
  173. RegistrantAccessPermission ap = (RegistrantAccessPermission) value;
  174. switch (ap.permissionType) {
  175. case ADMINISTRATOR:
  176. setText(ap.source == null ? Translation.get("gb.administrator") : ap.source);
  177. setToolTipText(Translation.get("gb.administratorPermission"));
  178. break;
  179. case OWNER:
  180. setText(Translation.get("gb.owner"));
  181. setToolTipText(Translation.get("gb.ownerPermission"));
  182. break;
  183. case TEAM:
  184. setText(ap.source == null ? Translation.get("gb.team") : ap.source);
  185. setToolTipText(MessageFormat.format(Translation.get("gb.teamPermission"), ap.source));
  186. break;
  187. case REGEX:
  188. setText("regex");
  189. setToolTipText(MessageFormat.format(Translation.get("gb.regexPermission"), ap.source));
  190. break;
  191. default:
  192. if (ap.isMissing()) {
  193. setText(Translation.get("gb.missing"));
  194. setToolTipText(Translation.get("gb.missingPermission"));
  195. } else {
  196. setText("");
  197. setToolTipText(null);
  198. }
  199. break;
  200. }
  201. }
  202. }
  203. }