corrected behaviour when adding / saving new authorites
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / group / grantedauthority / CdmAuthorityCompositeViewer.java
index cb910b32c9960407c9c3ae5f7c7b6c3c5b05f61a..0ea4dc32ceca4e33f30e2b3110247c8bbcb59052 100644 (file)
@@ -41,18 +41,13 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  */
 
 
-/**
- * @author cmathew
- * @date Apr 5, 2013
- *
- */
-
 //FIXME:move warning dialogs to the table class
 public class CdmAuthorityCompositeViewer extends ContentViewer {
        
        private IDirtyMarkableSelectionProvider dirtyMarkerEditor;      
        private CdmAuthorityComposite cdmAuthorityComposite;
        private Group group;
+       private boolean isDirty = false;
        /**
         * List which contains already existing authority objects.
         */
@@ -122,6 +117,9 @@ public class CdmAuthorityCompositeViewer extends ContentViewer {
                return cdmAuthorities;
        }
        
+       public boolean isDirty() {
+               return isDirty;
+       }
        /**
         * Adds a new {@link CdmAuthority} to the group attached to this viewer
         * based on the input {@link CdmBase} object.
@@ -134,6 +132,7 @@ public class CdmAuthorityCompositeViewer extends ContentViewer {
                defaultOperation.add(CRUD.READ);
                CdmAuthority cdma = new CdmAuthority(cb, defaultOperation, cb.getUuid());
                GrantedAuthorityImpl gai;
+               
                try {
                        // create a granted authrity from a cdm authority 
                        gai = cdma.asNewGrantedAuthority();
@@ -143,11 +142,12 @@ public class CdmAuthorityCompositeViewer extends ContentViewer {
                }
                //FIXME : this contains call will allow users to add authorities which differ only in CRUD operation choice.
                //        need to have a comparator which only checks permission class and uuid
-               if(cdmAuthorities.contains(gai)) {
+               if(cdmAuthorities.contains(gai) || newCdmAuthorities.contains(gai)) {
                        StoreUtil.warningDialog("Duplicate CDM Authority", this, "Chosen CDM Authority is already attached to current group");
                } else {                                                                
                        group.addGrantedAuthority(gai);
-                       newCdmAuthorities.add(gai);                             
+                       newCdmAuthorities.add(gai);
+                       isDirty = true;
                        dirtyMarkerEditor.changed(group);               
                        cdmAuthorityComposite.refresh();
                }
@@ -160,15 +160,19 @@ public class CdmAuthorityCompositeViewer extends ContentViewer {
         * @param gai {@link GrantedAuthorityImpl} object to remove
         */
        public void removeCdmAuthority(GrantedAuthorityImpl gai) {
-               if(cdmAuthorities.contains(gai)) {
-                       group.removeGrantedAuthority(gai);
+               
+               if(cdmAuthorities.contains(gai)) {                                      
+                       cdmAuthorities.remove(gai);             
+                       isDirty = true;
+               } else {                                                
                        newCdmAuthorities.remove(gai);
-                       cdmAuthorities.remove(gai);
-                       dirtyMarkerEditor.changed(group);       
-                       cdmAuthorityComposite.refresh();
-               } else {
-                       StoreUtil.warningDialog("Unknown CDM Authority", this, "Chosen CDM Authority does not exist in  current group");
+                       if(newCdmAuthorities.isEmpty() && !isDirty) {
+                               isDirty = false;
+                       }
                }
+               group.removeGrantedAuthority(gai);              
+               dirtyMarkerEditor.changed(group);               
+               cdmAuthorityComposite.refresh();
        }
        
        /**
@@ -189,6 +193,7 @@ public class CdmAuthorityCompositeViewer extends ContentViewer {
                                GrantedAuthorityImpl gai = cdmAuthority.asNewGrantedAuthority();
                                group.addGrantedAuthority(gai);
                                group.removeGrantedAuthority(grantedAuthorityI);
+                               isDirty = true;
                                dirtyMarkerEditor.changed(grantedAuthorityI);
                                return gai;
                        } catch(Exception e) {