http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportModalPage.java deleted file mode 100644 index 0ef7c6a..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportModalPage.java +++ /dev/null @@ -1,640 +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.pages; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.commons.DateFormatROModel; -import org.apache.syncope.client.console.commons.HttpResourceStream; -import org.apache.syncope.client.console.commons.SortableDataProviderComparator; -import org.apache.syncope.client.console.wicket.ajax.form.AbstractAjaxDownloadBehavior; -import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; -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.markup.html.CrontabContainer; -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.wicket.markup.html.form.AjaxTextFieldPanel; -import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.report.AbstractReportletConf; -import org.apache.syncope.common.lib.report.ReportletConf; -import org.apache.syncope.common.lib.to.ReportExecTO; -import org.apache.syncope.common.lib.to.ReportTO; -import org.apache.syncope.common.lib.types.ReportExecExportFormat; -import org.apache.syncope.common.lib.types.ReportExecStatus; -import org.apache.wicket.Component; -import org.apache.wicket.Page; -import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.attributes.AjaxCallListener; -import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; -import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; -import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; -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.extensions.markup.html.repeater.util.SortableDataProvider; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.IChoiceRenderer; -import org.apache.wicket.markup.html.form.ListChoice; -import org.apache.wicket.model.AbstractReadOnlyModel; -import org.apache.wicket.model.CompoundPropertyModel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.util.resource.IResourceStream; -import org.springframework.util.StringUtils; - -public class ReportModalPage extends BaseModalPage { - - private static final long serialVersionUID = -5747628615211127644L; - - private static final String ADD_BUTTON_ID = "addButton"; - - private static final String EDIT_BUTTON_ID = "editButton"; - - private static final String REMOVE_BUTTON_ID = "removeButton"; - - private static final String UP_BUTTON_ID = "upButton"; - - private static final String DOWN_BUTTON_ID = "downButton"; - - private static final int EXEC_EXPORT_WIN_HEIGHT = 100; - - private static final int EXEC_EXPORT_WIN_WIDTH = 400; - - private static final int REPORTLET_CONF_WIN_HEIGHT = 500; - - private static final int REPORTLET_CONF_WIN_WIDTH = 800; - - private final ReportTO reportTO; - - private final Form<ReportTO> form; - - private ReportExecExportFormat exportFormat; - - private long exportExecId; - - private AbstractReportletConf modalReportletConf; - - private String modalReportletConfOldName; - - private ListChoice<AbstractReportletConf> reportlets; - - public ReportModalPage(final ModalWindow window, final ReportTO reportTO, final PageReference callerPageRef) { - super(); - this.reportTO = reportTO; - - form = new Form<ReportTO>(FORM); - form.setModel(new CompoundPropertyModel<ReportTO>(reportTO)); - add(form); - - setupProfile(); - setupExecutions(); - - final CrontabContainer crontab = new CrontabContainer("crontab", new PropertyModel<String>(reportTO, - "cronExpression"), reportTO.getCronExpression()); - form.add(crontab); - - final AjaxButton submit = - new ClearIndicatingAjaxButton(APPLY, new ResourceModel(APPLY), getPageReference()) { - - private static final long serialVersionUID = -958724007591692537L; - - @Override - protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - ReportTO toSubmit = (ReportTO) form.getModelObject(); - toSubmit.setCronExpression(StringUtils.hasText(toSubmit.getCronExpression()) - ? crontab.getCronExpression() - : null); - - try { - if (toSubmit.getKey() > 0) { - reportRestClient.update(toSubmit); - } else { - reportRestClient.create(toSubmit); - } - - ((BasePage) callerPageRef.getPage()).setModalResult(true); - - window.close(target); - } catch (SyncopeClientException e) { - LOG.error("While creating or updating report", e); - error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); - } - } - - @Override - protected void onError(final AjaxRequestTarget target, final Form<?> form) { - feedbackPanel.refresh(target); - } - }; - - if (reportTO.getKey() > 0) { - MetaDataRoleAuthorizationStrategy.authorize(submit, RENDER, - xmlRolesReader.getEntitlement("Reports", "update")); - } else { - MetaDataRoleAuthorizationStrategy.authorize(submit, RENDER, - xmlRolesReader.getEntitlement("Reports", "create")); - } - - form.add(submit); - - final AjaxButton cancel = - new ClearIndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL), getPageReference()) { - - private static final long serialVersionUID = -958724007591692537L; - - @Override - protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); - } - }; - - cancel.setDefaultFormProcessing(false); - form.add(cancel); - } - - private void setupProfile() { - final WebMarkupContainer profile = new WebMarkupContainer("profile"); - profile.setOutputMarkupId(true); - form.add(profile); - - final ModalWindow reportletConfWin = new ModalWindow("reportletConfWin"); - reportletConfWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - reportletConfWin.setCookieName("reportlet-conf-win-modal"); - reportletConfWin.setInitialHeight(REPORTLET_CONF_WIN_HEIGHT); - reportletConfWin.setInitialWidth(REPORTLET_CONF_WIN_WIDTH); - reportletConfWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { - - private static final long serialVersionUID = 8804221891699487139L; - - @Override - public void onClose(final AjaxRequestTarget target) { - int foundIdx = -1; - if (modalReportletConfOldName != null) { - for (int i = 0; i < reportTO.getReportletConfs().size() && foundIdx == -1; i++) { - if (reportTO.getReportletConfs().get(i).getName().equals(modalReportletConfOldName)) { - foundIdx = i; - } - } - } - if (modalReportletConf != null) { - if (foundIdx == -1) { - reportTO.getReportletConfs().add(modalReportletConf); - } else { - reportTO.getReportletConfs().set(foundIdx, modalReportletConf); - } - } - - target.add(reportlets); - } - }); - add(reportletConfWin); - - final Label idLabel = new Label("idLabel", new ResourceModel("key")); - profile.add(idLabel); - - final AjaxTextFieldPanel key = - new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(reportTO, "key")); - key.setEnabled(false); - profile.add(key); - - final Label nameLabel = new Label("nameLabel", new ResourceModel("name")); - profile.add(nameLabel); - - final AjaxTextFieldPanel name = - new AjaxTextFieldPanel("name", getString("name"), new PropertyModel<String>(reportTO, "name")); - profile.add(name); - - final AjaxTextFieldPanel lastExec = new AjaxTextFieldPanel("lastExec", getString("lastExec"), - new DateFormatROModel(new PropertyModel<String>(reportTO, "lastExec"))); - lastExec.setEnabled(false); - profile.add(lastExec); - - final AjaxTextFieldPanel nextExec = new AjaxTextFieldPanel("nextExec", getString("nextExec"), - new DateFormatROModel(new PropertyModel<String>(reportTO, "nextExec"))); - nextExec.setEnabled(false); - profile.add(nextExec); - - reportlets = new ListChoice<AbstractReportletConf>("reportletConfs", new Model<AbstractReportletConf>(), - reportTO.getReportletConfs(), new IChoiceRenderer<ReportletConf>() { - - private static final long serialVersionUID = 1048000918946220007L; - - @Override - public Object getDisplayValue(final ReportletConf object) { - return object.getName(); - } - - @Override - public String getIdValue(final ReportletConf object, final int index) { - return object.getName(); - } - }) { - - private static final long serialVersionUID = 4022366881854379834L; - - @Override - protected CharSequence getDefaultChoice(final String selectedValue) { - return null; - } - }; - - reportlets.setNullValid(true); - profile.add(reportlets); - reportlets.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - target.add(reportlets); - } - }); - - profile.add(new AjaxLink<Void>(ADD_BUTTON_ID) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - reportletConfWin.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - modalReportletConfOldName = null; - modalReportletConf = null; - return new ReportletConfModalPage(null, reportletConfWin, - ReportModalPage.this.getPageReference()); - } - }); - reportletConfWin.show(target); - } - }); - - profile.add(new AjaxLink<Void>(EDIT_BUTTON_ID) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (reportlets.getModelObject() != null) { - reportletConfWin.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - modalReportletConfOldName = reportlets.getModelObject().getName(); - modalReportletConf = null; - return new ReportletConfModalPage(reportlets.getModelObject(), reportletConfWin, - ReportModalPage.this.getPageReference()); - } - }); - reportletConfWin.show(target); - } - } - }); - - profile.add(new AjaxLink<Void>(REMOVE_BUTTON_ID) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - reportTO.getReportletConfs().remove(reportlets.getModelObject()); - reportlets.setModelObject(null); - target.add(reportlets); - } - - @Override - protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) { - if (reportlets.getModelObject() != null) { - - super.updateAjaxAttributes(attributes); - - final AjaxCallListener ajaxCallListener = new AjaxCallListener() { - - private static final long serialVersionUID = 7160235486520935153L; - - @Override - public CharSequence getPrecondition(final Component component) { - return "if (!confirm('" + getString("confirmDelete") + "')) {return false;}"; - } - }; - attributes.getAjaxCallListeners().add(ajaxCallListener); - } - } - }); - - profile.add(new AjaxLink<Void>(UP_BUTTON_ID) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (reportlets.getModelObject() != null) { - moveUp(reportlets.getModelObject()); - target.add(reportlets); - } - } - }); - - profile.add(new AjaxLink<Void>(DOWN_BUTTON_ID) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (reportlets.getModelObject() != null) { - moveDown(reportlets.getModelObject()); - target.add(reportlets); - } - } - }); - } - - private void moveUp(final AbstractReportletConf item) { - final List<AbstractReportletConf> list = reportTO.getReportletConfs(); - int newPosition = list.indexOf(item) - 1; - if (newPosition > -1) { - list.remove(item); - list.add(newPosition, item); - } - } - - private void moveDown(final AbstractReportletConf item) { - final List<AbstractReportletConf> list = reportTO.getReportletConfs(); - int newPosition = list.indexOf(item) + 1; - if (newPosition < list.size()) { - list.remove(item); - list.add(newPosition, item); - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void setupExecutions() { - final WebMarkupContainer executions = new WebMarkupContainer("executionContainer"); - executions.setOutputMarkupId(true); - form.add(executions); - - final ModalWindow reportExecMessageWin = new ModalWindow("reportExecMessageWin"); - reportExecMessageWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - reportExecMessageWin.setCookieName("report-exec-message-win-modal"); - add(reportExecMessageWin); - - final ModalWindow reportExecExportWin = new ModalWindow("reportExecExportWin"); - reportExecExportWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - reportExecExportWin.setCookieName("report-exec-export-win-modal"); - reportExecExportWin.setInitialHeight(EXEC_EXPORT_WIN_HEIGHT); - reportExecExportWin.setInitialWidth(EXEC_EXPORT_WIN_WIDTH); - reportExecExportWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { - - private static final long serialVersionUID = 8804221891699487139L; - - @Override - public void onClose(final AjaxRequestTarget target) { - AjaxExportDownloadBehavior behavior = new AjaxExportDownloadBehavior(ReportModalPage.this.exportFormat, - ReportModalPage.this.exportExecId); - executions.add(behavior); - behavior.initiate(target); - } - }); - add(reportExecExportWin); - - final List<IColumn> columns = new ArrayList<IColumn>(); - columns.add(new PropertyColumn(new ResourceModel("key"), "key", "key")); - columns.add(new DatePropertyColumn(new ResourceModel("startDate"), "startDate", "startDate")); - columns.add(new DatePropertyColumn(new ResourceModel("endDate"), "endDate", "endDate")); - columns.add(new PropertyColumn(new ResourceModel("status"), "status", "status")); - columns.add(new ActionColumn<ReportExecTO, String>(new ResourceModel("actions", "")) { - - private static final long serialVersionUID = 2054811145491901166L; - - @Override - public ActionLinksPanel getActions(final String componentId, final IModel<ReportExecTO> model) { - - final ReportExecTO taskExecutionTO = model.getObject(); - - final ActionLinksPanel panel = new ActionLinksPanel(componentId, model, getPageReference()); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - reportExecMessageWin.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - return new ExecMessageModalPage(model.getObject().getMessage()); - } - }); - reportExecMessageWin.show(target); - } - }, ActionLink.ActionType.EDIT, "Reports", StringUtils.hasText(model.getObject().getMessage())); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - reportExecExportWin.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - ReportModalPage.this.exportExecId = model.getObject().getKey(); - return new ReportExecResultDownloadModalPage(reportExecExportWin, - ReportModalPage.this.getPageReference()); - } - }); - reportExecExportWin.show(target); - } - }, ActionLink.ActionType.EXPORT, "Reports", ReportExecStatus.SUCCESS.name().equals( - model.getObject().getStatus())); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - reportRestClient.deleteExecution(taskExecutionTO.getKey()); - - reportTO.getExecutions().remove(taskExecutionTO); - - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - - feedbackPanel.refresh(target); - target.add(executions); - } - }, ActionLink.ActionType.DELETE, "Reports"); - - return panel; - } - - @Override - public Component getHeader(final String componentId) { - final ActionLinksPanel panel = new ActionLinksPanel(componentId, new Model(), getPageReference()); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (target != null) { - final ReportTO currentReportTO = reportTO.getKey() == 0 - ? reportTO - : reportRestClient.read(reportTO.getKey()); - reportTO.getExecutions().clear(); - reportTO.getExecutions().addAll(currentReportTO.getExecutions()); - final AjaxFallbackDefaultDataTable currentTable = - new AjaxFallbackDefaultDataTable("executionsTable", columns, - new ReportExecutionsProvider(reportTO), 10); - currentTable.setOutputMarkupId(true); - target.add(currentTable); - executions.addOrReplace(currentTable); - } - } - }, ActionLink.ActionType.RELOAD, TASKS, "list"); - - return panel; - } - }); - - final AjaxFallbackDefaultDataTable table = new AjaxFallbackDefaultDataTable("executionsTable", columns, - new ReportExecutionsProvider(reportTO), 10); - executions.add(table); - } - - public void setExportFormat(final ReportExecExportFormat exportFormat) { - this.exportFormat = exportFormat; - } - - public void setModalReportletConf(final AbstractReportletConf modalReportletConf) { - this.modalReportletConf = modalReportletConf; - } - - private static class ReportExecutionsProvider extends SortableDataProvider<ReportExecTO, String> { - - private static final long serialVersionUID = 2118096121691420539L; - - private final SortableDataProviderComparator<ReportExecTO> comparator; - - private final ReportTO reportTO; - - public ReportExecutionsProvider(final ReportTO reportTO) { - super(); - this.reportTO = reportTO; - setSort("startDate", SortOrder.DESCENDING); - comparator = new SortableDataProviderComparator<ReportExecTO>(this); - } - - @Override - public Iterator<ReportExecTO> iterator(final long first, final long count) { - - List<ReportExecTO> list = reportTO.getExecutions(); - - Collections.sort(list, comparator); - - return list.subList((int) first, (int) first + (int) count).iterator(); - } - - @Override - public long size() { - return reportTO.getExecutions().size(); - } - - @Override - public IModel<ReportExecTO> model(final ReportExecTO taskExecution) { - - return new AbstractReadOnlyModel<ReportExecTO>() { - - private static final long serialVersionUID = 7485475149862342421L; - - @Override - public ReportExecTO getObject() { - return taskExecution; - } - }; - } - } - - private class AjaxExportDownloadBehavior extends AbstractAjaxDownloadBehavior { - - private static final long serialVersionUID = 3109256773218160485L; - - private final ReportExecExportFormat exportFormat; - - private final long exportExecId; - - private HttpResourceStream stream; - - public AjaxExportDownloadBehavior(final ReportExecExportFormat exportFormat, final long exportExecId) { - super(); - this.exportFormat = exportFormat; - this.exportExecId = exportExecId; - } - - private void createResourceStream() { - if (stream == null) { - stream = new HttpResourceStream(reportRestClient.exportExecutionResult(exportExecId, exportFormat)); - } - } - - @Override - protected String getFileName() { - createResourceStream(); - return stream == null - ? null - : stream.getFilename(); - } - - @Override - protected IResourceStream getResourceStream() { - createResourceStream(); - return stream; - } - } -}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportletConfModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportletConfModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportletConfModalPage.java deleted file mode 100644 index 36560b0..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ReportletConfModalPage.java +++ /dev/null @@ -1,362 +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.pages; - -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.panels.GroupSearchPanel; -import org.apache.syncope.client.console.panels.UserSearchPanel; -import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; -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.AjaxPalettePanel; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.CheckBoxMultipleChoiceFieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.DateTimeFieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.SpinnerFieldPanel; -import org.apache.syncope.common.lib.SyncopeConstants; -import org.apache.syncope.common.lib.annotation.FormAttributeField; -import org.apache.syncope.common.lib.report.AbstractReportletConf; -import org.apache.syncope.common.lib.types.AttributableType; -import org.apache.wicket.Component; -import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; -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.DropDownChoice; -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.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.model.util.ListModel; -import org.apache.wicket.util.visit.IVisit; -import org.apache.wicket.util.visit.IVisitor; -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.PropertyAccessorFactory; -import org.springframework.util.ClassUtils; - -public class ReportletConfModalPage extends BaseModalPage { - - private static final long serialVersionUID = 3910027601200382958L; - - private static final String[] EXCLUDE_PROPERTIES = - new String[] { "serialVersionUID", "class", "name", "reportletClassName" }; - - private AbstractReportletConf reportletConf; - - private final AjaxTextFieldPanel name; - - private WebMarkupContainer propertiesContainer; - - private ListView<String> propView; - - public ReportletConfModalPage(final AbstractReportletConf reportletConf, final ModalWindow window, - final PageReference pageRef) { - - this.reportletConf = reportletConf; - - final Form form = new Form(FORM); - add(form); - - propertiesContainer = new WebMarkupContainer("container"); - propertiesContainer.setOutputMarkupId(true); - form.add(propertiesContainer); - - name = new AjaxTextFieldPanel("name", "name", this.reportletConf == null - ? new Model<String>() - : new PropertyModel<String>(this.reportletConf, "name")); - name.setOutputMarkupId(true); - name.addRequiredLabel(); - form.add(name); - - final AjaxDropDownChoicePanel<String> reportletClass = new AjaxDropDownChoicePanel<String>("reportletClass", - "reportletClass", new IModel<String>() { - - private static final long serialVersionUID = -2316468110411802130L; - - @Override - public String getObject() { - return ReportletConfModalPage.this.reportletConf == null - ? null - : ReportletConfModalPage.this.reportletConf.getClass().getName(); - } - - @Override - public void setObject(final String object) { - try { - Class<?> reportletClass = Class.forName(object); - ReportletConfModalPage.this.reportletConf = (AbstractReportletConf) reportletClass. - newInstance(); - propertiesContainer.replace(buildPropView()); - } catch (Exception e) { - LOG.error("Cannot find or initialize {}", object, e); - } - } - - @Override - public void detach() { - } - }); - reportletClass.setStyleSheet("long_dynamicsize"); - reportletClass.setChoices(reportRestClient.getReportletConfClasses()); - ((DropDownChoice) reportletClass.getField()).setNullValid(true); - reportletClass.addRequiredLabel(); - reportletClass.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = 5538299138211283825L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - ((DropDownChoice) reportletClass.getField()).setNullValid(false); - target.add(reportletClass.getField()); - target.add(propertiesContainer); - } - }); - form.add(reportletClass); - - propertiesContainer.add(buildPropView()); - - final AjaxButton submit = new AjaxButton(APPLY, new ResourceModel(APPLY)) { - - private static final long serialVersionUID = -958724007591692537L; - - @Override - protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - final BeanWrapper wrapper = PropertyAccessorFactory. - forBeanPropertyAccess(ReportletConfModalPage.this.reportletConf); - wrapper.setPropertyValue("name", name.getField().getInput()); - - // Iterate over properties in order to find UserSearchPanel instances and manually update - // this.reportletConf with select search criteria - this is needed because UserSearchPanel - // does not comply with usual Wicket model paradigm. - ReportletConfModalPage.this.propView.visitChildren(new IVisitor<Component, Void>() { - - @Override - public void component(final Component component, final IVisit<Void> ivisit) { - if (component instanceof UserSearchPanel) { - // using component.getDefaultModelObjectAsString() to fetch field name (set above) - wrapper.setPropertyValue(component.getDefaultModelObjectAsString(), - ((UserSearchPanel) component).buildFIQL()); - } - } - }); - - ((ReportModalPage) pageRef.getPage()).setModalReportletConf(ReportletConfModalPage.this.reportletConf); - window.close(target); - } - - @Override - protected void onError(final AjaxRequestTarget target, final Form<?> form) { - feedbackPanel.refresh(target); - } - }; - form.add(submit); - - final AjaxButton cancel = new ClearIndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL), pageRef) { - - private static final long serialVersionUID = -958724007591692537L; - - @Override - protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); - } - }; - - cancel.setDefaultFormProcessing(false); - form.add(cancel); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private FieldPanel buildSinglePanel(final Class<?> type, final String fieldName, final String id) { - FieldPanel result = null; - PropertyModel model = new PropertyModel(ReportletConfModalPage.this.reportletConf, fieldName); - if (ClassUtils.isAssignable(Boolean.class, type)) { - result = new AjaxCheckBoxPanel(id, fieldName, model); - } else if (ClassUtils.isAssignable(Number.class, type)) { - result = new SpinnerFieldPanel<Number>(id, fieldName, - (Class<Number>) ClassUtils.resolvePrimitiveIfNecessary(type), model, null, null); - } else if (Date.class.equals(type)) { - result = new DateTimeFieldPanel(id, fieldName, model, SyncopeConstants.DEFAULT_DATE_PATTERN); - } else if (type.isEnum()) { - result = new AjaxDropDownChoicePanel(id, fieldName, model).setChoices( - Arrays.asList(type.getEnumConstants())); - } - - // treat as String if nothing matched above - if (result == null) { - result = new AjaxTextFieldPanel(id, fieldName, model); - } - - return result; - } - - private ListView<String> buildPropView() { - LoadableDetachableModel<List<String>> propViewModel = new LoadableDetachableModel<List<String>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<String> load() { - List<String> result = new ArrayList<String>(); - if (ReportletConfModalPage.this.reportletConf != null) { - for (Field field : ReportletConfModalPage.this.reportletConf.getClass().getDeclaredFields()) { - if (!ArrayUtils.contains(EXCLUDE_PROPERTIES, field.getName())) { - result.add(field.getName()); - } - } - } - - return result; - } - }; - - propView = new ListView<String>("propView", propViewModel) { - - private static final long serialVersionUID = 9101744072914090143L; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - protected void populateItem(final ListItem<String> item) { - final String fieldName = item.getModelObject(); - - Label label = new Label("key", fieldName); - item.add(label); - - Field field = null; - try { - field = ReportletConfModalPage.this.reportletConf.getClass().getDeclaredField(fieldName); - } catch (Exception e) { - LOG.error("Could not find field {} in class {}", - fieldName, ReportletConfModalPage.this.reportletConf.getClass(), e); - } - if (field == null) { - return; - } - - FormAttributeField annotation = field.getAnnotation(FormAttributeField.class); - - BeanWrapper wrapper = PropertyAccessorFactory. - forBeanPropertyAccess(ReportletConfModalPage.this.reportletConf); - - Panel panel; - - if (String.class.equals(field.getType()) && annotation != null && annotation.userSearch()) { - panel = new UserSearchPanel.Builder("value"). - fiql((String) wrapper.getPropertyValue(fieldName)).required(false).build(); - // This is needed in order to manually update this.reportletConf with search panel selections - panel.setDefaultModel(new Model<String>(fieldName)); - } else if (String.class.equals(field.getType()) && annotation != null && annotation.groupSearch()) { - panel = new GroupSearchPanel.Builder("value"). - fiql((String) wrapper.getPropertyValue(fieldName)).required(false).build(); - // This is needed in order to manually update this.reportletConf with search panel selections - panel.setDefaultModel(new Model<String>(fieldName)); - } else if (List.class.equals(field.getType())) { - Class<?> listItemType = String.class; - if (field.getGenericType() instanceof ParameterizedType) { - listItemType = - (Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; - } - - if (listItemType.equals(String.class) && annotation != null) { - List<String> choices; - switch (annotation.schema()) { - case UserPlainSchema: - choices = schemaRestClient.getPlainSchemaNames(AttributableType.USER); - break; - - case UserDerivedSchema: - choices = schemaRestClient.getDerSchemaNames(AttributableType.USER); - break; - - case UserVirtualSchema: - choices = schemaRestClient.getVirSchemaNames(AttributableType.USER); - break; - - case GroupPlainSchema: - choices = schemaRestClient.getPlainSchemaNames(AttributableType.GROUP); - break; - - case GroupDerivedSchema: - choices = schemaRestClient.getDerSchemaNames(AttributableType.GROUP); - break; - - case GroupVirtualSchema: - choices = schemaRestClient.getVirSchemaNames(AttributableType.GROUP); - break; - - case MembershipPlainSchema: - choices = schemaRestClient.getPlainSchemaNames(AttributableType.MEMBERSHIP); - break; - - case MembershipDerivedSchema: - choices = schemaRestClient.getDerSchemaNames(AttributableType.MEMBERSHIP); - break; - - case MembershipVirtualSchema: - choices = schemaRestClient.getVirSchemaNames(AttributableType.MEMBERSHIP); - break; - - default: - choices = Collections.emptyList(); - } - - panel = new AjaxPalettePanel("value", new PropertyModel<List<String>>( - ReportletConfModalPage.this.reportletConf, fieldName), new ListModel<String>(choices), - true); - } else if (listItemType.isEnum()) { - panel = new CheckBoxMultipleChoiceFieldPanel("value", new PropertyModel( - ReportletConfModalPage.this.reportletConf, fieldName), - new ListModel(Arrays.asList(listItemType.getEnumConstants()))); - } else { - if (((List) wrapper.getPropertyValue(fieldName)).isEmpty()) { - ((List) wrapper.getPropertyValue(fieldName)).add(null); - } - - panel = new MultiFieldPanel("value", new PropertyModel<List>( - ReportletConfModalPage.this.reportletConf, fieldName), - buildSinglePanel(field.getType(), fieldName, "panel")); - } - } else { - panel = buildSinglePanel(field.getType(), fieldName, "value"); - } - - item.add(panel); - } - }; - - return propView; - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java deleted file mode 100644 index e484701..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java +++ /dev/null @@ -1,412 +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.pages; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.commons.PreferenceManager; -import org.apache.syncope.client.console.commons.SortableDataProviderComparator; -import org.apache.syncope.client.console.panels.LoggerCategoryPanel; -import org.apache.syncope.client.console.panels.SelectedEventsPanel; -import org.apache.syncope.client.console.rest.LoggerRestClient; -import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink; -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.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.EventCategoryTO; -import org.apache.syncope.common.lib.to.ReportTO; -import org.apache.syncope.common.lib.types.AuditElements.Result; -import org.apache.syncope.common.lib.types.AuditLoggerName; -import org.apache.wicket.Component; -import org.apache.wicket.Page; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; -import org.apache.wicket.event.IEvent; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; -import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; -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.extensions.markup.html.repeater.util.SortableDataProvider; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.model.AbstractReadOnlyModel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.model.util.ListModel; -import org.apache.wicket.request.mapper.parameter.PageParameters; -import org.apache.wicket.spring.injection.annot.SpringBean; -import org.springframework.util.CollectionUtils; - -/** - * Auditing and Reporting. - */ -public class Reports extends BasePage { - - private static final long serialVersionUID = -2071214196989178694L; - - private static final int WIN_HEIGHT = 500; - - private static final int WIN_WIDTH = 700; - - @SpringBean - private LoggerRestClient loggerRestClient; - - @SpringBean - private PreferenceManager prefMan; - - private WebMarkupContainer reportContainer; - - private WebMarkupContainer auditContainer; - - private int paginatorRows; - - private final ModalWindow window; - - public Reports(final PageParameters parameters) { - super(parameters); - - window = new ModalWindow("reportWin"); - window.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - window.setInitialHeight(WIN_HEIGHT); - window.setInitialWidth(WIN_WIDTH); - window.setCookieName("view-report-win"); - add(window); - - setupReport(); - setupAudit(); - } - - private void setupReport() { - reportContainer = new WebMarkupContainer("reportContainer"); - setWindowClosedCallback(window, reportContainer); - - MetaDataRoleAuthorizationStrategy.authorize(reportContainer, RENDER, - xmlRolesReader.getEntitlement("Reports", "list")); - - paginatorRows = prefMan.getPaginatorRows(getRequest(), Constants.PREF_REPORT_PAGINATOR_ROWS); - - List<IColumn<ReportTO, String>> columns = new ArrayList<>(); - columns.add(new PropertyColumn<ReportTO, String>(new ResourceModel("key"), "key", "key")); - columns.add(new PropertyColumn<ReportTO, String>(new ResourceModel("name"), "name", "name")); - columns.add(new DatePropertyColumn<ReportTO>(new ResourceModel("lastExec"), "lastExec", "lastExec")); - columns.add(new DatePropertyColumn<ReportTO>(new ResourceModel("nextExec"), "nextExec", "nextExec")); - columns.add(new DatePropertyColumn<ReportTO>(new ResourceModel("startDate"), "startDate", "startDate")); - columns.add(new DatePropertyColumn<ReportTO>(new ResourceModel("endDate"), "endDate", "endDate")); - columns.add(new PropertyColumn<ReportTO, String>( - new ResourceModel("latestExecStatus"), "latestExecStatus", "latestExecStatus")); - columns.add(new ActionColumn<ReportTO, String>(new ResourceModel("actions", "")) { - - private static final long serialVersionUID = 2054811145491901166L; - - @Override - public ActionLinksPanel getActions(final String componentId, final IModel<ReportTO> model) { - - final ReportTO reportTO = model.getObject(); - - final ActionLinksPanel panel = new ActionLinksPanel(componentId, model, getPageReference()); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - - window.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - return new ReportModalPage(window, reportTO, Reports.this.getPageReference()); - } - }); - - window.show(target); - } - }, ActionLink.ActionType.EDIT, "Reports"); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - reportRestClient.startExecution(reportTO.getKey()); - getSession().info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - - feedbackPanel.refresh(target); - target.add(reportContainer); - } - }, ActionLink.ActionType.EXECUTE, "Reports"); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - reportRestClient.delete(reportTO.getKey()); - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - target.add(reportContainer); - feedbackPanel.refresh(target); - } - }, ActionLink.ActionType.DELETE, "Reports"); - - return panel; - } - - @Override - public Component getHeader(final String componentId) { - final ActionLinksPanel panel = new ActionLinksPanel(componentId, new Model(), getPageReference()); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (target != null) { - target.add(reportContainer); - } - } - }, ActionLink.ActionType.RELOAD, TASKS, "list"); - - return panel; - } - }); - - final AjaxFallbackDefaultDataTable<ReportTO, String> reportTable = - new AjaxFallbackDefaultDataTable<>("reportTable", columns, new ReportProvider(), paginatorRows); - - reportContainer.add(reportTable); - reportContainer.setOutputMarkupId(true); - - add(reportContainer); - - @SuppressWarnings("rawtypes") - Form paginatorForm = new Form("paginatorForm"); - - MetaDataRoleAuthorizationStrategy.authorize(paginatorForm, RENDER, - xmlRolesReader.getEntitlement("Reports", "list")); - - @SuppressWarnings({ "unchecked", "rawtypes" }) - final DropDownChoice rowsChooser = new DropDownChoice("rowsChooser", new PropertyModel(this, "paginatorRows"), - prefMan.getPaginatorChoices()); - - rowsChooser.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - prefMan.set(getRequest(), getResponse(), Constants.PREF_REPORT_PAGINATOR_ROWS, - String.valueOf(paginatorRows)); - reportTable.setItemsPerPage(paginatorRows); - - target.add(reportContainer); - } - }); - - paginatorForm.add(rowsChooser); - add(paginatorForm); - - AjaxLink<Void> createLink = new ClearIndicatingAjaxLink<Void>("createLink", getPageReference()) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - protected void onClickInternal(final AjaxRequestTarget target) { - window.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - return new ReportModalPage(window, new ReportTO(), Reports.this.getPageReference()); - } - }); - - window.show(target); - } - }; - - MetaDataRoleAuthorizationStrategy.authorize(createLink, RENDER, xmlRolesReader.getEntitlement("Reports", - "create")); - - add(createLink); - } - - @SuppressWarnings("rawtypes") - private void setupAudit() { - auditContainer = new WebMarkupContainer("auditContainer"); - auditContainer.setOutputMarkupId(true); - add(auditContainer); - - MetaDataRoleAuthorizationStrategy.authorize( - auditContainer, RENDER, xmlRolesReader.getEntitlement("Audit", "list")); - - final Form form = new Form("auditForm"); - auditContainer.add(form); - - final List<String> events = new ArrayList<>(); - - final List<AuditLoggerName> audits = loggerRestClient.listAudits(); - for (AuditLoggerName audit : audits) { - events.add(AuditLoggerName.buildEvent( - audit.getType(), - audit.getCategory(), - audit.getSubcategory(), - audit.getEvent(), - audit.getResult())); - } - - final ListModel<String> model = new ListModel<>(new ArrayList<>(events)); - - form.add(new LoggerCategoryPanel( - "events", loggerRestClient.listEvents(), model, getPageReference(), "Reports") { - - private static final long serialVersionUID = 6113164334533550277L; - - @Override - protected String[] getListRoles() { - return new String[] { - xmlRolesReader.getEntitlement("Audit", "list") - }; - } - - @Override - protected String[] getChangeRoles() { - return new String[] { - xmlRolesReader.getEntitlement("Audit", "enable"), - xmlRolesReader.getEntitlement("Audit", "disable") - }; - } - - @Override - public void onEventAction(final IEvent<?> event) { - if (event.getPayload() instanceof SelectedEventsPanel.EventSelectionChanged) { - - final SelectedEventsPanel.EventSelectionChanged eventSelectionChanged = - (SelectedEventsPanel.EventSelectionChanged) event.getPayload(); - - for (String toBeRemoved : eventSelectionChanged.getToBeRemoved()) { - if (events.contains(toBeRemoved)) { - Pair<EventCategoryTO, Result> eventCategory = - AuditLoggerName.parseEventCategory(toBeRemoved); - - final AuditLoggerName auditLoggerName = new AuditLoggerName( - eventCategory.getKey().getType(), - eventCategory.getKey().getCategory(), - eventCategory.getKey().getSubcategory(), - CollectionUtils.isEmpty(eventCategory.getKey().getEvents()) - ? null : eventCategory.getKey().getEvents().iterator().next(), - eventCategory.getValue()); - - loggerRestClient.disableAudit(auditLoggerName); - events.remove(toBeRemoved); - } - } - - for (String toBeAdded : eventSelectionChanged.getToBeAdded()) { - if (!events.contains(toBeAdded)) { - Pair<EventCategoryTO, Result> eventCategory = - AuditLoggerName.parseEventCategory(toBeAdded); - - final AuditLoggerName auditLoggerName = new AuditLoggerName( - eventCategory.getKey().getType(), - eventCategory.getKey().getCategory(), - eventCategory.getKey().getSubcategory(), - CollectionUtils.isEmpty(eventCategory.getKey().getEvents()) - ? null : eventCategory.getKey().getEvents().iterator().next(), - eventCategory.getValue()); - - loggerRestClient.enableAudit(auditLoggerName); - events.add(toBeAdded); - } - } - } - } - }); - } - - private class ReportProvider extends SortableDataProvider<ReportTO, String> { - - private static final long serialVersionUID = -2311716167583335852L; - - private final SortableDataProviderComparator<ReportTO> comparator; - - public ReportProvider() { - super(); - - //Default sorting - setSort("key", SortOrder.ASCENDING); - comparator = new SortableDataProviderComparator<>(this); - } - - @Override - public Iterator<ReportTO> iterator(final long first, final long count) { - final int page = ((int) first / paginatorRows); - - final List<ReportTO> list = - reportRestClient.list((page < 0 ? 0 : page) + 1, paginatorRows, getSort()); - Collections.sort(list, comparator); - return list.iterator(); - } - - @Override - public long size() { - return reportRestClient.count(); - } - - @Override - public IModel<ReportTO> model(final ReportTO configuration) { - - return new AbstractReadOnlyModel<ReportTO>() { - - private static final long serialVersionUID = 4921104837546595602L; - - @Override - public ReportTO getObject() { - return configuration; - } - }; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/pages/RequestPasswordResetModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/RequestPasswordResetModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/RequestPasswordResetModalPage.java deleted file mode 100644 index d8b762f..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/RequestPasswordResetModalPage.java +++ /dev/null @@ -1,153 +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.pages; - -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.commons.Mode; -import org.apache.syncope.client.console.rest.SecurityQuestionRestClient; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; -import org.apache.syncope.common.lib.to.SecurityQuestionTO; -import org.apache.syncope.common.lib.to.UserTO; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -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.Form; -import org.apache.wicket.markup.html.form.StatelessForm; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.spring.injection.annot.SpringBean; - -public class RequestPasswordResetModalPage extends BaseModalPage { - - private static final long serialVersionUID = -8419445804421211904L; - - @SpringBean - private SecurityQuestionRestClient securityQuestionRestClient; - - public RequestPasswordResetModalPage(final ModalWindow window) { - super(); - setOutputMarkupId(true); - - final boolean handleSecurityQuestion = userSelfRestClient.isPwdResetRequiringSecurityQuestions(); - - final StatelessForm<?> form = new StatelessForm<Object>(FORM); - form.setOutputMarkupId(true); - - final Label securityQuestionLabel = new Label("securityQuestionLabel", getString("securityQuestion")); - securityQuestionLabel.setOutputMarkupPlaceholderTag(true); - securityQuestionLabel.setVisible(handleSecurityQuestion); - form.add(securityQuestionLabel); - final AjaxTextFieldPanel securityQuestion = - new AjaxTextFieldPanel("securityQuestion", "securityQuestion", new Model<String>()); - securityQuestion.setReadOnly(true); - securityQuestion.setRequired(true); - securityQuestion.getField().setOutputMarkupId(true); - securityQuestion.setOutputMarkupPlaceholderTag(true); - securityQuestion.setVisible(handleSecurityQuestion); - form.add(securityQuestion); - - final AjaxTextFieldPanel username = - new AjaxTextFieldPanel("username", "username", new Model<String>()); - username.setRequired(true); - username.getField().setOutputMarkupId(true); - if (handleSecurityQuestion) { - username.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - getFeedbackMessages().clear(); - target.add(feedbackPanel); - try { - SecurityQuestionTO read = securityQuestionRestClient.readByUser(username.getModelObject()); - securityQuestion.setModelObject(read.getContent()); - } catch (Exception e) { - LOG.error("While fetching security question for {}", username.getModelObject(), e); - error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); - securityQuestion.setModelObject(null); - } finally { - target.add(securityQuestion); - } - } - }); - } - form.add(username); - - final Label securityAnswerLabel = new Label("securityAnswerLabel", getString("securityAnswer")); - securityAnswerLabel.setOutputMarkupPlaceholderTag(true); - securityAnswerLabel.setVisible(handleSecurityQuestion); - form.add(securityAnswerLabel); - final AjaxTextFieldPanel securityAnswer = - new AjaxTextFieldPanel("securityAnswer", "securityAnswer", new Model<String>()); - securityAnswer.setRequired(handleSecurityQuestion); - securityAnswer.setOutputMarkupPlaceholderTag(true); - securityAnswer.setVisible(handleSecurityQuestion); - form.add(securityAnswer); - - 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.requestPasswordReset(username.getModelObject(), securityAnswer.getModelObject()); - - setResponsePage(new ResultStatusModalPage.Builder(window, new UserTO()). - mode(Mode.SELF).build()); - } catch (Exception e) { - LOG.error("While requesting password reset for {}", username.getModelObject(), 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) { - // do nothing - } - }; - cancel.setDefaultFormProcessing(false); - form.add(cancel); - - add(form); - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java deleted file mode 100644 index 0becc1a..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java +++ /dev/null @@ -1,214 +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.pages; - -import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.panels.AnnotatedBeanPanel; -import org.apache.syncope.client.console.panels.ResourceConnConfPanel; -import org.apache.syncope.client.console.panels.ResourceDetailsPanel; -import org.apache.syncope.client.console.panels.ResourceMappingPanel; -import org.apache.syncope.client.console.panels.ResourceSecurityPanel; -import org.apache.syncope.common.lib.to.MappingItemTO; -import org.apache.syncope.common.lib.to.ResourceTO; -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.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.Model; -import org.apache.wicket.model.ResourceModel; - -/** - * Modal window with Resource form. - */ -public class ResourceModalPage extends BaseModalPage { - - private static final long serialVersionUID = 1734415311027284221L; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - public ResourceModalPage(final PageReference pageRef, final ModalWindow window, final ResourceTO resourceTO, - final boolean createFlag) { - - super(); - - this.add(new Label("new", StringUtils.isBlank(resourceTO.getKey()) - ? new ResourceModel("new") - : new Model(StringUtils.EMPTY))); - this.add(new Label("name", StringUtils.isBlank(resourceTO.getKey()) - ? StringUtils.EMPTY - : resourceTO.getKey())); - - final Form<ResourceTO> form = new Form<>(FORM); - form.setModel(new CompoundPropertyModel<>(resourceTO)); - - //-------------------------------- - // Resource details panel - //-------------------------------- - form.add(new ResourceDetailsPanel("details", resourceTO, - resourceRestClient.getPropagationActionsClasses(), createFlag)); - - form.add(new AnnotatedBeanPanel("systeminformation", resourceTO)); - //-------------------------------- - - //-------------------------------- - // Resource mapping panels - //-------------------------------- - form.add(new ResourceMappingPanel("umapping", resourceTO, AttributableType.USER)); - form.add(new ResourceMappingPanel("gmapping", resourceTO, AttributableType.GROUP)); - //-------------------------------- - - //-------------------------------- - // Resource connector configuration panel - //-------------------------------- - ResourceConnConfPanel resourceConnConfPanel = new ResourceConnConfPanel("connconf", resourceTO, createFlag); - MetaDataRoleAuthorizationStrategy.authorize( - resourceConnConfPanel, ENABLE, xmlRolesReader.getEntitlement("Connectors", "read")); - form.add(resourceConnConfPanel); - //-------------------------------- - - //-------------------------------- - // Resource security panel - //-------------------------------- - form.add(new ResourceSecurityPanel("security", resourceTO)); - //-------------------------------- - - final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT, SUBMIT)) { - - private static final long serialVersionUID = -958724007591692537L; - - @Override - protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - final ResourceTO resourceTO = (ResourceTO) form.getDefaultModelObject(); - - boolean accountIdError = false; - - if (resourceTO.getUmapping() == null || resourceTO.getUmapping().getItems().isEmpty()) { - resourceTO.setUmapping(null); - } else { - int uAccountIdCount = 0; - for (MappingItemTO item : resourceTO.getUmapping().getItems()) { - if (item.isAccountid()) { - uAccountIdCount++; - } - } - accountIdError = uAccountIdCount != 1; - } - - if (resourceTO.getGmapping() == null || resourceTO.getGmapping().getItems().isEmpty()) { - resourceTO.setGmapping(null); - } else { - int rAccountIdCount = 0; - for (MappingItemTO item : resourceTO.getGmapping().getItems()) { - if (item.isAccountid()) { - rAccountIdCount++; - } - } - accountIdError |= rAccountIdCount != 1; - } - - if (accountIdError) { - error(getString("accountIdValidation")); - feedbackPanel.refresh(target); - } else { - try { - if (createFlag) { - resourceRestClient.create(resourceTO); - } else { - resourceRestClient.update(resourceTO); - } - - if (pageRef != null && pageRef.getPage() instanceof AbstractBasePage) { - ((AbstractBasePage) pageRef.getPage()).setModalResult(true); - } - window.close(target); - } catch (Exception e) { - LOG.error("Failure managing resource {}", resourceTO, e); - error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); - } - } - } - - @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); - - MetaDataRoleAuthorizationStrategy.authorize( - submit, ENABLE, xmlRolesReader.getEntitlement("Resources", createFlag ? "create" : "update")); - } - - /** - * Generic resource event. - */ - public static class ResourceEvent { - - /** - * Request target. - */ - private final AjaxRequestTarget target; - - /** - * Constructor. - * - * @param target request target. - */ - public ResourceEvent(final AjaxRequestTarget target) { - this.target = target; - } - - /** - * Target getter. - * - * @return request target. - */ - public AjaxRequestTarget getTarget() { - return target; - } - } -}
