From 59351073fcad701d94cf041163cae12f05a1ad36 Mon Sep 17 00:00:00 2001
From: "n.hoffmann"
Date: Thu, 16 Jun 2011 14:51:46 +0000
Subject: [PATCH] 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)
---
.../taxeditor/store/LoginManager.java | 12 ++
.../taxeditor/ui/forms/ImageElement.java | 106 +++++++++++-------
.../forms/password/EditPasswordElement.java | 1 +
.../ui/forms/password/PasswordWizard.java | 13 ++-
.../ui/openurl/OpenUrlReferencePage.java | 28 ++---
.../ui/section/media/ImageFileElement.java | 106 ++++++++++--------
.../ui/section/user/UserDetailElement.java | 3 +-
7 files changed, 165 insertions(+), 104 deletions(-)
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);
--
2.34.1