solving #4013 (GrantedAuthority: Humane label of TaxonNode authorities)
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Mon, 10 Feb 2014 13:59:16 +0000 (13:59 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Mon, 10 Feb 2014 13:59:16 +0000 (13:59 +0000)
.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityRow.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityLabelTextProvider.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java

index 2388d9c2ac28779d5fba7f62d07c3aa6bfbbdc8c..e67732be1f7a08ca432c5ffdbd739125ab8b4e0d 100644 (file)
@@ -1410,6 +1410,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/gra
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailWizardPage.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityLabelTextProvider.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupDetailWizardPage.java -text
index 24374e69867d40a5fe1af9ebd055db1d19b5d905..1a42ff8d9b177d27417c4a5db4f7dc48a213ff85 100644 (file)
@@ -24,6 +24,7 @@ import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
 import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
 import eu.etaxonomy.taxeditor.newWizard.NewGrantedAuthorityWizard;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelTextProvider;
 
 /**
  * @author a.kohlbecker
@@ -64,7 +65,8 @@ public class GrantedAuthoritySelectionDialog extends  AbstractFilteredCdmResource
                model = new ArrayList<UuidAndTitleCache<GrantedAuthorityImpl>>();
 
                for(GrantedAuthorityImpl authority : authorities){
-                       model.add(new UuidAndTitleCache<GrantedAuthorityImpl>(GrantedAuthorityImpl.class, authority.getUuid(),String.format("%s", authority.getAuthority())));
+                       
+                       model.add(new UuidAndTitleCache<GrantedAuthorityImpl>(GrantedAuthorityImpl.class, authority.getUuid(),String.format("%s", GrantedAuthorityLabelTextProvider.getText(authority))));
                }
        }
 
@@ -94,7 +96,7 @@ public class GrantedAuthoritySelectionDialog extends  AbstractFilteredCdmResource
 
        @Override
        protected String getTitle(GrantedAuthorityImpl authority) {
-               return authority != null ? authority.getAuthority() : "";
+               return authority != null ? GrantedAuthorityLabelTextProvider.getText(authority) : "";
        }
 
 }
index 16068ddbf779e92cf55bf98ec12d85bbc4ba1477..ecd134a573ae9766f8f5221dc9574f81f1ab1098 100644 (file)
@@ -24,6 +24,7 @@ import org.eclipse.ui.forms.widgets.FormToolkit;
 import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
 import eu.etaxonomy.taxeditor.model.ImageResources;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelTextProvider;
 
 
 /**
@@ -37,7 +38,7 @@ public class CdmAuthorityRow extends Composite {
 
        private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
        private Label lblEntity;
-       private Label lblUuid;
+       private Label lblTarget;
        private CRUDOperationChooser operationChooser;
        private Button btnDelete;
        
@@ -87,14 +88,14 @@ public class CdmAuthorityRow extends Composite {
                toolkit.adapt(lblEntity, true, true);
                lblEntity.setText("Entity");
                
-               lblUuid = new Label(this, SWT.BORDER);
-               GridData gd_lblUuid = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1);
-               gd_lblUuid.heightHint = 30;
-               gd_lblUuid.widthHint = 270;
-               lblUuid.setLayoutData(gd_lblUuid);
-               lblUuid.setAlignment(SWT.CENTER);
-               toolkit.adapt(lblUuid, true, true);
-               lblUuid.setText("Uuid");
+               lblTarget = new Label(this, SWT.BORDER + SWT.WRAP);
+               GridData gd_lblTarget = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1);
+               gd_lblTarget.heightHint = 30;
+               gd_lblTarget.widthHint = 270;
+               lblTarget.setLayoutData(gd_lblTarget);
+               lblTarget.setAlignment(SWT.LEFT);
+               toolkit.adapt(lblTarget, true, true);
+               lblTarget.setText("Uuid");
                
                operationChooser = new CRUDOperationChooser(this, SWT.BORDER);
                operationChooser.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
@@ -149,8 +150,8 @@ public class CdmAuthorityRow extends Composite {
 
                        String entityStr = (cdmAuthority.getPermissionClass() == null)?"":cdmAuthority.getPermissionClass().toString();
                        lblEntity.setText(entityStr);
-                       String uuidStr = (cdmAuthority.getTargetUUID() == null)?"":cdmAuthority.getTargetUUID().toString();
-                       lblUuid.setText(uuidStr);
+                       String targetLabelText = GrantedAuthorityLabelTextProvider.getTargetText(cdmAuthority);
+                       lblTarget.setText(targetLabelText);
 
                        operationChooser.setAuthority(cdmaModel, grantedAuthorityI, cdmAuthority);                              
                        
index e443d388c75ed9f5360869f732f695a032838a6c..beb9387d3e161cf18c117429584ce4e664247cd5 100644 (file)
@@ -11,6 +11,7 @@
 package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
 
 import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
@@ -38,7 +39,9 @@ public class GrantedAuthorityDetailElement extends AbstractCdmDetailElement<Gran
        @Override
        protected void createControls(ICdmFormElement formElement,
                        GrantedAuthorityImpl entity, int style) {
-               text_authority = formFactory.createTextWithLabelElement(formElement, "Authority", entity.getAuthority(), style);
+               
+               String labelText = GrantedAuthorityLabelTextProvider.getText(entity);
+               text_authority = formFactory.createTextWithLabelElement(formElement, "Authority", labelText, style);
                
        }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityLabelTextProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityLabelTextProvider.java
new file mode 100644 (file)
index 0000000..13e7836
--- /dev/null
@@ -0,0 +1,101 @@
+package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
+
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.springframework.security.core.GrantedAuthority;
+
+import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.IUserService;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
+
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionClass;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+public class GrantedAuthorityLabelTextProvider {
+       
+       public static final Logger logger = Logger.getLogger(CdmAuthority.class);
+       
+       
+       public static String getText(GrantedAuthority grantedAuthority){
+               String labelText =  grantedAuthority.getAuthority();
+               try {
+                       CdmAuthority cdmAuthority = CdmAuthority.fromGrantedAuthority(grantedAuthority);
+                       String targetLabelText = getTargetText(cdmAuthority);
+                       if(targetLabelText.length() > 0){
+                               labelText = grantedAuthority.getAuthority().replace(cdmAuthority.getTargetUUID().toString(), targetLabelText);
+                       }
+               } catch (Exception e) { 
+                       /* will in most cases catch a ParsingException 
+                        * this is ignored
+                        */
+                       if(!e.getClass().getSimpleName().equals("ParsingException")){
+                               e.printStackTrace();
+                       }
+                       // in case it is a Role
+                       labelText = grantedAuthority.getAuthority();
+               }
+               return labelText;
+       }
+       
+       public static String getTargetText(GrantedAuthority grantedAuthority){
+               if(grantedAuthority instanceof CdmAuthority){
+                       return getCdmAuthorityTargetText((CdmAuthority)grantedAuthority);
+                       
+               }
+               return "";
+       }
+
+       private static String getCdmAuthorityTargetText(CdmAuthority cdmAuthority) {
+               
+               UUID uuid = cdmAuthority.getTargetUUID();
+               String targetText = "";
+               
+               if(uuid != null){
+                       targetText = uuid.toString();
+                       if(cdmAuthority.getPermissionClass() != null){
+                               try{
+                                       switch(cdmAuthority.getPermissionClass()) {
+                                       case USER:
+                                               targetText = CdmStore.getService(IUserService.class).load(uuid).getUsername();
+                                               break;
+                                       case DESCRIPTIONBASE:
+                                               targetText = CdmStore.getService(IDescriptionService.class).load(uuid).getTitleCache();
+                                               break;
+                                       case DESCRIPTIONELEMENTBASE:
+                                               targetText = CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null).toString();
+                                               break;
+                                       case TAXONBASE:
+                                               targetText = CdmStore.getService(ITaxonService.class).load(uuid).getTitleCache();
+                                               break;
+                                       case ALL:
+                                               // makes not much sense here
+                                               break;
+                                       case TAXONNODE:
+                                               TaxonNode node = CdmStore.getService(ITaxonNodeService.class).load(uuid);
+                                               if(node.getClassification() != null){
+                                                       targetText = node.getClassification().getTitleCache() + " : ";
+                                               }
+                                               if(node.getTaxon() != null){
+                                                       targetText += node.getTaxon().getTitleCache();
+                                               }
+                                               break;
+                                       case CLASSIFICATION:
+                                               targetText = CdmStore.getService(IClassificationService.class).load(uuid).getTitleCache();
+                                               break;
+                                       }
+                               } catch (NullPointerException e){
+                                       logger.warn("Either no service found for " + cdmAuthority.getPermissionClass() + " or entitiy not found" , e);
+                               }
+                       }
+               }
+               
+               return targetText;
+       }
+       
+
+}
index 0202475ec19218151d76c77af27aea031895b3b9..261adacd6c94b77060f46cbd6ba5e71bbdb5b196 100644 (file)
@@ -37,6 +37,7 @@ import eu.etaxonomy.taxeditor.ui.element.ILabeledElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelTextProvider;
 
 /**
  * <p>
@@ -290,7 +291,7 @@ public class EntitySelectionElement<T extends ICdmBase> extends
                        } else if(entity instanceof Group){
                                return ((Group) entity).getName();
                        } else if(entity instanceof GrantedAuthority){
-                               return ((GrantedAuthority) entity).getAuthority();
+                               return GrantedAuthorityLabelTextProvider.getText(((GrantedAuthority) entity));
                        }
                }
                return "";