From 9af47c10c6a268877c1d232c8d71ee6df4f8a7ab Mon Sep 17 00:00:00 2001
From: Jeroen Baten <jeroen@jeroenbaten.nl>
Date: Fri, 04 Jan 2013 05:18:37 -0500
Subject: [PATCH] Dutch translation before spellcheck

---
 src/com/gitblit/client/RegistrantPermissionsPanel.java |  101 ++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 84 insertions(+), 17 deletions(-)

diff --git a/src/com/gitblit/client/RegistrantPermissionsPanel.java b/src/com/gitblit/client/RegistrantPermissionsPanel.java
index 4ea173f..98dbfb7 100644
--- a/src/com/gitblit/client/RegistrantPermissionsPanel.java
+++ b/src/com/gitblit/client/RegistrantPermissionsPanel.java
@@ -16,10 +16,14 @@
 package com.gitblit.client;
 
 import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import javax.swing.DefaultCellEditor;
@@ -33,7 +37,11 @@
 import javax.swing.table.DefaultTableCellRenderer;
 
 import com.gitblit.Constants.AccessPermission;
+import com.gitblit.Constants.PermissionType;
+import com.gitblit.Constants.RegistrantType;
+import com.gitblit.client.Utils.RowRenderer;
 import com.gitblit.models.RegistrantAccessPermission;
+import com.gitblit.utils.StringUtils;
 
 public class RegistrantPermissionsPanel extends JPanel {
 
@@ -53,16 +61,35 @@
 
 	private JPanel addPanel;
 
-	public RegistrantPermissionsPanel() {
+	public RegistrantPermissionsPanel(final RegistrantType registrantType) {
 		super(new BorderLayout(5, 5));
 		tableModel = new RegistrantPermissionsTableModel();
-		permissionsTable = new JTable(tableModel);
+		permissionsTable = Utils.newTable(tableModel, Utils.DATE_FORMAT, new RowRenderer() {
+			Color clear = new Color(0, 0, 0, 0);
+			Color iceGray = new Color(0xf0, 0xf0, 0xf0);
+			
+			@Override
+			public void prepareRow(Component c, boolean isSelected, int row, int column) {
+				if (isSelected) {
+					c.setBackground(permissionsTable.getSelectionBackground());
+				} else {
+					if (tableModel.permissions.get(row).mutable) {
+						c.setBackground(clear);
+					} else {
+						c.setBackground(iceGray);
+					}
+				}
+			}
+		});
+		permissionsTable.setModel(tableModel);
 		permissionsTable.setPreferredScrollableViewportSize(new Dimension(400, 150));
 		JScrollPane jsp = new JScrollPane(permissionsTable);
 		add(jsp, BorderLayout.CENTER);
 		
+		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Registrant.ordinal())
+		.setCellRenderer(new NameRenderer());
 		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Type.ordinal())
-				.setCellRenderer(new RegexRenderer());
+				.setCellRenderer(new PermissionTypeRenderer());
 		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Permission.ordinal())
 		.setCellEditor(new AccessPermissionEditor());
 		
@@ -79,10 +106,19 @@
 					return;
 				}
 				
-				RegistrantAccessPermission rp = new RegistrantAccessPermission();
+				RegistrantAccessPermission rp = new RegistrantAccessPermission(registrantType);
 				rp.registrant = registrantSelector.getSelectedItem().toString();
 				rp.permission = (AccessPermission) permissionSelector.getSelectedItem();
+				if (StringUtils.findInvalidCharacter(rp.registrant) != null) {
+					rp.permissionType = PermissionType.REGEX;
+					rp.source = rp.registrant;
+				} else {
+					rp.permissionType = PermissionType.EXPLICIT;
+				}
+
 				tableModel.permissions.add(rp);
+				// resort permissions after insert to convey idea of eval order
+				Collections.sort(tableModel.permissions);
 				
 				registrantModel.removeElement(rp.registrant);
 				registrantSelector.setSelectedIndex(-1);
@@ -103,7 +139,10 @@
 	@Override
 	public void setEnabled(boolean enabled) {
 		super.setEnabled(enabled);
-		permissionsTable.setEnabled(false);
+		permissionsTable.setEnabled(enabled);
+		registrantSelector.setEnabled(enabled);
+		permissionSelector.setEnabled(enabled);
+		addButton.setEnabled(enabled);
 	}
 
 	public void setObjects(List<String> registrants, List<RegistrantAccessPermission> permissions) {
@@ -117,7 +156,17 @@
 			permissions = new ArrayList<RegistrantAccessPermission>();
 		}
 		for (RegistrantAccessPermission rp : permissions) {
-			filtered.remove(rp.registrant);
+			if (rp.mutable) {
+				// only remove editable duplicates
+				// this allows for specifying an explicit permission
+				filtered.remove(rp.registrant);
+			} else if (rp.isAdmin()) {
+				// administrators can not have their permission changed
+				filtered.remove(rp.registrant);
+			} else if (rp.isOwner()) {
+				// owners can not have their permission changed
+				filtered.remove(rp.registrant);
+			}
 		}
 		for (String registrant : filtered) {
 			registrantModel.addElement(registrant);
@@ -138,30 +187,48 @@
 		private static final long serialVersionUID = 1L;
 
 		public AccessPermissionEditor() {
-	        super(new JComboBox(AccessPermission.values()));
+	        super(new JComboBox(AccessPermission.values()));	        
 	    }
 	}
 	
-	private class RegexRenderer extends DefaultTableCellRenderer {
+	private class PermissionTypeRenderer extends DefaultTableCellRenderer {
 
 		private static final long serialVersionUID = 1L;
 
-		public RegexRenderer() {
+		public PermissionTypeRenderer() {
 			super();
 			setHorizontalAlignment(SwingConstants.CENTER);
 		}
 
 		@Override
 		protected void setValue(Object value) {
-			boolean isExplicit = (Boolean) value;
-			if (isExplicit) {
-				// explicit permission
-				setText("");
-				setToolTipText(null);
-			} else {
-				// regex matched permission
+			RegistrantAccessPermission ap = (RegistrantAccessPermission) value;
+			switch (ap.permissionType) {
+			case ADMINISTRATOR:
+				setText(ap.source == null ? Translation.get("gb.administrator") : ap.source);
+				setToolTipText(Translation.get("gb.administratorPermission"));
+				break;
+			case OWNER:
+				setText(Translation.get("gb.owner"));
+				setToolTipText(Translation.get("gb.ownerPermission"));
+				break;
+			case TEAM:
+				setText(ap.source == null ? Translation.get("gb.team") : ap.source);
+				setToolTipText(MessageFormat.format(Translation.get("gb.teamPermission"), ap.source));
+				break;
+			case REGEX:
 				setText("regex");
-				setToolTipText(Translation.get("gb.regexPermission"));
+				setToolTipText(MessageFormat.format(Translation.get("gb.regexPermission"), ap.source));
+				break;
+			default:
+				if (ap.isMissing()) {
+					setText(Translation.get("gb.missing"));
+					setToolTipText(Translation.get("gb.missingPermission"));
+				} else {
+					setText("");
+					setToolTipText(null);
+				}
+				break;
 			}
 		}
 	}

--
Gitblit v1.9.1