http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java index 40789c7,59ab76f..fe33899 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java @@@ -20,30 -20,34 +20,19 @@@ package org.apache.syncope.client.conso import java.util.Arrays; import java.util.List; -import org.apache.commons.lang3.StringUtils; --import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.panels.ModalContent.ModalEvent; --import org.apache.syncope.client.console.rest.ConnectorRestClient; - import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent; 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.MultiFieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.SpinnerFieldPanel; --import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.to.ResourceTO; - import org.apache.syncope.common.lib.types.PropagationMode; import org.apache.syncope.common.lib.types.TraceLevel; --import org.apache.wicket.ajax.AjaxRequestTarget; --import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.markup.html.AjaxLink; --import org.apache.wicket.event.Broadcast; -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; import org.apache.wicket.markup.html.WebMarkupContainer; --import org.apache.wicket.markup.html.form.ChoiceRenderer; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.list.ListItem; -import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; --import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; --import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -56,192 -60,240 +45,92 @@@ public class ResourceDetailsPanel exten */ private static final Logger LOG = LoggerFactory.getLogger(ResourceDetailsPanel.class); -- @SpringBean -- private ConnectorRestClient connRestClient; -- -- private ConnInstanceTO connInstanceTO; -- -- public ResourceDetailsPanel(final String id, final ResourceTO resourceTO, final List<String> actionClassNames, ++ public ResourceDetailsPanel( ++ final String id, ++ final IModel<ResourceTO> model, ++ final List<String> actionClassNames, final boolean createFlag) { super(id); setOutputMarkupId(true); - final AjaxTextFieldPanel resourceName = new AjaxTextFieldPanel("name", new ResourceModel("name", "name"). - getObject(), new PropertyModel<String>(resourceTO, "key")); + final WebMarkupContainer container = new WebMarkupContainer("container"); + container.setOutputMarkupId(true); + container.setRenderBodyOnly(true); + add(container); - final AjaxTextFieldPanel resourceName = new AjaxTextFieldPanel("name", new ResourceModel("name", "name"). - getObject(), new PropertyModel<String>(resourceTO, "key")); - -- resourceName.setEnabled(createFlag); -- resourceName.addRequiredLabel(); - container.add(resourceName); - add(resourceName); ++ container.add(new AjaxTextFieldPanel( ++ "name", ++ new ResourceModel("name", "name"). ++ getObject(), ++ new PropertyModel<String>(model, "key"), ++ false).addRequiredLabel().setEnabled(createFlag)); -- final AjaxCheckBoxPanel enforceMandatoryCondition = new AjaxCheckBoxPanel("enforceMandatoryCondition", ++ container.add(new AjaxCheckBoxPanel( ++ "enforceMandatoryCondition", new ResourceModel("enforceMandatoryCondition", "enforceMandatoryCondition").getObject(), -- new PropertyModel<Boolean>(resourceTO, "enforceMandatoryCondition")); - container.add(enforceMandatoryCondition); - add(enforceMandatoryCondition); - - final AjaxCheckBoxPanel propagationPrimary = new AjaxCheckBoxPanel("propagationPrimary", new ResourceModel( - "propagationPrimary", "propagationPrimary").getObject(), new PropertyModel<Boolean>(resourceTO, - "propagationPrimary")); - add(propagationPrimary); - - final SpinnerFieldPanel<Integer> propagationPriority = new SpinnerFieldPanel<>("propagationPriority", - "propagationPriority", Integer.class, - new PropertyModel<Integer>(resourceTO, "propagationPriority"), null, null); - add(propagationPriority); - - final AjaxCheckBoxPanel randomPwdIfNotProvided = new AjaxCheckBoxPanel("randomPwdIfNotProvided", ++ new PropertyModel<Boolean>(model, "enforceMandatoryCondition"), ++ false)); + - final AjaxCheckBoxPanel propagationPrimary = new AjaxCheckBoxPanel("propagationPrimary", new ResourceModel( - "propagationPrimary", "propagationPrimary").getObject(), new PropertyModel<Boolean>(resourceTO, - "propagationPrimary")); - container.add(propagationPrimary); ++ container.add(new AjaxCheckBoxPanel( ++ "propagationPrimary", ++ new ResourceModel("propagationPrimary", "propagationPrimary").getObject(), ++ new PropertyModel<Boolean>(model, "propagationPrimary"), ++ false)); + - final SpinnerFieldPanel<Integer> propagationPriority = new SpinnerFieldPanel<>( ++ container.add(new SpinnerFieldPanel<>( + "propagationPriority", + "propagationPriority", + Integer.class, - new PropertyModel<Integer>(resourceTO, "propagationPriority")); - container.add(propagationPriority); ++ new PropertyModel<Integer>(model, "propagationPriority"))); + - final AjaxDropDownChoicePanel<PropagationMode> propagationMode = new AjaxDropDownChoicePanel<>( - "propagationMode", new ResourceModel("propagationMode", "propagationMode").getObject(), - new PropertyModel<PropagationMode>(resourceTO, "propagationMode")); - propagationMode.setChoices(Arrays.asList(PropagationMode.values())); - container.add(propagationMode); - - final AjaxCheckBoxPanel randomPwdIfNotProvided = new AjaxCheckBoxPanel("randomPwdIfNotProvided", ++ container.add(new AjaxCheckBoxPanel("randomPwdIfNotProvided", new ResourceModel("randomPwdIfNotProvided", "randomPwdIfNotProvided").getObject(), -- new PropertyModel<Boolean>(resourceTO, "randomPwdIfNotProvided")); - container.add(randomPwdIfNotProvided); - add(randomPwdIfNotProvided); -- - final AjaxDropDownChoicePanel<String> template - = new AjaxDropDownChoicePanel<>("panel", "panel", new Model<String>()); - template.setChoices(actionClassNames); - template.setNullValid(true); - template.setRequired(true); - final WebMarkupContainer propagationActionsClassNames = new WebMarkupContainer("propagationActionsClassNames"); - propagationActionsClassNames.setOutputMarkupId(true); - add(propagationActionsClassNames); - - final AjaxLink<Void> first = new IndicatingAjaxLink<Void>("first") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY); - setVisible(false); - target.add(propagationActionsClassNames); - } - }; - first.setOutputMarkupPlaceholderTag(true); - first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty()); - propagationActionsClassNames.add(first); - - final ListView<String> actionsClasses = new ListView<String>("actionsClasses", - new PropertyModel<List<String>>(resourceTO, "propagationActionsClassNames")) { - - private static final long serialVersionUID = 9101744072914090143L; - - @Override - protected void populateItem(final ListItem<String> item) { - final String className = item.getModelObject(); - - final DropDownChoice<String> actionsClass = new DropDownChoice<>( - "actionsClass", new Model<>(className), actionClassNames); - actionsClass.setNullValid(true); - actionsClass.setRequired(true); - actionsClass.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames(). - set(item.getIndex(), actionsClass.getModelObject()); - } - }); - actionsClass.setRequired(true); - actionsClass.setOutputMarkupId(true); - actionsClass.setRequired(true); - item.add(actionsClass); - - final AjaxLink<Void> minus = new IndicatingAjaxLink<Void>("drop") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().remove(className); - first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty()); - target.add(propagationActionsClassNames); - } - }; - item.add(minus); - - final AjaxLink<Void> plus = new IndicatingAjaxLink<Void>("add") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY); - target.add(propagationActionsClassNames); - } - }; - plus.setOutputMarkupPlaceholderTag(true); - plus.setVisible(item.getIndex() == resourceTO.getPropagationActionsClassNames().size() - 1); - item.add(plus); - } - }; - propagationActionsClassNames.add(actionsClasses); - - final AjaxDropDownChoicePanel<TraceLevel> createTraceLevel = new AjaxDropDownChoicePanel<>( - "createTraceLevel", new ResourceModel("createTraceLevel", "createTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "createTraceLevel")); - createTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(createTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> updateTraceLevel = new AjaxDropDownChoicePanel<>( - "updateTraceLevel", new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "updateTraceLevel")); - updateTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(updateTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> deleteTraceLevel = new AjaxDropDownChoicePanel<>( - "deleteTraceLevel", new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "deleteTraceLevel")); - deleteTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(deleteTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> syncTraceLevel = new AjaxDropDownChoicePanel<>( - "syncTraceLevel", new ResourceModel("syncTraceLevel", "syncTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "syncTraceLevel")); - syncTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(syncTraceLevel); - - final IModel<List<ConnInstanceTO>> connectors = new LoadableDetachableModel<List<ConnInstanceTO>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<ConnInstanceTO> load() { - return connRestClient.getAllConnectors(); - } - }; - - connInstanceTO = getConectorInstanceTO(connectors.getObject(), resourceTO); - - final AjaxDropDownChoicePanel<ConnInstanceTO> conn = new AjaxDropDownChoicePanel<>("connector", ++ new PropertyModel<Boolean>(model, "randomPwdIfNotProvided"), ++ false)); + - final MultiFieldPanel<String> actions = new MultiFieldPanel<>( ++ container.add(new MultiFieldPanel<>( + "actionsClasses", + "actionsClasses", - new PropertyModel<List<String>>(resourceTO, "propagationActionsClassNames"), - template, true); - - container.add(actions); - - final AjaxDropDownChoicePanel<TraceLevel> createTraceLevel = new AjaxDropDownChoicePanel<>( - "createTraceLevel", new ResourceModel("createTraceLevel", "createTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "createTraceLevel")); - createTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - container.add(createTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> updateTraceLevel = new AjaxDropDownChoicePanel<>( - "updateTraceLevel", new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "updateTraceLevel")); - updateTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - container.add(updateTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> deleteTraceLevel = new AjaxDropDownChoicePanel<>( - "deleteTraceLevel", new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "deleteTraceLevel")); - deleteTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - container.add(deleteTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> syncTraceLevel = new AjaxDropDownChoicePanel<>( - "syncTraceLevel", new ResourceModel("syncTraceLevel", "syncTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "syncTraceLevel")); - syncTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - container.add(syncTraceLevel); - - final IModel<List<ConnInstanceTO>> connectors = new LoadableDetachableModel<List<ConnInstanceTO>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<ConnInstanceTO> load() { - return connRestClient.getAllConnectors(); - } - }; - - connInstanceTO = getConectorInstanceTO(connectors.getObject(), resourceTO); - - final AjaxDropDownChoicePanel<ConnInstanceTO> conn = new AjaxDropDownChoicePanel<>("connector", ++ new PropertyModel<List<String>>(model, "propagationActionsClassNames"), ++ new AjaxDropDownChoicePanel<>("panel", "panel", new Model<String>()). ++ setChoices(actionClassNames).setNullValid(true).setRequired(true), ++ false)); ++ ++ container.add(new AjaxDropDownChoicePanel<>( ++ "createTraceLevel", ++ new ResourceModel("createTraceLevel", "createTraceLevel").getObject(), ++ new PropertyModel<TraceLevel>(model, "createTraceLevel"), ++ false). ++ setChoices(Arrays.asList(TraceLevel.values()))); ++ ++ container.add(new AjaxDropDownChoicePanel<>( ++ "updateTraceLevel", ++ new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(), ++ new PropertyModel<TraceLevel>(model, "updateTraceLevel"), ++ false). ++ setChoices(Arrays.asList(TraceLevel.values()))); ++ ++ container.add(new AjaxDropDownChoicePanel<>( ++ "deleteTraceLevel", ++ new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(), ++ new PropertyModel<TraceLevel>(model, "deleteTraceLevel"), ++ false). ++ setChoices(Arrays.asList(TraceLevel.values()))); ++ ++ container.add(new AjaxDropDownChoicePanel<>( ++ "syncTraceLevel", ++ new ResourceModel("syncTraceLevel", "syncTraceLevel").getObject(), ++ new PropertyModel<TraceLevel>(model, "syncTraceLevel"), ++ false). ++ setChoices(Arrays.asList(TraceLevel.values()))); ++ ++ container.add(new AjaxTextFieldPanel( ++ "connector", new ResourceModel("connector", "connector").getObject(), -- new PropertyModel<ConnInstanceTO>(this, "connInstanceTO")); -- conn.setChoices(connectors.getObject()); -- conn.setChoiceRenderer(new ChoiceRenderer<ConnInstanceTO>("displayName", "key")); -- -- conn.getField().setModel(new IModel<ConnInstanceTO>() { -- -- private static final long serialVersionUID = -4202872830392400310L; - - @Override - public ConnInstanceTO getObject() { - return connInstanceTO; - } - - @Override - public void setObject(final ConnInstanceTO connector) { - resourceTO.setConnector(connector.getKey()); - connInstanceTO = connector; - } - - @Override - public void detach() { - } - }); - - conn.addRequiredLabel(); - conn.setEnabled(false); - - conn.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - send(getPage(), Broadcast.BREADTH, new DetailsModEvent(target)); - } - }); - - add(conn); - } - - /** - * Get the connetorTO linked to the resource. - * - * @param connectorTOs list of all connectors. - * @param resourceTO resource. - * @return selected connector instance: in case of no connectors available, null; in case of new resource - * specification, the first on connector available - */ - private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> connectorTOs, final ResourceTO resourceTO) { - if (connectorTOs.isEmpty()) { - resourceTO.setConnector(null); - return null; - } else { - // use the first element as default - ConnInstanceTO res = connectorTOs.get(0); - - for (ConnInstanceTO to : connectorTOs) { - if (Long.valueOf(to.getKey()).equals(resourceTO.getConnector())) { - res = to; - } - } - - // in case of no match - resourceTO.setConnector(res.getKey()); - - return res; - } - } - - /** - * Connector instance modification event. - */ - public static class DetailsModEvent extends ModalEvent { ++ new Model<String>(model.getObject().getConnectorDisplayName()), ++ false).addRequiredLabel().setEnabled(false)); - @Override - public ConnInstanceTO getObject() { - return connInstanceTO; - } - - @Override - public void setObject(final ConnInstanceTO connector) { - resourceTO.setConnector(connector.getKey()); - connInstanceTO = connector; - } - - @Override - public void detach() { - } - }); - - conn.addRequiredLabel(); - conn.setEnabled(false); - - conn.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - send(getPage(), Broadcast.BREADTH, new DetailsModEvent(target)); - } - }); - - container.add(conn); - - add(new AnnotatedBeanPanel("systeminformation", resourceTO)); - } - - /** - * Get the connetorTO linked to the resource. - * - * @param connectorTOs list of all connectors. - * @param resourceTO resource. - * @return selected connector instance: in case of no connectors available, null; in case of new resource - * specification, the first on connector available - */ - private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> connectorTOs, final ResourceTO resourceTO) { - if (connectorTOs.isEmpty()) { - resourceTO.setConnector(null); - return null; - } else { - // use the first element as default - ConnInstanceTO res = connectorTOs.get(0); - - for (ConnInstanceTO to : connectorTOs) { - if (Long.valueOf(to.getKey()).equals(resourceTO.getConnector())) { - res = to; - } - } - - // in case of no match - resourceTO.setConnector(res.getKey()); - - return res; - } - } - - /** - * Connector instance modification event. - */ - public static class DetailsModEvent extends ModalEvent { - -- /** -- * Constructor. -- * -- * @param target request target. -- */ -- public DetailsModEvent(final AjaxRequestTarget target) { -- super(target); -- } ++ add(new AnnotatedBeanPanel("systeminformation", model.getObject())); } }
http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java index 40cc013,40cc013..46cc21f --- 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 @@@ -22,12 -22,12 +22,10 @@@ import java.util.ArrayList import java.util.Arrays; import java.util.Collections; import java.util.Comparator; --import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.commons.JexlHelpUtils; --import org.apache.syncope.client.console.panels.ResourceConnConfPanel.ConnConfModEvent; import org.apache.syncope.client.console.rest.ConnectorRestClient; import org.apache.syncope.client.console.rest.SchemaRestClient; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel; @@@ -52,7 -52,7 +50,6 @@@ import org.apache.wicket.ajax.attribute import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; --import org.apache.wicket.event.IEvent; import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; @@@ -462,26 -462,26 +459,6 @@@ public class ResourceMappingPanel exten } } -- @Override -- public void onEvent(final IEvent<?> event) { -- if (event.getPayload() instanceof ConnConfModEvent) { -- final AjaxRequestTarget target = ((ConnConfModEvent) event.getPayload()).getTarget(); -- -- final List<ConnConfProperty> conf = ((ConnConfModEvent) event.getPayload()).getConfiguration(); -- -- mappings.removeAll(); -- -- addMappingBtn.setEnabled(resourceTO.getConnector() != null && resourceTO.getConnector() > 0); -- -- schemaNames.clear(); -- schemaNames.addAll(getSchemaNames(resourceTO.getConnector(), new HashSet<ConnConfProperty>(conf))); -- -- setEnabled(); -- -- target.add(this); -- } -- } -- /** * Set attribute names for a drop down choice list. * http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java index 7b84312,54b22b8..1f9ae6b --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java @@@ -18,13 -18,8 +18,11 @@@ */ package org.apache.syncope.client.console.panels; +import static org.apache.wicket.Component.ENABLE; + - import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; - import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.SerializationUtils; @@@ -41,12 -35,14 +39,12 @@@ import org.apache.syncope.common.lib.to import org.apache.syncope.common.lib.types.Entitlement; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; import org.apache.wicket.event.Broadcast; -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; -import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; - import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.markup.html.panel.Panel; ++import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; /** @@@ -56,41 -52,35 +54,38 @@@ public class ResourceModal extends Abst private static final long serialVersionUID = 1734415311027284221L; - @SuppressWarnings({ "unchecked", "rawtypes" }) + private final boolean createFlag; + public ResourceModal( - final ModalWindow window, + final BaseModal<Serializable> modal, final PageReference pageRef, -- final ResourceTO resourceTO, ++ final IModel<ResourceTO> model, final boolean createFlag) { - super(window, pageRef); + super(modal, pageRef); - final Form<ResourceTO> form = new Form<>(FORM); - form.setModel(new CompoundPropertyModel<>(resourceTO)); + this.createFlag = createFlag; - final List<ITab> tabs = new ArrayList<>(); - add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", tabs)); - //-------------------------------- // Resource details panel //-------------------------------- - tabs.add(new AbstractTab(new ResourceModel("resource", "resource")) { - form.add(new ResourceDetailsPanel("details", resourceTO, - resourceRestClient.getPropagationActionsClasses(), createFlag)); ++ tabs.add(new AbstractTab(new ResourceModel("general", "general")) { + + private static final long serialVersionUID = -5861786415855103549L; - form.add(new AnnotatedBeanPanel("systeminformation", resourceTO)); + @Override + public Panel getPanel(final String panelId) { - return new ResourceDetailsPanel(panelId, resourceTO, ++ return new ResourceDetailsPanel(panelId, model, + resourceRestClient.getPropagationActionsClasses(), createFlag); + } + }); //-------------------------------- //-------------------------------- // Resource provision panels //-------------------------------- - final WebMarkupContainer provisions = new WebMarkupContainer("pcontainer"); - form.add(provisions.setOutputMarkupId(true)); - final ListViewPanel.Builder<ProvisionTO> builder = ListViewPanel.builder(ProvisionTO.class, pageRef); -- builder.setItems(resourceTO.getProvisions()); ++ builder.setItems(model.getObject().getProvisions()); builder.includes("anyType", "objectClass"); builder.addAction(new ActionLink<ProvisionTO>() { @@@ -136,116 -126,121 +131,129 @@@ @Override public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) { -- resourceTO.getProvisions().remove(provisionTO); ++ model.getObject().getProvisions().remove(provisionTO); send(pageRef.getPage(), Broadcast.DEPTH, new AjaxWizard.NewItemFinishEvent<ProvisionTO>(null, target)); } }, ActionLink.ActionType.DELETE, Entitlement.RESOURCE_DELETE); -- builder.addNewItemPanelBuilder(new ProvisionWizardBuilder("wizard", resourceTO, pageRef)); - builder.addNotificationPanel(feedbackPanel); ++ builder.addNewItemPanelBuilder(new ProvisionWizardBuilder("wizard", model.getObject(), pageRef)); + builder.addNotificationPanel(modal.getFeedbackPanel()); - provisions.add(builder.build("provisions")); - //-------------------------------- + tabs.add(new AbstractTab(new ResourceModel("provisions", "provisions")) { - //-------------------------------- - // Resource connector configuration panel - //-------------------------------- - ResourceConnConfPanel resourceConnConfPanel = new ResourceConnConfPanel("connconf", resourceTO, createFlag); - MetaDataRoleAuthorizationStrategy.authorize(resourceConnConfPanel, ENABLE, Entitlement.CONNECTOR_READ); - form.add(resourceConnConfPanel); - //-------------------------------- + private static final long serialVersionUID = -5861786415855103549L; + @Override + public Panel getPanel(final String panelId) { + return builder.build(panelId); + } + }); //-------------------------------- - // Resource security panel + //-------------------------------- - form.add(new ResourceSecurityPanel("security", resourceTO)); + // Resource connector configuration panel //-------------------------------- + tabs.add(new AbstractTab(new ResourceModel("connectorProperties", "connectorProperties")) { - AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT, SUBMIT)) { - - private static final long serialVersionUID = -958724007591692537L; + private static final long serialVersionUID = -5861786415855103549L; @Override - protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - final ResourceTO resourceTO = (ResourceTO) form.getDefaultModelObject(); - - boolean connObjectKeyError = false; + public Panel getPanel(final String panelId) { - final ResourceConnConfPanel panel = new ResourceConnConfPanel(panelId, resourceTO, createFlag); ++ final ResourceConnConfPanel panel = new ResourceConnConfPanel(panelId, model, createFlag) { + - final Collection<ProvisionTO> provisions = new ArrayList<>(resourceTO.getProvisions()); ++ private static final long serialVersionUID = 1L; + - for (ProvisionTO provision : provisions) { - if (provision != null) { - if (provision.getMapping() == null || provision.getMapping().getItems().isEmpty()) { - resourceTO.getProvisions().remove(provision); ++ @Override ++ protected void check(final AjaxRequestTarget target) { ++ if (connectorRestClient.check(model.getObject())) { ++ info(getString("success_connection")); + } else { - int uConnObjectKeyCount = CollectionUtils.countMatches( - provision.getMapping().getItems(), new Predicate<MappingItemTO>() { - - @Override - public boolean evaluate(final MappingItemTO item) { - return item.isConnObjectKey(); - } - }); - - connObjectKeyError = uConnObjectKeyCount != 1; ++ error(getString("error_connection")); + } ++ modal.getFeedbackPanel().refresh(target); + } - } ++ }; + MetaDataRoleAuthorizationStrategy.authorize(panel, ENABLE, Entitlement.CONNECTOR_READ); + return panel; + } + }); + //-------------------------------- - if (connObjectKeyError) { - error(getString("connObjectKeyValidation")); - feedbackPanel.refresh(target); - } else { - try { - if (createFlag) { - resourceRestClient.create(resourceTO); - send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent( - resourceTO.getKey(), - resourceTO.getKey(), - TopologyNode.Kind.RESOURCE, - resourceTO.getConnector(), - target)); - } else { - resourceRestClient.update(resourceTO); - } + //-------------------------------- + // Resource security panel + //-------------------------------- + tabs.add(new AbstractTab(new ResourceModel("security", "security")) { - if (pageRef.getPage() instanceof AbstractBasePage) { - ((AbstractBasePage) pageRef.getPage()).setModalResult(true); - } - window.close(target); - } catch (Exception e) { - LOG.error("Failure managing resource {}", resourceTO, e); - error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); - } - } - } + private static final long serialVersionUID = -5861786415855103549L; @Override - protected void onError(final AjaxRequestTarget target, final Form<?> form) { - feedbackPanel.refresh(target); + public Panel getPanel(final String panelId) { - return new ResourceSecurityPanel(panelId, resourceTO); ++ return new ResourceSecurityPanel(panelId, model); } - }; + }); + //-------------------------------- + } - form.add(submit); - form.setDefaultButton(submit); + @Override + public void onError(final AjaxRequestTarget target, final Form<?> form) { + modal.getFeedbackPanel().refresh(target); + } - final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + @Override + public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + final ResourceTO resourceTO = (ResourceTO) form.getDefaultModelObject(); - private static final long serialVersionUID = -958724007591692537L; + boolean connObjectKeyError = false; - @Override - protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); - } + final Collection<ProvisionTO> provisions = new ArrayList<>(resourceTO.getProvisions()); - @Override - protected void onError(final AjaxRequestTarget target, final Form<?> form) { - } - }; + for (ProvisionTO provision : provisions) { + if (provision != null) { + if (provision.getMapping() == null || provision.getMapping().getItems().isEmpty()) { + resourceTO.getProvisions().remove(provision); + } else { + int uConnObjectKeyCount = CollectionUtils.countMatches( + provision.getMapping().getItems(), new Predicate<MappingItemTO>() { - cancel.setDefaultFormProcessing(false); - form.add(cancel); + @Override + public boolean evaluate(final MappingItemTO item) { + return item.isConnObjectKey(); + } + }); - add(form); + connObjectKeyError = uConnObjectKeyCount != 1; + } + } + } + + if (connObjectKeyError) { + error(getString("connObjectKeyValidation")); + modal.getFeedbackPanel().refresh(target); + } else { + try { + if (createFlag) { + resourceRestClient.create(resourceTO); + send(pageRef.getPage(), Broadcast.BREADTH, new CreateEvent( + resourceTO.getKey(), + resourceTO.getKey(), + TopologyNode.Kind.RESOURCE, + resourceTO.getConnector(), + target)); + } else { + resourceRestClient.update(resourceTO); + } - MetaDataRoleAuthorizationStrategy.authorize( - submit, ENABLE, createFlag ? Entitlement.RESOURCE_CREATE : Entitlement.RESOURCE_UPDATE); + if (pageRef.getPage() instanceof AbstractBasePage) { + ((AbstractBasePage) pageRef.getPage()).setModalResult(true); + } + modal.close(target); + } catch (Exception e) { + LOG.error("Failure managing resource {}", resourceTO, e); + error(getString(Constants.ERROR) + ": " + e.getMessage()); + modal.getFeedbackPanel().refresh(target); + } + } } + } http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java index 2be0d95,a0a1ddc..4aab37e --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceSecurityPanel.java @@@ -49,7 -49,7 +49,7 @@@ public class ResourceSecurityPanel exte private IModel<Map<Long, String>> syncPolicies = null; -- public ResourceSecurityPanel(final String id, final ResourceTO resourceTO) { ++ public ResourceSecurityPanel(final String id, final IModel<ResourceTO> model) { super(id); @@@ -105,49 -100,54 +105,46 @@@ // ------------------------------- // Password policy specification // ------------------------------- -- final AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<Long>("passwordPolicy", -- new ResourceModel("passwordPolicy", "passwordPolicy").getObject(), new PropertyModel<Long>(resourceTO, -- "passwordPolicy")); ++ final AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<Long>( ++ "passwordPolicy", ++ new ResourceModel("passwordPolicy", "passwordPolicy").getObject(), ++ new PropertyModel<Long>(model, "passwordPolicy"), ++ false); passwordPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.PASSWORD)); -- passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet())); -- ((DropDownChoice<?>) passwordPolicy.getField()).setNullValid(true); -- - securityContainer.add(passwordPolicy); + container.add(passwordPolicy); // ------------------------------- // ------------------------------- // Account policy specification // ------------------------------- -- final AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<Long>("accountPolicy", -- new ResourceModel("accountPolicy", "accountPolicy").getObject(), new PropertyModel<Long>(resourceTO, -- "accountPolicy")); ++ final AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<Long>( ++ "accountPolicy", ++ new ResourceModel("accountPolicy", "accountPolicy").getObject(), ++ new PropertyModel<Long>(model, "accountPolicy"), ++ false); accountPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.ACCOUNT)); -- accountPolicy.setChoices(new ArrayList<Long>(accountPolicies.getObject().keySet())); -- ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true); -- - securityContainer.add(accountPolicy); + container.add(accountPolicy); // ------------------------------- // ------------------------------- // Sync policy specification // ------------------------------- -- final AjaxDropDownChoicePanel<Long> syncPolicy = new AjaxDropDownChoicePanel<Long>("syncPolicy", -- new ResourceModel("syncPolicy", "syncPolicy").getObject(), new PropertyModel<Long>(resourceTO, -- "syncPolicy")); ++ final AjaxDropDownChoicePanel<Long> syncPolicy = new AjaxDropDownChoicePanel<Long>( ++ "syncPolicy", ++ new ResourceModel("syncPolicy", "syncPolicy").getObject(), ++ new PropertyModel<Long>(model, "syncPolicy"), ++ false); syncPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.SYNC)); -- syncPolicy.setChoices(new ArrayList<Long>(syncPolicies.getObject().keySet())); -- ((DropDownChoice<?>) syncPolicy.getField()).setNullValid(true); -- - securityContainer.add(syncPolicy); + container.add(syncPolicy); // ------------------------------- } @@@ -155,7 -155,7 +152,7 @@@ private static final long serialVersionUID = 8060500161321947000L; -- private PolicyType type; ++ private final PolicyType type; public PolicyRenderer(final PolicyType type) { super(); @@@ -178,9 -178,9 +175,7 @@@ @Override public String getIdValue(final Long object, final int index) { -- return String.valueOf(object != null -- ? object -- : 0L); ++ return String.valueOf(object != null ? object : 0L); } }; } http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java index 1381c00,1381c00..5ad33a9 --- a/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTE.java @@@ -19,12 -19,12 +19,6 @@@ package org.apache.syncope.client.console.themes; import de.agilecoders.wicket.core.settings.Theme; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIAllJavaScriptReference; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUICoreJavaScriptReference; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIDraggableJavaScriptReference; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIMouseJavaScriptReference; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIResizableJavaScriptReference; --import de.agilecoders.wicket.extensions.markup.html.bootstrap.jqueryui.JQueryUIWidgetJavaScriptReference; import java.util.ArrayList; import java.util.List; import org.apache.wicket.markup.head.CssHeaderItem; @@@ -44,14 -44,14 +38,6 @@@ public class AdminLTE extends Theme references.add(JavaScriptHeaderItem.forReference( new JQueryPluginResourceReference(AdminLTE.class, "js/AdminLTE-app.min.js"), "adminltejs")); -- // Adds WebjarsJavaScriptResourceReference about JQuery -- references.add(JavaScriptHeaderItem.forReference(JQueryUIAllJavaScriptReference.instance())); -- references.add(JavaScriptHeaderItem.forReference(JQueryUICoreJavaScriptReference.instance())); -- references.add(JavaScriptHeaderItem.forReference(JQueryUIMouseJavaScriptReference.instance())); -- references.add(JavaScriptHeaderItem.forReference(JQueryUIWidgetJavaScriptReference.instance())); -- references.add(JavaScriptHeaderItem.forReference(JQueryUIResizableJavaScriptReference.instance())); -- references.add(JavaScriptHeaderItem.forReference(JQueryUIDraggableJavaScriptReference.instance())); -- references.add(CssHeaderItem.forReference(AdminLTECssResourceReference.INSTANCE)); references.addAll(super.getDependencies()); return references; http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java index d3aa975,7756a25..8a68ca3 --- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java @@@ -45,7 -39,7 +45,9 @@@ import org.apache.wicket.behavior.Attri import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Panel; ++import org.apache.wicket.model.CompoundPropertyModel; ++import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -130,18 -124,12 +132,20 @@@ public class TopologyNodePanel extends @Override public void onClickInternal(final AjaxRequestTarget target) { - final ConnInstanceTO model = new ConnInstanceTO(); - model.setLocation(node.getKey().toString()); ++ final ConnInstanceTO modelObject = new ConnInstanceTO(); ++ modelObject.setLocation(node.getKey().toString()); + ++ final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(modelObject); + modal.setFormModel(model); ++ + target.add(modal.setContent(new ConnectorModal(modal, pageRef, model))); - final ConnInstanceTO connectorTO = new ConnInstanceTO(); - connectorTO.setLocation(node.getKey().toString()); - modal.setContent(new ConnectorModal(modal, pageRef, connectorTO)); - modal.setTitle(MessageFormat.format(getString("connector.new"), node.getKey())); - modal.show(target); + modal.header(new Model<String>(MessageFormat.format(getString("connector.new"), node.getKey()))); + + MetaDataRoleAuthorizationStrategy. + authorize(modal.addSumbitButton(), ENABLE, Entitlement.CONNECTOR_CREATE); + + modal.show(true); } }; fragment.add(create); @@@ -180,19 -164,12 +184,21 @@@ @Override public void onClickInternal(final AjaxRequestTarget target) { - final ResourceTO model = new ResourceTO(); - model.setConnector(Long.class.cast(node.getKey())); - model.setConnectorDisplayName(node.getDisplayName()); - final ResourceTO resourceTO = new ResourceTO(); - resourceTO.setConnector(Long.class.cast(node.getKey())); - resourceTO.setConnectorDisplayName(node.getDisplayName()); - modal.setContent(new ResourceModal(modal, pageRef, resourceTO, true)); - modal.setTitle(getString("resource.new")); - modal.show(target); ++ final ResourceTO modelObject = new ResourceTO(); ++ modelObject.setConnector(Long.class.cast(node.getKey())); ++ modelObject.setConnectorDisplayName(node.getDisplayName()); + ++ final IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject); + modal.setFormModel(model); ++ + target.add(modal.setContent(new ResourceModal(modal, pageRef, model, true))); + + modal.header(new Model<String>(MessageFormat.format(getString("resource.new"), node.getKey()))); + + MetaDataRoleAuthorizationStrategy. + authorize(modal.addSumbitButton(), ENABLE, Entitlement.RESOURCE_CREATE); + + modal.show(true); } }; fragment.add(create); @@@ -205,17 -180,14 +211,19 @@@ @Override public void onClickInternal(final AjaxRequestTarget target) { - final ConnInstanceTO model = connectorRestClient.read(Long.class.cast(node.getKey())); ++ final ConnInstanceTO modelObject = connectorRestClient.read(Long.class.cast(node.getKey())); + ++ final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(modelObject); + modal.setFormModel(model); + - modal.setContent(new ConnectorModal( - modal, - pageRef, - connectorRestClient.read(Long.class.cast(node.getKey())))); + target.add(modal.setContent(new ConnectorModal(modal, pageRef, model))); - modal.setTitle(MessageFormat.format(getString("connector.edit"), node.getKey())); - modal.show(target); + modal.header(new Model<String>(MessageFormat.format(getString("connector.edit"), node.getKey()))); + + MetaDataRoleAuthorizationStrategy. + authorize(modal.addSumbitButton(), ENABLE, Entitlement.CONNECTOR_UPDATE); + + modal.show(true); } }; fragment.add(edit); @@@ -254,18 -222,15 +262,19 @@@ @Override public void onClickInternal(final AjaxRequestTarget target) { ++ final ResourceTO modelObject = resourceRestClient.read(node.getKey().toString()); + - final ResourceTO model = resourceRestClient.read(node.getKey().toString()); - ++ final IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject); + modal.setFormModel(model); ++ + target.add(modal.setContent(new ResourceModal(modal, pageRef, model, false))); - modal.setContent(new ResourceModal( - modal, - pageRef, - resourceRestClient.read(node.getKey().toString()), - false)); + modal.header(new Model<String>(MessageFormat.format(getString("resource.edit"), node.getKey()))); - modal.setTitle(MessageFormat.format(getString("resource.edit"), node.getKey())); - modal.show(target); + MetaDataRoleAuthorizationStrategy. + authorize(modal.addSumbitButton(), ENABLE, Entitlement.RESOURCE_UPDATE); + + modal.show(true); } }; fragment.add(edit); http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java index 2d26c08,e67daac..124b096 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java @@@ -40,6 -40,6 +40,7 @@@ import org.apache.wicket.markup.html.fo import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.CompoundPropertyModel; ++import org.apache.wicket.model.IModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -117,6 -117,6 +118,11 @@@ public class BaseModal<T extends Serial return this; } ++ public BaseModal<T> setFormModel(final IModel<T> model) { ++ form.setModel(model); ++ return this; ++ } ++ public T getFormModel() { return form.getModelObject(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java index 165f20d,41643ea..1f58760 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AbstractFieldPanel.java @@@ -18,11 -18,8 +18,14 @@@ */ package org.apache.syncope.client.console.wicket.markup.html.form; ++import org.apache.commons.lang3.StringUtils; +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; ++import org.apache.wicket.markup.html.form.FormComponent; ++import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.ResourceModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -35,33 -32,9 +38,92 @@@ public abstract class AbstractFieldPane private static final long serialVersionUID = 5958017546318855690L; - protected final String name; - public AbstractFieldPanel(final String id, final IModel<T> model) { ++ private static final String LABEL = "field-label"; ++ ++ private static final String EXTERNAL_ACTION = "externalAction"; ++ ++ private static final String EXTERNAL_ACTION_ICON = "externalActionIcon"; ++ ++ protected boolean isRequiredLabelAdded = false; ++ ++ protected String name; + + public AbstractFieldPanel(final String id, final String name, final IModel<T> model) { super(id, model); + this.name = name; + ++ add(new Fragment("required", "emptyFragment", AbstractFieldPanel.this)); ++ add(new Fragment("externalAction", "emptyFragment", AbstractFieldPanel.this)); ++ + addLabel(); + setOutputMarkupId(true); + } + + public final AbstractFieldPanel<T> addLabel() { + return addLabel(this.name); + } + + public final AbstractFieldPanel<T> addLabel(final String name) { - addOrReplace(new Label("field-label", new ResourceModel(name, name))); ++ addOrReplace(new Label(LABEL, new ResourceModel(name, name))); + return this; + } + + public AbstractFieldPanel<T> hideLabel() { - final Component label = get("field-label"); ++ final Component label = get(LABEL); + + if (label != null) { + label.setVisible(false); + } ++ ++ return this; ++ } ++ ++ public AbstractFieldPanel<T> showExternAction(final FormComponent<?> component) { ++ final Fragment fragment = new Fragment("externalAction", "externalActionFragment", AbstractFieldPanel.this); ++ addOrReplace(fragment); ++ fragment.add(component.setRenderBodyOnly(false)); ++ return this; ++ } ++ ++ public boolean isRequired() { ++ return false; ++ } ++ ++ public AbstractFieldPanel<T> setRequired(final boolean required) { + return this; + } + ++ public AbstractFieldPanel<T> addRequiredLabel() { ++ if (!isRequired()) { ++ setRequired(true); ++ } ++ ++ final Fragment fragment = new Fragment("required", "requiredFragment", this); ++ fragment.add(new Label("requiredLabel", "*")); ++ replace(fragment); ++ ++ this.isRequiredLabelAdded = true; ++ ++ return this; ++ } ++ ++ public AbstractFieldPanel<T> removeRequiredLabel() { ++ if (isRequired()) { ++ setRequired(false); ++ } ++ ++ final Fragment fragment = new Fragment("required", "emptyFragment", this); ++ ++ replace(fragment); ++ ++ this.isRequiredLabelAdded = false; ++ ++ return this; ++ } ++ ++ protected String externalActionIcon() { ++ return StringUtils.EMPTY; + } + public abstract AbstractFieldPanel<T> setModelObject(T object); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java index bd1cd0d,ff64fbe..789a8e1 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxCheckBoxPanel.java @@@ -40,7 -38,7 +38,7 @@@ public class AjaxCheckBoxPanel extends public AjaxCheckBoxPanel( final String id, final String name, final IModel<Boolean> model, final boolean enableOnChange) { -- super(id, model); ++ super(id, name, model); field = new CheckBox("checkboxField", model); add(field.setLabel(new Model<String>(name)).setOutputMarkupId(true)); http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java index 2eb11ea,2eb11ea..a831520 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPasswordFieldPanel.java @@@ -23,19 -23,19 +23,24 @@@ import org.apache.wicket.ajax.AjaxReque import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.model.IModel; --import org.apache.wicket.model.Model; ++import org.apache.wicket.model.ResourceModel; public class AjaxPasswordFieldPanel extends FieldPanel<String> { private static final long serialVersionUID = -5490115280336667460L; public AjaxPasswordFieldPanel(final String id, final String name, final IModel<String> model) { -- super(id, model); ++ this(id, name, model, true); ++ } ++ ++ public AjaxPasswordFieldPanel( ++ final String id, final String name, final IModel<String> model, final boolean enableOnChange) { ++ super(id, name, model); field = new PasswordTextField("passwordField", model); -- add(field.setLabel(new Model<>(name)).setRequired(false).setOutputMarkupId(true)); ++ add(field.setLabel(new ResourceModel(name, name)).setRequired(false).setOutputMarkupId(true)); -- if (!isReadOnly()) { ++ if (enableOnChange && !isReadOnly()) { field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java index 08de6f8,f42b67f..59a2c00 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java @@@ -28,7 -28,7 +28,6 @@@ import org.apache.wicket.ajax.AjaxReque import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField; --import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.validation.IValidator; @@@ -45,7 -45,7 +44,7 @@@ public class AjaxTextFieldPanel extend public AjaxTextFieldPanel( final String id, final String name, final IModel<String> model, final boolean enableOnChange) { -- super(id, model); ++ super(id, name, model); final AutoCompleteSettings settings = new AutoCompleteSettings(); settings.setShowCompleteListOnFocusGain(true); @@@ -84,8 -84,8 +83,6 @@@ } }); } - - -- add(new Label("label", new ResourceModel(name, name))); } public void addValidator(final IValidator<? super String> validator) { http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java index 5bf1cdc,3a48d38..89970f8 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java @@@ -23,10 -23,10 +23,8 @@@ import java.util.List import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; --import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.list.ListItem; --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.ResourceModel; @@@ -39,17 -39,15 +37,12 @@@ public abstract class FieldPanel<T exte protected String title = null; -- protected boolean isRequiredLabelAdded = false; -- public FieldPanel(final String id, final IModel<T> model) { - super(id, model); - - final Fragment fragment = new Fragment("required", "notRequiredFragment", this); - add(fragment); + this(id, id, model); + } - setOutputMarkupId(true); + public FieldPanel(final String id, final String name, final IModel<T> model) { + super(id, name, model); - - final Fragment fragment = new Fragment("required", "notRequiredFragment", this); - add(fragment); } public FormComponent<T> getField() { @@@ -75,6 -73,6 +68,7 @@@ return this; } ++ @Override public FieldPanel<T> setRequired(final boolean required) { field.setRequired(required); return this; @@@ -85,6 -83,6 +79,7 @@@ return this; } ++ @Override public boolean isRequired() { return field.isRequired(); } @@@ -93,34 -91,36 +88,6 @@@ return !field.isEnabled(); } -- public FieldPanel<T> addRequiredLabel() { -- if (!isRequired()) { -- setRequired(true); -- } -- -- final Fragment fragment = new Fragment("required", "requiredFragment", this); - -- fragment.add(new Label("requiredLabel", "*")); - -- replace(fragment); -- -- this.isRequiredLabelAdded = true; -- -- return this; -- } -- -- public FieldPanel<T> removeRequiredLabel() { -- if (isRequired()) { -- setRequired(false); -- } -- -- final Fragment fragment = new Fragment("required", "notRequiredFragment", this); -- -- replace(fragment); -- -- this.isRequiredLabelAdded = false; -- -- return this; -- } -- @Override public FieldPanel<T> setModelObject(final T object) { field.setModelObject(object); http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java index 4eb7270,4f71f81..3370cd7 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SpinnerFieldPanel.java @@@ -26,59 -36,147 +26,57 @@@ public class SpinnerFieldPanel<T extend private static final long serialVersionUID = 6413819574530703577L; - private String name; - - private final String name; + private Class<T> reference; - private final Class<T> reference; + private IModel<T> model; - private final IModel<T> model; + private SpinnerConfig conf; - private final T min; - - private final T max; - - @SuppressWarnings("unchecked") - public SpinnerFieldPanel(final String id, final String name, final Class<T> reference, final IModel<T> model, + public SpinnerFieldPanel( + final String id, + final String name, + final Class<T> reference, + final IModel<T> model, final T min, final T max) { + super(id, name, model); - super(id, model); - this.name = name; - this.reference = reference; - this.model = model; - this.min = min; - this.max = max; + final SpinnerConfig config = new SpinnerConfig(); + config.withMax(max); + config.withMin(min); - String uuid = UUID.randomUUID().toString(); - field = new TextField<T>("spinnerField", model, reference); - field.setMarkupId(uuid); - add(field.setLabel(new Model<String>(name))); - - if (!isReadOnly()) { - field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + init(name, reference, model, config); + } - private static final long serialVersionUID = -1107858522700306810L; + public SpinnerFieldPanel( + final String id, + final String name, + final Class<T> reference, + final IModel<T> model) { + this(id, name, reference, model, new SpinnerConfig()); + } - @Override - protected void onUpdate(final AjaxRequestTarget target) { - // nothing to do - } - }); - } + public SpinnerFieldPanel( + final String id, + final String name, + final Class<T> reference, + final IModel<T> model, + final SpinnerConfig conf) { - final StringBuilder statements = new StringBuilder(); - statements.append("jQuery(function() {"). - append("var spinner = $('#").append(uuid).append("').spinner();"). - append("$('#").append(uuid).append("').spinner("). - append("'option', 'stop', function(event, ui) { $(this).change(); });"); - if (this.min != null) { - statements. - append("$('#").append(uuid).append("').spinner("). - append("'option', 'min', ").append(this.min).append(");"); - } - if (this.max != null) { - statements. - append("$('#").append(uuid).append("').spinner("). - append("'option', 'max', ").append(this.max).append(");"); - } - statements.append("});"); - Label spinnerFieldJS = new Label("spinnerFieldJS", statements.toString()); - spinnerFieldJS.setEscapeModelStrings(false); - add(spinnerFieldJS); + super(id, name, model); + init(name, reference, model, conf); } - @Override - public SpinnerFieldPanel<T> setNewModel(final List<Serializable> list) { - setNewModel(new Model<T>() { - - private static final long serialVersionUID = 527651414610325237L; - - @Override - public T getObject() { - T value = null; - - if (list != null && !list.isEmpty() && StringUtils.hasText(list.get(0).toString())) { - value = reference.equals(Integer.class) - ? reference.cast(NumberUtils.toInt(list.get(0).toString())) - : reference.equals(Long.class) - ? reference.cast(NumberUtils.toLong(list.get(0).toString())) - : reference.equals(Short.class) - ? reference.cast(NumberUtils.toShort(list.get(0).toString())) - : reference.equals(Float.class) - ? reference.cast(NumberUtils.toFloat(list.get(0).toString())) - : reference.equals(byte.class) - ? reference.cast(NumberUtils.toByte(list.get(0).toString())) - : reference.cast(NumberUtils.toDouble(list.get(0).toString())); - } - - return value; - } - - @Override - public void setObject(final T object) { - list.clear(); - if (object != null) { - list.add(object.toString()); - } - } - }); - - return this; - } + private void init(final String name, final Class<T> reference, final IModel<T> model, final SpinnerConfig conf) { + final Spinner<T> spinner = new Spinner<>("spinner", model, conf); + add(spinner); - @SuppressWarnings("rawtypes") - @Override - public SpinnerFieldPanel<T> setNewModel(final ListItem item) { - field.setModel(new Model<T>() { - - private static final long serialVersionUID = 6799404673615637845L; - - @Override - public T getObject() { - T number = null; - - final Object obj = item.getModelObject(); - - if (obj != null && !obj.toString().isEmpty()) { - if (obj instanceof String) { - number = reference.equals(Integer.class) - ? reference.cast(Integer.valueOf((String) obj)) - : reference.equals(Long.class) - ? reference.cast(Long.valueOf((String) obj)) - : reference.equals(Short.class) - ? reference.cast(Short.valueOf((String) obj)) - : reference.equals(Float.class) - ? reference.cast(Float.valueOf((String) obj)) - : reference.equals(byte.class) - ? reference.cast(Byte.valueOf((String) obj)) - : reference.cast(Double.valueOf((String) obj)); - } else if (obj instanceof Number) { - // Don't parse anything - number = reference.cast(obj); - } - } - - return number; - } - - @Override - @SuppressWarnings("unchecked") - public void setObject(final T object) { - item.setModelObject(object == null ? null : object.toString()); - } - }); - - return this; + this.name = name; + this.model = model; + this.conf = conf; + this.reference = reference; + + this.conf.withMouseWheel(true); + this.conf.withVerticalbuttons(true); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/b56c08ee/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java ---------------------------------------------------------------------- diff --cc client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java index 3691171,3691171..0000000 deleted file mode 100644,100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/list/AltListView.java +++ /dev/null @@@ -1,59 -1,59 +1,0 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you under the Apache License, Version 2.0 (the -- * "License"); you may not use this file except in compliance -- * with the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, -- * software distributed under the License is distributed on an -- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -- * KIND, either express or implied. See the License for the -- * specific language governing permissions and limitations -- * under the License. -- */ --package org.apache.syncope.client.console.wicket.markup.html.list; -- --import java.util.List; --import org.apache.wicket.markup.ComponentTag; --import org.apache.wicket.markup.html.list.ListItem; --import org.apache.wicket.markup.html.list.ListView; --import org.apache.wicket.model.IModel; -- --public abstract class AltListView<T> extends ListView<T> { -- -- private static final long serialVersionUID = 251378224847354710L; -- -- public AltListView(final String id) { -- super(id); -- } -- -- public AltListView(final String id, final IModel<? extends List<T>> model) { -- super(id, model); -- } -- -- public AltListView(final String id, final List<T> list) { -- super(id, list); -- } -- -- @Override -- protected ListItem<T> newItem(final int index, final IModel<T> itemModel) { -- return new ListItem<T>(index, itemModel) { -- -- private static final long serialVersionUID = 5473483270932376694L; -- -- @Override -- protected void onComponentTag(final ComponentTag tag) { -- if (index % 2 == 0) { -- tag.append("class", "alt", " "); -- } -- -- super.onComponentTag(tag); -- } -- }; -- } --}
