From: n.hoffmann Date: Thu, 16 Jun 2011 14:51:46 +0000 (+0000) Subject: Improved image handling (fixes #2351); Passwords can now be changed by "admin" user... X-Git-Tag: rcp.ss-first-working-version~29 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/59351073fcad701d94cf041163cae12f05a1ad36 Improved image handling (fixes #2351); Passwords can now be changed by "admin" user (CAUTION: this is done by checking if the currently logged in user is the user named "admin", this has to change once rights are implemented correctly) --- diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java index b1f7f1133..bebacaf08 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java @@ -100,4 +100,16 @@ public class LoginManager extends Observable implements IConversationEnabled{ } return conversation; } + + /** + * Whether the current user has the role admin + * + * @return + */ + public boolean isAdmin() { + // FIXME until we have rights implemented properly we do this + // by a simple string check. This has to change + + return "admin".equals(getAuthenticatedUser().getUsername()); + } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/ImageElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/ImageElement.java index 2eb860091..bc7b06ab6 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/ImageElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/ImageElement.java @@ -10,15 +10,16 @@ package eu.etaxonomy.taxeditor.ui.forms; +import java.io.IOException; import java.io.InputStream; import java.net.URI; +import org.apache.http.HttpException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.GC; @@ -27,7 +28,6 @@ import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.widgets.TableWrapData; import eu.etaxonomy.cdm.common.UriUtils; @@ -58,10 +58,7 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene */ protected ImageElement(CdmFormFactory formFactory, ICdmFormElement parentElement, URI imageUri, int style) { super(formFactory, parentElement); - - setImageUri(imageUri); - loadImage(); - + container = new Composite(getLayoutComposite(), style); container.setLayoutData(CdmFormFactory.FILL(2, 1)); @@ -82,9 +79,13 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene *

Setter for the field imageUri.

* * @param uri a {@link java.net.URI} object. + * @throws HttpException + * @throws IOException */ - public void setImageUri(URI uri) { + public void initImageUri(URI uri) throws IOException, HttpException { this.imageUri = uri; + InputStream imageStream = UriUtils.getInputStream(imageUri); + image = new Image(Display.getCurrent(), imageStream); } @@ -101,6 +102,8 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene loadImage(null); } + + public void loadImage(final Runnable postRunnable){ if(getImageUri() != null){ Job job = new Job("Loading image") { @@ -121,49 +124,64 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene } } - public IRunnableWithProgress getLoadImageRunnable(final Runnable postRunnable){ + + + public void unloadImage(final Runnable postRunnable) { + Job job = new Job("Unloading image") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + IRunnableWithProgress runnable = getLoadImageRunnable(postRunnable); + try { + runnable.run(monitor); + } catch (Exception e) { + StoreUtil.errorDialog("Could not unload image", getClass(), e.getMessage() + ": " + getImageUri(), e); + } + + return Status.OK_STATUS; + } + }; + job.schedule(); + } + + public IRunnableWithProgress getLoadImageRunnable(final Runnable postRunnable){ + final Display display = getLayoutComposite().getDisplay(); IRunnableWithProgress runnable = new IRunnableWithProgress(){ @Override public void run(IProgressMonitor monitor) { - try { - monitor.beginTask("Loading: " + getImageUri(), IProgressMonitor.UNKNOWN); - InputStream imageStream = UriUtils.getInputStream(imageUri); - - image = new Image(Display.getCurrent(), imageStream); - - // redraw the image container - display.asyncExec(new Runnable(){ - @Override - public void run() { - if(! getLayoutComposite().isDisposed()){ - Event untypedEvent = new Event(); - untypedEvent.widget = container; - PaintEvent event = new PaintEvent(untypedEvent); - event.gc = new GC(container); - paintControl(event); - getLayoutComposite().layout(); - } + monitor.beginTask("Loading: " + getImageUri(), IProgressMonitor.UNKNOWN); + + // redraw the image container + display.asyncExec(new Runnable(){ + @Override + public void run() { + if(! getLayoutComposite().isDisposed()){ + Event untypedEvent = new Event(); + untypedEvent.widget = container; + PaintEvent event = new PaintEvent(untypedEvent); + event.gc = new GC(container); + paintControl(event); + getLayoutComposite().layout(); } - }); - - // execute the external runnable - if(postRunnable != null){ - display.asyncExec(postRunnable); } - monitor.done(); - }catch (Exception e) { - StoreUtil.warn(getClass(), e.getMessage()); - } - } + }); + + // execute the external runnable + if(postRunnable != null){ + display.asyncExec(postRunnable); + } + monitor.done(); + } + }; return runnable; } - + private void calculateImageBounds(){ Rectangle imageBounds = image.getBounds(); Rectangle containerBounds = container.getBounds(); @@ -185,14 +203,18 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene /** {@inheritDoc} */ @Override public void paintControl(PaintEvent e) { + TableWrapData layoutData = CdmFormFactory.FILL(2, 1); + Composite composite = (Composite) e.widget; if(image != null){ calculateImageBounds(); - Composite composite = (Composite) e.widget; - TableWrapData layoutData = CdmFormFactory.FILL(2, 1); layoutData.heightHint = imageMaxBounds.height; - composite.setLayoutData(layoutData); e.gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, imageMaxBounds.width, imageMaxBounds.height); - e.gc.dispose(); - } + }else{ + layoutData.heightHint = 10; + e.gc.drawRectangle(0, 0, 0, 10); + } + composite.setLayoutData(layoutData); + e.gc.dispose(); } + } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/EditPasswordElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/EditPasswordElement.java index 85a766d20..1a221a00b 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/EditPasswordElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/EditPasswordElement.java @@ -46,6 +46,7 @@ public class EditPasswordElement extends AbstractCdmFormElement implements Selec super(formFactory, formElement); this.conversation = conversation; + this.user = user; Label label = formFactory.createLabel(getLayoutComposite(), null); addControl(label); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/PasswordWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/PasswordWizard.java index 6f45bd126..c0d38de54 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/PasswordWizard.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/password/PasswordWizard.java @@ -43,8 +43,13 @@ public class PasswordWizard extends Wizard implements IConversationEnabled{ @Override public void addPages() { CdmFormFactory formFactory = new CdmFormFactory(Display.getDefault()); + +// if(CdmStore.getLoginManager().isAdmin()){ +// +// }else{ +// } passwordPage = new PasswordWizardPage(formFactory, getConversationHolder(), user); - super.addPage(passwordPage); + addPage(passwordPage); } /* (non-Javadoc) @@ -54,7 +59,11 @@ public class PasswordWizard extends Wizard implements IConversationEnabled{ public boolean performFinish() { ConversationHolder internalConversation = CdmStore.getLoginManager().getConversationHolder(); internalConversation.bind(); - CdmStore.getService(IUserService.class).changePassword(passwordPage.getOldPassword(), passwordPage.getNewPassword()); + if(CdmStore.getLoginManager().isAdmin()){ + CdmStore.getService(IUserService.class).changePasswordForUser(user.getUsername(), passwordPage.getNewPassword()); + }else{ + CdmStore.getService(IUserService.class).changePassword(passwordPage.getOldPassword(), passwordPage.getNewPassword()); + } internalConversation.commit(); conversation.bind(); return true; diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlReferencePage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlReferencePage.java index 127472a97..9ed8d98cf 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlReferencePage.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlReferencePage.java @@ -109,21 +109,21 @@ public class OpenUrlReferencePage extends WizardPage implements SelectionListene */ public void displayImage() { URI imageUri = getWizard().getOpenUrlReferenceImageUri(); - imageElement.setImageUri(imageUri); - - IRunnableWithProgress runnable = imageElement.getLoadImageRunnable(new Runnable(){ - /* (non-Javadoc) - * @see java.lang.Runnable#run() - */ - @Override - public void run() { - container.layout(); - - configurePageBar(); - } - }); - try { + imageElement.initImageUri(imageUri); + + IRunnableWithProgress runnable = imageElement.getLoadImageRunnable(new Runnable(){ + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + @Override + public void run() { + container.layout(); + + configurePageBar(); + } + }); + getWizard().getContainer().run(true, false, runnable); } catch (Exception e) { StoreUtil.errorDialog("Could not load image", getClass(), e.getMessage() + ": " + imageUri , e); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java index 2cff332fc..eb13e836c 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java @@ -12,16 +12,14 @@ package eu.etaxonomy.taxeditor.ui.section.media; import java.io.IOException; import java.net.URI; -import java.net.URISyntaxException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpException; import org.eclipse.swt.events.SelectionListener; -import eu.etaxonomy.cdm.api.service.IMediaService; import eu.etaxonomy.cdm.common.media.ImageInfo; import eu.etaxonomy.cdm.model.media.ImageFile; -import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.StoreUtil; import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection; import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory; @@ -29,6 +27,7 @@ import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent; import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement; import eu.etaxonomy.taxeditor.ui.forms.ImageElement; import eu.etaxonomy.taxeditor.ui.forms.KeyValueViewerElement; +import eu.etaxonomy.taxeditor.ui.forms.LabelElement; import eu.etaxonomy.taxeditor.ui.forms.NumberWithLabelElement; import eu.etaxonomy.taxeditor.ui.section.supplemental.AbstractMediaRepresentationPartElement; @@ -46,6 +45,15 @@ public class ImageFileElement extends AbstractMediaRepresentationPartElementConstructor for ImageFileElement.

* @@ -71,7 +79,7 @@ public class ImageFileElement extends AbstractMediaRepresentationPartElement { text_username = formFactory.createTextWithLabelElement(formElement, "Username", entity.getUsername(), style); - if (userIsAuthenticated()) { + if (userIsAuthenticated() || CdmStore.getLoginManager().isAdmin()) { element_editPassword = formFactory.createEditPasswordElement( formElement, "Change Password", getConversationHolder(), entity, style);