Return-Path: X-Original-To: apmail-syncope-commits-archive@www.apache.org Delivered-To: apmail-syncope-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3EADE1972B for ; Thu, 28 Apr 2016 16:40:39 +0000 (UTC) Received: (qmail 22409 invoked by uid 500); 28 Apr 2016 16:40:39 -0000 Delivered-To: apmail-syncope-commits-archive@syncope.apache.org Received: (qmail 22320 invoked by uid 500); 28 Apr 2016 16:40:38 -0000 Mailing-List: contact commits-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list commits@syncope.apache.org Received: (qmail 22206 invoked by uid 99); 28 Apr 2016 16:40:38 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Apr 2016 16:40:38 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 161D5E0103; Thu, 28 Apr 2016 16:40:38 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: fmartelli@apache.org To: commits@syncope.apache.org Date: Thu, 28 Apr 2016 16:40:40 -0000 Message-Id: <3986ade423124d3db68bd7caf9d335cf@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [3/4] syncope git commit: [SYNCOPE-745] report management + refactoring ModalPanel interface; still missing reportlets http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java new file mode 100644 index 0000000..7866000 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportExecutionDetails.java @@ -0,0 +1,54 @@ +/* + * 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.reports; + +import org.apache.syncope.client.console.panels.MultilevelPanel; +import org.apache.syncope.client.console.rest.ReportRestClient; +import org.apache.syncope.client.console.tasks.ExecutionsDirectoryPanel; +import org.apache.syncope.common.lib.to.ReportTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; + +/** + * Modal window with report executions. + */ +public class ReportExecutionDetails extends MultilevelPanel.SecondLevel { + + private static final long serialVersionUID = -4110576026663173545L; + + public ReportExecutionDetails(final ReportTO reportTO, final PageReference pageRef) { + super(); + + final MultilevelPanel mlp = new MultilevelPanel("executions"); + add(mlp); + + mlp.setFirstLevel(new ExecutionsDirectoryPanel(mlp, reportTO.getKey(), new ReportRestClient(), pageRef) { + + private static final long serialVersionUID = 5691719817252887541L; + + @Override + protected void next( + final String title, + final MultilevelPanel.SecondLevel slevel, + final AjaxRequestTarget target) { + mlp.next(title, slevel, target); + } + }); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportStartAtTogglePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportStartAtTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportStartAtTogglePanel.java new file mode 100644 index 0000000..04022fa --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportStartAtTogglePanel.java @@ -0,0 +1,39 @@ +/* + * 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.reports; + +import org.apache.syncope.client.console.panels.StartAtTogglePanel; +import org.apache.syncope.client.console.rest.ExecutionRestClient; +import org.apache.syncope.client.console.rest.ReportRestClient; +import org.apache.wicket.markup.html.WebMarkupContainer; + +public class ReportStartAtTogglePanel extends StartAtTogglePanel { + + private static final long serialVersionUID = -3195479265440591519L; + + public ReportStartAtTogglePanel(final WebMarkupContainer container) { + super(container); + } + + @Override + protected ExecutionRestClient getRestClient() { + return new ReportRestClient(); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java new file mode 100644 index 0000000..497a4bd --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java @@ -0,0 +1,251 @@ +/* + * 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.reports; + +import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.DirectoryDataProvider; +import org.apache.syncope.client.console.commons.SortableDataProviderComparator; +import org.apache.syncope.client.console.notifications.TemplateContentModal; +import org.apache.syncope.client.console.notifications.TemplateModal; +import org.apache.syncope.client.console.panels.DirectoryPanel; +import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel; +import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder; +import org.apache.syncope.client.console.wizards.AjaxWizard; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.ReportTemplateTO; +import org.apache.syncope.common.lib.types.StandardEntitlement; +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.markup.html.repeater.data.sort.SortOrder; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.model.StringResourceModel; +import org.apache.syncope.client.console.panels.WizardModalPanel; +import org.apache.syncope.client.console.reports.ReportTemplateDirectoryPanel.ReportTemplateProvider; +import org.apache.syncope.client.console.rest.ReportRestClient; +import org.apache.syncope.common.lib.types.ReportTemplateFormat; + +public class ReportTemplateDirectoryPanel + extends DirectoryPanel { + + private static final long serialVersionUID = -3789392431954221446L; + + protected final BaseModal utilityModal = new BaseModal<>("outer"); + + public ReportTemplateDirectoryPanel(final String id, final PageReference pageReference) { + super(id, pageReference, true); + disableCheckBoxes(); + + modal.size(Modal.Size.Small); + modal.addSubmitButton(); + setFooterVisibility(true); + + addOuterObject(utilityModal); + setWindowClosedReloadCallback(utilityModal); + utilityModal.size(Modal.Size.Large); + utilityModal.addSubmitButton(); + + restClient = new ReportRestClient(); + addNewItemPanelBuilder(new AbstractModalPanelBuilder(new ReportTemplateTO(), pageRef) { + + private static final long serialVersionUID = 1995192603527154740L; + + @Override + public WizardModalPanel build( + final String id, final int index, final AjaxWizard.Mode mode) { + return new TemplateModal( + modal, restClient, new ReportTemplateTO(), pageReference); + } + }, true); + + initResultTable(); + + MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.MAIL_TEMPLATE_CREATE); + } + + @Override + protected List> getColumns() { + List> columns = new ArrayList<>(); + columns.add(new PropertyColumn( + new StringResourceModel("key", this, null), "key", "key")); + + columns.add(new ActionColumn(new ResourceModel("actions", "")) { + + private static final long serialVersionUID = -3503023501954863131L; + + @Override + public ActionLinksPanel getActions( + final String componentId, final IModel model) { + + final ActionLinksPanel.Builder panel = ActionLinksPanel.builder(); + + panel.add(new ActionLink() { + + private static final long serialVersionUID = -7978723352517770645L; + + @Override + public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) { + TemplateContentModal.TemplateContent content + = new TemplateContentModal.TemplateContent( + model.getObject().getKey(), ReportTemplateFormat.FO); + content.setContent( + restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.FO)); + + utilityModal.header(new ResourceModel("report.template.fo", "FO Content")); + utilityModal.setContent(new TemplateContentModal( + utilityModal, restClient, content, pageRef)); + utilityModal.show(true); + target.add(utilityModal); + } + }, ActionLink.ActionType.FO_EDIT, StandardEntitlement.MAIL_TEMPLATE_UPDATE); + + panel.add(new ActionLink() { + + private static final long serialVersionUID = -7978723352517770645L; + + @Override + public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) { + TemplateContentModal.TemplateContent content + = new TemplateContentModal.TemplateContent( + model.getObject().getKey(), ReportTemplateFormat.HTML); + content.setContent( + restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.HTML)); + + utilityModal.header(new ResourceModel("report.template.html", "HTML Content")); + utilityModal.setContent(new TemplateContentModal( + utilityModal, restClient, content, pageRef)); + utilityModal.show(true); + target.add(utilityModal); + } + }, ActionLink.ActionType.HTML_EDIT, StandardEntitlement.MAIL_TEMPLATE_UPDATE); + + panel.add(new ActionLink() { + + private static final long serialVersionUID = -7978723352517770645L; + + @Override + public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) { + TemplateContentModal.TemplateContent content + = new TemplateContentModal.TemplateContent( + model.getObject().getKey(), ReportTemplateFormat.CSV); + content.setContent( + restClient.readTemplateFormat(model.getObject().getKey(), ReportTemplateFormat.CSV)); + + utilityModal.setFormModel(content); + utilityModal.header(new ResourceModel("report.template.text", "TEXT Content")); + utilityModal.setContent(new TemplateContentModal( + utilityModal, restClient, content, pageRef)); + utilityModal.show(true); + target.add(utilityModal); + } + }, ActionLink.ActionType.TEXT_EDIT, StandardEntitlement.MAIL_TEMPLATE_UPDATE); + + panel.add(new ActionLink() { + + private static final long serialVersionUID = -3722207913631435501L; + + @Override + public void onClick(final AjaxRequestTarget target, final ReportTemplateTO ignore) { + try { + restClient.deleteTemplate(model.getObject().getKey()); + info(getString(Constants.OPERATION_SUCCEEDED)); + target.add(container); + } catch (SyncopeClientException e) { + LOG.error("While deleting object {}", model.getObject().getKey(), e); + error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); + } + SyncopeConsoleSession.get().getNotificationPanel().refresh(target); + } + }, ActionLink.ActionType.DELETE, StandardEntitlement.MAIL_TEMPLATE_DELETE); + + return panel.build(componentId); + } + }); + return columns; + } + + @Override + protected ReportTemplateProvider dataProvider() { + return new ReportTemplateProvider(rows); + } + + @Override + protected String paginatorRowsKey() { + return Constants.PREF_MAIL_TEMPLATE_PAGINATOR_ROWS; + } + + @Override + protected Collection getBulkActions() { + return Collections.emptyList(); + } + + public class ReportTemplateProvider extends DirectoryDataProvider { + + private static final long serialVersionUID = -276043813563988590L; + + private final SortableDataProviderComparator comparator; + + public ReportTemplateProvider(final int paginatorRows) { + super(paginatorRows); + setSort("key", SortOrder.ASCENDING); + comparator = new SortableDataProviderComparator<>(this); + } + + @Override + public Iterator iterator(final long first, final long count) { + final List list = restClient.getAllAvailableTemplates(); + Collections.sort(list, comparator); + return list.subList((int) first, (int) first + (int) count).iterator(); + } + + @Override + public long size() { + return restClient.getAllAvailableTemplates().size(); + } + + @Override + public IModel model(final ReportTemplateTO reportTemplateTO) { + return new AbstractReadOnlyModel() { + + private static final long serialVersionUID = 774694801558497248L; + + @Override + public ReportTemplateTO getObject() { + return reportTemplateTO; + } + }; + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java new file mode 100644 index 0000000..6a12244 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java @@ -0,0 +1,108 @@ +/* + * 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.reports; + +import java.io.Serializable; +import java.util.ArrayList; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Transformer; +import org.apache.syncope.client.console.rest.ReportRestClient; +import org.apache.syncope.client.console.tasks.CrontabPanel; +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.wizards.AjaxWizardBuilder; +import org.apache.syncope.common.lib.to.ReportTO; +import org.apache.syncope.common.lib.to.ReportTemplateTO; +import org.apache.wicket.PageReference; +import org.apache.wicket.extensions.wizard.WizardModel; +import org.apache.wicket.extensions.wizard.WizardStep; +import org.apache.wicket.model.PropertyModel; + +public class ReportWizardBuilder extends AjaxWizardBuilder { + + private static final long serialVersionUID = 5945391813567245081L; + + private final ReportRestClient restClient = new ReportRestClient(); + + public ReportWizardBuilder(final ReportTO reportTO, final PageReference pageRef) { + super(reportTO, pageRef); + } + + @Override + protected Serializable onApplyInternal(final ReportTO modelObject) { + if (modelObject.getKey() == null) { + restClient.create(modelObject); + } else { + restClient.update(modelObject); + } + return modelObject; + } + + @Override + protected WizardModel buildModelSteps(final ReportTO modelObject, final WizardModel wizardModel) { + wizardModel.add(new Profile(modelObject)); + wizardModel.add(new Schedule(modelObject)); + return wizardModel; + } + + public class Profile extends WizardStep { + + private static final long serialVersionUID = -3043839139187792810L; + + public Profile(final ReportTO reportTO) { + + AjaxTextFieldPanel name = new AjaxTextFieldPanel( + "name", "name", new PropertyModel(reportTO, "name"), false); + name.addRequiredLabel(); + name.setEnabled(true); + add(name); + + final AjaxDropDownChoicePanel template = new AjaxDropDownChoicePanel<>( + "template", getString("template"), + new PropertyModel(reportTO, "template")); + template.setChoices(CollectionUtils.collect( + restClient.getAllAvailableTemplates(), new Transformer() { + + @Override + public String transform(final ReportTemplateTO input) { + return input.getKey(); + } + }, new ArrayList())); + + template.addRequiredLabel(); + add(template); + + AjaxCheckBoxPanel active = new AjaxCheckBoxPanel( + "active", "active", new PropertyModel(reportTO, "active"), false); + add(active); + } + } + + public class Schedule extends WizardStep { + + private static final long serialVersionUID = -785981096328637758L; + + public Schedule(final ReportTO reportTO) { + add(new CrontabPanel( + "schedule", new PropertyModel(reportTO, "cronExpression"), reportTO.getCronExpression())); + } + + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java index 83a0951..9eaa65d 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java @@ -18,7 +18,6 @@ */ package org.apache.syncope.client.console.rest; -import java.io.Serializable; import java.net.URI; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.syncope.client.console.SyncopeConsoleApplication; @@ -31,7 +30,7 @@ import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class BaseRestClient implements Serializable { +public abstract class BaseRestClient implements RestClient { protected static final Logger LOG = LoggerFactory.getLogger(BaseRestClient.class); http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java index 1bb0ad9..aa0d59a 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java @@ -22,11 +22,15 @@ import java.util.Date; import java.util.List; import org.apache.syncope.common.lib.to.ExecTO; -public interface ExecutionRestClient { +public interface ExecutionRestClient extends RestClient { void startExecution(String executionCollectorKey, Date start); void deleteExecution(String executionKey); List listRecentExecutions(final int max); + + List listExecutions(final String taskKey, final int page, final int size); + + int countExecutions(final String taskKey); } http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java index eb7d160..eab0a17 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java @@ -29,7 +29,8 @@ import org.apache.syncope.common.lib.types.MailTemplateFormat; import org.apache.syncope.common.rest.api.service.MailTemplateService; import org.apache.syncope.common.rest.api.service.NotificationService; -public class NotificationRestClient extends BaseRestClient { +public class NotificationRestClient extends BaseRestClient + implements TemplateRestClient { private static final long serialVersionUID = 6328933265096511690L; @@ -53,22 +54,27 @@ public class NotificationRestClient extends BaseRestClient { getService(NotificationService.class).delete(key); } + @Override public List getAllAvailableTemplates() { return getService(MailTemplateService.class).list(); } + @Override public void createTemplate(final MailTemplateTO mailTemplateTO) { getService(MailTemplateService.class).create(mailTemplateTO); } + @Override public void deleteTemplate(final String key) { getService(MailTemplateService.class).delete(key); } + @Override public MailTemplateTO readTemplate(final String key) { return getService(MailTemplateService.class).read(key); } + @Override public String readTemplateFormat(final String key, final MailTemplateFormat format) { try { return IOUtils.toString(InputStream.class.cast( @@ -80,6 +86,7 @@ public class NotificationRestClient extends BaseRestClient { } } + @Override public void updateTemplateFormat(final String key, final String content, final MailTemplateFormat format) { getService(MailTemplateService.class).setFormat( key, format, IOUtils.toInputStream(content, SyncopeConstants.DEFAULT_CHARSET)); http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java index 743ebfb..1c59d09 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java @@ -18,16 +18,27 @@ */ package org.apache.syncope.client.console.rest; +import static org.apache.syncope.client.console.rest.BaseRestClient.getService; + +import java.io.InputStream; import java.util.Date; import java.util.List; import javax.ws.rs.core.Response; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.ExecTO; import org.apache.syncope.common.lib.to.ReportTO; +import org.apache.syncope.common.lib.to.ReportTemplateTO; import org.apache.syncope.common.lib.types.ReportExecExportFormat; +import org.apache.syncope.common.lib.types.ReportTemplateFormat; +import org.apache.syncope.common.rest.api.beans.ExecQuery; import org.apache.syncope.common.rest.api.beans.ExecuteQuery; import org.apache.syncope.common.rest.api.service.ReportService; +import org.apache.syncope.common.rest.api.service.ReportTemplateService; -public class ReportRestClient extends BaseRestClient implements ExecutionRestClient { +public class ReportRestClient extends BaseRestClient + implements ExecutionRestClient, TemplateRestClient { private static final long serialVersionUID = 1644689667998953604L; @@ -74,4 +85,54 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) { return getService(ReportService.class).exportExecutionResult(executionKey, fmt); } + + @Override + public List listExecutions(final String taskKey, final int page, final int size) { + return getService(ReportService.class). + listExecutions(new ExecQuery.Builder().key(taskKey).page(page).size(size).build()).getResult(); + } + + @Override + public int countExecutions(final String taskKey) { + return getService(ReportService.class). + listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount(); + } + + @Override + public List getAllAvailableTemplates() { + return getService(ReportTemplateService.class).list(); + } + + @Override + public void createTemplate(final ReportTemplateTO reportTemplateTO) { + getService(ReportTemplateService.class).create(reportTemplateTO); + } + + @Override + public void deleteTemplate(final String key) { + getService(ReportTemplateService.class).delete(key); + } + + @Override + public ReportTemplateTO readTemplate(final String key) { + return getService(ReportTemplateService.class).read(key); + } + + @Override + public String readTemplateFormat(final String key, final ReportTemplateFormat format) { + try { + return IOUtils.toString(InputStream.class.cast( + getService(ReportTemplateService.class).getFormat(key, format).getEntity()), + SyncopeConstants.DEFAULT_CHARSET); + } catch (Exception e) { + LOG.error("Error retrieving mail template {} as {}", key, format, e); + return StringUtils.EMPTY; + } + } + + @Override + public void updateTemplateFormat(final String key, final String content, final ReportTemplateFormat format) { + getService(ReportTemplateService.class).setFormat( + key, format, IOUtils.toInputStream(content, SyncopeConstants.DEFAULT_CHARSET)); + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/RestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/RestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/RestClient.java new file mode 100644 index 0000000..4ac954c --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/RestClient.java @@ -0,0 +1,24 @@ +/* + * 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.rest; + +import java.io.Serializable; + +public interface RestClient extends Serializable { +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java index abc62a6..0c70c44 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java @@ -61,6 +61,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien build()).getTotalCount(); } + @Override public int countExecutions(final String taskKey) { return getService(TaskService.class). listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount(); @@ -139,6 +140,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien getResult(); } + @Override public List listExecutions(final String taskKey, final int page, final int size) { return getService(TaskService.class). listExecutions(new ExecQuery.Builder().key(taskKey).page(page).size(size).build()).getResult(); http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java new file mode 100644 index 0000000..9bb62b6 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java @@ -0,0 +1,36 @@ +/* + * 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.rest; + +import java.util.List; + +public interface TemplateRestClient extends RestClient { + + List getAllAvailableTemplates(); + + void createTemplate(final T templateTO); + + void deleteTemplate(final String key); + + T readTemplate(final String key); + + String readTemplateFormat(final String key, final F format); + + void updateTemplateFormat(final String key, final String content, final F format); +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java index f61e4ee..835e478 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java @@ -44,21 +44,19 @@ import org.apache.syncope.common.lib.to.ResourceTO; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.UserTO; import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; public class StatusDirectoryPanel extends DirectoryPanel> - implements ModalPanel { + implements ModalPanel { private static final long serialVersionUID = -9148734710505211261L; @@ -110,21 +108,6 @@ public class StatusDirectoryPanel } @Override - public void onSubmit(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void onError(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public StatusBean getItem() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override protected List> getColumns() { final List> columns = new ArrayList<>(); http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java index d2cf748..da05b49 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java @@ -21,14 +21,11 @@ package org.apache.syncope.client.console.status; import org.apache.syncope.client.console.panels.ModalPanel; import org.apache.syncope.client.console.panels.MultilevelPanel; import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; -import org.apache.syncope.client.console.wizards.any.AnyWrapper; import org.apache.syncope.common.lib.to.AnyTO; import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.Panel; -public class StatusModal extends Panel implements ModalPanel> { +public class StatusModal extends Panel implements ModalPanel { private static final long serialVersionUID = 1066124171682570080L; @@ -39,19 +36,4 @@ public class StatusModal extends Panel implements ModalPanel form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void onError(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public AnyWrapper getItem() { - throw new UnsupportedOperationException("Not supported yet."); - } } http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java index 93b2a2a..dc947f2 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AbstractTasks.java @@ -18,32 +18,14 @@ */ package org.apache.syncope.client.console.tasks; -import java.io.Serializable; import org.apache.syncope.client.console.panels.ModalPanel; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.Panel; -public abstract class AbstractTasks extends Panel implements ModalPanel { +public abstract class AbstractTasks extends Panel implements ModalPanel { private static final long serialVersionUID = -4013796607157549641L; public AbstractTasks(final String id) { super(id); } - - @Override - public void onSubmit(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void onError(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Serializable getItem() { - throw new UnsupportedOperationException("Not supported yet."); - } } http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java new file mode 100644 index 0000000..10545f1 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ExecutionsDirectoryPanel.java @@ -0,0 +1,232 @@ +/* + * 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.tasks; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.DirectoryDataProvider; +import org.apache.syncope.client.console.commons.SortableDataProviderComparator; +import org.apache.syncope.client.console.panels.DirectoryPanel; +import org.apache.syncope.client.console.panels.AjaxDataTablePanel; +import org.apache.syncope.client.console.panels.MultilevelPanel; +import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel; +import org.apache.syncope.client.console.rest.ExecutionRestClient; +import org.apache.syncope.client.console.tasks.ExecutionsDirectoryPanel.ExecProvider; +import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn; +import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn; +import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.ExecTO; +import org.apache.syncope.common.lib.types.StandardEntitlement; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.model.StringResourceModel; + +public abstract class ExecutionsDirectoryPanel + extends DirectoryPanel { + + private static final long serialVersionUID = 2039393934721149162L; + + private final BaseModal baseModal; + + private final MultilevelPanel multiLevelPanelRef; + + private final String key; + + public ExecutionsDirectoryPanel( + final MultilevelPanel multiLevelPanelRef, + final String key, + final ExecutionRestClient executionRestClient, + final PageReference pageRef) { + this(null, multiLevelPanelRef, key, executionRestClient, pageRef); + } + + public ExecutionsDirectoryPanel( + final BaseModal baseModal, + final MultilevelPanel multiLevelPanelRef, + final String key, + final ExecutionRestClient executionRestClient, + final PageReference pageRef) { + super(MultilevelPanel.FIRST_LEVEL_ID, pageRef, false); + this.baseModal = baseModal; + this.multiLevelPanelRef = multiLevelPanelRef; + restClient = executionRestClient; + setOutputMarkupId(true); + this.key = key; + initResultTable(); + } + + @Override + protected void resultTableCustomChanges(final AjaxDataTablePanel.Builder resultTableBuilder) { + resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef); + } + + protected abstract void next(final String title, final SecondLevel secondLevel, final AjaxRequestTarget target); + + @Override + protected List> getColumns() { + final List> columns = new ArrayList<>(); + + columns.add(new KeyPropertyColumn(new ResourceModel("key"), "key", "key")); + + columns.add(new DatePropertyColumn(new ResourceModel("start"), "start", "start")); + + columns.add(new DatePropertyColumn(new ResourceModel("end"), "end", "end")); + + columns.add(new PropertyColumn(new ResourceModel("status"), "status", "status")); + + columns.add(new ActionColumn(new ResourceModel("actions")) { + + private static final long serialVersionUID = -3503023501954863131L; + + @Override + public ActionLinksPanel getActions(final String componentId, final IModel model) { + final ExecTO taskExecutionTO = model.getObject(); + + final ActionLinksPanel.Builder panel = ActionLinksPanel.builder(); + + panel. + add(new ActionLink() { + + private static final long serialVersionUID = -3722207913631435501L; + + @Override + public void onClick(final AjaxRequestTarget target, final ExecTO ignore) { + next(new StringResourceModel("execution.view", ExecutionsDirectoryPanel.this, model). + getObject(), new ExecMessage(model.getObject().getMessage()), target); + } + }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ). + add(new ActionLink() { + + private static final long serialVersionUID = -3722207913631435501L; + + @Override + public void onClick(final AjaxRequestTarget target, final ExecTO ignore) { + try { + restClient.deleteExecution(taskExecutionTO.getKey()); + info(getString(Constants.OPERATION_SUCCEEDED)); + } catch (SyncopeClientException scce) { + error(scce.getMessage()); + } + target.add(ExecutionsDirectoryPanel.this); + SyncopeConsoleSession.get().getNotificationPanel().refresh(target); + } + }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE); + + return panel.build(componentId, model.getObject()); + } + + @Override + public ActionLinksPanel getHeader(final String componentId) { + final ActionLinksPanel.Builder panel = ActionLinksPanel.builder(); + + return panel.add(new ActionLink() { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + public void onClick(final AjaxRequestTarget target, final Serializable ignore) { + if (target != null) { + target.add(container); + } + } + }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId); + } + }); + + return columns; + } + + @Override + protected ExecProvider dataProvider() { + return new ExecProvider(key, rows); + } + + @Override + protected String paginatorRowsKey() { + return Constants.PREF_TASK_EXECS_PAGINATOR_ROWS; + } + + @Override + protected Collection getBulkActions() { + final List bulkActions = new ArrayList<>(); + bulkActions.add(ActionLink.ActionType.DELETE); + return bulkActions; + } + + protected class ExecProvider extends DirectoryDataProvider { + + private static final long serialVersionUID = 8943636537120648961L; + + private final SortableDataProviderComparator comparator; + + private final String taskKey; + + public ExecProvider(final String taskKey, final int paginatorRows) { + super(paginatorRows); + this.taskKey = taskKey; + comparator = new SortableDataProviderComparator<>(this); + } + + public SortableDataProviderComparator getComparator() { + return comparator; + } + + @Override + public Iterator iterator(final long first, final long count) { + final int page = ((int) first / paginatorRows); + List list = restClient.listExecutions(taskKey, (page < 0 ? 0 : page) + 1, paginatorRows); + Collections.sort(list, comparator); + return list.iterator(); + } + + @Override + public long size() { + return restClient.countExecutions(taskKey); + } + + @Override + public IModel model(final ExecTO taskExecution) { + + return new AbstractReadOnlyModel() { + + private static final long serialVersionUID = 7485475149862342421L; + + @Override + public ExecTO getObject() { + return taskExecution; + } + }; + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java index 03d62e7..6d8d6c7 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java @@ -50,7 +50,7 @@ import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.StringResourceModel; public abstract class NotificationTaskDirectoryPanel - extends TaskDirectoryPanel implements ModalPanel { + extends TaskDirectoryPanel implements ModalPanel { private static final long serialVersionUID = 4984337552918213290L; http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java index da36a28..2e83e6e 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java @@ -53,7 +53,7 @@ import org.apache.wicket.model.StringResourceModel; * Tasks page. */ public abstract class PropagationTaskDirectoryPanel - extends TaskDirectoryPanel implements ModalPanel { + extends TaskDirectoryPanel implements ModalPanel { private static final long serialVersionUID = 4984337552918213290L; http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java index 709205a..14fc503 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java @@ -62,7 +62,7 @@ import org.apache.wicket.model.StringResourceModel; * @param Sched task type. */ public abstract class SchedTaskDirectoryPanel - extends TaskDirectoryPanel implements ModalPanel { + extends TaskDirectoryPanel implements ModalPanel { private static final long serialVersionUID = 4984337552918213290L; @@ -70,7 +70,7 @@ public abstract class SchedTaskDirectoryPanel protected T schedTaskTO; - private final StartAtTogglePanel startAt; + private final TaskStartAtTogglePanel startAt; protected SchedTaskDirectoryPanel( final BaseModal baseModal, @@ -92,7 +92,7 @@ public abstract class SchedTaskDirectoryPanel initResultTable(); - startAt = new StartAtTogglePanel(container); + startAt = new TaskStartAtTogglePanel(container); addInnerObject(startAt); } @@ -202,7 +202,8 @@ public abstract class SchedTaskDirectoryPanel @Override public void onClick(final AjaxRequestTarget target, final T ignore) { - startAt.setTaskTO(target, model.getObject()); + startAt.setExecutionDetail( + model.getObject().getKey(), model.getObject().getName(), target); startAt.toggle(target, true); } }, ActionLink.ActionType.EXECUTE, StandardEntitlement.TASK_EXECUTE). http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java index 1f2e693..a85a248 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java @@ -115,8 +115,8 @@ public class SchedTaskWizardBuilder extends AjaxWizardBui } }; - private final IModel> reconciliationFilterBuilderClasses = - new LoadableDetachableModel>() { + private final IModel> reconciliationFilterBuilderClasses + = new LoadableDetachableModel>() { private static final long serialVersionUID = 5275935387613157437L; @@ -147,8 +147,8 @@ public class SchedTaskWizardBuilder extends AjaxWizardBui }; public Profile(final SchedTaskTO taskTO) { - AjaxTextFieldPanel name = - new AjaxTextFieldPanel("name", "name", new PropertyModel(taskTO, "name"), false); + AjaxTextFieldPanel name = new AjaxTextFieldPanel("name", "name", new PropertyModel(taskTO, "name"), + false); name.addRequiredLabel(); name.setEnabled(true); add(name); @@ -158,8 +158,8 @@ public class SchedTaskWizardBuilder extends AjaxWizardBui description.setEnabled(true); add(description); - AjaxCheckBoxPanel active = - new AjaxCheckBoxPanel("active", "active", new PropertyModel(taskTO, "active"), false); + AjaxCheckBoxPanel active = new AjaxCheckBoxPanel("active", "active", new PropertyModel(taskTO, + "active"), false); add(active); AjaxDropDownChoicePanel jobDelegateClassName = new AjaxDropDownChoicePanel<>( http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java deleted file mode 100644 index 912fd5c..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/StartAtTogglePanel.java +++ /dev/null @@ -1,106 +0,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.tasks; - -import java.io.Serializable; -import java.util.Date; -import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.client.console.SyncopeConsoleSession; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.panels.TogglePanel; -import org.apache.syncope.client.console.rest.TaskRestClient; -import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.DateTimeFieldPanel; -import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.SyncopeConstants; -import org.apache.syncope.common.lib.to.SchedTaskTO; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.model.Model; - -public class StartAtTogglePanel extends TogglePanel { - - private static final long serialVersionUID = -3195479265440591519L; - - private SchedTaskTO taskTO; - - public StartAtTogglePanel(final WebMarkupContainer container) { - super("startAt"); - - final Form form = new Form<>("startAtForm"); - addInnerObject(form); - - final Model startAtDateModel = new Model<>(); - - final DateTimeFieldPanel startAtDate = new DateTimeFieldPanel( - "startAtDate", "startAtDate", startAtDateModel, SyncopeConstants.DATE_PATTERNS[3]); - - startAtDate.setReadOnly(true).hideLabel(); - form.add(startAtDate); - - final AjaxCheckBoxPanel startAtCheck = new AjaxCheckBoxPanel( - "startAtCheck", "startAtCheck", new Model<>(false), false); - - form.add(startAtCheck); - - startAtCheck.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - target.add(startAtDate.setModelObject(null).setReadOnly(!startAtCheck.getModelObject())); - } - }); - - form.add(new AjaxSubmitLink("startAt", form) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - protected void onSubmit(final AjaxRequestTarget target, final Form form) { - try { - new TaskRestClient().startExecution(taskTO.getKey(), startAtDateModel.getObject()); - info(getString(Constants.OPERATION_SUCCEEDED)); - toggle(target, false); - target.add(container); - } catch (SyncopeClientException e) { - error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); - LOG.error("While running propagation task {}", taskTO.getKey(), e); - } - SyncopeConsoleSession.get().getNotificationPanel().refresh(target); - } - - @Override - protected void onError(final AjaxRequestTarget target, final Form form) { - SyncopeConsoleSession.get().getNotificationPanel().refresh(target); - } - - }); - } - - public void setTaskTO(final AjaxRequestTarget target, final SchedTaskTO taskTO) { - this.taskTO = taskTO; - setHeader(target, taskTO.getName()); - } - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java index 5484b8b..081d2dd 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java @@ -32,7 +32,6 @@ import org.apache.syncope.common.lib.types.TaskType; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; -import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; @@ -42,7 +41,7 @@ import org.apache.wicket.model.IModel; * @param task type. */ public abstract class TaskDirectoryPanel - extends DirectoryPanel, TaskRestClient> implements ModalPanel { + extends DirectoryPanel, TaskRestClient> implements ModalPanel { private static final long serialVersionUID = 4984337552918213290L; @@ -64,22 +63,7 @@ public abstract class TaskDirectoryPanel resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef); } - @Override - public void onSubmit(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void onError(final AjaxRequestTarget target, final Form form) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public T getItem() { - throw new UnsupportedOperationException("Not supported yet."); - } - - protected abstract void viewTask(T taskTO, AjaxRequestTarget target); + protected abstract void viewTask(final T taskTO, final AjaxRequestTarget target); protected abstract class TasksProvider extends DirectoryDataProvider { http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutionDetails.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutionDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutionDetails.java index e02e6c5..eb2254f 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutionDetails.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutionDetails.java @@ -19,6 +19,7 @@ package org.apache.syncope.client.console.tasks; import org.apache.syncope.client.console.panels.MultilevelPanel; +import org.apache.syncope.client.console.rest.TaskRestClient; import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.AbstractTaskTO; import org.apache.wicket.PageReference; @@ -39,7 +40,7 @@ public class TaskExecutionDetails extends MultilevelPa final MultilevelPanel mlp = new MultilevelPanel("executions"); add(mlp); - mlp.setFirstLevel(new TaskExecutions(baseModal, mlp, taskTO, pageRef) { + mlp.setFirstLevel(new ExecutionsDirectoryPanel(baseModal, mlp, taskTO.getKey(), new TaskRestClient(), pageRef) { private static final long serialVersionUID = 5691719817252887541L; http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java deleted file mode 100644 index 84025e0..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java +++ /dev/null @@ -1,227 +0,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.tasks; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import org.apache.syncope.client.console.SyncopeConsoleSession; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.commons.DirectoryDataProvider; -import org.apache.syncope.client.console.commons.SortableDataProviderComparator; -import org.apache.syncope.client.console.panels.DirectoryPanel; -import org.apache.syncope.client.console.panels.AjaxDataTablePanel; -import org.apache.syncope.client.console.panels.MultilevelPanel; -import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel; -import org.apache.syncope.client.console.rest.TaskRestClient; -import org.apache.syncope.client.console.tasks.TaskExecutions.TaskExecProvider; -import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn; -import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn; -import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn; -import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; -import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; -import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel; -import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.to.AbstractTaskTO; -import org.apache.syncope.common.lib.to.ExecTO; -import org.apache.syncope.common.lib.types.StandardEntitlement; -import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; -import org.apache.wicket.model.AbstractReadOnlyModel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.model.StringResourceModel; - -public abstract class TaskExecutions - extends DirectoryPanel { - - private static final long serialVersionUID = 2039393934721149162L; - - private final BaseModal baseModal; - - private final MultilevelPanel multiLevelPanelRef; - - protected TaskRestClient taskRestClient = new TaskRestClient(); - - private final AbstractTaskTO taskTO; - - public TaskExecutions( - final BaseModal baseModal, - final MultilevelPanel multiLevelPanelRef, - final AbstractTaskTO taskTO, - final PageReference pageRef) { - super(MultilevelPanel.FIRST_LEVEL_ID, pageRef, false); - this.baseModal = baseModal; - this.multiLevelPanelRef = multiLevelPanelRef; - restClient = taskRestClient; - setOutputMarkupId(true); - this.taskTO = taskTO; - initResultTable(); - } - - @Override - protected void resultTableCustomChanges(final AjaxDataTablePanel.Builder resultTableBuilder) { - resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef); - } - - protected abstract void next(final String title, final SecondLevel secondLevel, final AjaxRequestTarget target); - - @Override - protected List> getColumns() { - final List> columns = new ArrayList<>(); - - columns.add(new KeyPropertyColumn(new ResourceModel("key"), "key", "key")); - - columns.add(new DatePropertyColumn(new ResourceModel("start"), "start", "start")); - - columns.add(new DatePropertyColumn(new ResourceModel("end"), "end", "end")); - - columns.add(new PropertyColumn(new ResourceModel("status"), "status", "status")); - - columns.add(new ActionColumn(new ResourceModel("actions")) { - - private static final long serialVersionUID = -3503023501954863131L; - - @Override - public ActionLinksPanel getActions(final String componentId, final IModel model) { - final ExecTO taskExecutionTO = model.getObject(); - - final ActionLinksPanel.Builder panel = ActionLinksPanel.builder(); - - panel. - add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target, final ExecTO ignore) { - next(new StringResourceModel("execution.view", TaskExecutions.this, model).getObject(), - new ExecMessage(model.getObject().getMessage()), target); - } - }, ActionLink.ActionType.VIEW, StandardEntitlement.TASK_READ). - add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target, final ExecTO ignore) { - try { - restClient.deleteExecution(taskExecutionTO.getKey()); - taskTO.getExecutions().remove(taskExecutionTO); - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - target.add(TaskExecutions.this); - SyncopeConsoleSession.get().getNotificationPanel().refresh(target); - } - }, ActionLink.ActionType.DELETE, StandardEntitlement.TASK_DELETE); - - return panel.build(componentId, model.getObject()); - } - - @Override - public ActionLinksPanel getHeader(final String componentId) { - final ActionLinksPanel.Builder panel = ActionLinksPanel.builder(); - - return panel.add(new ActionLink() { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target, final Serializable ignore) { - if (target != null) { - target.add(container); - } - } - }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).build(componentId); - } - }); - - return columns; - } - - @Override - protected TaskExecProvider dataProvider() { - return new TaskExecProvider(taskTO.getKey(), rows); - } - - @Override - protected String paginatorRowsKey() { - return Constants.PREF_TASK_EXECS_PAGINATOR_ROWS; - } - - @Override - protected Collection getBulkActions() { - final List bulkActions = new ArrayList<>(); - bulkActions.add(ActionLink.ActionType.DELETE); - return bulkActions; - } - - protected class TaskExecProvider extends DirectoryDataProvider { - - private static final long serialVersionUID = 8943636537120648961L; - - private final SortableDataProviderComparator comparator; - - private final String taskKey; - - public TaskExecProvider(final String taskKey, final int paginatorRows) { - super(paginatorRows); - this.taskKey = taskKey; - comparator = new SortableDataProviderComparator<>(this); - } - - public SortableDataProviderComparator getComparator() { - return comparator; - } - - @Override - public Iterator iterator(final long first, final long count) { - final int page = ((int) first / paginatorRows); - List list = taskRestClient.listExecutions(taskKey, (page < 0 ? 0 : page) + 1, paginatorRows); - Collections.sort(list, comparator); - return list.iterator(); - } - - @Override - public long size() { - return taskRestClient.countExecutions(taskKey); - } - - @Override - public IModel model(final ExecTO taskExecution) { - - return new AbstractReadOnlyModel() { - - private static final long serialVersionUID = 7485475149862342421L; - - @Override - public ExecTO getObject() { - return taskExecution; - } - }; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java new file mode 100644 index 0000000..5e250e2 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskStartAtTogglePanel.java @@ -0,0 +1,39 @@ +/* + * 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.tasks; + +import org.apache.syncope.client.console.panels.StartAtTogglePanel; +import org.apache.syncope.client.console.rest.ExecutionRestClient; +import org.apache.syncope.client.console.rest.TaskRestClient; +import org.apache.wicket.markup.html.WebMarkupContainer; + +public class TaskStartAtTogglePanel extends StartAtTogglePanel { + + private static final long serialVersionUID = -3195479265440591519L; + + public TaskStartAtTogglePanel(final WebMarkupContainer container) { + super(container); + } + + @Override + protected ExecutionRestClient getRestClient() { + return new TaskRestClient(); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java ---------------------------------------------------------------------- diff --git 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 index 0025f79..bc62538 100644 --- 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 @@ -44,6 +44,7 @@ import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.syncope.client.console.panels.SubmitableModalPanel; public class BaseModal extends Modal { @@ -123,21 +124,21 @@ public class BaseModal extends Modal { return form.getModelObject(); } - public ModalPanel getContent() { + public ModalPanel getContent() { if (content instanceof ModalPanel) { - return (ModalPanel) content; + return (ModalPanel) content; } throw new IllegalStateException(); } - public BaseModal setContent(final ModalPanel component) { + public BaseModal setContent(final ModalPanel component) { if (component instanceof Panel) { return setInternalContent(Panel.class.cast(component)); } throw new IllegalArgumentException("Panel instance is required"); } - public BaseModal setContent(final ModalPanel component, final AjaxRequestTarget target) { + public BaseModal setContent(final ModalPanel component, final AjaxRequestTarget target) { setContent(component); target.add(content); return this; @@ -178,18 +179,22 @@ public class BaseModal extends Modal { } public AjaxSubmitLink addSubmitButton() { + if (!(BaseModal.this.getContent() instanceof SubmitableModalPanel)) { + throw new IllegalStateException(); + } + AjaxSubmitLink submit = new AjaxSubmitLink(SUBMIT, form) { private static final long serialVersionUID = -5783994974426198290L; @Override protected void onSubmit(final AjaxRequestTarget target, final Form form) { - BaseModal.this.getContent().onSubmit(target, form); + SubmitableModalPanel.class.cast(BaseModal.this.getContent()).onSubmit(target, form); } @Override protected void onError(final AjaxRequestTarget target, final Form form) { - BaseModal.this.getContent().onError(target, form); + SubmitableModalPanel.class.cast(BaseModal.this.getContent()).onError(target, form); } }; http://git-wip-us.apache.org/repos/asf/syncope/blob/ae52b12e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java index 730bf9c..0d9c074 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java @@ -47,6 +47,7 @@ public abstract class ActionLink implements Serializable CREATE("create"), EDIT("read"), TYPE_EXTENSIONS("read"), + FO_EDIT("read"), HTML_EDIT("read"), TEXT_EDIT("read"), LAYOUT_EDIT("read"),