http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/PoliciesPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PoliciesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PoliciesPanel.java deleted file mode 100644 index 4d66eda..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PoliciesPanel.java +++ /dev/null @@ -1,343 +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.panels; - -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.PreferenceManager; -import org.apache.syncope.client.console.commons.SortableDataProviderComparator; -import org.apache.syncope.client.console.commons.XMLRolesReader; -import org.apache.syncope.client.console.pages.BasePage; -import org.apache.syncope.client.console.pages.PolicyModalPage; -import org.apache.syncope.client.console.rest.PolicyRestClient; -import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink; -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.AbstractPolicyTO; -import org.apache.syncope.common.lib.to.AccountPolicyTO; -import org.apache.syncope.common.lib.to.PasswordPolicyTO; -import org.apache.syncope.common.lib.to.SyncPolicyTO; -import org.apache.syncope.common.lib.types.PolicyType; -import org.apache.wicket.Page; -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.AjaxLink; -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.grid.ICellPopulator; -import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; -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.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.DropDownChoice; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.model.CompoundPropertyModel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.request.http.WebResponse; -import org.apache.wicket.spring.injection.annot.SpringBean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PoliciesPanel extends Panel { - - /** - * Logger. - */ - private static final Logger LOG = LoggerFactory.getLogger(PoliciesPanel.class); - - private static final int MODAL_WIN_HEIGHT = 400; - - private static final int MODAL_WIN_WIDTH = 1000; - - private static final long serialVersionUID = -6804066913177804275L; - - @SpringBean - private PolicyRestClient policyRestClient; - - @SpringBean - protected XMLRolesReader xmlRolesReader; - - @SpringBean - private PreferenceManager prefMan; - - private final PageReference pageRef; - - private final int paginatorRows = prefMan.getPaginatorRows(getWebRequest(), Constants.PREF_POLICY_PAGINATOR_ROWS); - - protected boolean modalResult = false; - - private final PolicyType policyType; - - public PoliciesPanel(final String id, final PageReference pageRef, final PolicyType policyType) { - super(id); - this.pageRef = pageRef; - this.policyType = policyType; - - // Modal window for editing user attributes - final ModalWindow mwindow = new ModalWindow("editModalWin"); - mwindow.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - mwindow.setInitialHeight(MODAL_WIN_HEIGHT); - mwindow.setInitialWidth(MODAL_WIN_WIDTH); - mwindow.setCookieName("policy-modal"); - add(mwindow); - - // Container for user list - final WebMarkupContainer container = new WebMarkupContainer("container"); - container.setOutputMarkupId(true); - add(container); - - setWindowClosedCallback(mwindow, container); - - final List<IColumn<AbstractPolicyTO, String>> columns = new ArrayList<>(); - - columns.add(new PropertyColumn<AbstractPolicyTO, String>(new ResourceModel("key"), "key", "key")); - - columns.add(new PropertyColumn<AbstractPolicyTO, String>( - new ResourceModel("description"), "description", "description")); - - columns.add(new AbstractColumn<AbstractPolicyTO, String>(new ResourceModel("type")) { - - private static final long serialVersionUID = 8263694778917279290L; - - @Override - public void populateItem(final Item<ICellPopulator<AbstractPolicyTO>> cellItem, final String componentId, - final IModel<AbstractPolicyTO> model) { - - cellItem.add(new Label(componentId, getString(model.getObject().getType().name()))); - } - }); - - columns.add(new AbstractColumn<AbstractPolicyTO, String>(new ResourceModel("actions", "")) { - - private static final long serialVersionUID = 2054811145491901166L; - - @Override - public String getCssClass() { - return "action"; - } - - @Override - public void populateItem(final Item<ICellPopulator<AbstractPolicyTO>> cellItem, final String componentId, - final IModel<AbstractPolicyTO> model) { - - final AbstractPolicyTO policyTO = model.getObject(); - - final ActionLinksPanel panel = new ActionLinksPanel(componentId, model, pageRef); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - - mwindow.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public Page createPage() { - return new PolicyModalPage(pageRef, mwindow, policyTO); - } - }); - - mwindow.show(target); - } - }, ActionLink.ActionType.EDIT, "Policies"); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - policyRestClient.delete(policyTO.getKey(), policyTO.getClass()); - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException e) { - error(getString(Constants.OPERATION_ERROR)); - - LOG.error("While deleting policy {}({})", - policyTO.getKey(), policyTO.getDescription(), e); - } - - target.add(container); - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - } - }, ActionLink.ActionType.DELETE, "Policies"); - - cellItem.add(panel); - } - }); - - @SuppressWarnings({ "unchecked", "rawtypes" }) - final AjaxFallbackDefaultDataTable table = new AjaxFallbackDefaultDataTable("datatable", columns, - new PolicyDataProvider(), paginatorRows); - - container.add(table); - - final AjaxLink<Void> createButton = new ClearIndicatingAjaxLink<Void>("createLink", pageRef) { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - protected void onClickInternal(final AjaxRequestTarget target) { - mwindow.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public Page createPage() { - return new PolicyModalPage(pageRef, mwindow, getPolicyTOInstance(policyType)); - } - }); - - mwindow.show(target); - } - }; - - add(createButton); - - MetaDataRoleAuthorizationStrategy.authorize( - createButton, ENABLE, xmlRolesReader.getEntitlement("Policies", "create")); - - @SuppressWarnings("rawtypes") - final Form paginatorForm = new Form("PaginatorForm"); - - @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(getWebRequest(), (WebResponse) getResponse(), Constants.PREF_POLICY_PAGINATOR_ROWS, String - .valueOf(paginatorRows)); - table.setItemsPerPage(paginatorRows); - - target.add(container); - } - }); - - paginatorForm.add(rowsChooser); - add(paginatorForm); - } - - private void setWindowClosedCallback(final ModalWindow window, final WebMarkupContainer container) { - window.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { - - private static final long serialVersionUID = 8804221891699487139L; - - @Override - public void onClose(final AjaxRequestTarget target) { - target.add(container); - BasePage configuration = ((BasePage) pageRef.getPage()); - if (configuration.isModalResult()) { - info(getString(Constants.OPERATION_SUCCEEDED)); - configuration.getFeedbackPanel().refresh(target); - configuration.setModalResult(false); - } - } - }); - } - - private class PolicyDataProvider extends SortableDataProvider<AbstractPolicyTO, String> { - - private static final long serialVersionUID = -6976327453925166730L; - - private final SortableDataProviderComparator<AbstractPolicyTO> comparator; - - public PolicyDataProvider() { - super(); - - //Default sorting - setSort("description", SortOrder.ASCENDING); - - comparator = new SortableDataProviderComparator<AbstractPolicyTO>(this); - } - - @Override - public long size() { - return policyRestClient.getPolicies(policyType, true).size(); - } - - @Override - public Iterator<AbstractPolicyTO> iterator(final long first, final long count) { - final List<AbstractPolicyTO> policies = policyRestClient.getPolicies(policyType, true); - - Collections.sort(policies, comparator); - - return policies.subList((int) first, (int) first + (int) count).iterator(); - } - - @Override - public IModel<AbstractPolicyTO> model(final AbstractPolicyTO object) { - return new CompoundPropertyModel<AbstractPolicyTO>(object); - } - } - - private AbstractPolicyTO getPolicyTOInstance(final PolicyType policyType) { - AbstractPolicyTO policyTO; - switch (policyType) { - case GLOBAL_ACCOUNT: - policyTO = new AccountPolicyTO(true); - break; - - case ACCOUNT: - policyTO = new AccountPolicyTO(); - break; - - case GLOBAL_PASSWORD: - policyTO = new PasswordPolicyTO(true); - break; - - case PASSWORD: - policyTO = new PasswordPolicyTO(); - break; - - case GLOBAL_SYNC: - policyTO = new SyncPolicyTO(true); - break; - - case SYNC: - default: - policyTO = new SyncPolicyTO(); - } - - return policyTO; - } -}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/PolicyBeanPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PolicyBeanPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PolicyBeanPanel.java deleted file mode 100644 index a55be9f..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PolicyBeanPanel.java +++ /dev/null @@ -1,340 +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.panels; - -import java.beans.PropertyDescriptor; -import java.io.Serializable; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.rest.PolicyRestClient; -import org.apache.syncope.client.console.rest.SchemaRestClient; -import org.apache.syncope.client.console.wicket.markup.html.form.AbstractFieldPanel; -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.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.client.console.wicket.markup.html.list.AltListView; -import org.apache.syncope.common.lib.annotation.ClassList; -import org.apache.syncope.common.lib.annotation.SchemaList; -import org.apache.syncope.common.lib.types.AttributableType; -import org.apache.syncope.common.lib.types.PolicySpec; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.markup.html.basic.Label; -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.spring.injection.annot.SpringBean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; -import org.springframework.util.ClassUtils; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; -import org.springframework.util.ReflectionUtils.FieldFilter; - -public class PolicyBeanPanel extends Panel { - - private static final long serialVersionUID = -3035998190456928143L; - - /** - * Logger. - */ - private static final Logger LOG = LoggerFactory.getLogger(PolicyBeanPanel.class); - - @SpringBean - private SchemaRestClient schemaRestClient; - - @SpringBean - private PolicyRestClient policyRestClient; - - final IModel<List<String>> userSchemas = new LoadableDetachableModel<List<String>>() { - - private static final long serialVersionUID = -2012833443695917883L; - - @Override - protected List<String> load() { - return schemaRestClient.getPlainSchemaNames(AttributableType.USER); - } - }; - - final IModel<List<String>> groupSchemas = new LoadableDetachableModel<List<String>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<String> load() { - return schemaRestClient.getPlainSchemaNames(AttributableType.GROUP); - } - }; - - final IModel<List<String>> correlationRules = new LoadableDetachableModel<List<String>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<String> load() { - return policyRestClient.getCorrelationRuleClasses(); - } - }; - - public PolicyBeanPanel(final String id, final PolicySpec policy) { - super(id); - - final List<FieldWrapper> items = new ArrayList<>(); - ReflectionUtils.doWithFields(policy.getClass(), new FieldCallback() { - - @Override - public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { - FieldWrapper fieldWrapper = new FieldWrapper(); - fieldWrapper.setName(field.getName()); - fieldWrapper.setType(field.getType()); - - final SchemaList schemaList = field.getAnnotation(SchemaList.class); - fieldWrapper.setSchemaList(schemaList); - - final ClassList classList = field.getAnnotation(ClassList.class); - fieldWrapper.setClassList(classList); - - items.add(fieldWrapper); - } - }, - new FieldFilter() { - - @Override - public boolean matches(final Field field) { - return !Modifier.isStatic(field.getModifiers()) && !"serialVersionUID".equals(field.getName()); - } - }); - - final ListView<FieldWrapper> policies = new AltListView<FieldWrapper>("policies", items) { - - private static final long serialVersionUID = 9101744072914090143L; - - @Override - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected void populateItem(final ListItem<FieldWrapper> item) { - final FieldWrapper field = item.getModelObject(); - - final PropertyDescriptor propDesc = BeanUtils.getPropertyDescriptor(policy.getClass(), field.getName()); - - item.add(new Label("label", new ResourceModel(field.getName()))); - - AbstractFieldPanel component; - try { - if (field.getClassList() != null) { - component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(policy, - field.getName())); - - final List<String> rules = correlationRules.getObject(); - - if (rules != null && !rules.isEmpty()) { - ((AjaxDropDownChoicePanel) component).setChoices(correlationRules.getObject()); - } - - item.add(component); - - item.add(getActivationControl( - component, - propDesc.getReadMethod().invoke(policy, new Object[] {}) != null, - null, - null)); - - } else if (field.getType().isEnum()) { - component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(policy, - field.getName())); - - final Serializable[] values = (Serializable[]) field.getType().getEnumConstants(); - - if (values != null && values.length > 0) { - ((AjaxDropDownChoicePanel) component).setChoices(Arrays.asList(values)); - } - - item.add(component); - - item.add(getActivationControl( - component, - (Enum<?>) propDesc.getReadMethod().invoke(policy, new Object[] {}) != null, - values[0], - values[0])); - - } else if (ClassUtils.isAssignable(Boolean.class, field.getType())) { - item.add(new AjaxCheckBoxPanel("check", field.getName(), - new PropertyModel<Boolean>(policy, field.getName()))); - - item.add(new Label("field", new Model(null))); - } else if (Collection.class.isAssignableFrom(field.getType())) { - if (field.getSchemaList() != null) { - final List<String> values = new ArrayList<>(); - if (field.getName().charAt(0) == 'r') { - values.addAll(groupSchemas.getObject()); - - if (field.getSchemaList().extended()) { - values.add("name"); - } - } else { - values.addAll(userSchemas.getObject()); - - if (field.getSchemaList().extended()) { - values.add("key"); - values.add("username"); - } - } - - component = new AjaxPalettePanel("field", new PropertyModel(policy, field.getName()), - new ListModel<>(values)); - item.add(component); - - Collection<?> collection = (Collection) propDesc.getReadMethod().invoke(policy); - item.add(getActivationControl(component, - !collection.isEmpty(), new ArrayList<String>(), new ArrayList<String>())); - } else { - final FieldPanel panel = new AjaxTextFieldPanel("panel", field.getName(), - new Model<String>(null)); - panel.setRequired(true); - - component = new MultiFieldPanel<String>("field", - new PropertyModel(policy, field.getName()), panel); - - item.add(component); - - final List<String> reinitializedValue = new ArrayList<String>(); - - reinitializedValue.add(""); - - item.add(getActivationControl(component, - !((Collection) propDesc.getReadMethod().invoke(policy, new Object[] {})).isEmpty(), - new ArrayList<String>(), (Serializable) reinitializedValue)); - } - } else if (ClassUtils.isAssignable(Number.class, field.getType())) { - component = new SpinnerFieldPanel<Number>("field", field.getName(), - (Class<Number>) field.getType(), new PropertyModel<Number>(policy, field.getName()), - null, null); - item.add(component); - - item.add(getActivationControl(component, - (Integer) propDesc.getReadMethod().invoke(policy, new Object[] {}) > 0, 0, 0)); - } else if (field.getType().equals(String.class)) { - component = new AjaxTextFieldPanel("field", field.getName(), - new PropertyModel(policy, field.getName())); - - item.add(component); - - item.add(getActivationControl(component, - propDesc.getReadMethod().invoke(policy, new Object[] {}) != null, null, null)); - } else { - item.add(new AjaxCheckBoxPanel("check", field.getName(), new Model())); - item.add(new Label("field", new Model(null))); - } - } catch (Exception e) { - LOG.error("Error retrieving policy fields", e); - } - } - }; - - add(policies); - } - - private <T extends Serializable> AjaxCheckBoxPanel getActivationControl(final AbstractFieldPanel<T> panel, - final Boolean checked, final T defaultModelObject, final T reinitializedValue) { - - final AjaxCheckBoxPanel check = new AjaxCheckBoxPanel("check", "check", new Model<Boolean>(checked)); - - panel.setEnabled(checked); - - check.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - if (check.getModelObject()) { - panel.setEnabled(true); - panel.setModelObject(reinitializedValue); - } else { - panel.setModelObject(defaultModelObject); - panel.setEnabled(false); - } - - target.add(panel); - } - }); - - return check; - } - - private static class FieldWrapper implements Serializable { - - private static final long serialVersionUID = -6770429509752964215L; - - private Class<?> type; - - private String name; - - private transient SchemaList schemaList; - - private transient ClassList classList; - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public Class<?> getType() { - return type; - } - - public void setType(final Class<?> type) { - this.type = type; - } - - public SchemaList getSchemaList() { - return schemaList; - } - - public void setSchemaList(final SchemaList schemaList) { - this.schemaList = schemaList; - } - - public ClassList getClassList() { - return classList; - } - - public void setClassList(ClassList classList) { - this.classList = classList; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationTasks.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationTasks.java deleted file mode 100644 index 41fdb03..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationTasks.java +++ /dev/null @@ -1,264 +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.panels; - -import java.util.ArrayList; -import java.util.List; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.pages.PropagationTaskModalPage; -import org.apache.syncope.client.console.pages.Tasks; -import org.apache.syncope.client.console.pages.Tasks.TasksProvider; -import org.apache.syncope.client.console.panels.AbstractSearchResultPanel.EventDataWrapper; -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.AbstractTaskTO; -import org.apache.syncope.common.lib.to.PropagationTaskTO; -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.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.event.IEvent; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; -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.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.request.http.WebResponse; - -/** - * Tasks page. - */ -public class PropagationTasks extends AbstractTasks { - - private static final long serialVersionUID = 4984337552918213290L; - - private int paginatorRows; - - private WebMarkupContainer container; - - private boolean operationResult = false; - - private ModalWindow window; - - private AjaxDataTablePanel<AbstractTaskTO, String> table; - - public PropagationTasks(final String id, final PageReference pageRef) { - super(id, pageRef); - - container = new WebMarkupContainer("container"); - container.setOutputMarkupId(true); - add(container); - - add(window = new ModalWindow("taskWin")); - - paginatorRows = prefMan.getPaginatorRows(getWebRequest(), Constants.PREF_PROPAGATION_TASKS_PAGINATOR_ROWS); - - table = Tasks.updateTaskTable( - getColumns(), - new TasksProvider<PropagationTaskTO>(restClient, paginatorRows, getId(), PropagationTaskTO.class), - container, - 0, - pageRef, - restClient); - - window.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { - - private static final long serialVersionUID = 8804221891699487139L; - - @Override - public void onClose(final AjaxRequestTarget target) { - target.add(container); - if (operationResult) { - info(getString(Constants.OPERATION_SUCCEEDED)); - target.add(getPage().get(Constants.FEEDBACK)); - operationResult = false; - } - } - }); - - window.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - window.setInitialHeight(WIN_HEIGHT); - window.setInitialWidth(WIN_WIDTH); - window.setCookieName(VIEW_TASK_WIN_COOKIE_NAME); - - @SuppressWarnings("rawtypes") - Form paginatorForm = new Form("PaginatorForm"); - - @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(getWebRequest(), (WebResponse) getResponse(), - Constants.PREF_PROPAGATION_TASKS_PAGINATOR_ROWS, String.valueOf(paginatorRows)); - - table = Tasks.updateTaskTable( - getColumns(), - new TasksProvider<>(restClient, paginatorRows, getId(), PropagationTaskTO.class), - container, - table == null ? 0 : (int) table.getCurrentPage(), - pageRef, - restClient); - - target.add(container); - } - }); - - paginatorForm.add(rowsChooser); - add(paginatorForm); - } - - private List<IColumn<AbstractTaskTO, String>> getColumns() { - final List<IColumn<AbstractTaskTO, String>> columns = new ArrayList<>(); - - columns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("key", this, null), "key", "key")); - columns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("resource", this, null), "resource", "resource")); - columns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("accountId", this, null), "accountId", "accountId")); - columns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("propagationMode", this, null), "propagationMode", "propagationMode")); - columns.add(new PropertyColumn<AbstractTaskTO, String>(new StringResourceModel( - "propagationOperation", this, null), "propagationOperation", "propagationOperation")); - columns.add(new DatePropertyColumn<AbstractTaskTO>( - new StringResourceModel("startDate", this, null), "startDate", "startDate")); - columns.add(new DatePropertyColumn<AbstractTaskTO>( - new StringResourceModel("endDate", this, null), "endDate", "endDate")); - columns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus")); - columns.add(new ActionColumn<AbstractTaskTO, String>(new StringResourceModel("actions", this, null, "")) { - - private static final long serialVersionUID = 2054811145491901166L; - - @Override - public String getCssClass() { - return "action"; - } - - @Override - public ActionLinksPanel getActions(final String componentId, final IModel<AbstractTaskTO> model) { - - final AbstractTaskTO taskTO = model.getObject(); - - final ActionLinksPanel panel = new ActionLinksPanel(componentId, model, pageRef); - - 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 PropagationTaskModalPage(taskTO); - } - }); - - window.show(target); - } - }, ActionLink.ActionType.EDIT, TASKS); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - restClient.startExecution(taskTO.getKey(), false); - getSession().info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - target.add(container); - } - }, ActionLink.ActionType.EXECUTE, TASKS); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - restClient.delete(taskTO.getKey(), PropagationTaskTO.class); - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - target.add(container); - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - } - }, ActionLink.ActionType.DELETE, TASKS); - - return panel; - } - - @Override - public Component getHeader(final String componentId) { - final ActionLinksPanel panel = new ActionLinksPanel(componentId, new Model(), pageRef); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (target != null) { - target.add(table); - } - } - }, ActionLink.ActionType.RELOAD, TASKS, "list"); - - return panel; - } - }); - - return columns; - } - - @Override - public void onEvent(final IEvent<?> event) { - if (event.getPayload() instanceof EventDataWrapper) { - ((EventDataWrapper) event.getPayload()).getTarget().add(container); - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/PushTasksPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PushTasksPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PushTasksPanel.java deleted file mode 100644 index a93000d..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PushTasksPanel.java +++ /dev/null @@ -1,184 +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.panels; - -import java.util.ArrayList; -import java.util.List; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.pages.PushTaskModalPage; -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.AbstractTaskTO; -import org.apache.syncope.common.lib.to.PushTaskTO; -import org.apache.syncope.common.lib.to.SyncTaskTO; -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.extensions.ajax.markup.html.modal.ModalWindow; -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.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.StringResourceModel; - -public class PushTasksPanel extends AbstractProvisioningTasksPanel<PushTaskTO> { - - private static final long serialVersionUID = -2492299671757861889L; - - public PushTasksPanel(final String id, final PageReference pageRef) { - super(id, pageRef, PushTaskTO.class); - initTasksTable(); - } - - @Override - protected List<IColumn<AbstractTaskTO, String>> getColumns() { - final List<IColumn<AbstractTaskTO, String>> pushTasksColumns = new ArrayList<IColumn<AbstractTaskTO, String>>(); - - pushTasksColumns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("key", this, null), "key", "key")); - pushTasksColumns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("name", this, null), "name", "name")); - pushTasksColumns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("description", this, null), "description", "description")); - pushTasksColumns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("resourceName", this, null), "resource", "resource")); - pushTasksColumns.add(new DatePropertyColumn<AbstractTaskTO>( - new StringResourceModel("lastExec", this, null), "lastExec", "lastExec")); - pushTasksColumns.add(new DatePropertyColumn<AbstractTaskTO>( - new StringResourceModel("nextExec", this, null), "nextExec", "nextExec")); - pushTasksColumns.add(new PropertyColumn<AbstractTaskTO, String>( - new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus")); - - pushTasksColumns.add( - new ActionColumn<AbstractTaskTO, String>(new StringResourceModel("actions", this, null, "")) { - - private static final long serialVersionUID = 2054811145491901166L; - - @Override - public ActionLinksPanel getActions(final String componentId, final IModel<AbstractTaskTO> model) { - - final PushTaskTO taskTO = (PushTaskTO) model.getObject(); - - final ActionLinksPanel panel = new ActionLinksPanel(componentId, model, pageRef); - - 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 PushTaskModalPage(window, taskTO, pageRef); - } - }); - - window.show(target); - } - }, ActionLink.ActionType.EDIT, TASKS); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - restClient.startExecution(taskTO.getKey(), false); - getSession().info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - - target.add(container); - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - } - }, ActionLink.ActionType.EXECUTE, TASKS); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - restClient.startExecution(taskTO.getKey(), true); - getSession().info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - - target.add(container); - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - } - }, ActionLink.ActionType.DRYRUN, TASKS); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target) { - try { - restClient.delete(taskTO.getKey(), SyncTaskTO.class); - info(getString(Constants.OPERATION_SUCCEEDED)); - } catch (SyncopeClientException scce) { - error(scce.getMessage()); - } - target.add(container); - ((NotificationPanel) getPage().get(Constants.FEEDBACK)).refresh(target); - } - }, ActionLink.ActionType.DELETE, TASKS); - - return panel; - } - - @Override - public Component getHeader(final String componentId) { - final ActionLinksPanel panel = new ActionLinksPanel(componentId, new Model(), pageRef); - - panel.add(new ActionLink() { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - if (target != null) { - target.add(table); - } - } - }, ActionLink.ActionType.RELOAD, TASKS, "list"); - - return panel; - } - }); - - return pushTasksColumns; - - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java deleted file mode 100644 index b3e63c5..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java +++ /dev/null @@ -1,187 +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.panels; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.apache.syncope.client.console.pages.BaseModalPage; -import org.apache.syncope.client.console.pages.ResourceModalPage.ResourceEvent; -import org.apache.syncope.client.console.panels.ResourceDetailsPanel.DetailsModEvent; -import org.apache.syncope.client.console.rest.ConnectorRestClient; -import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel.MultiValueSelectorEvent; -import org.apache.syncope.client.console.wicket.markup.html.list.ConnConfPropertyListView; -import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.common.lib.types.ConnConfProperty; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; -import org.apache.wicket.event.Broadcast; -import org.apache.wicket.event.IEvent; -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.list.ListView; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.spring.injection.annot.SpringBean; - -public class ResourceConnConfPanel extends Panel { - - private static final long serialVersionUID = -7982691107029848579L; - - @SpringBean - private ConnectorRestClient restClient; - - private final ResourceTO resourceTO; - - private final boolean createFlag; - - private List<ConnConfProperty> connConfProperties; - - private WebMarkupContainer connConfPropContainer; - - private AjaxButton check; - - public ResourceConnConfPanel(final String id, final ResourceTO resourceTO, final boolean createFlag) { - super(id); - setOutputMarkupId(true); - - this.createFlag = createFlag; - this.resourceTO = resourceTO; - - connConfProperties = getConnConfProperties(); - - connConfPropContainer = new WebMarkupContainer("connectorPropertiesContainer"); - connConfPropContainer.setOutputMarkupId(true); - add(connConfPropContainer); - - /* - * the list of overridable connector properties - */ - final ListView<ConnConfProperty> connPropView = new ConnConfPropertyListView("connectorProperties", - new PropertyModel<List<ConnConfProperty>>(this, "connConfProperties"), - false, resourceTO.getConnConfProperties()); - connPropView.setOutputMarkupId(true); - connConfPropContainer.add(connPropView); - - check = new IndicatingAjaxButton("check", new ResourceModel("check")) { - - private static final long serialVersionUID = -4199438518229098169L; - - @Override - public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - final ResourceTO resourceTO = (ResourceTO) form.getModelObject(); - - if (restClient.check(resourceTO)) { - info(getString("success_connection")); - } else { - error(getString("error_connection")); - } - - ((BaseModalPage) getPage()).getFeedbackPanel().refresh(target); - } - }; - - check.setEnabled(!connConfProperties.isEmpty()); - connConfPropContainer.add(check); - } - - /** - * Get overridable properties. - * - * @return overridable properties. - */ - private List<ConnConfProperty> getConnConfProperties() { - final List<ConnConfProperty> props = new ArrayList<ConnConfProperty>(); - final Long connectorId = resourceTO.getConnectorId(); - if (connectorId != null && connectorId > 0) { - for (ConnConfProperty property : restClient.getConnectorProperties(connectorId)) { - if (property.isOverridable()) { - props.add(property); - } - } - } - if (createFlag || resourceTO.getConnConfProperties().isEmpty()) { - resourceTO.getConnConfProperties().clear(); - } else { - Map<String, ConnConfProperty> valuedProps = new HashMap<String, ConnConfProperty>(); - for (ConnConfProperty prop : resourceTO.getConnConfProperties()) { - valuedProps.put(prop.getSchema().getName(), prop); - } - - for (int i = 0; i < props.size(); i++) { - if (valuedProps.containsKey(props.get(i).getSchema().getName())) { - props.set(i, valuedProps.get(props.get(i).getSchema().getName())); - } - } - } - - // re-order properties - Collections.sort(props); - - return props; - } - - @Override - public void onEvent(final IEvent<?> event) { - AjaxRequestTarget target = null; - if (event.getPayload() instanceof DetailsModEvent) { - // connector change: update properties and forward event - target = ((ResourceEvent) event.getPayload()).getTarget(); - - connConfProperties = getConnConfProperties(); - check.setEnabled(!connConfProperties.isEmpty()); - - target.add(connConfPropContainer); - } else if (event.getPayload() instanceof MultiValueSelectorEvent) { - // multi value connector property change: forward event - target = ((MultiValueSelectorEvent) event.getPayload()).getTarget(); - } - - if (target != null) { - send(getPage(), Broadcast.BREADTH, new ConnConfModEvent(target, connConfProperties)); - } - } - - /** - * Connector configuration properties modification event. - */ - public static class ConnConfModEvent extends ResourceEvent { - - private List<ConnConfProperty> configuration; - - /** - * Constructor. - * - * @param target request target. - * @param configuration connector configuration properties. - */ - public ConnConfModEvent(final AjaxRequestTarget target, final List<ConnConfProperty> configuration) { - super(target); - this.configuration = configuration; - } - - public List<ConnConfProperty> getConfiguration() { - return configuration; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/39f8a069/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java deleted file mode 100644 index 3bff23f..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java +++ /dev/null @@ -1,306 +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.panels; - -import java.util.Arrays; -import java.util.List; -import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.pages.ResourceModalPage.ResourceEvent; -import org.apache.syncope.client.console.rest.ConnectorRestClient; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; -import org.apache.syncope.client.console.wicket.markup.html.form.SpinnerFieldPanel; -import org.apache.syncope.common.lib.to.ConnInstanceTO; -import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.common.lib.types.PropagationMode; -import org.apache.syncope.common.lib.types.TraceLevel; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.event.Broadcast; -import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.ChoiceRenderer; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.list.ListItem; -import org.apache.wicket.markup.html.list.ListView; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.LoadableDetachableModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.ResourceModel; -import org.apache.wicket.spring.injection.annot.SpringBean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ResourceDetailsPanel extends Panel { - - private static final long serialVersionUID = -7982691107029848579L; - - /** - * Logger. - */ - private static final Logger LOG = LoggerFactory.getLogger(ResourceDetailsPanel.class); - - @SpringBean - private ConnectorRestClient connRestClient; - - private ConnInstanceTO connInstanceTO; - - public ResourceDetailsPanel(final String id, final ResourceTO resourceTO, final List<String> actionClassNames, - final boolean createFlag) { - - super(id); - setOutputMarkupId(true); - - final AjaxTextFieldPanel resourceName = new AjaxTextFieldPanel("name", new ResourceModel("name", "name"). - getObject(), new PropertyModel<String>(resourceTO, "key")); - - resourceName.setEnabled(createFlag); - resourceName.addRequiredLabel(); - add(resourceName); - - final AjaxCheckBoxPanel enforceMandatoryCondition = new AjaxCheckBoxPanel("enforceMandatoryCondition", - new ResourceModel("enforceMandatoryCondition", "enforceMandatoryCondition").getObject(), - new PropertyModel<Boolean>(resourceTO, "enforceMandatoryCondition")); - add(enforceMandatoryCondition); - - final AjaxCheckBoxPanel propagationPrimary = new AjaxCheckBoxPanel("propagationPrimary", new ResourceModel( - "propagationPrimary", "propagationPrimary").getObject(), new PropertyModel<Boolean>(resourceTO, - "propagationPrimary")); - add(propagationPrimary); - - final SpinnerFieldPanel<Integer> propagationPriority = - new SpinnerFieldPanel<>("propagationPriority", "propagationPriority", Integer.class, - new PropertyModel<Integer>(resourceTO, "propagationPriority"), null, null); - add(propagationPriority); - - final AjaxDropDownChoicePanel<PropagationMode> propagationMode = new AjaxDropDownChoicePanel<>( - "propagationMode", new ResourceModel("propagationMode", "propagationMode").getObject(), - new PropertyModel<PropagationMode>(resourceTO, "propagationMode")); - propagationMode.setChoices(Arrays.asList(PropagationMode.values())); - add(propagationMode); - - final AjaxCheckBoxPanel randomPwdIfNotProvided = new AjaxCheckBoxPanel("randomPwdIfNotProvided", - new ResourceModel("randomPwdIfNotProvided", "randomPwdIfNotProvided").getObject(), - new PropertyModel<Boolean>(resourceTO, "randomPwdIfNotProvided")); - add(randomPwdIfNotProvided); - - final WebMarkupContainer propagationActionsClassNames = new WebMarkupContainer("propagationActionsClassNames"); - propagationActionsClassNames.setOutputMarkupId(true); - add(propagationActionsClassNames); - - final AjaxLink<Void> first = new IndicatingAjaxLink<Void>("first") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY); - setVisible(false); - target.add(propagationActionsClassNames); - } - }; - first.setOutputMarkupPlaceholderTag(true); - first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty()); - propagationActionsClassNames.add(first); - - final ListView<String> actionsClasses = new ListView<String>("actionsClasses", - new PropertyModel<List<String>>(resourceTO, "propagationActionsClassNames")) { - - private static final long serialVersionUID = 9101744072914090143L; - - @Override - protected void populateItem(final ListItem<String> item) { - final String className = item.getModelObject(); - - final DropDownChoice<String> actionsClass = new DropDownChoice<>( - "actionsClass", new Model<>(className), actionClassNames); - actionsClass.setNullValid(true); - actionsClass.setRequired(true); - actionsClass.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_BLUR) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames(). - set(item.getIndex(), actionsClass.getModelObject()); - } - }); - actionsClass.setRequired(true); - actionsClass.setOutputMarkupId(true); - actionsClass.setRequired(true); - item.add(actionsClass); - - AjaxLink<Void> minus = new IndicatingAjaxLink<Void>("drop") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().remove(className); - first.setVisible(resourceTO.getPropagationActionsClassNames().isEmpty()); - target.add(propagationActionsClassNames); - } - }; - item.add(minus); - - final AjaxLink<Void> plus = new IndicatingAjaxLink<Void>("add") { - - private static final long serialVersionUID = -7978723352517770644L; - - @Override - public void onClick(final AjaxRequestTarget target) { - resourceTO.getPropagationActionsClassNames().add(StringUtils.EMPTY); - target.add(propagationActionsClassNames); - } - }; - plus.setOutputMarkupPlaceholderTag(true); - plus.setVisible(item.getIndex() == resourceTO.getPropagationActionsClassNames().size() - 1); - item.add(plus); - } - }; - propagationActionsClassNames.add(actionsClasses); - - final AjaxDropDownChoicePanel<TraceLevel> createTraceLevel = new AjaxDropDownChoicePanel<>( - "createTraceLevel", new ResourceModel("createTraceLevel", "createTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "createTraceLevel")); - createTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(createTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> updateTraceLevel = new AjaxDropDownChoicePanel<>( - "updateTraceLevel", new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "updateTraceLevel")); - updateTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(updateTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> deleteTraceLevel = new AjaxDropDownChoicePanel<>( - "deleteTraceLevel", new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "deleteTraceLevel")); - deleteTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(deleteTraceLevel); - - final AjaxDropDownChoicePanel<TraceLevel> syncTraceLevel = new AjaxDropDownChoicePanel<>( - "syncTraceLevel", new ResourceModel("syncTraceLevel", "syncTraceLevel").getObject(), - new PropertyModel<TraceLevel>(resourceTO, "syncTraceLevel")); - syncTraceLevel.setChoices(Arrays.asList(TraceLevel.values())); - add(syncTraceLevel); - - final IModel<List<ConnInstanceTO>> connectors = new LoadableDetachableModel<List<ConnInstanceTO>>() { - - private static final long serialVersionUID = 5275935387613157437L; - - @Override - protected List<ConnInstanceTO> load() { - return connRestClient.getAllConnectors(); - } - }; - - connInstanceTO = getConectorInstanceTO(connectors.getObject(), resourceTO); - - final AjaxDropDownChoicePanel<ConnInstanceTO> conn = new AjaxDropDownChoicePanel<>("connector", - new ResourceModel("connector", "connector").getObject(), - new PropertyModel<ConnInstanceTO>(this, "connInstanceTO")); - conn.setChoices(connectors.getObject()); - conn.setChoiceRenderer(new ChoiceRenderer("displayName", "key")); - - conn.getField().setModel(new IModel<ConnInstanceTO>() { - - private static final long serialVersionUID = -4202872830392400310L; - - @Override - public ConnInstanceTO getObject() { - return connInstanceTO; - } - - @Override - public void setObject(final ConnInstanceTO connector) { - resourceTO.setConnectorId(connector.getKey()); - connInstanceTO = connector; - } - - @Override - public void detach() { - } - }); - - conn.addRequiredLabel(); - conn.setEnabled(createFlag); - - conn.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - send(getPage(), Broadcast.BREADTH, new DetailsModEvent(target)); - } - }); - - add(conn); - } - - /** - * Get the connetorTO linked to the resource. - * - * @param connectorTOs list of all connectors. - * @param resourceTO resource. - * @return selected connector instance: in case of no connectors available, null; in case of new resource - * specification, the first on connector available - */ - private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> connectorTOs, final ResourceTO resourceTO) { - if (connectorTOs.isEmpty()) { - resourceTO.setConnectorId(null); - return null; - } else { - // use the first element as default - ConnInstanceTO res = connectorTOs.get(0); - - for (ConnInstanceTO to : connectorTOs) { - if (Long.valueOf(to.getKey()).equals(resourceTO.getConnectorId())) { - res = to; - } - } - - // in case of no match - resourceTO.setConnectorId(res.getKey()); - - return res; - } - } - - /** - * Connector instance modification event. - */ - public static class DetailsModEvent extends ResourceEvent { - - /** - * Constructor. - * - * @param target request target. - */ - public DetailsModEvent(final AjaxRequestTarget target) { - super(target); - } - } -}
