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();
++
}
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();
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.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>
"There should always be a selected object.");
}
getSelectedContainer().setSelected();
++
++ // check permissions
++ TaxonNode taxonNode = ((TaxonEditorInput)getEditorInput()).getTaxonNode();
++ boolean doEnable = CdmStore.currentAuthentiationHasPermission(taxonNode, RequiredPermissions.TAXONNODE_EDIT);
++ if(!doEnable){
++ setDisabled();
++ }
}
/** {@inheritDoc} */
getSite().setSelectionProvider(simpleSelectionProvider);
}
++
/**
*
*/
allGroups.add(getAcceptedGroup());
-- List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups();
++// List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups(); // UNUSED => remove
heterotypicSynonymGroups = getHeterotypicSynonymGroups();
}
return getAcceptedNameContainer();
}
++
++ /* (non-Javadoc)
++ * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setOnError()
++ */
++ public void setOnError() {
++ Color disabledColor = StoreUtil.getColor(Resources.COLOR_EDITOR_ERROR);
++ setDisabled(disabledColor);
++ }
++ /* (non-Javadoc)
++ * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setDisabled()
++ */
@Override
public void setDisabled(){
++ Color disabledColor = StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND);
++ setDisabled(disabledColor);
++ }
++
++ protected void setDisabled(Color disabledColor) {
++
for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
groupedContainer.setDisabled(true);
}
-- // 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);
}
@Override
public void setEnabled(boolean enabled) {
++ //FIXME this method seems incomplete
for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
groupedContainer.setEnabled(getManagedForm().setInput(selection));
}
focusListener = new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
-- if(disabled){
++ if(!enabled){
return;
}
for (AbstractGroupedContainer container : getEditor()
private boolean enabled;
-- private boolean disabled;
--
/**
* nonEditableInfo is a label displayed underneath a GroupedComposite's
* input field. For instance, NameComposites display things like name
}
public void setDisabled(boolean disabled) {
-- this.disabled = disabled;
-- setEnabled(disabled);
++ this.enabled = !disabled;
++ setEnabled(enabled);
}
public void setEnabled(boolean enabled) {
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;
}
}
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>
public class TaxonNodeLabelProvider extends ColumnLabelProvider
implements ILabelProvider, IDescriptionProvider, IStyledLabelProvider {
+
+ private Styler notGrantedStyler = null;
+
/** {@inheritDoc} */
@Override
public Image getImage(Object element) {
*/
/** {@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;
}
}
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">
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";
++
}
--- /dev/null
+/**
+ *
+ */
+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;
++
+
+}