completing merge from trunk for latest taxed developments security root/branches/taxeditor/security
authorCherian Mathew <c.mathew@bgbm.org>
Mon, 5 Nov 2012 16:46:15 +0000 (16:46 +0000)
committerCherian Mathew <c.mathew@bgbm.org>
Mon, 5 Nov 2012 16:46:15 +0000 (16:46 +0000)
32 files changed:
.gitattributes
.gitignore
eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java
eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.cdmlib/pom.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java
eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/ISecuredEditor.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityCollectionElement.java [moved from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GrantedAuthorityDetailElement.java with 50% similarity]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailElement.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailSection.java [moved from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GrantedAuthorityDetailSection.java with 84% similarity]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailWizardPage.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupSelectionElement.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/user/GroupsByUserDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/AbstractCdmEditorViewPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/AbstractCdmViewPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/DetailsViewer.java

index b82f2c65ebc6bbd697763dfe2a1e89d0911a8cc0..fba4e464c33b1c0c49e95eaf06958df19b794e7a 100644 (file)
@@ -1050,6 +1050,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/wiz
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSourceSQLServerWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSourceTypeSelectionWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSourceWizard.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/ISecuredEditor.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/UsageTermCollection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDragListener.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDropAdapter.java -text
@@ -1154,6 +1155,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewC
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewCollectionWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewDerivedUnitBaseWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewFieldObservationWizard.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGroupWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewInstitutionWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewNonViralNameWizard.java -text
@@ -1209,6 +1211,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/men
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/TaxonRelationshipTypeMenuPreferences.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/VocabularyTermWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/VocabularyTermWizardPage.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/ContextManager.java -text
@@ -1232,6 +1235,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/sele
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureSelectionDialog.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FeatureTreeSelectionDialog.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/FieldObservationSelectionDialog.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GroupSelectionDialog.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/InstitutionSelectionDialog.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/NameSelectionDialog.java -text
@@ -1353,11 +1357,14 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/des
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/operation/ChangeDescriptionElementType.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureDistributionDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureDistributionDetailSection.java -text
-eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GrantedAuthorityDetailElement.java -text
-eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GrantedAuthorityDetailSection.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityCollectionElement.java -text
+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/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
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupSelectionElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/MemberDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/MemberDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key/GeographicalScopeDetailSection.java -text
index 71532edf7732609b6990994a576be5adab2b21b9..202b0a5024f54e735f1688ad103ea12ae637f54b 100644 (file)
@@ -3,6 +3,7 @@ eu.etaxonomy.taxeditor.application/.settings
 eu.etaxonomy.taxeditor.application/target
 eu.etaxonomy.taxeditor.bulkeditor/.settings
 eu.etaxonomy.taxeditor.bulkeditor/target
+eu.etaxonomy.taxeditor.cdmlib/.directory
 eu.etaxonomy.taxeditor.cdmlib/.settings
 eu.etaxonomy.taxeditor.cdmlib/cdmlib-*.jar
 eu.etaxonomy.taxeditor.cdmlib/cdmlib-*.zip
index f974377c7600ce42ffa95a2d36a0d58f73ddc79a..f7bcbe89b597117612798eaea02baa0686b51b28 100644 (file)
@@ -67,8 +67,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
        }
 
        private int authenticate(){
-               Shell shell = TaxonomicEditorPlugin.getDefault().getWorkbench()
-               .getActiveWorkbenchWindow().getShell();
+               Shell shell = TaxonomicEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell();
 
                LoginDialog loginDialog = new LoginDialog(shell);
                return loginDialog.open();
index 7312c6efb455e5e0607dba6b7f943540bb246773..619e6dcbc2fc3cf8a0c1dc4aa7f265d3912a3c59 100644 (file)
@@ -383,6 +383,7 @@ Export-Package: com.google.api,
    org.hibernate.type,
    org.hibernate.event,
    eu.etaxonomy.cdm.model.common",
+ eu.etaxonomy.cdm.persistence.hibernate.permission,
  eu.etaxonomy.cdm.persistence.query;uses:="org.hibernate,org.hibernate.envers.query,org.hibernate.criterion",
  eu.etaxonomy.cdm.print,
  eu.etaxonomy.cdm.print.out,
index ff4456101d856a2b400f9f9132ad0be02d5a61fe..c275bd8825da44411a0d04fef0ac083b40e500a8 100644 (file)
                        <artifactId>cdmlib-ext</artifactId>\r
                        <version>${cdmlib.version}</version>\r
                </dependency>\r
+        <!--  for ikey-plus \r
+               TODO this should not be needed but the utils class contained  in this jar \r
+               seems to be loaded as bean by spring\r
+        -->\r
+        <dependency>\r
+            <groupId>identificationKeyAPI</groupId>\r
+            <artifactId>identificationKeyAPI</artifactId>\r
+            <version>1.0-SNAPSHOT</version>\r
+        </dependency>\r
        </dependencies>\r
 </project>\r
index b243adfdd15642037e7f8ff6c622882796f153d7..5f7e9d6f6e165ad13fb6a0ca4eccaf4dc66d46f5 100644 (file)
@@ -45,14 +45,23 @@ public interface IMultiPageTaxonEditorPage extends IEditorPart {
        public boolean isRedrawing();
 
        /**
+        * Sets the editor page into enabled or disabled state depending on the 
+        * value of the supplied parameter <code>enabled</code>.
         * 
         * @param enabled
         */
        public void setEnabled(boolean enabled);
 
        /**
-        * 
+        * Sets the editor page into disabled state and changes the 
+        * appearance accordingly. 
         */
        void setDisabled();
        
+       /**
+        * Sets the editor page into disabled state and changes the 
+        * appearance in order to indicate that an error has occurred.  
+        */
+       public void setOnError();
+       
 }
index c348d5c343c3d9600b9256a4ffb4cb91c1923cd4..669c354dc6d268f6a44b04402f8d47f805c64af5 100644 (file)
@@ -50,7 +50,7 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  */
 public class MultiPageTaxonEditor extends FormEditor implements
                IConversationEnabled, IPostOperationEnabled,
-               IDirtyMarkableSelectionProvider, IPartContentHasDetails {
+               IDirtyMarkableSelectionProvider, IPartContentHasDetails, ISecuredEditor {
 
        /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
@@ -152,15 +152,19 @@ public class MultiPageTaxonEditor extends FormEditor implements
                                                        getClass(),
                                                        "An error occurred while saving the editor. Please close and reopen the taxon again.",
                                                        e);
-                       disableEditor();
+                       disableEditor(true);
                } finally {
                        monitor.done();
                }
        }
 
-       private void disableEditor() {
+       private void disableEditor(boolean isOnError) {
                for (IMultiPageTaxonEditorPage editorPage : getPages()) {
-                       editorPage.setDisabled();
+                       if(isOnError){
+                               editorPage.setOnError();
+                       }else {
+                               editorPage.setDisabled();                               
+                       }
                }
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
@@ -531,4 +535,13 @@ public class MultiPageTaxonEditor extends FormEditor implements
        public String toString() {
                return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput());
        }
+
+       @Override
+       public boolean permissionsSatisfied() {
+               IEditorPart activeEditor = getActiveEditor();
+               if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){
+                       return ((ISecuredEditor)activeEditor).permissionsSatisfied();
+               }
+               return true;
+       }
 }
index 951dbcae6df3b417bec14bf5ec71835cd20b3b9a..02d88917d398171990f385e90d263c8e697cca9f 100644 (file)
@@ -51,11 +51,13 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
 import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;
+import eu.etaxonomy.taxeditor.editor.ISecuredEditor;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
 import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;
 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
@@ -72,6 +74,9 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * <p>
@@ -86,7 +91,7 @@ import eu.etaxonomy.taxeditor.preference.Resources;
 public class TaxonNameEditor extends EditorPart implements
                IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled,
                IPostOperationEnabled, IPartContentHasDetails, IPartChangeListener,
-               ISelectionListener, IDropTargetable {
+               ISelectionListener, IDropTargetable, ISecuredEditor {
 
        /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon.name"</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon.name";
@@ -273,6 +278,20 @@ public class TaxonNameEditor extends EditorPart implements
                                        "There should always be a selected object.");
                }
                getSelectedContainer().setSelected();
+               
+               // check permissions
+               boolean doEnable = permissionsSatisfied();
+               setEnabled(doEnable);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.ISecuredEditorPart#permissionsSatisfied()
+        */
+       @Override
+       public boolean permissionsSatisfied() {
+               TaxonNode taxonNode = ((TaxonEditorInput)getEditorInput()).getTaxonNode();
+               boolean doEnable = CdmStore.currentAuthentiationHasPermission(taxonNode, RequiredPermissions.TAXONNODE_EDIT);
+               return doEnable;
        }
 
        /** {@inheritDoc} */
@@ -494,6 +513,7 @@ public class TaxonNameEditor extends EditorPart implements
                getSite().setSelectionProvider(simpleSelectionProvider);
        }
 
+
        /**
         * 
         */
@@ -592,7 +612,7 @@ public class TaxonNameEditor extends EditorPart implements
 
                allGroups.add(getAcceptedGroup());
 
-               List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups();
+//             List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups(); // UNUSED => remove
                
                heterotypicSynonymGroups = getHeterotypicSynonymGroups();
                
@@ -871,34 +891,42 @@ public class TaxonNameEditor extends EditorPart implements
                }
                return getAcceptedNameContainer();
        }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setOnError()
+        */
+       public void setOnError() {
+               Color disabledColor =  StoreUtil.getColor(Resources.COLOR_EDITOR_ERROR);
+               setEnabled(false, disabledColor);
+       }
 
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setDisabled()
+        */
        @Override
        public void setDisabled(){
+               Color disabledColor =  StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND);
+               setEnabled(false);
+       }
+       
+       protected void setEnabled(boolean enabled, Color background) {
+       
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
-                       groupedContainer.setDisabled(true);
+                       groupedContainer.setEnabled(enabled);
                }
                
-               // send an empty selection to the current provider
+               // send an empty selection to the current provider - TODO only on error ???
                getManagedForm().setInput(null);
                
-               // coloring the widgets
-               
-               // TODO move this to resources and make configurable via Preferences
-               Color disabledColor = Display.getDefault().getSystemColor(SWT.COLOR_RED);
-               
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
-                       groupedContainer.setBackground(disabledColor);
+                       groupedContainer.setBackground(background);
                }
-               getControl().setBackground(disabledColor);
+               getControl().setBackground(background);
        }
        
        @Override
        public void setEnabled(boolean enabled) {
-               for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
-                       groupedContainer.setEnabled(getManagedForm().setInput(selection));
-               }
-               
-               // send an empty selection to the current provider
-               getManagedForm().setInput(null);
+               Color background =  StoreUtil.getColor(enabled ? Resources.COLOR_COMPOSITE_BACKGROUND : Resources.COLOR_TEXT_DISABLED_BACKGROUND);
+               setEnabled(enabled, background);
        }
 }
index 23d6ec0460fab915650a0f49d870444d92686600..5fbed53059c8fd4d0dacf2bd8d805cad3f200091 100644 (file)
@@ -634,7 +634,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
                focusListener = new FocusAdapter() {
                        @Override
                        public void focusGained(FocusEvent e) {
-                               if(disabled){
+                               if(!enabled){
                                        return;
                                }
                                for (AbstractGroupedContainer container : getEditor()
@@ -1011,8 +1011,6 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
 
        private boolean enabled;
 
-       private boolean disabled;
-
        /**
         * nonEditableInfo is a label displayed underneath a GroupedComposite's
         * input field. For instance, NameComposites display things like name
@@ -1244,8 +1242,8 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
        }
        
        public void setDisabled(boolean disabled) {
-               this.disabled = disabled;
-               setEnabled(disabled);
+               this.enabled = !disabled;
+               setEnabled(enabled);
        }
        
        public void setEnabled(boolean enabled) {
@@ -1253,10 +1251,11 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
                Color color = enabled ? control.getForeground() : EditorUtil.getColor(Resources.COLOR_DISABLED_EDITOR);
                                
                getNameViewer().getTextWidget().setEditable(enabled);
+               getNameViewer().getTextWidget().setEnabled(enabled);
                getNameViewer().getTextWidget().setForeground(color);
        }
        
-       public boolean getEnabled(){
+       public boolean isEnabled(){
                return enabled;
        }
 }
index 5483e7ab77bb56622e624ca600b0a4dfd5fd1f18..7b9adddc422827062b0f7975877e64f1a6911674 100644 (file)
@@ -13,6 +13,8 @@ package eu.etaxonomy.taxeditor.navigation.navigator;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
 import java.util.Set;
 import java.util.UUID;
 
@@ -39,6 +41,7 @@ import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.LoginManager;
 
 /**
  * Taxonomic tree implementation using Common Navigator Framework.
@@ -49,7 +52,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @version 1.0
  */
 public class TaxonNavigator extends CommonNavigator implements
-               IPostOperationEnabled, IConversationEnabled {
+               IPostOperationEnabled, IConversationEnabled, Observer {
 
        /**
         * Constant
@@ -109,13 +112,16 @@ public class TaxonNavigator extends CommonNavigator implements
                        conversation = CdmStore.createConversation();
                        conversation.registerForDataStoreChanges(TaxonNavigator.this);
                }
+               CdmStore.getLoginManager().addObserver(this);
        }
 
        /**
         * Refresh this navigators viewer
         */
        public void refresh() {
-               getConversationHolder().bind();
+               if(getConversationHolder() != null){
+                       getConversationHolder().bind();                 
+               }
                getCommonViewer().refresh();
        }
 
@@ -434,4 +440,16 @@ public class TaxonNavigator extends CommonNavigator implements
                        }
                }
        }
+
+
+       /* (non-Javadoc)
+        * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
+        */
+       @Override
+       public void update(Observable o, Object arg) {
+               if(o instanceof LoginManager){
+                       refresh();
+               }
+               
+       }
 }
index d0a823f4d0c5398b5958c2b0ee2704c04653b1ce..7774c2c1eebeff4086c797b983bc926214b95948 100644 (file)
@@ -15,15 +15,24 @@ import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.TextStyle;
 import org.eclipse.ui.navigator.IDescriptionProvider;
 import org.hibernate.LazyInitializationException;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * <p>TaxonNodeLabelProvider class.</p>
@@ -35,6 +44,9 @@ import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 public class TaxonNodeLabelProvider extends ColumnLabelProvider 
                implements ILabelProvider, IDescriptionProvider, IStyledLabelProvider {
        
+
+       private Styler notGrantedStyler = null;
+       
        /** {@inheritDoc} */
        @Override
        public Image getImage(Object element) {
@@ -84,6 +96,28 @@ public class TaxonNodeLabelProvider extends ColumnLabelProvider
         */
        /** {@inheritDoc} */
        public StyledString getStyledText(Object element) {
-               return new StyledString(getText(element));
+               // determine style base on  user grants
+               Styler styler = null;
+               if(!CdmStore.currentAuthentiationHasPermission((CdmBase)element, RequiredPermissions.TAXONNODE_EDIT)){
+                       styler = getNotGrantedStyler();
+               }
+               return new StyledString(getText(element), styler);
+               
+       }
+       
+       /**
+        * @return
+        */
+       private Styler getNotGrantedStyler() {
+               if (notGrantedStyler  == null) {
+                       notGrantedStyler = new Styler() {
+                               @Override
+                               public void applyStyles(TextStyle textStyle) {
+                                       textStyle.underline = false;
+                                       textStyle.foreground = StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED);
+                               }
+                       };
+               }
+               return notGrantedStyler;
        }
 }
index c954f96aace262e0047439f599727902d5b70213..ea20a9557b49536e3bded54972fae32cc9c7690a 100644 (file)
@@ -24,6 +24,7 @@ Export-Package: eu.etaxonomy.cdm,
  eu.etaxonomy.taxeditor.preference.matching,
  eu.etaxonomy.taxeditor.preference.menu,
  eu.etaxonomy.taxeditor.preference.wizard,
+ eu.etaxonomy.taxeditor.security,
  eu.etaxonomy.taxeditor.store,
  eu.etaxonomy.taxeditor.store.internal,
  eu.etaxonomy.taxeditor.store.operations,
index dc47925fb35317e2a69c514ca875c5781c6dd4b5..b65b0454705689df814e6990ca59d1dfea6252a7 100644 (file)
             locationURI="menu:org.eclipse.ui.main.menu.file?after=eu.etaxonomy.taxeditor.application.filemenu.io">
          <command
                commandId="eu.etaxonomy.taxeditor.store.operations.showLoginWindow"
-               label="Login"
+               label="Switch User"
                style="push">
          </command>
          <separator
             label="Disabled Name Editor Field"
             value="105,114,124">
       </colorDefinition>
+      <colorDefinition
+            categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory"
+            id="eu.etaxonomy.taxeditor.preferences.colorDefinition.editorError"
+            label="Editor On Error"
+            value="255,0,0">
+      </colorDefinition>
       </extension>
 <extension
       point="org.eclipse.core.expressions.propertyTesters">
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/ISecuredEditor.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/ISecuredEditor.java
new file mode 100644 (file)
index 0000000..ac30a70
--- /dev/null
@@ -0,0 +1,15 @@
+package eu.etaxonomy.taxeditor.editor;
+
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+
+public interface ISecuredEditor {
+
+       /**
+        * 
+        * @return true if the current authentication (= {@link User}) has sufficient 
+        * privileges to edit the {@link Taxon} or {@link TaxonNode}
+        */
+       public abstract boolean permissionsSatisfied();
+
+}
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewGrantedAuthorityWizard.java
new file mode 100644 (file)
index 0000000..3515831
--- /dev/null
@@ -0,0 +1,61 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.newWizard;
+
+import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
+import eu.etaxonomy.cdm.api.service.IGroupService;
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailWizardPage;
+import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailWizardPage;
+
+/**
+ * @author a.kohlbecker
+ * @created Sept 13 2012
+ */
+public class NewGrantedAuthorityWizard extends AbstractNewEntityWizard<GrantedAuthorityImpl> {
+       
+       private GrantedAuthorityDetailWizardPage authorityPage;
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.wizard.Wizard#addPages()
+        */
+       @Override
+       public void addPages() {
+               authorityPage = new GrantedAuthorityDetailWizardPage(formFactory, getConversationHolder(), getEntity());
+               super.addPage(authorityPage);
+       }
+
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard#saveEntity()
+        */
+       @Override
+       protected void saveEntity() {
+               CdmStore.getService(IGrantedAuthorityService.class).saveOrUpdate(getEntity());
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard#createNewEntity()
+        */
+       @Override
+       protected GrantedAuthorityImpl createNewEntity() {
+               return GrantedAuthorityImpl.NewInstance();
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard#getEntityName()
+        */
+       @Override
+       protected String getEntityName() {
+               return "GrantedAuthority";
+       }
+}
index 11f0948fad91aea12bf830d08363e58007a1045f..658abe1e94c5a0c91e4b3b6750d32100296d565a 100644 (file)
@@ -81,5 +81,7 @@ public interface Resources {
        
        public static final String COLOR_DISABLED_EDITOR = "eu.etaxonomy.taxeditor.preferences.colorDefinition.disabledEditor";
        
+       public static final String COLOR_EDITOR_ERROR = "eu.etaxonomy.taxeditor.preferences.colorDefinition.editorError";
+       
        
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java
new file mode 100644 (file)
index 0000000..a49390b
--- /dev/null
@@ -0,0 +1,27 @@
+/**
+ * 
+ */
+package eu.etaxonomy.taxeditor.security;
+
+import java.util.EnumSet;
+
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
+
+/**
+ * Provides the required permissions a user would need in order to view or edit a 
+ * specific cdm type.
+ * 
+ * @author andreas kohlbecker
+ *
+ */
+public class RequiredPermissions {
+       
+       public static final EnumSet<CRUD> TAXONNODE_EDIT = Operation.UPDATE;
+       
+       public static final EnumSet<CRUD> TAXON_EDIT = Operation.UPDATE;
+       
+       public static final EnumSet<CRUD> DESCRIPTION_EDIT = Operation.UPDATE;
+       
+
+}
index fcada2099860383358d86be1ffb73b30a5041538..b302a8ead9cb24191968cf44f35949e54690b83f 100644 (file)
@@ -12,13 +12,17 @@ package eu.etaxonomy.taxeditor.store;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.util.EnumSet;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
+import org.springframework.security.access.PermissionEvaluator;
 import org.springframework.security.authentication.ProviderManager;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
@@ -27,7 +31,10 @@ import eu.etaxonomy.cdm.api.service.IService;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
 import eu.etaxonomy.taxeditor.io.ExportManager;
 import eu.etaxonomy.taxeditor.io.ImportManager;
@@ -242,18 +249,18 @@ public class CdmStore {
        }
 
        /**
-        * Generic method that will return an implementation of the given service
-        * interface or <code>null</code> if the
+        * Generic method that will scan the getters of {@link ICdmApplicationConfiguration} for the given service
+        * interface. If a matching getter is found the according service implementation is returned by 
+        * invoking the getter otherwise the method returns <code>null</code>. 
         * 
         * @param <T>
         * @param serviceClass
-        * @return
+        * @return the configured implementation of <code>serviceClass</code> or <code>null</code>
         */
        public static <T extends IService> T getService(Class<T> serviceClass) {
                ICdmApplicationConfiguration configuration = getCurrentApplicationConfiguration();
 
-               Method[] methods = ICdmApplicationConfiguration.class
-                               .getDeclaredMethods();
+               Method[] methods = ICdmApplicationConfiguration.class.getDeclaredMethods();
 
                T service = null;
 
@@ -289,6 +296,18 @@ public class CdmStore {
        public static ProviderManager getAuthenticationManager() {
                return getCurrentApplicationConfiguration().getAuthenticationManager();
        }
+       
+       /**
+        * <p>
+        * getAuthenticationManager
+        * </p>
+        * 
+        * @return a
+        *         {@link PermissionEvaluator} object.
+        */
+       public static PermissionEvaluator getPermissionEvaluator() {
+               return getCurrentApplicationConfiguration().getPermissionEvaluator();
+       }
 
        /**
         * <p>
@@ -301,6 +320,23 @@ public class CdmStore {
                return (IEditGeoService) getCurrentApplicationConfiguration().getBean(
                                "editGeoService");
        }
+       
+       /*
+        * SECURITY RELATED CONVENIENCE METHODS
+        */
+       
+       /**
+        * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
+     *
+        * @param targetDomainObject
+        * @param permission 
+        * @return
+        */
+       public static boolean currentAuthentiationHasPermission(CdmBase targetDomainObject, EnumSet<CRUD> permission){
+               //TODO use getCurrentApplicationConfiguration().currentAuthentiationHasPermission(CdmBase targetDomainObject, Operation permission) instead
+               SecurityContext context = SecurityContextHolder.getContext();
+               return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);
+       }
 
        /*
         * LANGUAGE
index 4f024bd3c8ae041a3047f3a08c874ade6aed3193..242af03207e4efce790bf86f87526b2d13f52f03 100644 (file)
@@ -493,8 +493,10 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        public void update(CdmDataChangeMap changeEvents) {}
 
        /**
-        * Don't want to add a taxon or synonym to itself so filter the list to remove the taxon in question
-        * so it is not available to add as a concept relation
+        * Don't want to add for example a taxon or synonym to itself 
+        * so filter the list to remove the taxon in question 
+        * (<code>cdmBaseToBeFiltered</code>)
+        * so it is not available in the filtered list.
         */
        private void filterExcludedObjects() {
                if (model != null && cdmBaseToBeFiltered != null) {
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/GrantedAuthoritySelectionDialog.java
new file mode 100644 (file)
index 0000000..1cd609d
--- /dev/null
@@ -0,0 +1,103 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.ui.dialog.selection;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.swt.widgets.Shell;
+import org.springframework.security.core.GrantedAuthority;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
+import eu.etaxonomy.cdm.api.service.IGroupService;
+import eu.etaxonomy.cdm.api.service.IUserService;
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
+import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
+import eu.etaxonomy.taxeditor.newWizard.NewGrantedAuthorityWizard;
+import eu.etaxonomy.taxeditor.newWizard.NewGroupWizard;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author a.kohlbecker
+ * @created Sept 12, 2011
+ * @version 1.0
+ */
+public class GrantedAuthoritySelectionDialog extends   AbstractFilteredCdmResourceSelectionDialog<GrantedAuthorityImpl> {
+
+       public static GrantedAuthority select(Shell shell, ConversationHolder conversation, GrantedAuthorityImpl authority){
+               
+               GrantedAuthoritySelectionDialog dialog = new GrantedAuthoritySelectionDialog(shell, conversation,
+                               "Choose Granted Authority", false, GrantedAuthoritySelectionDialog.class.getCanonicalName(), authority);
+               
+               return getSelectionFromDialog(dialog);
+       }
+       
+       /**
+        * @param shell
+        * @param conversation
+        * @param title
+        * @param multi
+        * @param settings
+        * @param cdmObject
+        */
+       protected GrantedAuthoritySelectionDialog(Shell shell,
+                       ConversationHolder conversation, String title, boolean multi,
+                       String settings, GrantedAuthorityImpl cdmObject) {
+               super(shell, conversation, title, multi, settings, cdmObject);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.dialogs.filteredSelection.AbstractFilteredCdmResourceSelectionDialog#initModel()
+        */
+       @Override
+       protected void initModel() {
+               List<GrantedAuthorityImpl> authorities = CdmStore.getService(IGrantedAuthorityService.class).list(GrantedAuthorityImpl.class, null, null, null, null);
+               
+               model = new ArrayList<UuidAndTitleCache<GrantedAuthorityImpl>>();
+               
+               for(GrantedAuthorityImpl authority : authorities){
+                       model.add(new UuidAndTitleCache<GrantedAuthorityImpl>(GrantedAuthorityImpl.class, authority.getUuid(),String.format("%s", authority.getAuthority())));
+               }       
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.dialogs.filteredSelection.AbstractFilteredCdmResourceSelectionDialog#getNewWizardLinkText()
+        */
+       @Override
+       protected String getNewWizardLinkText() {
+               return "Create a new <A>GrantedAuthority</A>.";
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.dialogs.filteredSelection.AbstractFilteredCdmResourceSelectionDialog#getNewEntityWizard(java.lang.String)
+        */
+       @Override
+       protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
+               return new NewGrantedAuthorityWizard();
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.dialogs.filteredSelection.AbstractFilteredCdmResourceSelectionDialog#getPersistentObject(java.util.UUID)
+        */
+       @Override
+       protected GrantedAuthorityImpl getPersistentObject(UUID uuid) {
+               return CdmStore.getService(IGrantedAuthorityService.class).load(uuid);
+       }
+       
+       @Override
+       protected String getTitle(GrantedAuthorityImpl authority) {
+               return authority != null ? authority.getAuthority() : "";
+       }
+
+}
index 2cab2121562be0016a490a288ae21d89ffc95520..cf59a0617e6b5a46c71788e674cacfe371f6f23e 100644 (file)
@@ -16,6 +16,7 @@ import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Institution;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
 import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.User;
@@ -101,6 +102,9 @@ public class SelectionDialogFactory {
                if(clazz.equals(User.class)){
                        return (T) UserSelectionDialog.select(shell, conversation, (User) curentSelection);
                }
+               if(clazz.equals(GrantedAuthorityImpl.class)){
+                       return (T) GrantedAuthoritySelectionDialog.select(shell, conversation, (GrantedAuthorityImpl) curentSelection);
+               }
                if (clazz.equals(Person.class)){
                        return (T) PersonSelectionDialog.select(shell, conversation, (Person) curentSelection);
                }
index 091dd7ee82ef577b09db3565542f9b8b8a846d8f..068c03b9e3a5150e0e11f6c5fb448b66944a9605 100644 (file)
@@ -49,6 +49,7 @@ import eu.etaxonomy.cdm.model.common.Credit;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
 import eu.etaxonomy.cdm.model.common.Extension;
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
 import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IDefinedTerm;
@@ -148,8 +149,9 @@ import eu.etaxonomy.taxeditor.ui.section.description.detail.TaxonInteractionDeta
 import eu.etaxonomy.taxeditor.ui.section.description.detail.TextDataDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.group.GrantedAuthorityDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.group.GrantedAuthorityDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailElement;
@@ -1373,43 +1375,44 @@ public class CdmFormFactory extends FormToolkit {
         * 
         */
        public static enum DetailType {
-               NONVIRALNAME, 
-               SCIENTIFICNAME, 
-               REFERENCEBASE, 
-               NOMENCLATURALREFERENCE, 
-               TAXONBASE, 
                AUTHORSHIP, 
-               TEAM, 
-               PERSON, 
+               CLASSIFICATION, 
+               COLLECTION, 
+               DERIVED_UNIT, 
+               DERIVED_UNIT_FACADE, 
+               DERIVED_UNIT_GENERAL, 
                DESCRIPTION, 
                DESCRIPTIONELEMENT, 
-               PARSINGMESSAGE, 
-               NAMERELATIONSHIP, 
-               TEAMORPERSONBASE, 
-               MEDIA, 
+               DETERMINATION, 
+               FEATURE_DISTRIBUTION, 
                FIELD_OBSERVATION, 
-               DERIVED_UNIT_FACADE, 
                GATHERING_EVENT, 
-               DERIVED_UNIT, 
+               GRANTEDAUTHORITY,
+               GROUP, 
+               HYBRID, 
+               INSTITUTION, 
+               MEDIA, 
+               NAMED_AREA, 
+               NAMED_AREA_LEVEL, 
+               NAMERELATIONSHIP, 
                NATURAL_LANGUAGE, 
-               FEATURE_DISTRIBUTION
-               CLASSIFICATION
-               TAXON_NODE, 
-               COLLECTION, 
+               NOMENCLATURALREFERENCE
+               NONVIRALNAME
+               PARSINGMESSAGE, 
+               PERSON, 
                POLYTOMOUS_KEY, 
                POLYTOMOUS_KEY_NODE, 
-               INSTITUTION, 
-               DERIVED_UNIT_GENERAL, 
-               HYBRID, 
-               USER, 
-               GROUP, 
-               DETERMINATION, 
-               TAXON_RELATIONSHIP, 
+               REFERENCEBASE, 
                REFERENCED_ENTITY, 
+               SCIENTIFICNAME, 
+               TAXON_NODE, 
+               TAXON_RELATIONSHIP, 
+               TAXONBASE, 
+               TEAM, 
+               TEAMORPERSONBASE, 
                TERM_VOCABULARY,
-               NAMED_AREA, 
-               NAMED_AREA_LEVEL, 
-               USE_RECORD
+               USE_RECORD,
+               USER
        }
        
        public AbstractFormSection createDefinedTermDetailSection(Class definedTermClass,
@@ -1729,6 +1732,9 @@ public class CdmFormFactory extends FormToolkit {
                case GROUP:
                        element = new GroupDetailElement(this, parentElement);
                        break;
+               case GRANTEDAUTHORITY:
+                       element = new GrantedAuthorityDetailElement(this, parentElement);
+                       break;
                case DETERMINATION:
                        element = new DeterminationDetailElement(this, parentElement);
                        break;
@@ -2083,8 +2089,8 @@ public class CdmFormFactory extends FormToolkit {
                        element = new MemberDetailElement(this, parentElement,
                                        (User) entity, removeListener, style);
                } else if (entity instanceof GrantedAuthority) {
-                       element = new GrantedAuthorityDetailElement(this, parentElement,
-                                       (GrantedAuthority) entity, removeListener, style);
+                       element = new GrantedAuthorityCollectionElement(this, parentElement,
+                                       (GrantedAuthorityImpl) entity, removeListener, style);
                } else if (entity instanceof Group) {
                        element = new GroupsByUserDetailElement(this, parentElement,
                                        (Group) entity, removeListener, style);
@@ -1,6 +1,6 @@
 // $Id$
 /**
-* Copyright (C) 2007 EDIT
+* Copyright (C) 2012 EDIT
 * European Distributed Institute of Taxonomy 
 * http://www.e-taxonomy.eu
 * 
@@ -8,53 +8,52 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
-package eu.etaxonomy.taxeditor.ui.section.group;
+package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
 
 import org.eclipse.swt.events.SelectionListener;
-import org.springframework.security.core.GrantedAuthority;
+import org.eclipse.swt.graphics.Color;
 
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
- * @author n.hoffmann
- * @created Mar 9, 2011
- * @version 1.0
+ * @author a.kohlbecker
+ * @date Sept 12 2012
+ *
  */
-public class GrantedAuthorityDetailElement extends AbstractEntityCollectionElement<GrantedAuthority> {
+public class GrantedAuthorityCollectionElement extends AbstractEntityCollectionElement<GrantedAuthorityImpl> {
+       
+       private EntitySelectionElement<GrantedAuthorityImpl> selection_authority;
 
-       /**
-        * @param formFactory
-        * @param section
-        * @param entity
-        * @param removeListener
-        * @param backgroundColor
-        * @param style
-        */
-       public GrantedAuthorityDetailElement(CdmFormFactory formFactory,
-                       AbstractFormSection section, GrantedAuthority entity,
+
+       public GrantedAuthorityCollectionElement(CdmFormFactory formFactory,
+                       AbstractFormSection section, GrantedAuthorityImpl entity,
                        SelectionListener removeListener, int style) {
-               super(formFactory, section, entity, removeListener, null, style);
+               super(formFactory, section, entity, removeListener, null, style);               
+               // TODO Auto-generated constructor stub
        }
 
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement#setEntity(java.lang.Object)
         */
        @Override
-       public void setEntity(GrantedAuthority entity) {
-               // TODO Auto-generated method stub
+       public void setEntity(GrantedAuthorityImpl entity) {
+               selection_authority.setEntity(entity);
                
        }
 
        /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement#createControls(eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement, int)
+        * @see eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement#createControls(eu.etaxonomy.taxeditor.ui.element.ICdmFormElement, int)
         */
        @Override
        public void createControls(ICdmFormElement element, int style) {
-               // TODO Auto-generated method stub
-               
+               selection_authority = formFactory.createSelectionElement(
+                                       GrantedAuthorityImpl.class, getConversationHolder(), element, "", getEntity(), EntitySelectionElement.SELECTABLE, style);
        }
 
        /* (non-Javadoc)
@@ -62,9 +61,10 @@ public class GrantedAuthorityDetailElement extends AbstractEntityCollectionEleme
         */
        @Override
        public void handleEvent(Object eventSource) {
-               // TODO Auto-generated method stub
-               
+               if (eventSource == selection_authority) {
+                       setEntity(selection_authority.getEntity());
+               }
        }
 
-       
+
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailElement.java
new file mode 100644 (file)
index 0000000..e443d38
--- /dev/null
@@ -0,0 +1,55 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
+
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+
+/**
+ * @author n.hoffmann
+ * @author a.kohlbecker
+ * @created Mar 9, 2011
+ * @version 1.0
+ */
+public class GrantedAuthorityDetailElement extends AbstractCdmDetailElement<GrantedAuthorityImpl> {
+
+       private TextWithLabelElement text_authority;
+       
+       /**
+        * @param formFactory
+        * @param formElement
+        */
+       public GrantedAuthorityDetailElement(CdmFormFactory formFactory,
+                       ICdmFormElement formElement) {
+               super(formFactory, formElement);
+       }
+
+       @Override
+       protected void createControls(ICdmFormElement formElement,
+                       GrantedAuthorityImpl entity, int style) {
+               text_authority = formFactory.createTextWithLabelElement(formElement, "Authority", entity.getAuthority(), style);
+               
+       }
+
+       @Override
+       public void handleEvent(Object eventSource) {
+               if(eventSource == text_authority){
+                       getEntity().setAuthority(text_authority.getText());
+               }
+               
+       }
+
+
+       
+}
@@ -8,7 +8,7 @@
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
 
-package eu.etaxonomy.taxeditor.ui.section.group;
+package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
 
 import java.util.Collection;
 
@@ -17,6 +17,7 @@ import org.springframework.security.core.GrantedAuthority;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.GrantedAuthoritySelectionDialog;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection;
@@ -62,11 +63,11 @@ public class GrantedAuthorityDetailSection extends
         */
        @Override
        public GrantedAuthority createNewElement() {
-               StoreUtil
-                               .warningDialog("Not implemented yet", getClass(),
-                                               "This functionality needs to be implemented in CDM Library first.");
-               // TODO GrantedAuthoritySelectionDialog.select(...);
-               GrantedAuthority selection = null;
+//             StoreUtil
+//                             .warningDialog("Not implemented yet", getClass(),
+//                                             "This functionality needs to be implemented in CDM Library first.");
+               
+               GrantedAuthority selection = GrantedAuthoritySelectionDialog.select(getLayoutComposite().getShell(), getConversationHolder(), null);
                return selection;
        }
 
@@ -101,7 +102,7 @@ public class GrantedAuthorityDetailSection extends
         */
        @Override
        public String getEmptyString() {
-               return "No Granted Athorities yet.";
+               return "No Granted Authorities yet.";
        }
 
        /*
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/grantedAuthority/GrantedAuthorityDetailWizardPage.java
new file mode 100644 (file)
index 0000000..47d911d
--- /dev/null
@@ -0,0 +1,42 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.section.grantedAuthority;
+
+import org.eclipse.swt.SWT;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.DetailType;
+import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+
+/**
+ * @author a.kohlbecker
+ * @created Sept 13 2012
+ */
+public class GrantedAuthorityDetailWizardPage extends AbstractCdmEntityWizardPage<GrantedAuthorityImpl> {
+
+       public GrantedAuthorityDetailWizardPage(CdmFormFactory formFactory,
+                       ConversationHolder conversation, GrantedAuthorityImpl entity) {
+               super(formFactory, conversation, entity);
+               setTitle("GrantedAuthority");
+       }
+
+       @Override
+       public AbstractCdmDetailElement<GrantedAuthorityImpl> createElement(
+                       ICdmFormElement rootElement) {
+               GrantedAuthorityDetailElement authorityElement = (GrantedAuthorityDetailElement) formFactory.createCdmDetailElement(DetailType.GRANTEDAUTHORITY, rootElement, SWT.NULL);
+               authorityElement.setEntity(getEntity());
+               return authorityElement;
+       }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupSelectionElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/group/GroupSelectionElement.java
new file mode 100644 (file)
index 0000000..58a2630
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id$
+/**
+* Copyright (C) 2012 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.section.group;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.common.Group;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
+
+/**
+ * @author a.kohlbecker
+ *
+ */
+public class GroupSelectionElement extends EntitySelectionElement<Group> {
+       
+       public GroupSelectionElement(CdmFormFactory formFactory,
+                       ConversationHolder conversation, ICdmFormElement parentElement,
+                       String labelString, Group entity, int mode,
+                       int style) {
+               super(formFactory, conversation, parentElement, Group.class, labelString, entity,
+                               mode, style);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement#getTitle()
+        */
+       @Override
+       protected String getTitle() {
+               if (getEntity() != null) {
+                       return getEntity().getName();
+               }
+               return super.getTitle();
+       }
+
+}
index 061fb8afa46282bba8ab8872cdd0e5969711650d..f611e6bb9b8b66dc02088693d16dff616feffbfa 100644 (file)
@@ -56,7 +56,7 @@ public class GroupsByUserDetailElement extends
        public void createControls(ICdmFormElement element, int style) {
                selection_group = formFactory
                                .createSelectionElement(Group.class,
-                                               getConversationHolder(), element, "Group", getEntity(),
+                                               getConversationHolder(), element, "", getEntity(),
                                                EntitySelectionElement.NOTHING, style);
        }
 
@@ -70,7 +70,7 @@ public class GroupsByUserDetailElement extends
        @Override
        public void handleEvent(Object eventSource) {
                if (eventSource == selection_group) {
-
+                       setEntity(selection_group.getEntity());
                }
        }
 }
index ec948a901f3a1f9d3215d45e550106c3031d0b27..48679257e4cc203edb5179a63d10415ec15b5aab 100644 (file)
@@ -14,10 +14,12 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.springframework.security.core.GrantedAuthority;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
@@ -289,8 +291,14 @@ public class EntitySelectionElement<T extends ICdmBase> extends
         * @return a {@link java.lang.String} object.
         */
        protected String getTitle() {
-               if (entity != null && entity instanceof IIdentifiableEntity) {
-                       return ((IIdentifiableEntity) entity).getTitleCache();
+               if (entity != null){
+                       if(entity instanceof IIdentifiableEntity) {
+                               return ((IIdentifiableEntity) entity).getTitleCache();
+                       } else if(entity instanceof Group){
+                               return ((Group) entity).getName();
+                       } else if(entity instanceof GrantedAuthority){
+                               return ((GrantedAuthority) entity).getAuthority();
+                       }
                }
                return "";
        }
index afa592fa171aa06f0426f840532ede686655fd36..1c4c3e82d5ee8a3ff17fac5811f5d7f846a89421 100644 (file)
@@ -6,6 +6,7 @@ package eu.etaxonomy.taxeditor.view;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorPart;
 
+import eu.etaxonomy.taxeditor.editor.ISecuredEditor;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 
@@ -45,6 +46,17 @@ public abstract class AbstractCdmEditorViewPart extends AbstractCdmViewPart {
        public IEditorPart getEditor() {
                return StoreUtil.getActiveEditor();
        }
+       
+       /** {@inheritDoc} */
+       @Override
+       public void setFocus() {
+               super.setFocus();
+               
+               if(getEditor() != null && ISecuredEditor.class.isAssignableFrom(getEditor().getClass())){       
+                       boolean doEnable = ((ISecuredEditor)getEditor()).permissionsSatisfied();
+                       setEnabled(doEnable);
+               }
+       }
 
        /** {@inheritDoc} */
        @Override
index 5a48d1831a3802a1037a7c9bb4b34e1a5727c224..5535d297e4a6254c624852faf101d1d0d63e0b54 100644 (file)
@@ -126,6 +126,9 @@ public abstract class AbstractCdmViewPart extends ViewPart implements ISelection
                pageBook.showPage(viewerComposite);
     }
   
+       public void setEnabled(boolean enabled){
+               pageBook.setEnabled(enabled);
+       }
        
        /** {@inheritDoc} */
        @Override
index 05574f256d9b3b978863a0b3d6d911fff101236d..5793674d4469d67a9ab8ce710fff4edd54fd92b6 100644 (file)
@@ -729,8 +729,8 @@ public class DetailsViewer extends AbstractCdmDataViewer {
                         getConversationHolder(), parent, this, Section.TWISTIE
                                 | Section.EXPANDED);
 
-        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
+//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+//
 //        GeographicalScopeDetailSection geographicalScopeDetailSection = (GeographicalScopeDetailSection) formFactory
 //                .createEntityDetailSection(EntityDetailType.GEOGRAPHICAL_SCOPE,
 //                        getConversationHolder(), parent, Section.TWISTIE | Section.COMPACT);
@@ -742,16 +742,16 @@ public class DetailsViewer extends AbstractCdmDataViewer {
 //                        getConversationHolder(), parent, Section.TWISTIE | Section.COMPACT);
 //
 //        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        TaxonomicScopeSection taxonomicScopeSection = (TaxonomicScopeSection) formFactory
-                .createEntityDetailSection(EntityDetailType.TAXONOMIC_SCOPE,
-                        getConversationHolder(), parent, Section.TWISTIE | Section.COMPACT);        
+//
+//        TaxonomicScopeSection taxonomicScopeSection = (TaxonomicScopeSection) formFactory
+//                .createEntityDetailSection(EntityDetailType.TAXONOMIC_SCOPE,
+//                        getConversationHolder(), parent, Section.TWISTIE | Section.COMPACT);        
 
            addPart(polytomousKeyDetailSection);
            addPart(polytomousKeyNodeDetailSection);
 //         addPart(geographicalScopeDetailSection);
 //         addPart(scopeRestrictionSection);
-           addPart(taxonomicScopeSection);
+//         addPart(taxonomicScopeSection);
 
        }