http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConfirmPasswordResetModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConfirmPasswordResetModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConfirmPasswordResetModalPage.java new file mode 100644 index 0000000..ebc041d --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConfirmPasswordResetModalPage.java @@ -0,0 +1,103 @@ +/* + * 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.pages; + +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPasswordFieldPanel; +import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; +import org.apache.syncope.common.lib.to.UserTO; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +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.form.Form; +import org.apache.wicket.markup.html.form.PasswordTextField; +import org.apache.wicket.markup.html.form.StatelessForm; +import org.apache.wicket.markup.html.form.validation.EqualPasswordInputValidator; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.ResourceModel; + +public class ConfirmPasswordResetModalPage extends BaseModalPage { + + private static final long serialVersionUID = -8419445804421211904L; + + public ConfirmPasswordResetModalPage(final ModalWindow window, final String token) { + super(); + setOutputMarkupId(true); + + final StatelessForm<?> form = new StatelessForm<Object>(FORM); + form.setOutputMarkupId(true); + + final FieldPanel<String> password = + new AjaxPasswordFieldPanel("password", "password", new Model<String>()).setRequired(true); + ((PasswordTextField) password.getField()).setResetPassword(true); + form.add(password); + + final FieldPanel<String> confirmPassword = + new AjaxPasswordFieldPanel("confirmPassword", "confirmPassword", new Model<String>()); + ((PasswordTextField) confirmPassword.getField()).setResetPassword(true); + form.add(confirmPassword); + + form.add(new EqualPasswordInputValidator(password.getField(), confirmPassword.getField())); + + final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT, SUBMIT)) { + + private static final long serialVersionUID = -4804368561204623354L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + try { + userSelfRestClient.confirmPasswordReset(token, password.getModelObject()); + + setResponsePage(new ResultStatusModalPage.Builder(window, new UserTO()).mode(Mode.SELF).build()); + } catch (Exception e) { + LOG.error("While confirming password reset for {}", token, e); + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + form.add(submit); + form.setDefaultButton(submit); + + final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + } + }; + cancel.setDefaultFormProcessing(false); + form.add(cancel); + + add(form); + } +}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnObjectModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnObjectModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnObjectModalPage.java new file mode 100644 index 0000000..cf1c405 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnObjectModalPage.java @@ -0,0 +1,101 @@ +/* + * 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.pages; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import org.apache.syncope.common.lib.to.AttrTO; +import org.apache.syncope.common.lib.to.ConnObjectTO; +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.list.AltListView; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +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.util.ListModel; + +public class ConnObjectModalPage extends BaseModalPage { + + private static final long serialVersionUID = -6469290753080058487L; + + public ConnObjectModalPage(final ConnObjectTO connObjectTO) { + super(); + + final Form<Void> form = new Form<Void>(FORM); + form.setEnabled(false); + add(form); + + IModel<List<AttrTO>> formProps = new LoadableDetachableModel<List<AttrTO>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<AttrTO> load() { + List<AttrTO> attrs = connObjectTO.getPlainAttrs(); + Collections.sort(attrs, new Comparator<AttrTO>() { + + @Override + public int compare(final AttrTO attr1, final AttrTO attr2) { + if (attr1 == null || attr1.getSchema() == null) { + return -1; + } + if (attr2 == null || attr2.getSchema() == null) { + return 1; + } + return attr1.getSchema().compareTo(attr2.getSchema()); + } + }); + + return attrs; + } + }; + final ListView<AttrTO> propView = new AltListView<AttrTO>("propView", formProps) { + + private static final long serialVersionUID = 3109256773218160485L; + + @Override + protected void populateItem(final ListItem<AttrTO> item) { + final AttrTO prop = item.getModelObject(); + + Label label = new Label("key", prop.getSchema()); + item.add(label); + + Panel field; + if (prop.getValues().isEmpty()) { + field = new AjaxTextFieldPanel("value", + prop.getSchema(), new Model<String>()); + } else if (prop.getValues().size() == 1) { + field = new AjaxTextFieldPanel("value", + prop.getSchema(), new Model<String>(prop.getValues().get(0))); + } else { + field = new MultiFieldPanel<String>("value", new ListModel<String>(prop.getValues()), + new AjaxTextFieldPanel("panel", prop.getSchema(), new Model<String>())); + } + item.add(field); + } + }; + form.add(propView); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnectorModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnectorModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnectorModalPage.java new file mode 100644 index 0000000..8095591 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ConnectorModalPage.java @@ -0,0 +1,479 @@ +/* + * 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.pages; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.rest.ConnectorRestClient; +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.SpinnerFieldPanel; +import org.apache.syncope.client.console.wicket.markup.html.list.ConnConfPropertyListView; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.ConnBundleTO; +import org.apache.syncope.common.lib.to.ConnInstanceTO; +import org.apache.syncope.common.lib.to.ConnPoolConfTO; +import org.apache.syncope.common.lib.types.ConnConfPropSchema; +import org.apache.syncope.common.lib.types.ConnConfProperty; +import org.apache.syncope.common.lib.types.ConnectorCapability; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +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.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.model.CompoundPropertyModel; +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.apache.wicket.validation.validator.RangeValidator; + +/** + * Modal window with Connector form. + */ +public class ConnectorModalPage extends BaseModalPage { + + private static final long serialVersionUID = -2025535531121434050L; + + @SpringBean + private ConnectorRestClient restClient; + + private final Map<String, Map<String, Map<String, ConnBundleTO>>> mapConnBundleTOs; + + private final List<ConnectorCapability> selectedCapabilities; + + private ConnBundleTO bundleTO; + + private List<ConnConfProperty> properties; + + private final WebMarkupContainer propertiesContainer; + + public ConnectorModalPage(final PageReference pageRef, final ModalWindow window, + final ConnInstanceTO connInstanceTO) { + + super(); + + this.add(new Label("new", connInstanceTO.getKey() == 0 + ? new ResourceModel("new") + : new Model<>(StringUtils.EMPTY))); + this.add(new Label("key", connInstanceTO.getKey() == 0 + ? StringUtils.EMPTY + : connInstanceTO.getKey())); + + // general data setup + selectedCapabilities = new ArrayList<>(connInstanceTO.getKey() == 0 + ? EnumSet.noneOf(ConnectorCapability.class) + : connInstanceTO.getCapabilities()); + + mapConnBundleTOs = new HashMap<>(); + for (ConnBundleTO connBundleTO : restClient.getAllBundles()) { + // by location + if (!mapConnBundleTOs.containsKey(connBundleTO.getLocation())) { + mapConnBundleTOs.put(connBundleTO.getLocation(), new HashMap<String, Map<String, ConnBundleTO>>()); + } + final Map<String, Map<String, ConnBundleTO>> byLocation = mapConnBundleTOs.get(connBundleTO.getLocation()); + + // by name + if (!byLocation.containsKey(connBundleTO.getBundleName())) { + byLocation.put(connBundleTO.getBundleName(), new HashMap<String, ConnBundleTO>()); + } + final Map<String, ConnBundleTO> byName = byLocation.get(connBundleTO.getBundleName()); + + // by version + if (!byName.containsKey(connBundleTO.getVersion())) { + byName.put(connBundleTO.getVersion(), connBundleTO); + } + } + + bundleTO = getSelectedBundleTO(connInstanceTO); + properties = fillProperties(bundleTO, connInstanceTO); + + // form - first tab + final Form<ConnInstanceTO> connectorForm = new Form<>(FORM); + connectorForm.setModel(new CompoundPropertyModel<>(connInstanceTO)); + connectorForm.setOutputMarkupId(true); + add(connectorForm); + + propertiesContainer = new WebMarkupContainer("container"); + propertiesContainer.setOutputMarkupId(true); + connectorForm.add(propertiesContainer); + + final Form<ConnInstanceTO> connectorPropForm = new Form<>("connectorPropForm"); + connectorPropForm.setModel(new CompoundPropertyModel<>(connInstanceTO)); + connectorPropForm.setOutputMarkupId(true); + propertiesContainer.add(connectorPropForm); + + final AjaxTextFieldPanel displayName = new AjaxTextFieldPanel( + "displayName", "display name", new PropertyModel<String>(connInstanceTO, "displayName")); + displayName.setOutputMarkupId(true); + displayName.addRequiredLabel(); + connectorForm.add(displayName); + + final AjaxDropDownChoicePanel<String> location = + new AjaxDropDownChoicePanel<>("location", "location", + new Model<>(bundleTO == null ? null : bundleTO.getLocation())); + ((DropDownChoice<String>) location.getField()).setNullValid(true); + location.setStyleSheet("long_dynamicsize"); + location.setChoices(new ArrayList<>(mapConnBundleTOs.keySet())); + location.setRequired(true); + location.addRequiredLabel(); + location.setOutputMarkupId(true); + location.setEnabled(connInstanceTO.getKey() == 0); + location.getField().setOutputMarkupId(true); + connectorForm.add(location); + + final AjaxDropDownChoicePanel<String> connectorName = + new AjaxDropDownChoicePanel<>("connectorName", "connectorName", + new Model<>(bundleTO == null ? null : bundleTO.getBundleName())); + ((DropDownChoice<String>) connectorName.getField()).setNullValid(true); + connectorName.setStyleSheet("long_dynamicsize"); + connectorName.setChoices(bundleTO == null + ? new ArrayList<String>() + : new ArrayList<>(mapConnBundleTOs.get(connInstanceTO.getLocation()).keySet())); + connectorName.setRequired(true); + connectorName.addRequiredLabel(); + connectorName.setEnabled(connInstanceTO.getLocation() != null); + connectorName.setOutputMarkupId(true); + connectorName.setEnabled(connInstanceTO.getKey() == 0); + connectorName.getField().setOutputMarkupId(true); + connectorForm.add(connectorName); + + final AjaxDropDownChoicePanel<String> version = + new AjaxDropDownChoicePanel<>("version", "version", + new Model<>(bundleTO == null ? null : bundleTO.getVersion())); + version.setStyleSheet("long_dynamicsize"); + version.setChoices(bundleTO == null + ? new ArrayList<String>() + : new ArrayList<>(mapConnBundleTOs.get(connInstanceTO.getLocation()). + get(connInstanceTO.getBundleName()).keySet())); + version.setRequired(true); + version.addRequiredLabel(); + version.setEnabled(connInstanceTO.getBundleName() != null); + version.setOutputMarkupId(true); + version.addRequiredLabel(); + version.getField().setOutputMarkupId(true); + connectorForm.add(version); + + final SpinnerFieldPanel<Integer> connRequestTimeout = + new SpinnerFieldPanel<>("connRequestTimeout", "connRequestTimeout", Integer.class, + new PropertyModel<Integer>(connInstanceTO, "connRequestTimeout"), 0, null); + connRequestTimeout.getField().add(new RangeValidator<>(0, Integer.MAX_VALUE)); + connectorForm.add(connRequestTimeout); + + if (connInstanceTO.getPoolConf() == null) { + connInstanceTO.setPoolConf(new ConnPoolConfTO()); + } + final SpinnerFieldPanel<Integer> poolMaxObjects = + new SpinnerFieldPanel<>("poolMaxObjects", "poolMaxObjects", Integer.class, + new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "maxObjects"), 0, null); + poolMaxObjects.getField().add(new RangeValidator<>(0, Integer.MAX_VALUE)); + connectorForm.add(poolMaxObjects); + final SpinnerFieldPanel<Integer> poolMinIdle = + new SpinnerFieldPanel<>("poolMinIdle", "poolMinIdle", Integer.class, + new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "minIdle"), 0, null); + poolMinIdle.getField().add(new RangeValidator<>(0, Integer.MAX_VALUE)); + connectorForm.add(poolMinIdle); + final SpinnerFieldPanel<Integer> poolMaxIdle = + new SpinnerFieldPanel<>("poolMaxIdle", "poolMaxIdle", Integer.class, + new PropertyModel<Integer>(connInstanceTO.getPoolConf(), "maxIdle"), 0, null); + poolMaxIdle.getField().add(new RangeValidator<>(0, Integer.MAX_VALUE)); + connectorForm.add(poolMaxIdle); + final SpinnerFieldPanel<Long> poolMaxWait = + new SpinnerFieldPanel<>("poolMaxWait", "poolMaxWait", Long.class, + new PropertyModel<Long>(connInstanceTO.getPoolConf(), "maxWait"), 0L, null); + poolMaxWait.getField().add(new RangeValidator<>(0L, Long.MAX_VALUE)); + connectorForm.add(poolMaxWait); + final SpinnerFieldPanel<Long> poolMinEvictableIdleTime = + new SpinnerFieldPanel<>("poolMinEvictableIdleTime", "poolMinEvictableIdleTime", Long.class, + new PropertyModel<Long>(connInstanceTO.getPoolConf(), "minEvictableIdleTimeMillis"), + 0L, null); + poolMinEvictableIdleTime.getField().add(new RangeValidator<>(0L, Long.MAX_VALUE)); + connectorForm.add(poolMinEvictableIdleTime); + + // form - first tab - onchange() + location.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(final AjaxRequestTarget target) { + ((DropDownChoice<String>) location.getField()).setNullValid(false); + connInstanceTO.setLocation(location.getModelObject()); + target.add(location); + + connectorName.setChoices(new ArrayList<>( + mapConnBundleTOs.get(location.getModelObject()).keySet())); + connectorName.setEnabled(true); + connectorName.getField().setModelValue(null); + target.add(connectorName); + + version.setChoices(new ArrayList<String>()); + version.getField().setModelValue(null); + version.setEnabled(false); + target.add(version); + + properties.clear(); + target.add(propertiesContainer); + } + }); + connectorName.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(final AjaxRequestTarget target) { + ((DropDownChoice<String>) connectorName.getField()).setNullValid(false); + connInstanceTO.setBundleName(connectorName.getModelObject()); + target.add(connectorName); + + List<String> versions = new ArrayList<>( + mapConnBundleTOs.get(location.getModelObject()).get(connectorName.getModelObject()).keySet()); + version.setChoices(versions); + version.setEnabled(true); + if (versions.size() == 1) { + selectVersion(target, connInstanceTO, version, versions.get(0)); + version.getField().setModelObject(versions.get(0)); + } else { + version.getField().setModelValue(null); + properties.clear(); + target.add(propertiesContainer); + } + target.add(version); + } + }); + version.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(final AjaxRequestTarget target) { + selectVersion(target, connInstanceTO, version, version.getModelObject()); + } + }); + + // form - second tab (properties) + final ListView<ConnConfProperty> connPropView = new ConnConfPropertyListView("connectorProperties", + new PropertyModel<List<ConnConfProperty>>(this, "properties"), + true, connInstanceTO.getConfiguration()); + connPropView.setOutputMarkupId(true); + connectorPropForm.add(connPropView); + + final AjaxButton check = new IndicatingAjaxButton("check", new ResourceModel("check")) { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + final ConnInstanceTO conn = (ConnInstanceTO) form.getModelObject(); + + // ensure that connector bundle information is in sync + conn.setBundleName(bundleTO.getBundleName()); + conn.setVersion(bundleTO.getVersion()); + conn.setConnectorName(bundleTO.getConnectorName()); + + if (restClient.check(conn)) { + info(getString("success_connection")); + } else { + error(getString("error_connection")); + } + + feedbackPanel.refresh(target); + } + }; + connectorPropForm.add(check); + + // form - third tab (capabilities) + final IModel<List<ConnectorCapability>> capabilities = + new LoadableDetachableModel<List<ConnectorCapability>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<ConnectorCapability> load() { + return Arrays.asList(ConnectorCapability.values()); + } + }; + CheckBoxMultipleChoice<ConnectorCapability> capabilitiesPalette = + new CheckBoxMultipleChoice<>("capabilitiesPalette", + new PropertyModel<List<ConnectorCapability>>(this, "selectedCapabilities"), capabilities); + + capabilitiesPalette.add(new AjaxFormChoiceComponentUpdatingBehavior() { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + } + }); + + connectorForm.add(capabilitiesPalette); + + // form - submit / cancel buttons + final AjaxButton submit = new IndicatingAjaxButton(APPLY, new Model<>(getString(SUBMIT))) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + final ConnInstanceTO conn = (ConnInstanceTO) form.getModelObject(); + + conn.setConnectorName(bundleTO.getConnectorName()); + conn.setBundleName(bundleTO.getBundleName()); + conn.setVersion(bundleTO.getVersion()); + conn.getConfiguration().clear(); + conn.getConfiguration().addAll(connPropView.getModelObject()); + + // Set the model object's capabilities to capabilitiesPalette's converted Set + conn.getCapabilities().clear(); + conn.getCapabilities().addAll(selectedCapabilities.isEmpty() + ? EnumSet.noneOf(ConnectorCapability.class) + : EnumSet.copyOf(selectedCapabilities)); + + // Reset pool configuration if all fields are null + if (conn.getPoolConf() != null + && conn.getPoolConf().getMaxIdle() == null + && conn.getPoolConf().getMaxObjects() == null + && conn.getPoolConf().getMaxWait() == null + && conn.getPoolConf().getMinEvictableIdleTimeMillis() == null + && conn.getPoolConf().getMinIdle() == null) { + + conn.setPoolConf(null); + } + + try { + if (connInstanceTO.getKey() == 0) { + restClient.create(conn); + } else { + restClient.update(conn); + } + + ((Resources) pageRef.getPage()).setModalResult(true); + window.close(target); + } catch (SyncopeClientException e) { + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + ((Resources) pageRef.getPage()).setModalResult(false); + LOG.error("While creating or updating connector {}", conn, e); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + String roles = connInstanceTO.getKey() == 0 + ? xmlRolesReader.getEntitlement("Connectors", "create") + : xmlRolesReader.getEntitlement("Connectors", "update"); + MetaDataRoleAuthorizationStrategy.authorize(submit, ENABLE, roles); + connectorForm.add(submit); + + final IndicatingAjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } + }; + cancel.setDefaultFormProcessing(false); + connectorForm.add(cancel); + } + + private ConnBundleTO getSelectedBundleTO(final ConnInstanceTO connInstanceTO) { + ConnBundleTO result = null; + if (connInstanceTO != null + && StringUtils.isNotBlank(connInstanceTO.getLocation()) + && StringUtils.isNotBlank(connInstanceTO.getBundleName()) + && StringUtils.isNotBlank(connInstanceTO.getVersion()) + && mapConnBundleTOs.containsKey(connInstanceTO.getLocation())) { + + Map<String, Map<String, ConnBundleTO>> byLocation = mapConnBundleTOs.get(connInstanceTO.getLocation()); + if (byLocation.containsKey(connInstanceTO.getBundleName())) { + Map<String, ConnBundleTO> byName = byLocation.get(connInstanceTO.getBundleName()); + if (byName.containsKey(connInstanceTO.getVersion())) { + result = byName.get(connInstanceTO.getVersion()); + } + } + } + return result; + } + + private List<ConnConfProperty> fillProperties(final ConnBundleTO bundleTO, final ConnInstanceTO connInstanceTO) { + final List<ConnConfProperty> props = new ArrayList<>(); + + if (bundleTO != null) { + for (ConnConfPropSchema key : bundleTO.getProperties()) { + final ConnConfProperty property = new ConnConfProperty(); + property.setSchema(key); + if (connInstanceTO.getKey() != 0 + && connInstanceTO.getConfigurationMap().containsKey(key.getName()) + && connInstanceTO.getConfigurationMap().get(key.getName()).getValues() != null) { + + property.getValues().addAll(connInstanceTO.getConfigurationMap().get(key.getName()).getValues()); + property.setOverridable(connInstanceTO.getConfigurationMap().get(key.getName()).isOverridable()); + } + + if (property.getValues().isEmpty() && !key.getDefaultValues().isEmpty()) { + property.getValues().addAll(key.getDefaultValues()); + } + + props.add(property); + } + } + + // re-order properties (implements Comparable) + Collections.sort(props); + return props; + } + + private void selectVersion(final AjaxRequestTarget target, final ConnInstanceTO connInstanceTO, + final AjaxDropDownChoicePanel<String> version, final String versionValue) { + + connInstanceTO.setVersion(versionValue); + target.add(version); + + bundleTO = getSelectedBundleTO(connInstanceTO); + properties = fillProperties(bundleTO, connInstanceTO); + target.add(propertiesContainer); + } + + public List<ConnConfProperty> getProperties() { + return properties; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java new file mode 100644 index 0000000..1abe744 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java @@ -0,0 +1,140 @@ +/* + * 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.pages; + +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.JexlHelpUtils; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.DerSchemaTO; +import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +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.markup.html.form.Form; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.model.ResourceModel; + +/** + * Modal window with Schema form. + */ +public class DerSchemaModalPage extends AbstractSchemaModalPage<DerSchemaTO> { + + private static final long serialVersionUID = 6668789770131753386L; + + public DerSchemaModalPage(final AttributableType kind) { + super(kind); + } + + @Override + public void setSchemaModalPage(final PageReference pageRef, final ModalWindow window, + DerSchemaTO schema, final boolean createFlag) { + + if (schema == null) { + schema = new DerSchemaTO(); + } + + final Form<DerSchemaTO> schemaForm = new Form<>(FORM); + + schemaForm.setModel(new CompoundPropertyModel<>(schema)); + + final AjaxTextFieldPanel name = + new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(schema, "key")); + name.addRequiredLabel(); + + final AjaxTextFieldPanel expression = new AjaxTextFieldPanel("expression", getString("expression"), + new PropertyModel<String>(schema, "expression")); + expression.addRequiredLabel(); + + final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp"); + + final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "questionMarkJexlHelp"); + schemaForm.add(questionMarkJexlHelp); + questionMarkJexlHelp.add(jexlHelp); + + name.setEnabled(createFlag); + + final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form form) { + DerSchemaTO schemaTO = (DerSchemaTO) form.getDefaultModelObject(); + + try { + if (createFlag) { + schemaRestClient.createDerSchema(kind, schemaTO); + } else { + schemaRestClient.updateDerSchema(kind, schemaTO); + } + + if (pageRef.getPage() instanceof BasePage) { + ((BasePage) pageRef.getPage()).setModalResult(true); + } + + window.close(target); + } catch (SyncopeClientException e) { + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + + final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } + }; + + cancel.setDefaultFormProcessing( + false); + + String allowedRoles = createFlag + ? xmlRolesReader.getEntitlement("Schema", "create") + : xmlRolesReader.getEntitlement("Schema", "update"); + + MetaDataRoleAuthorizationStrategy.authorize(submit, ENABLE, allowedRoles); + + schemaForm.add(name); + + schemaForm.add(expression); + + schemaForm.add(submit); + + schemaForm.add(cancel); + + add(schemaForm); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java new file mode 100644 index 0000000..6f89ec3 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java @@ -0,0 +1,273 @@ +/* + * 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.pages; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.PreferenceManager; +import org.apache.syncope.common.lib.search.SearchableFields; +import org.apache.syncope.common.lib.to.UserTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +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.basic.Label; +import org.apache.wicket.markup.html.form.Check; +import org.apache.wicket.markup.html.form.CheckGroup; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * Modal window with Display attributes form. + */ +@SuppressWarnings({ "unchecked", "rawtypes" }) +public class DisplayAttributesModalPage extends BaseModalPage { + + private static final long serialVersionUID = -4274117450918385110L; + + /** + * Max allowed selections. + */ + private static final int MAX_SELECTIONS = 9; + + public static final String[] DEFAULT_SELECTION = { "key", "username", "status" }; + + @SpringBean + private PreferenceManager prefMan; + + private final List<String> selectedDetails; + + private final List<String> selectedPlainSchemas; + + private final List<String> selectedDerSchemas; + + private final List<String> selectedVirSchemas; + + public DisplayAttributesModalPage(final PageReference pageRef, final ModalWindow window, + final List<String> schemaNames, final List<String> dSchemaNames, final List<String> vSchemaNames) { + + super(); + + final IModel<List<String>> fnames = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<String> load() { + return SearchableFields.get(UserTO.class); + } + }; + + final IModel<List<String>> names = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<String> load() { + return schemaNames; + } + }; + + final IModel<List<String>> dsnames = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<String> load() { + return dSchemaNames; + } + }; + + final IModel<List<String>> vsnames = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected List<String> load() { + return vSchemaNames; + } + }; + + final Form form = new Form(FORM); + form.setModel(new CompoundPropertyModel(this)); + + selectedDetails = prefMan.getList(getRequest(), Constants.PREF_USERS_DETAILS_VIEW); + + selectedPlainSchemas = prefMan.getList(getRequest(), Constants.PREF_USERS_ATTRIBUTES_VIEW); + + selectedDerSchemas = prefMan.getList(getRequest(), Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW); + + selectedVirSchemas = prefMan.getList(getRequest(), Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW); + + final CheckGroup dgroup = new CheckGroup("dCheckGroup", new PropertyModel(this, "selectedDetails")); + form.add(dgroup); + + final ListView<String> details = new ListView<String>("details", fnames) { + + private static final long serialVersionUID = 9101744072914090143L; + + @Override + protected void populateItem(final ListItem<String> item) { + item.add(new Check("dcheck", item.getModel())); + item.add(new Label("dname", new ResourceModel(item.getModelObject(), item.getModelObject()))); + } + }; + dgroup.add(details); + + if (names.getObject() == null || names.getObject().isEmpty()) { + final Fragment fragment = new Fragment("plainSchemas", "emptyFragment", form); + form.add(fragment); + + selectedPlainSchemas.clear(); + } else { + final Fragment fragment = new Fragment("plainSchemas", "sfragment", form); + form.add(fragment); + + final CheckGroup sgroup = new CheckGroup("psCheckGroup", new PropertyModel(this, "selectedPlainSchemas")); + fragment.add(sgroup); + + final ListView<String> schemas = new ListView<String>("plainSchemas", names) { + + private static final long serialVersionUID = 9101744072914090143L; + + @Override + protected void populateItem(final ListItem<String> item) { + item.add(new Check("scheck", item.getModel())); + item.add(new Label("sname", new ResourceModel(item.getModelObject(), item.getModelObject()))); + } + }; + sgroup.add(schemas); + } + + if (dsnames.getObject() == null || dsnames.getObject().isEmpty()) { + final Fragment fragment = new Fragment("dschemas", "emptyFragment", form); + form.add(fragment); + + selectedDerSchemas.clear(); + } else { + final Fragment fragment = new Fragment("dschemas", "dsfragment", form); + form.add(fragment); + + final CheckGroup dsgroup = new CheckGroup("dsCheckGroup", new PropertyModel(this, "selectedDerSchemas")); + fragment.add(dsgroup); + + final ListView<String> derSchemas = new ListView<String>("derSchemas", dsnames) { + + private static final long serialVersionUID = 9101744072914090143L; + + @Override + protected void populateItem(ListItem<String> item) { + item.add(new Check("dscheck", item.getModel())); + item.add(new Label("dsname", new ResourceModel(item.getModelObject(), item.getModelObject()))); + } + }; + dsgroup.add(derSchemas); + } + + if (vsnames.getObject() == null || vsnames.getObject().isEmpty()) { + final Fragment fragment = new Fragment("vschemas", "emptyFragment", form); + form.add(fragment); + + selectedVirSchemas.clear(); + } else { + final Fragment fragment = new Fragment("vschemas", "vsfragment", form); + form.add(fragment); + + final CheckGroup vsgroup = new CheckGroup("vsCheckGroup", new PropertyModel(this, "selectedVirSchemas")); + fragment.add(vsgroup); + + final ListView<String> virSchemas = new ListView<String>("virSchemas", vsnames) { + + private static final long serialVersionUID = 9101744072914090143L; + + @Override + protected void populateItem(ListItem<String> item) { + item.add(new Check("vscheck", item.getModel())); + item.add(new Label("vsname", new ResourceModel(item.getModelObject(), item.getModelObject()))); + } + }; + vsgroup.add(virSchemas); + } + + final AjaxButton submit = new IndicatingAjaxButton(SUBMIT, new ResourceModel(SUBMIT)) { + + private static final long serialVersionUID = -4804368561204623354L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + if (selectedDetails.size() + selectedPlainSchemas.size() + selectedVirSchemas.size() + selectedDerSchemas. + size() + > MAX_SELECTIONS) { + + error(getString("tooManySelections")); + onError(target, form); + } else { + final Map<String, List<String>> prefs = new HashMap<String, List<String>>(); + + prefs.put(Constants.PREF_USERS_DETAILS_VIEW, selectedDetails); + + prefs.put(Constants.PREF_USERS_ATTRIBUTES_VIEW, selectedPlainSchemas); + + prefs.put(Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW, selectedDerSchemas); + + prefs.put(Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW, selectedVirSchemas); + + prefMan.setList(getRequest(), getResponse(), prefs); + + ((BasePage) pageRef.getPage()).setModalResult(true); + + window.close(target); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + + form.add(submit); + + final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } + }; + + cancel.setDefaultFormProcessing(false); + form.add(cancel); + + add(form); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java new file mode 100644 index 0000000..af502d2 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java @@ -0,0 +1,105 @@ +/* + * 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.pages; + +import java.util.ArrayList; +import org.apache.commons.lang3.SerializationUtils; +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.client.console.commons.status.StatusBean; +import org.apache.syncope.client.console.panels.AccountInformationPanel; +import org.apache.syncope.client.console.panels.MembershipsPanel; +import org.apache.syncope.client.console.panels.ResourcesPanel; +import org.apache.syncope.client.console.panels.StatusPanel; +import org.apache.syncope.common.lib.AttributableOperations; +import org.apache.syncope.common.lib.mod.UserMod; +import org.apache.syncope.common.lib.to.UserTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.model.ResourceModel; + +/** + * Modal window with User form. + */ +public class EditUserModalPage extends UserModalPage { + + private static final long serialVersionUID = -6479209496805705739L; + + protected Form form; + + private final UserTO initialUserTO; + + private StatusPanel statusPanel; + + public EditUserModalPage(final PageReference pageRef, final ModalWindow window, final UserTO userTO) { + super(pageRef, window, userTO, Mode.ADMIN, true); + + this.initialUserTO = SerializationUtils.clone(userTO); + + form = setupEditPanel(); + + // add resource assignment details in case of update + if (userTO.getKey() != 0) { + form.addOrReplace(new Label("pwdChangeInfo", new ResourceModel("pwdChangeInfo"))); + + statusPanel = new StatusPanel("statuspanel", userTO, new ArrayList<StatusBean>(), getPageReference()); + statusPanel.setOutputMarkupId(true); + MetaDataRoleAuthorizationStrategy.authorize( + statusPanel, RENDER, xmlRolesReader.getEntitlement("Resources", "getConnectorObject")); + form.addOrReplace(statusPanel); + + form.addOrReplace(new AccountInformationPanel("accountinformation", userTO)); + + form.addOrReplace(new ResourcesPanel.Builder("resources").attributableTO(userTO). + statusPanel(statusPanel).build()); + + form.addOrReplace(new MembershipsPanel("memberships", userTO, mode, statusPanel, getPageReference())); + } + } + + @SuppressWarnings("rawtypes") + @Override + protected void submitAction(final AjaxRequestTarget target, final Form form) { + final UserTO updatedUserTO = (UserTO) form.getModelObject(); + + if (updatedUserTO.getKey() == 0) { + userTO = userRestClient.create(updatedUserTO, storePassword.getModelObject()); + } else { + final UserMod userMod = AttributableOperations.diff(updatedUserTO, initialUserTO); + + if (statusPanel != null) { + userMod.setPwdPropRequest(statusPanel.getStatusMod()); + } + + // update user just if it is changed + if (!userMod.isEmpty()) { + userTO = userRestClient.update(initialUserTO.getETagValue(), userMod); + } + } + } + + @SuppressWarnings("rawtypes") + @Override + protected void closeAction(final AjaxRequestTarget target, final Form form) { + setResponsePage(new ResultStatusModalPage.Builder(window, userTO).mode(mode).build()); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ErrorPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ErrorPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ErrorPage.java new file mode 100644 index 0000000..db46171 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ErrorPage.java @@ -0,0 +1,42 @@ +/* + * 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.pages; + +import org.apache.wicket.Page; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** + * Error WebPage. + */ +public class ErrorPage extends BasePage { + + private static final long serialVersionUID = -390761262038796657L; + + public ErrorPage(final PageParameters parameters) { + super(parameters); + + add(new Label("errorTitle", new Model<String>(parameters.get("errorTitle").toString()))); + add(new Label("errorMessage", new Model<String>(parameters.get("errorMessage").toString()))); + + add(new BookmarkablePageLink<Page>("home", getApplication().getHomePage())); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ExecMessageModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ExecMessageModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ExecMessageModalPage.java new file mode 100644 index 0000000..e39f3fc --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/ExecMessageModalPage.java @@ -0,0 +1,32 @@ +/* + * 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.pages; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.Model; + +public class ExecMessageModalPage extends BaseModalPage { + + private static final long serialVersionUID = 3163146190501510888L; + + public ExecMessageModalPage(final String message) { + final Label dialogContent = new Label("message", new Model<String>(message)); + add(dialogContent.setOutputMarkupId(true)); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/FailureMessageModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/FailureMessageModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/FailureMessageModalPage.java new file mode 100644 index 0000000..c0ee7ec --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/FailureMessageModalPage.java @@ -0,0 +1,37 @@ +/* + * 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.pages; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.Model; + +public class FailureMessageModalPage extends BaseModalPage { + + private static final long serialVersionUID = 9216117990503199258L; + + public FailureMessageModalPage(final String message, final String failureMessage) { + final Label executionFailureMessage; + if (!failureMessage.isEmpty()) { + executionFailureMessage = new Label("failureMessage", new Model<String>(failureMessage)); + } else { + executionFailureMessage = new Label("failureMessage"); + } + add(executionFailureMessage.setOutputMarkupId(true)); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java new file mode 100644 index 0000000..8b4daa9 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupModalPage.java @@ -0,0 +1,164 @@ +/* + * 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.pages; + +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.SerializationUtils; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.client.console.panels.GroupPanel; +import org.apache.syncope.common.lib.AttributableOperations; +import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.to.GroupTO; +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.extensions.ajax.markup.html.IndicatingAjaxButton; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.ResourceModel; + +/** + * Modal window with Group form. + */ +public class GroupModalPage extends BaseModalPage { + + private static final long serialVersionUID = -1732493223434085205L; + + protected final PageReference pageRef; + + protected final ModalWindow window; + + protected final Mode mode; + + protected final boolean createFlag; + + protected final GroupPanel groupPanel; + + protected GroupTO originalGroupTO; + + public GroupModalPage(final PageReference pageRef, final ModalWindow window, final GroupTO groupTO) { + this(pageRef, window, groupTO, Mode.ADMIN); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public GroupModalPage( + final PageReference pageRef, final ModalWindow window, final GroupTO groupTO, final Mode mode) { + + super(); + + this.pageRef = pageRef; + this.window = window; + this.mode = mode; + + this.createFlag = groupTO.getKey() == 0; + if (!createFlag) { + originalGroupTO = SerializationUtils.clone(groupTO); + } + + final Form<GroupTO> form = new Form<GroupTO>("groupForm"); + form.setMultiPart(true); + + add(new Label("displayName", groupTO.getKey() == 0 ? "" : groupTO.getDisplayName())); + + form.setModel(new CompoundPropertyModel<GroupTO>(groupTO)); + + this.groupPanel = new GroupPanel.Builder("groupPanel"). + form(form).groupTO(groupTO).groupModalPageMode(mode).pageRef(getPageReference()).build(); + form.add(groupPanel); + + final AjaxButton submit = new IndicatingAjaxButton(SUBMIT, new ResourceModel(SUBMIT)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + try { + submitAction(target, form); + + if (pageRef.getPage() instanceof BasePage) { + ((BasePage) pageRef.getPage()).setModalResult(true); + } + + closeAction(target, form); + } catch (Exception e) { + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + } + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + feedbackPanel.refresh(target); + } + }; + form.add(submit); + form.setDefaultButton(submit); + + final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + closeAction(target, form); + } + }; + cancel.setDefaultFormProcessing(false); + form.add(cancel); + + MetaDataRoleAuthorizationStrategy.authorize(submit, ENABLE, xmlRolesReader.getEntitlement("Groups", + createFlag + ? "create" + : "update")); + + add(form); + } + + protected void submitAction(final AjaxRequestTarget target, final Form<?> form) { + final GroupTO groupTO = (GroupTO) form.getDefaultModelObject(); + final List<String> entitlementList = new ArrayList<String>(groupPanel.getSelectedEntitlements()); + groupTO.getEntitlements().clear(); + groupTO.getEntitlements().addAll(entitlementList); + + GroupTO result; + if (createFlag) { + result = groupRestClient.create(groupTO); + } else { + GroupMod groupMod = AttributableOperations.diff(groupTO, originalGroupTO); + + // update group just if it is changed + if (groupMod.isEmpty()) { + result = groupTO; + } else { + result = groupRestClient.update(originalGroupTO.getETagValue(), groupMod); + } + } + + setResponsePage(new ResultStatusModalPage.Builder(window, result).build()); + } + + protected void closeAction(final AjaxRequestTarget target, final Form<?> form) { + window.close(target); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java new file mode 100644 index 0000000..97b7abf --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupSelectModalPage.java @@ -0,0 +1,105 @@ +/* + * 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.pages; + +import java.lang.reflect.Constructor; +import javax.swing.tree.DefaultMutableTreeNode; +import org.apache.syncope.client.console.commons.GroupTreeBuilder; +import org.apache.syncope.client.console.wicket.markup.html.tree.DefaultMutableTreeNodeExpansion; +import org.apache.syncope.client.console.wicket.markup.html.tree.DefaultMutableTreeNodeExpansionModel; +import org.apache.syncope.client.console.wicket.markup.html.tree.TreeGroupProvider; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.wicket.Component; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.event.Broadcast; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree; +import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider; +import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree; +import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder; +import org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class GroupSelectModalPage extends BaseModalPage { + + private static final long serialVersionUID = 2106489458494696439L; + + @SpringBean + private GroupTreeBuilder groupTreeBuilder; + + private final NestedTree<DefaultMutableTreeNode> tree; + + public GroupSelectModalPage(final PageReference pageRef, final ModalWindow window, final Class<?> payloadClass) { + super(); + + final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeGroupProvider(groupTreeBuilder, true); + final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel(); + + tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) { + + private static final long serialVersionUID = 7137658050662575546L; + + @Override + protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) { + final DefaultMutableTreeNode treeNode = node.getObject(); + final GroupTO groupTO = (GroupTO) treeNode.getUserObject(); + + return new Folder<DefaultMutableTreeNode>(id, GroupSelectModalPage.this.tree, node) { + + private static final long serialVersionUID = 9046323319920426493L; + + @Override + protected boolean isClickable() { + return true; + } + + @Override + protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) { + return new Model<>(groupTO.getDisplayName()); + } + + @Override + protected void onClick(final AjaxRequestTarget target) { + super.onClick(target); + + try { + Constructor<?> constructor = payloadClass.getConstructor(Long.class); + Object payload = constructor.newInstance(groupTO.getKey()); + + send(pageRef.getPage(), Broadcast.BREADTH, payload); + } catch (Exception e) { + LOG.error("Could not send group select event", e); + } + + window.close(target); + } + }; + } + }; + tree.add(new WindowsTheme()); + tree.setOutputMarkupId(true); + + DefaultMutableTreeNodeExpansion.get().expandAll(); + + this.add(tree); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java new file mode 100644 index 0000000..293e402 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/GroupTemplateModalPage.java @@ -0,0 +1,50 @@ +/* + * 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.pages; + +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.SyncTaskTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.form.Form; + +public class GroupTemplateModalPage extends GroupModalPage { + + private static final long serialVersionUID = -3849135555203409845L; + + private final SyncTaskTO syncTaskTO; + + public GroupTemplateModalPage(final PageReference callerPageRef, final ModalWindow window, + final SyncTaskTO syncTaskTO) { + + super(callerPageRef, window, syncTaskTO.getGroupTemplate() == null + ? new GroupTO() + : syncTaskTO.getGroupTemplate(), Mode.TEMPLATE); + + this.syncTaskTO = syncTaskTO; + } + + @Override + protected void submitAction(final AjaxRequestTarget target, final Form form) { + syncTaskTO.setGroupTemplate((GroupTO) form.getModelObject()); + taskRestClient.updateSyncTask(syncTaskTO); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Groups.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Groups.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Groups.java new file mode 100644 index 0000000..2e92940 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Groups.java @@ -0,0 +1,186 @@ +/* + * 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.pages; + +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.panels.AbstractSearchResultPanel; +import org.apache.syncope.client.console.panels.GroupSearchPanel; +import org.apache.syncope.client.console.panels.GroupSearchResultPanel; +import org.apache.syncope.client.console.panels.GroupSummaryPanel; +import org.apache.syncope.client.console.rest.GroupRestClient; +import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; +import org.apache.syncope.client.console.wicket.markup.html.tree.TreeGroupPanel; +import org.apache.wicket.Session; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.event.Broadcast; +import org.apache.wicket.event.IEvent; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * Groups WebPage. + */ +public class Groups extends BasePage { + + private static final long serialVersionUID = -2147758241610831969L; + + private static final int WIN_HEIGHT = 500; + + private static final int WIN_WIDTH = 800; + + @SpringBean + private GroupRestClient restClient; + + private final ModalWindow editGroupWin; + + private final WebMarkupContainer groupTabsContainer; + + public Groups(final PageParameters parameters) { + super(parameters); + + groupTabsContainer = new WebMarkupContainer("groupTabsContainer"); + groupTabsContainer.setOutputMarkupId(true); + add(groupTabsContainer); + + editGroupWin = new ModalWindow("editGroupWin"); + editGroupWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); + editGroupWin.setInitialHeight(WIN_HEIGHT); + editGroupWin.setInitialWidth(WIN_WIDTH); + editGroupWin.setCookieName("edit-group-modal"); + add(editGroupWin); + + final TreeGroupPanel treePanel = new TreeGroupPanel("treePanel"); + treePanel.setOutputMarkupId(true); + groupTabsContainer.add(treePanel); + + final GroupSummaryPanel summaryPanel = new GroupSummaryPanel.Builder("summaryPanel") + .window(editGroupWin).callerPageRef(Groups.this.getPageReference()).build(); + groupTabsContainer.add(summaryPanel); + + editGroupWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { + + private static final long serialVersionUID = 8804221891699487139L; + + @Override + public void onClose(final AjaxRequestTarget target) { + final GroupSummaryPanel summaryPanel = (GroupSummaryPanel) groupTabsContainer.get("summaryPanel"); + + final TreeNodeClickUpdate data = new TreeNodeClickUpdate(target, + summaryPanel == null || summaryPanel.getSelectedNode() == null + ? 0 + : summaryPanel.getSelectedNode().getKey()); + + send(getPage(), Broadcast.BREADTH, data); + + if (modalResult) { + getSession().info(getString(Constants.OPERATION_SUCCEEDED)); + feedbackPanel.refresh(target); + modalResult = false; + } + + } + }); + + final AbstractSearchResultPanel searchResult = + new GroupSearchResultPanel("searchResult", true, null, getPageReference(), restClient); + add(searchResult); + + final Form searchForm = new Form("searchForm"); + add(searchForm); + + final GroupSearchPanel searchPanel = new GroupSearchPanel.Builder("searchPanel").build(); + searchForm.add(searchPanel); + + searchForm.add(new ClearIndicatingAjaxButton("search", new ResourceModel("search"), getPageReference()) { + + private static final long serialVersionUID = -958724007591692537L; + + @Override + protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { + final String fiql = searchPanel.buildFIQL(); + LOG.debug("Node condition {}", fiql); + + doSearch(target, fiql, searchResult); + + Session.get().getFeedbackMessages().clear(); + searchPanel.getSearchFeedback().refresh(target); + } + + @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { + searchPanel.getSearchFeedback().refresh(target); + } + }); + } + + private void doSearch(final AjaxRequestTarget target, final String fiql, + final AbstractSearchResultPanel resultsetPanel) { + + if (fiql == null) { + error(getString(Constants.SEARCH_ERROR)); + return; + } + + resultsetPanel.search(fiql, target); + } + + @Override + public void onEvent(final IEvent<?> event) { + super.onEvent(event); + + if (event.getPayload() instanceof TreeNodeClickUpdate) { + final TreeNodeClickUpdate update = (TreeNodeClickUpdate) event.getPayload(); + + final GroupSummaryPanel summaryPanel = new GroupSummaryPanel.Builder("summaryPanel") + .window(editGroupWin).callerPageRef(Groups.this.getPageReference()) + .selectedNodeId(update.getSelectedNodeId()).build(); + + groupTabsContainer.addOrReplace(summaryPanel); + update.getTarget().add(groupTabsContainer); + } + } + + public static class TreeNodeClickUpdate { + + private final AjaxRequestTarget target; + + private Long selectedNodeId; + + public TreeNodeClickUpdate(final AjaxRequestTarget target, final Long selectedNodeId) { + this.target = target; + this.selectedNodeId = selectedNodeId; + } + + public AjaxRequestTarget getTarget() { + return target; + } + + public Long getSelectedNodeId() { + return selectedNodeId; + } + + public void setSelectedNodeId(final Long selectedNodeId) { + this.selectedNodeId = selectedNodeId; + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/HomePage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/HomePage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/HomePage.java new file mode 100644 index 0000000..7b4ba68 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/HomePage.java @@ -0,0 +1,33 @@ +/* + * 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.pages; + +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** + * Syncope Home-Page. + */ +public class HomePage extends BasePage { + + private static final long serialVersionUID = -6712990478380766293L; + + public HomePage(final PageParameters parameters) { + super(parameters); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/old_console/src/main/java/org/apache/syncope/client/console/pages/InfoModalPage.java ---------------------------------------------------------------------- diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/InfoModalPage.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/InfoModalPage.java new file mode 100644 index 0000000..83e0163 --- /dev/null +++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/InfoModalPage.java @@ -0,0 +1,43 @@ +/* + * 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.pages; + +import org.apache.syncope.client.console.SyncopeSession; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class InfoModalPage extends BaseModalPage { + + private static final long serialVersionUID = 5558354927844399580L; + + @SpringBean(name = "site") + private String siteUrl; + + @SpringBean(name = "license") + private String licenseUrl; + + public InfoModalPage() { + super(); + + add(new ExternalLink("syncopeLink", siteUrl)); + add(new ExternalLink("licenseLink", licenseUrl)); + add(new Label("version", SyncopeSession.get().getVersion())); + } +}
