*/
package eu.etaxonomy.taxeditor.view.e4;
+import java.util.Collection;
import java.util.Set;
import javax.annotation.PreDestroy;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWTException;
+import org.springframework.security.core.GrantedAuthority;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.name.TaxonName;
import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
import eu.etaxonomy.cdm.persistence.dto.TermDto;
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.view.e4.details.DetailsPartE4;
import eu.etaxonomy.taxeditor.view.e4.details.DetailsViewerE4;
* If it is <code>true</code> then it is currently delaying a selection.
*/
private boolean isInDelay;
- private boolean isEnabled;
+ private boolean isEnabled = true;
private static final Logger logger = Logger.getLogger(AbstractCdmEditorPartE4.class);
/**
}
if (viewer != null && viewer.getControl()!= null && viewer.getInput() != null && !viewer.getControl().isDisposed()){
try{
- viewer.getControl().setEnabled(true);
+ viewer.getControl().setEnabled(isEnabled);
}catch(SWTException e){
logger.debug("Something went wrong for viewer.getControl().setEnabled(true) in " + this.getClass().getSimpleName(), e);
}
return viewer;
}
+ public boolean isEnabled() {
+ return isEnabled;
+ }
+
+ public void setEnabled(boolean isEnabled) {
+ this.isEnabled = isEnabled;
+ }
+
protected void showViewer(IStructuredSelection selection, MPart activePart, Viewer viewer){
+ if(CdmStore.getCurrentSessionManager().getActiveSession()==null){
+ return;
+ }
if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
Object element = selection.getFirstElement();
Object part = createPartObject(activePart);
+ if (viewer.getControl().isDisposed()){
+ return;
+ }
viewer.getControl().setEnabled(true);
if(selection.getFirstElement()!=null){
if (element instanceof Taxon){
+
Taxon taxon = HibernateProxyHelper.deproxy(element, Taxon.class);
+ if (part instanceof ITaxonEditor){
+ TaxonNode node = ((ITaxonEditor) part).getTaxonNode();
+ if (node != null){
+ boolean doEnable = CdmStore.currentAuthentiationHasPermission(node,
+ RequiredPermissions.TAXON_EDIT);
+ if (!doEnable){
+ //check whether there are explicit TaxonNode rights
+ boolean taxonnodePermissionExists = false;
+ Collection<? extends GrantedAuthority> authorities = CdmStore.getCurrentAuthentiation().getAuthorities();
+ for (GrantedAuthority grantedAuthority: authorities){
+ if (grantedAuthority.getAuthority().startsWith("TAXONNODE")){
+ taxonnodePermissionExists = true;
+ }
+ }
+ if (!taxonnodePermissionExists){
+ doEnable = true;
+ }
+ }
+
+ //TODO: differ between the views
+ this.isEnabled = doEnable;
+ }
+
+
+ }
if (taxon.isMisapplication() || taxon.isProparteSynonym() || taxon.isInvalidDesignation()){
if(part instanceof ITaxonEditor){
Taxon accepted = ((ITaxonEditor) part).getTaxon();
+
Set<TaxonRelationship> rels = taxon.getTaxonRelations(accepted);
if (rels != null && rels.iterator().hasNext() && !taxon.equals(accepted)){
}
selectionProvidingPart = activePart;
-
if (viewer instanceof DetailsViewerE4){
- ((DetailsViewerE4)viewer).setInput(element, part);
- if (!selectionProvidingPart.getElementId().equals("eu.etaxonomy.taxeditor.editor.view.checklist.e4.DistributionEditorPart")){
- ((DetailsViewerE4)viewer).setDetailsEnabled(true);
+
+ if (selectionProvidingPart.getElementId().equals("eu.etaxonomy.taxeditor.editor.view.checklist.e4.DistributionEditorPart")){
+ ((DetailsViewerE4)viewer).setDetailsEnabled(false);
+ }else{
+ ((DetailsViewerE4)viewer).setDetailsEnabled(isEnabled);
}
+ ((DetailsViewerE4)viewer).setInput(element, part);
}
else{
- if (activePart.getObject() instanceof DetailsPartE4 && element instanceof TaxonName ){
+ if (activePart.getObject() instanceof DetailsPartE4 && element instanceof TaxonName){
selectionProvidingPart = ((DetailsPartE4)activePart.getObject()).getSelectionProvidingPart();
}
+
viewer.setInput(element);
- }
+ viewer.getControl().setEnabled(isEnabled);
+
+ }
}
}
}