[SYNCOPE-156] fix provision and attribute mapping management + binary 
attributes default preview provided


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a9c26245
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a9c26245
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a9c26245

Branch: refs/heads/master
Commit: a9c2624546887787a6e0389e4bbb1fff5f14f612
Parents: 6e41db3
Author: fmartelli <fabio.marte...@gmail.com>
Authored: Tue Dec 22 12:06:25 2015 +0100
Committer: fmartelli <fabio.marte...@gmail.com>
Committed: Tue Dec 22 12:06:25 2015 +0100

----------------------------------------------------------------------
 .../client/console/commons/PreviewUtils.java    | 42 ++++-----
 .../init/ClassPathScanImplementationLookup.java |  3 +-
 .../console/panels/ResourceMappingPanel.java    | 28 ++++--
 .../markup/html/form/BinaryFieldPanel.java      | 98 ++++++++++++++------
 .../form/preview/AbstractBinaryPreviewer.java   | 12 ++-
 .../html/form/preview/BinaryCertPreviewer.java  | 20 ++--
 .../html/form/preview/BinaryImagePreviewer.java |  8 +-
 .../provision/ProvisionWizardBuilder.java       | 50 ++++++++--
 .../markup/html/form/BinaryFieldPanel.html      | 40 ++++----
 .../ProvisionWizardBuilder$ObjectType.html      | 16 ++--
 10 files changed, 203 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
index e88fcb3..ae2661d 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
@@ -25,8 +25,7 @@ import 
org.apache.syncope.client.console.SyncopeConsoleApplication;
 import 
org.apache.syncope.client.console.init.ClassPathScanImplementationLookup;
 import org.apache.syncope.client.console.init.ConsoleInitializer;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer;
-import org.apache.wicket.Component;
-import org.apache.wicket.util.crypt.Base64;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.preview.DefaultPreviewer;
 import org.springframework.util.Assert;
 
 public final class PreviewUtils {
@@ -51,30 +50,27 @@ public final class PreviewUtils {
                 
getServletContext().getAttribute(ConsoleInitializer.CLASSPATH_LOOKUP);
     }
 
-    public Component getPreviewer(final String mimeType, final String file)
-            throws InstantiationException, IllegalAccessException, 
InvocationTargetException {
-
-        Class<? extends AbstractBinaryPreviewer> previewer = 
StringUtils.isBlank(file)
-                ? null
-                : 
classPathScanImplementationLookup.getPreviewerClass(mimeType);
-
-        return previewer == null
-                ? null
-                : getConstructorIfAvailable(previewer, String.class, 
String.class, byte[].class).
-                newInstance(new Object[] { "previewer", mimeType, 
Base64.decodeBase64(file) }).
-                preview();
+    public AbstractBinaryPreviewer getDefaultPreviewer(final String mimeType) {
+        return new DefaultPreviewer("previewer", mimeType);
     }
 
-    public Component getPreviewer(final String mimeType, final byte[] file)
-            throws InstantiationException, IllegalAccessException, 
InvocationTargetException {
+    public AbstractBinaryPreviewer getPreviewer(final String mimeType) {
+
+        if (StringUtils.isBlank(mimeType)) {
+            return null;
+        }
 
-        Class<? extends AbstractBinaryPreviewer> previewer = 
classPathScanImplementationLookup.getPreviewerClass(
-                mimeType);
+        final Class<? extends AbstractBinaryPreviewer> previewer
+                = 
classPathScanImplementationLookup.getPreviewerClass(mimeType);
 
-        return previewer == null
-                ? null
-                : getConstructorIfAvailable(previewer, String.class, 
String.class, byte[].class).
-                newInstance(new Object[] { "previewer", mimeType, file }).
-                preview();
+        try {
+            return previewer == null
+                    ? null
+                    : getConstructorIfAvailable(previewer, String.class, 
String.class).
+                    newInstance(new Object[] { "previewer", mimeType });
+        } catch (InstantiationException | IllegalAccessException | 
IllegalArgumentException 
+                | InvocationTargetException ex) {
+            return null;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
index 3c28c04..5ec7e58 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java
@@ -86,7 +86,8 @@ public class ClassPathScanImplementationLookup {
         Class<? extends AbstractBinaryPreviewer> previewer = null;
         for (Class<? extends AbstractBinaryPreviewer> candidate : previewers) {
             LOG.debug("Evaluating previewer class {} for MIME type {}", 
candidate.getName(), mimeType);
-            if 
(ArrayUtils.contains(candidate.getAnnotation(BinaryPreview.class).mimeTypes(), 
mimeType)) {
+            if (candidate.isAnnotationPresent(BinaryPreview.class)
+                    && 
ArrayUtils.contains(candidate.getAnnotation(BinaryPreview.class).mimeTypes(), 
mimeType)) {
                 LOG.debug("Found existing previewer for MIME type {}: {}", 
mimeType, candidate.getName());
                 previewer = candidate;
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 2ee2073..6f25bdd 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
@@ -25,8 +25,8 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
@@ -310,8 +310,8 @@ public class ResourceMappingPanel extends Panel {
 
                         
intAttrNames.setChoices(Collections.<String>emptyList());
 
-                        target.add(intMappingTypes.getField());
-                        target.add(intAttrNames.getField());
+                        target.add(intMappingTypes);
+                        target.add(intAttrNames);
                     }
                 });
                 item.add(entitiesPanel);
@@ -445,15 +445,23 @@ public class ResourceMappingPanel extends Panel {
         connInstanceTO.getConf().addAll(conf);
 
         // SYNCOPE-156: use provided info to give schema names (and type!) by 
ObjectClass
-        return 
CollectionUtils.collect(connRestClient.buildObjectClassInfo(connInstanceTO, 
true),
-                new Transformer<ConnIdObjectClassTO, String>() {
+        ConnIdObjectClassTO clazz = IterableUtils.find(
+                connRestClient.buildObjectClassInfo(connInstanceTO, true), new 
Predicate<ConnIdObjectClassTO>() {
 
             @Override
-            public String transform(final ConnIdObjectClassTO input) {
-                return input.getType();
+            public boolean evaluate(final ConnIdObjectClassTO object) {
+                return 
object.getType().equalsIgnoreCase(ResourceMappingPanel.this.provisionTO.getObjectClass());
             }
-        },
-                new ArrayList<String>());
+        });
+
+        return clazz == null ? new ArrayList<String>()
+                : 
IterableUtils.toList(IterableUtils.filteredIterable(clazz.getAttributes(), new 
Predicate<String>() {
+                    @Override
+                    public boolean evaluate(final String object) {
+                        return !("__NAME__".equals(object) || 
"__ENABLE__".equals(object) 
+                                || "__PASSWORD__".equals(object));
+                    }
+                }));
     }
 
     private void setEnabled() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
index 2bd4e98..31c3ef7 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
@@ -18,22 +18,29 @@
  */
 package org.apache.syncope.client.console.wicket.markup.html.form;
 
+import static de.agilecoders.wicket.jquery.JQuery.$;
+
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.BootstrapFileInputField;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.FileInputConfig;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.FileinputJsReference;
+import de.agilecoders.wicket.jquery.JQuery;
+import de.agilecoders.wicket.jquery.function.IFunction;
 import java.io.ByteArrayInputStream;
-import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.HttpResourceStream;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.PreviewUtils;
-import org.apache.syncope.client.console.pages.BasePage;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -44,6 +51,7 @@ import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
 import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
 import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.util.crypt.Base64;
@@ -63,18 +71,47 @@ public class BinaryFieldPanel extends FieldPanel<String> {
 
     private final Fragment emptyFragment;
 
+    private final BootstrapFileInputField fileUpload;
+
     private final transient PreviewUtils previewUtils = 
PreviewUtils.getInstance();
 
+    private final AbstractBinaryPreviewer previewer;
+
     public BinaryFieldPanel(final String id, final String name, final 
IModel<String> model, final String mimeType) {
         super(id, name, model);
         this.mimeType = mimeType;
 
+        previewer = previewUtils.getPreviewer(mimeType);
+
         uploadForm = new StatelessForm<>("uploadForm");
         uploadForm.setMultiPart(true);
         uploadForm.setMaxSize(Bytes.megabytes(4));
         add(uploadForm);
 
-        container = new WebMarkupContainer("previewContainer");
+        container = new WebMarkupContainer("previewContainer") {
+
+            private static final long serialVersionUID = 2628490926588791229L;
+
+            @Override
+            public void renderHead(final IHeaderResponse response) {
+                if (previewer == null) {
+                    FileinputJsReference.INSTANCE.renderHead(response);
+                    final JQuery fileinputJS = $(fileUpload).chain(new 
IFunction() {
+
+                        private static final long serialVersionUID = 
-2285418135375523652L;
+
+                        @Override
+                        public String build() {
+                            return "fileinput({"
+                                    + "'showRemove':false, "
+                                    + "'showUpload':false, "
+                                    + "'previewFileType':'any'})";
+                        }
+                    });
+                    
response.render(OnDomReadyHeaderItem.forScript(fileinputJS.get()));
+                }
+            }
+        };
         container.setOutputMarkupId(true);
 
         emptyFragment = new Fragment("panelPreview", "emptyFragment", 
container);
@@ -111,9 +148,11 @@ public class BinaryFieldPanel extends FieldPanel<String> {
 
         FileInputConfig config = new FileInputConfig();
         config.showUpload(false);
+        config.showRemove(false);
+        config.showPreview(false);
 
-        @SuppressWarnings({ "unchecked", "rawtypes" })
-        final BootstrapFileInputField fileUpload = new 
BootstrapFileInputField("fileUpload", new Model(), config);
+        fileUpload = new BootstrapFileInputField("fileUpload",
+                new ListModel<FileUpload>(new ArrayList<FileUpload>()), 
config);
         fileUpload.setOutputMarkupId(true);
 
         fileUpload.add(new AjaxFormSubmitBehavior(Constants.ON_CHANGE) {
@@ -124,28 +163,25 @@ public class BinaryFieldPanel extends FieldPanel<String> {
             protected void onSubmit(final AjaxRequestTarget target) {
                 final FileUpload uploadedFile = fileUpload.getFileUpload();
                 if (uploadedFile != null) {
-                    try {
-                        final byte[] uploadedBytes = uploadedFile.getBytes();
-                        final String uploaded = new String(
-                                Base64.encodeBase64(uploadedBytes),
-                                SyncopeConstants.DEFAULT_CHARSET);
-                        field.setModelObject(uploaded);
-                        target.add(field);
-
-                        Component panelPreview = 
previewUtils.getPreviewer(mimeType, uploadedBytes);
-                        if (panelPreview != null) {
-                            changePreviewer(panelPreview);
-                        }
-
+                    final byte[] uploadedBytes = uploadedFile.getBytes();
+                    final String uploaded = new String(
+                            Base64.encodeBase64(uploadedBytes),
+                            SyncopeConstants.DEFAULT_CHARSET);
+                    field.setModelObject(uploaded);
+                    target.add(field);
+
+                    if (previewer == null) {
+                        container.addOrReplace(emptyFragment);
+                    } else {
+                        final Component panelPreview = 
previewer.preview(uploadedBytes);
+                        changePreviewer(panelPreview);
                         fileUpload.setModelObject(null);
                         uploadForm.addOrReplace(fileUpload);
-                        
downloadLink.setEnabled(StringUtils.isNotBlank(uploaded));
-                        target.add(uploadForm);
-                    } catch (InstantiationException | IllegalAccessException | 
InvocationTargetException e) {
-                        error(getString(Constants.ERROR) + ": " + 
e.getMessage());
-                        ((BasePage) 
getPage()).getFeedbackPanel().refresh(target);
-                        LOG.error("While saving uploaded file", e);
                     }
+
+                    downloadLink.setEnabled(StringUtils.isNotBlank(uploaded));
+
+                    target.add(container);
                 }
             }
         });
@@ -198,14 +234,20 @@ public class BinaryFieldPanel extends FieldPanel<String> {
     @Override
     public FieldPanel<String> setNewModel(final IModel<String> model) {
         field.setModel(model);
-        try {
-            Component panelPreview = previewUtils.getPreviewer(mimeType, 
model.getObject());
+
+        if (StringUtils.isNotBlank(model.getObject())) {
+            final Component panelPreview;
+            if (previewer == null) {
+                panelPreview = previewUtils.getDefaultPreviewer(mimeType);
+            } else {
+                panelPreview = previewer.preview(model.getObject());
+            }
+
             if (panelPreview != null) {
                 changePreviewer(panelPreview);
             }
-        } catch (InstantiationException | IllegalAccessException | 
InvocationTargetException e) {
-            LOG.error("While loading saved file", e);
         }
+
         downloadLink.setEnabled(StringUtils.isNotBlank(model.getObject()));
         uploadForm.addOrReplace(downloadLink);
         return this;

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.java
index 24bdb47..97bb2f3 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.java
@@ -20,6 +20,7 @@ package 
org.apache.syncope.client.console.wicket.markup.html.form.preview;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.util.crypt.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,13 +35,14 @@ public abstract class AbstractBinaryPreviewer extends Panel 
{
 
     protected final String mimeType;
 
-    protected final byte[] uploadedBytes;
-
-    public AbstractBinaryPreviewer(final String id, final String mimeType, 
final byte[] uploadedBytes) {
+    public AbstractBinaryPreviewer(final String id, final String mimeType) {
         super(id);
         this.mimeType = mimeType;
-        this.uploadedBytes = uploadedBytes;
     }
 
-    public abstract Component preview();
+    public Component preview(final String uploaded) {
+        return preview(Base64.decodeBase64(uploaded));
+    }
+
+    public abstract Component preview(final byte[] uploadedBytes);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
index 20f2a7b..f7b3831 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryCertPreviewer.java
@@ -19,12 +19,15 @@
 package org.apache.syncope.client.console.wicket.markup.html.form.preview;
 
 import java.io.ByteArrayInputStream;
+import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
+import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.annotations.BinaryPreview;
+import org.apache.syncope.client.console.commons.Constants;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
@@ -35,13 +38,18 @@ public class BinaryCertPreviewer extends 
AbstractBinaryPreviewer {
 
     private static final long serialVersionUID = -5843835939538055110L;
 
-    public BinaryCertPreviewer(final String id, final String mimeType, final 
byte[] uploadedBytes) {
-        super(id, mimeType, uploadedBytes);
+    public BinaryCertPreviewer(final String id, final String mimeType) {
+        super(id, mimeType);
     }
 
     @Override
-    public Component preview() {
+    public Component preview(final byte[] uploadedBytes) {
         final Label commonNameLabel = new Label("certCommonName", new 
Model<String>());
+        if (uploadedBytes.length == 0) {
+            LOG.info("Enpty certificate");
+            return commonNameLabel;
+        }
+
         final ByteArrayInputStream certificateStream = new 
ByteArrayInputStream(uploadedBytes);
         try {
             final X509Certificate certificate = (X509Certificate) 
CertificateFactory.getInstance("X.509").
@@ -59,12 +67,12 @@ public class BinaryCertPreviewer extends 
AbstractBinaryPreviewer {
                 }
             }
             
commonNameLabel.setDefaultModelObject(commonNameBuilder.toString());
-        } catch (Exception e) {
+        } catch (CertificateException | InvalidNameException e) {
             LOG.error("Error evaluating certificate file", e);
-            throw new IllegalArgumentException("Error evaluating certificate 
file", e);
+            commonNameLabel.setDefaultModelObject(getString(Constants.ERROR));
         } finally {
             IOUtils.closeQuietly(certificateStream);
         }
-        return this.add(commonNameLabel);
+        return this.addOrReplace(commonNameLabel);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
index 488caf0..dc198ea 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.java
@@ -30,14 +30,14 @@ public class BinaryImagePreviewer extends 
AbstractBinaryPreviewer {
 
     private static final long serialVersionUID = 3338812359368457349L;
 
-    private static final int IMG_SIZE = 230;
+    private static final int IMG_SIZE = 300;
 
-    public BinaryImagePreviewer(final String id, final String mimeType, final 
byte[] uploadedBytes) {
-        super(id, mimeType, uploadedBytes);
+    public BinaryImagePreviewer(final String id, final String mimeType) {
+        super(id, mimeType);
     }
 
     @Override
-    public Component preview() {
+    public Component preview(final byte[] uploadedBytes) {
         return this.add(new NonCachingImage("previewImage", new 
ThumbnailImageResource(new DynamicImageResource() {
 
             private static final long serialVersionUID = 923201517955737928L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
index 8c20920..4d60aab 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
@@ -28,16 +28,19 @@ import 
org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
@@ -78,11 +81,11 @@ public class ProvisionWizardBuilder extends 
AjaxWizardBuilder<ProvisionTO> imple
                         }
                     }, res), new Predicate<String>() {
 
-                        @Override
-                        public boolean evaluate(final String key) {
-                            return !currentlyAdded.contains(key);
-                        }
-                    });
+                @Override
+                public boolean evaluate(final String key) {
+                    return !currentlyAdded.contains(key);
+                }
+            });
 
             return res;
         }
@@ -95,6 +98,10 @@ public class ProvisionWizardBuilder extends 
AjaxWizardBuilder<ProvisionTO> imple
 
         private static final long serialVersionUID = 1L;
 
+        private static final String ACCOUNT = "__ACCOUNT__";
+
+        private static final String GROUP = "__GROUP__";
+
         /**
          * Construct.
          */
@@ -102,12 +109,37 @@ public class ProvisionWizardBuilder extends 
AjaxWizardBuilder<ProvisionTO> imple
             super(new ResourceModel("type.title", StringUtils.EMPTY),
                     new ResourceModel("type.summary", StringUtils.EMPTY), new 
Model<ProvisionTO>(item));
 
-            add(new AjaxDropDownChoicePanel<String>("type", "type", new 
PropertyModel<String>(item, "anyType"), false).
+            final WebMarkupContainer container = new 
WebMarkupContainer("container");
+            container.setOutputMarkupId(true);
+            add(container);
+
+            final FieldPanel<String> type = new 
AjaxDropDownChoicePanel<String>(
+                    "type", "type", new PropertyModel<String>(item, 
"anyType"), false).
                     setChoices(anyTypes).
                     setStyleSheet("form-control").
-                    setRequired(true));
+                    setRequired(true);
+            container.add(type);
+
+            final FormComponent<String> clazz = new TextField<String>(
+                    "class", new PropertyModel<String>(item, 
"objectClass")).setRequired(true);
+
+            container.add(clazz);
 
-            add(new TextField<String>("class", new PropertyModel<String>(item, 
"objectClass")).setRequired(true));
+            type.getField().add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                private static final long serialVersionUID = 
-1107858522700306810L;
+
+                @Override
+                protected void onUpdate(final AjaxRequestTarget target) {
+                    if (AnyTypeKind.USER.name().equals(type.getModelObject())) 
{
+                        clazz.setModelObject(ACCOUNT);
+                        target.add(container);
+                    } else if 
(AnyTypeKind.GROUP.name().equals(type.getModelObject())) {
+                        clazz.setModelObject(GROUP);
+                        target.add(container);
+                    }
+                }
+            });
         }
     }
 
@@ -216,6 +248,6 @@ public class ProvisionWizardBuilder extends 
AjaxWizardBuilder<ProvisionTO> imple
 
     @Override
     protected void onApplyInternal(final ProvisionTO modelObject) {
-        // do nothing
+        this.resourceTO.getProvisions().add(modelObject);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.html
index e1bd8d5..d9a1d56 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.html
@@ -26,27 +26,25 @@ under the License.
       </wicket:enclosure>
       <fieldset class="input-group">
         <input style="display: none;" wicket:id="textField"/>
-        <span style="margin-right: 20px;">
-          <div style="display: table-cell;">
-            <form wicket:id="uploadForm" encType="multipart/form-data" 
method="post" accept-charset="UTF-8">
-              <input wicket:id="fileUpload" type="file"/>
-              <div style="top: -25px; left: 100%; position: relative; 
vertical-align: middle;">
-                <!--<a href="#" wicket:id="uploadLink"><i title="upload" 
alt="file upload icon" class="glyphicon glyphicon-upload"></i></a>-->
-                <a href="#" wicket:id="downloadLink"><i title="download" 
alt="file download icon" class="glyphicon glyphicon-download"></i></a>
-                <a href="#" wicket:id="resetLink"><i title="remove value" 
alt="remove value icon" class="glyphicon glyphicon-remove"></i></a>
-                <span wicket:id="preview"/>
-              </div>
-              <span wicket:id="previewContainer">
-                <span wicket:id="panelPreview">[panelPreview]</span>
-                <wicket:fragment wicket:id="previewFragment">
-                  <div wicket:id = "previewer" class="ui-widget-content 
ui-corner-all"></div>
-                </wicket:fragment>
-                <wicket:fragment wicket:id="emptyFragment">
-                </wicket:fragment>
-              </span>
-            </form>
-          </div>
-        </span>
+        <div>
+          <form wicket:id="uploadForm" encType="multipart/form-data" 
method="post" accept-charset="UTF-8">
+            <span wicket:id="previewContainer">
+              <span wicket:id="panelPreview">[panelPreview]</span>
+              <wicket:fragment wicket:id="previewFragment">
+                <div wicket:id = "previewer" class="ui-widget-content 
ui-corner-all form-group"></div>
+              </wicket:fragment>
+              <wicket:fragment wicket:id="emptyFragment">
+              </wicket:fragment>
+            </span>
+            <input wicket:id="fileUpload" type="file"/>
+            <div>
+              <!--<a href="#" wicket:id="uploadLink"><i title="upload" 
alt="file upload icon" class="glyphicon glyphicon-upload"></i></a>-->
+              <a href="#" wicket:id="downloadLink"><i title="download" 
alt="file download icon" class="glyphicon glyphicon-download"></i></a>
+              <a href="#" wicket:id="resetLink"><i title="remove value" 
alt="remove value icon" class="glyphicon glyphicon-remove"></i></a>
+              <span wicket:id="preview"/>
+            </div>
+          </form>
+        </div>
       </fieldset>
     </wicket:extend>
   </body>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a9c26245/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
index 95b13a9..1692194 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
@@ -20,13 +20,15 @@ under the License.
   <head><title></title></head>
   <body>
     <wicket:panel >
-      <div class="form-group">
-        <label>Object Type</label>
-        <span wicket:id="type"/>
-      </div>
-      <div class="form-group">
-        <label>Object Class</label>
-        <input type="text" placeholder="Object Class ..." class="form-control" 
 wicket:id="class">
+      <div wicket:id="container">
+        <div class="form-group">
+          <label>Object Type</label>
+          <span wicket:id="type"/>
+        </div>
+        <div class="form-group">
+          <label>Object Class</label>
+          <input type="text" placeholder="Object Class ..." 
class="form-control"  wicket:id="class">
+        </div>
       </div>
     </wicket:panel>
   </body>

Reply via email to