You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2016/01/12 16:19:53 UTC
[2/2] syncope git commit: [SYNCOPE-156] Refactoring Schemas panel and
AnyTypesClasses panel
[SYNCOPE-156] Refactoring Schemas panel and AnyTypesClasses panel
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/d5296cad
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/d5296cad
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/d5296cad
Branch: refs/heads/master
Commit: d5296cadd09eec9dbd2e945709ea02c5162df56e
Parents: c8a5361
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Tue Jan 12 16:19:25 2016 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Tue Jan 12 16:19:25 2016 +0100
----------------------------------------------------------------------
.../client/console/commons/PropertyList.java | 213 +++++++++++
.../syncope/client/console/pages/BasePage.java | 3 +-
.../syncope/client/console/pages/Types.java | 36 +-
.../panels/AbstractSchemaDetailsPanel.java | 24 +-
.../panels/AbstractSearchResultPanel.java | 2 +-
.../console/panels/AnyTypeClassDetails.java | 104 ------
.../panels/AnyTypeClassDetailsPanel.java | 114 ++++++
.../console/panels/AnyTypeClassModalPanel.java | 52 +--
.../console/panels/AnyTypeClassesPanel.java | 291 +++++++++------
.../client/console/panels/DerSchemaDetails.java | 30 +-
.../console/panels/NotificationPanel.java | 1 +
.../console/panels/PlainSchemaDetails.java | 170 ++++-----
.../client/console/panels/SchemaModalPanel.java | 53 +--
.../client/console/panels/SchemaTypePanel.java | 359 +++++++++++++++++++
.../client/console/panels/SchemasPanel.java | 327 +----------------
.../client/console/panels/VirSchemaDetails.java | 29 +-
.../markup/html/bootstrap/dialog/BaseModal.java | 5 +
.../syncope/client/console/pages/Types.html | 2 -
.../console/panels/AnyTypeClassDetails.html | 57 ---
.../panels/AnyTypeClassDetails.properties | 20 --
.../panels/AnyTypeClassDetailsPanel.html | 66 ++++
.../panels/AnyTypeClassDetailsPanel.properties | 19 +
.../AnyTypeClassDetailsPanel_it.properties | 19 +
.../AnyTypeClassDetailsPanel_pt_BR.properties | 19 +
.../panels/AnyTypeClassDetails_it.properties | 20 --
.../panels/AnyTypeClassDetails_pt_BR.properties | 20 --
.../console/panels/AnyTypeClassModalPanel.html | 15 +-
.../console/panels/AnyTypeClassesPanel.html | 56 ---
.../panels/AnyTypeClassesPanel.properties | 7 +-
.../panels/AnyTypeClassesPanel_it.properties | 7 +-
.../panels/AnyTypeClassesPanel_pt_BR.properties | 7 +-
.../panels/SchemasPanel$SchemaTypePanel.html | 39 --
.../client/console/panels/SchemasPanel.html | 4 +-
.../console/panels/SchemasPanel.properties | 2 +
.../console/panels/SchemasPanel_it.properties | 2 +
.../panels/SchemasPanel_pt_BR.properties | 2 +
.../markup/html/bootstrap/dialog/BaseModal.html | 1 +
37 files changed, 1151 insertions(+), 1046 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/commons/PropertyList.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/PropertyList.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/PropertyList.java
new file mode 100644
index 0000000..46a61d7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/PropertyList.java
@@ -0,0 +1,213 @@
+/*
+ * 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.commons;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.common.lib.SyncopeConstants;
+
+public abstract class PropertyList<T> implements List<String> {
+
+ private final T objectTO;
+
+ public PropertyList(final T objectTO) {
+ this.objectTO = objectTO;
+ }
+
+ @Override
+ public boolean add(final String item) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final boolean res = list.add(item);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public int size() {
+ return getEnumValuesAsList(getValues()).size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return getEnumValuesAsList(getValues()).isEmpty();
+ }
+
+ @Override
+ public boolean contains(final Object o) {
+ return getEnumValuesAsList(getValues()).contains(o);
+ }
+
+ @Override
+ public Iterator<String> iterator() {
+ return getEnumValuesAsList(getValues()).iterator();
+ }
+
+ @Override
+ public Object[] toArray() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public <T> T[] toArray(final T[] a) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean remove(final Object o) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final boolean res = list.remove(o);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public boolean containsAll(final Collection<?> c) {
+ return getEnumValuesAsList(getValues()).containsAll(c);
+ }
+
+ @Override
+ public boolean addAll(final Collection<? extends String> c) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ boolean res = list.addAll(c);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public boolean addAll(final int index, final Collection<? extends String> c) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final boolean res = list.addAll(index, c);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public boolean removeAll(final Collection<?> c) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final boolean res = list.removeAll(c);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public boolean retainAll(final Collection<?> c) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final boolean res = list.retainAll(c);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public void clear() {
+ final List<String> list = getEnumValuesAsList(getValues());
+ list.clear();
+ setValues(list);
+ }
+
+ @Override
+ public String get(final int index) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ return list.get(index);
+ }
+
+ @Override
+ public String set(final int index, final String element) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final String res = list.set(index, element);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public void add(final int index, final String element) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String remove(final int index) {
+ final List<String> list = getEnumValuesAsList(getValues());
+ final String res = list.remove(index);
+ setValues(list);
+ return res;
+ }
+
+ @Override
+ public int indexOf(final Object o) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public int lastIndexOf(final Object o) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ListIterator<String> listIterator() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ListIterator<String> listIterator(final int index) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public List<String> subList(final int fromIndex, final int toIndex) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public static String getEnumValuesAsString(final List<String> enumerationValues) {
+ final StringBuilder builder = new StringBuilder();
+ int index = 0;
+ for (String str : enumerationValues) {
+ if (str != null) {
+ if (index > 0) {
+ builder.append(SyncopeConstants.ENUM_VALUES_SEPARATOR);
+ }
+ index++;
+ builder.append(str.trim());
+ }
+ }
+ return builder.toString();
+ }
+
+ public static List<String> getEnumValuesAsList(final String enumerationValues) {
+ final List<String> values = new ArrayList<>();
+ if (StringUtils.isNotBlank(enumerationValues)) {
+ for (String value : enumerationValues.split(SyncopeConstants.ENUM_VALUES_SEPARATOR)) {
+ values.add(value.trim());
+ }
+ if (enumerationValues.trim().endsWith(SyncopeConstants.ENUM_VALUES_SEPARATOR)) {
+ values.add(StringUtils.EMPTY);
+ }
+ } else {
+ values.add(StringUtils.EMPTY);
+ }
+
+ return values;
+ }
+
+ public abstract String getValues();
+
+ public abstract void setValues(final List<String> list);
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 6c91a91..c4f4f13 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.pages;
import org.apache.syncope.client.console.SyncopeConsoleApplication;
import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.panels.NotificationPanel;
import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
import org.apache.syncope.client.console.topology.Topology;
@@ -52,7 +53,7 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware {
public BasePage(final PageParameters parameters) {
super(parameters);
- notificationPanel = new NotificationPanel("feedback");
+ notificationPanel = new NotificationPanel(Constants.FEEDBACK);
notificationPanel.setOutputMarkupId(true);
addOrReplace(notificationPanel);
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
index 4869a98..0d9fcc1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
@@ -25,9 +25,6 @@ import org.apache.syncope.client.console.panels.AnyTypeClassesPanel;
import org.apache.syncope.client.console.panels.AnyTypePanel;
import org.apache.syncope.client.console.panels.RelationshipTypePanel;
import org.apache.syncope.client.console.panels.SchemasPanel;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.AbstractSchemaTO;
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -35,17 +32,11 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
public class Types extends BasePage {
private static final long serialVersionUID = 8091922398776299403L;
- private final BaseModal<AbstractSchemaTO> schemaModal;
-
- private final BaseModal<AnyTypeClassTO> anyTypeClassModal;
-
private final AjaxBootstrapTabbedPanel<ITab> tabbedPanel;
private enum Type {
@@ -59,20 +50,12 @@ public class Types extends BasePage {
public Types(final PageParameters parameters) {
super(parameters);
- this.schemaModal = new BaseModal<>("schemaModal");
- this.anyTypeClassModal = new BaseModal<>("anyTypeClassModal");
-
final WebMarkupContainer content = new WebMarkupContainer("content");
content.add(new Label("header", "Types"));
content.setOutputMarkupId(true);
tabbedPanel = new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList());
content.add(tabbedPanel);
-
add(content);
- addWindowWindowClosedCallback(schemaModal);
- addWindowWindowClosedCallback(anyTypeClassModal);
- add(schemaModal);
- add(anyTypeClassModal);
}
private List<ITab> buildTabList() {
@@ -105,7 +88,7 @@ public class Types extends BasePage {
@Override
public Panel getPanel(final String panelId) {
- return new AnyTypeClassesPanel(panelId, getPageReference(), anyTypeClassModal);
+ return new AnyTypeClassesPanel(panelId, getPageReference());
}
});
@@ -115,25 +98,10 @@ public class Types extends BasePage {
@Override
public Panel getPanel(final String panelId) {
- return new SchemasPanel(panelId, getPageReference(), schemaModal);
+ return new SchemasPanel(panelId, getPageReference());
}
});
return tabs;
}
-
- private void addWindowWindowClosedCallback(final BaseModal<?> modal) {
- modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
-
- private static final long serialVersionUID = 8804221891699487139L;
-
- @Override
- public void onClose(final AjaxRequestTarget target) {
- tabbedPanel.setSelectedTab(tabbedPanel.getSelectedTab());
- target.add(tabbedPanel);
- modal.show(false);
- notificationPanel.refresh(target);
- }
- });
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSchemaDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSchemaDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSchemaDetailsPanel.java
index 6faced0..ebddc5b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSchemaDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSchemaDetailsPanel.java
@@ -18,13 +18,9 @@
*/
package org.apache.syncope.client.console.panels;
-import org.apache.syncope.client.console.pages.AbstractBasePage;
-import org.apache.syncope.client.console.rest.SchemaRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.common.lib.to.AbstractSchemaTO;
import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
@@ -39,29 +35,18 @@ public abstract class AbstractSchemaDetailsPanel extends Panel {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractSchemaDetailsPanel.class);
protected static final String FORM = "form";
-
- /**
- * Schema rest client for create and update operations
- */
- protected final SchemaRestClient schemaRestClient = new SchemaRestClient();
- /**
- * Schema form
- */
protected final Form<AbstractSchemaTO> schemaForm;
protected final AbstractSchemaTO schemaTO;
- private final AbstractBasePage page;
-
public AbstractSchemaDetailsPanel(
final String id,
final PageReference pageReference,
- final BaseModal<AbstractSchemaTO> modal) {
+ final AbstractSchemaTO schemaTO) {
super(id);
- this.page = (AbstractBasePage) pageReference.getPage();
- this.schemaTO = modal.getFormModel();
+ this.schemaTO = schemaTO;
schemaForm = new Form<>(FORM);
schemaForm.setModel(new CompoundPropertyModel<>(schemaTO));
@@ -70,12 +55,9 @@ public abstract class AbstractSchemaDetailsPanel extends Panel {
final AjaxTextFieldPanel name =
new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(schemaTO, "key"));
name.addRequiredLabel();
- name.setEnabled(schemaTO.getKey() == null || schemaTO.getKey().isEmpty());
+ name.setEnabled(schemaTO == null || schemaTO.getKey() == null || schemaTO.getKey().isEmpty());
schemaForm.add(name);
add(schemaForm);
}
-
- public abstract void getOnSubmit(final AjaxRequestTarget target, final BaseModal<?> modal, final Form<?> form,
- final PageReference pageReference, final boolean createFlag);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
index c633a4f..a744d0a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java
@@ -217,7 +217,7 @@ public abstract class AbstractSearchResultPanel<
data.setRows(rows);
send(getParent(), Broadcast.BREADTH, data);
- ((AbstractBasePage) getPage()).getNotificationPanel().refresh(target);
+ page.getNotificationPanel().refresh(target);
}
});
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
deleted file mode 100644
index 1b0206e..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
+++ /dev/null
@@ -1,104 +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.List;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.rest.SchemaRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
-import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.util.ListModel;
-
-public class AnyTypeClassDetails extends Panel {
-
- private static final long serialVersionUID = 3321861543207340469L;
-
- private final AnyTypeClassTO anyTypeClassTO;
-
- private final SchemaRestClient schemaRestClient = new SchemaRestClient();
-
- private final List<String> availablePlainSchemas = schemaRestClient.getPlainSchemaNames();
-
- private final List<String> availableDerSchemas = schemaRestClient.getDerSchemaNames();
-
- private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
-
- public AnyTypeClassDetails(final String id,
- final AnyTypeClassTO anyTypeClassTO, final boolean edit) {
- super(id);
-
- this.anyTypeClassTO = anyTypeClassTO;
- buildAvailableSchemas(anyTypeClassTO.getKey());
-
- final TransparentWebMarkupContainer container = new TransparentWebMarkupContainer("container");
- container.setOutputMarkupId(true);
- add(container);
-
- final AjaxPalettePanel<String> plainSchema =
- new AjaxPalettePanel.Builder<String>()
- .setAllowOrder(true)
- .setAllowMoveAll(true)
- .build("plainSchemas",
- new PropertyModel<List<String>>(this.anyTypeClassTO, "plainSchemas"),
- new ListModel<>(availablePlainSchemas));
-
- plainSchema.setOutputMarkupId(true);
- plainSchema.setEnabled(edit);
- container.add(plainSchema);
-
- final AjaxPalettePanel<String> derSchema =
- new AjaxPalettePanel.Builder<String>()
- .setAllowOrder(true)
- .setAllowMoveAll(true)
- .build("derSchemas",
- new PropertyModel<List<String>>(this.anyTypeClassTO, "derSchemas"),
- new ListModel<>(availableDerSchemas));
-
- derSchema.setOutputMarkupId(true);
- derSchema.setEnabled(edit);
- container.add(derSchema);
-
- final AjaxPalettePanel<String> virSchema =
- new AjaxPalettePanel.Builder<String>()
- .setAllowOrder(true)
- .setAllowMoveAll(true)
- .build("virSchemas",
- new PropertyModel<List<String>>(this.anyTypeClassTO, "virSchemas"),
- new ListModel<>(availableVirSchemas));
-
- virSchema.setOutputMarkupId(true);
- virSchema.setEnabled(edit);
- container.add(virSchema);
- }
-
- private void buildAvailableSchemas(final String key) {
-
- for (AnyTypeClassTO item : SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list()) {
- if (key == null || !item.getKey().equals(key)) {
- availablePlainSchemas.removeAll(item.getPlainSchemas());
- availableDerSchemas.removeAll(item.getDerSchemas());
- availableVirSchemas.removeAll(item.getVirSchemas());
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
new file mode 100644
index 0000000..a06c0dd
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
@@ -0,0 +1,114 @@
+/*
+ * 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.List;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.rest.SchemaRestClient;
+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.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+
+public class AnyTypeClassDetailsPanel extends Panel {
+
+ private static final long serialVersionUID = 3321861543207340469L;
+
+ private final AnyTypeClassTO anyTypeClassTO;
+
+ private final SchemaRestClient schemaRestClient = new SchemaRestClient();
+
+ private final List<String> availablePlainSchemas = schemaRestClient.getPlainSchemaNames();
+
+ private final List<String> availableDerSchemas = schemaRestClient.getDerSchemaNames();
+
+ private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
+
+ public AnyTypeClassDetailsPanel(final String id, final AnyTypeClassTO anyTypeClassTO) {
+ super(id);
+
+ this.anyTypeClassTO = anyTypeClassTO;
+ buildAvailableSchemas(anyTypeClassTO.getKey());
+
+ final Form<AnyTypeClassTO> antTypeClassForm = new Form<>("form");
+ antTypeClassForm.setModel(new CompoundPropertyModel<>(anyTypeClassTO));
+ antTypeClassForm.setOutputMarkupId(true);
+ add(antTypeClassForm);
+
+ final AjaxTextFieldPanel key = new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(
+ this.anyTypeClassTO, "key"));
+ key.addRequiredLabel();
+ key.setEnabled(anyTypeClassTO.getKey() == null || this.anyTypeClassTO.getKey().isEmpty());
+ antTypeClassForm.add(key);
+
+ final TransparentWebMarkupContainer container = new TransparentWebMarkupContainer("container");
+ container.setOutputMarkupId(true);
+ antTypeClassForm.add(container);
+
+ final AjaxPalettePanel<String> plainSchema =
+ new AjaxPalettePanel.Builder<String>()
+ .setAllowOrder(true)
+ .setAllowMoveAll(true)
+ .build("plainSchemas",
+ new PropertyModel<List<String>>(this.anyTypeClassTO, "plainSchemas"),
+ new ListModel<>(availablePlainSchemas));
+
+ plainSchema.setOutputMarkupId(true);
+ container.add(plainSchema);
+
+ final AjaxPalettePanel<String> derSchema =
+ new AjaxPalettePanel.Builder<String>()
+ .setAllowOrder(true)
+ .setAllowMoveAll(true)
+ .build("derSchemas",
+ new PropertyModel<List<String>>(this.anyTypeClassTO, "derSchemas"),
+ new ListModel<>(availableDerSchemas));
+
+ derSchema.setOutputMarkupId(true);
+ container.add(derSchema);
+
+ final AjaxPalettePanel<String> virSchema =
+ new AjaxPalettePanel.Builder<String>()
+ .setAllowOrder(true)
+ .setAllowMoveAll(true)
+ .build("virSchemas",
+ new PropertyModel<List<String>>(this.anyTypeClassTO, "virSchemas"),
+ new ListModel<>(availableVirSchemas));
+
+ virSchema.setOutputMarkupId(true);
+ container.add(virSchema);
+ }
+
+ private void buildAvailableSchemas(final String key) {
+
+ for (AnyTypeClassTO item : SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list()) {
+ if (key == null || !item.getKey().equals(key)) {
+ availablePlainSchemas.removeAll(item.getPlainSchemas());
+ availableDerSchemas.removeAll(item.getDerSchemas());
+ availableVirSchemas.removeAll(item.getVirSchemas());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
index 02063f3..64faa9e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
@@ -18,17 +18,9 @@
*/
package org.apache.syncope.client.console.panels;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.PropertyModel;
public class AnyTypeClassModalPanel extends AbstractModalPanel<AnyTypeClassTO> {
@@ -36,49 +28,13 @@ public class AnyTypeClassModalPanel extends AbstractModalPanel<AnyTypeClassTO> {
private final AnyTypeClassTO anyTypeClassTO;
- private final boolean createFlag;
-
public AnyTypeClassModalPanel(
final BaseModal<AnyTypeClassTO> modal,
- final PageReference pageRef,
- final boolean createFlag) {
+ final AnyTypeClassTO anyTypeClassTO,
+ final PageReference pageRef) {
super(modal, pageRef);
- this.anyTypeClassTO = modal.getFormModel();
- this.createFlag = createFlag;
-
- final Form<AnyTypeClassTO> antTypeClassForm = new Form<>("form");
- antTypeClassForm.setModel(new CompoundPropertyModel<>(anyTypeClassTO));
- antTypeClassForm.setOutputMarkupId(true);
-
- final AjaxTextFieldPanel key = new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(
- anyTypeClassTO, "key"));
- key.addRequiredLabel();
- key.setEnabled(anyTypeClassTO.getKey() == null || anyTypeClassTO.getKey().isEmpty());
- antTypeClassForm.add(key);
-
- antTypeClassForm.add(new AnyTypeClassDetails("details", anyTypeClassTO, true));
- add(antTypeClassForm);
- }
-
- @Override
- public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-
- try {
- final AnyTypeClassTO updatedAnyTypeClassTO = AnyTypeClassTO.class.cast(form.getModelObject());
-
- if (createFlag) {
- SyncopeConsoleSession.get().getService(AnyTypeClassService.class).create(updatedAnyTypeClassTO);
- } else {
- SyncopeConsoleSession.get().getService(AnyTypeClassService.class).update(updatedAnyTypeClassTO);
- }
-
- info(getString(Constants.OPERATION_SUCCEEDED));
- modal.close(target);
- } catch (Exception e) {
- LOG.error("While creating or updating AnyTypeClass", e);
- error(getString(Constants.ERROR) + ": " + e.getMessage());
- modal.getNotificationPanel().refresh(target);
- }
+ this.anyTypeClassTO = anyTypeClassTO;
+ add(new AnyTypeClassDetailsPanel("anyTypeClassDetailsPanel", this.anyTypeClassTO));
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 1948904..4ece79e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -18,136 +18,206 @@
*/
package org.apache.syncope.client.console.panels;
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.SearchableDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
import org.apache.syncope.client.console.pages.AbstractBasePage;
+import org.apache.syncope.client.console.rest.BaseRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.html.form.ListChoice;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-public class AnyTypeClassesPanel extends Panel {
+public class AnyTypeClassesPanel extends AbstractTypesPanel<AnyTypeClassTO, AnyTypeClassesPanel.AnyTypeClassProvider> {
private static final long serialVersionUID = -2356760296223908382L;
- private static final Logger LOG = LoggerFactory.getLogger(AnyTypeClassesPanel.class);
+ private final String pageID = "AnyTypesClasses";
- private final ListChoice<AnyTypeClassTO> anyTypeClasses;
-
- private AnyTypeClassDetails anyTypeClassesDetails;
-
- public AnyTypeClassesPanel(final String id, final PageReference pageRef, final BaseModal<AnyTypeClassTO> modal) {
- super(id);
- this.setOutputMarkupId(true);
-
- final WebMarkupContainer container = new WebMarkupContainer("container");
- container.setOutputMarkupId(true);
- add(container);
+ public AnyTypeClassesPanel(final String id,
+ final AbstractSearchResultPanel.Builder<AnyTypeClassTO, AnyTypeClassTO, BaseRestClient> builder) {
+ super(id, builder);
+ }
- anyTypeClasses = new ListChoice<AnyTypeClassTO>(
- "anyTypeClasses", new Model<AnyTypeClassTO>(),
- SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list()) {
+ public AnyTypeClassesPanel(final String id, final PageReference pageRef) {
+ super(id, new AbstractSearchResultPanel.Builder<AnyTypeClassTO, AnyTypeClassTO, BaseRestClient>(null, pageRef) {
- private static final long serialVersionUID = 4022366881854379834L;
+ private static final long serialVersionUID = 8769126634538601689L;
@Override
- protected CharSequence getDefaultChoice(final String selectedValue) {
- return null;
+ protected WizardMgtPanel<AnyTypeClassTO> newInstance(final String id) {
+ return new AnyTypeClassesPanel(id, this);
}
- };
+ });
- anyTypeClasses.setChoiceRenderer(new IChoiceRenderer<AnyTypeClassTO>() {
+ this.addNewItemPanelBuilder(new AbstractModalPanelBuilder<AnyTypeClassTO>(
+ BaseModal.CONTENT_ID, new AnyTypeClassTO(), pageRef) {
- private static final long serialVersionUID = 1048000918946220007L;
+ private static final long serialVersionUID = -6388405037134399367L;
@Override
- public Object getDisplayValue(final AnyTypeClassTO object) {
- return object.getKey();
+ public ModalPanel<AnyTypeClassTO> build(final int index, final boolean edit) {
+ final AnyTypeClassTO modelObject = newModelObject();
+ return new AnyTypeClassModalPanel(modal, modelObject, pageRef) {
+
+ private static final long serialVersionUID = -6227956682141146095L;
+
+ @Override
+ public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+ try {
+ if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
+ SyncopeConsoleSession.get().getService(AnyTypeClassService.class).create(modelObject);
+ } else {
+ SyncopeConsoleSession.get().getService(AnyTypeClassService.class).update(modelObject);
+ }
+ info(getString(Constants.OPERATION_SUCCEEDED));
+ modal.close(target);
+ } catch (Exception e) {
+ LOG.error("While creating or updating AnyTypeClassTO", e);
+ error(getString(Constants.ERROR) + ": " + e.getMessage());
+ modal.getNotificationPanel().refresh(target);
+ }
+ }
+ };
}
@Override
- public String getIdValue(final AnyTypeClassTO object, final int index) {
- return object.getKey();
+ protected void onCancelInternal(final AnyTypeClassTO modelObject) {
}
@Override
- public AnyTypeClassTO getObject(final String id,
- final IModel<? extends List<? extends AnyTypeClassTO>> choices) {
- for (AnyTypeClassTO item : choices.getObject()) {
- if (item.getKey().equals(id)) {
- return item;
- }
- }
- return null;
+ protected void onApplyInternal(final AnyTypeClassTO modelObject) {
}
- });
+ }, true);
- anyTypeClasses.setNullValid(true);
- container.add(anyTypeClasses);
+ initResultTable();
+ MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.ANYTYPE_CREATE);
+ }
- updateAnyTypeClassDetails(new AnyTypeClassTO(), false);
- container.add(anyTypeClassesDetails);
+ @Override
+ protected AnyTypeClassesPanel.AnyTypeClassProvider dataProvider() {
+ return new AnyTypeClassesPanel.AnyTypeClassProvider(rows);
+ }
- anyTypeClasses.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+ @Override
+ protected String paginatorRowsKey() {
+ return Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+ }
- private static final long serialVersionUID = -1107858522700306810L;
+ @Override
+ protected Collection<ActionLink.ActionType> getBulkActions() {
+ return Collections.<ActionLink.ActionType>emptyList();
+ }
- @Override
- protected void onUpdate(final AjaxRequestTarget target) {
- updateAnyTypeClassDetails(anyTypeClasses.getModelObject(), true);
- container.addOrReplace(anyTypeClassesDetails);
- target.add(container);
- }
- });
+ @Override
+ protected String getPageId() {
+ return pageID;
+ }
- final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(pageRef);
- actionLinks.setDisableIndicator(true);
- actionLinks.addWithRoles(new ActionLink<Serializable>() {
+ @Override
+ protected List<IColumn<AnyTypeClassTO, String>> getColumns() {
- private static final long serialVersionUID = -3722207913631435501L;
+ final List<IColumn<AnyTypeClassTO, String>> columns = new ArrayList<>();
- @Override
- public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
- modal.header(new ResourceModel("createAnyTypeClass"));
- modal.setFormModel(new AnyTypeClassTO());
- modal.size(Modal.Size.Large);
- target.add(modal.setContent(new AnyTypeClassModalPanel(modal, pageRef, true)));
- modal.addSumbitButton();
- modal.show(true);
+ for (Field field : AnyTypeClassTO.class.getDeclaredFields()) {
+
+ if (field != null && !Modifier.isStatic(field.getModifiers())) {
+ final String fieldName = field.getName();
+ if (field.getType().isArray()) {
+ final IColumn<AnyTypeClassTO, String> column = new PropertyColumn<AnyTypeClassTO, String>(
+ new ResourceModel(field.getName()), field.getName()) {
+
+ private static final long serialVersionUID = 3282547854226892169L;
+
+ @Override
+ public String getCssClass() {
+ String css = super.getCssClass();
+ if ("key".equals(fieldName)) {
+ css = StringUtils.isBlank(css)
+ ? "medium_fixedsize"
+ : css + " medium_fixedsize";
+ }
+ return css;
+ }
+ };
+ columns.add(column);
+
+ } else {
+ final IColumn<AnyTypeClassTO, String> column = new PropertyColumn<AnyTypeClassTO, String>(
+ new ResourceModel(field.getName()), field.getName(), field.getName()) {
+
+ private static final long serialVersionUID = 3282547854226892169L;
+
+ @Override
+ public String getCssClass() {
+ String css = super.getCssClass();
+ if ("key".equals(fieldName)) {
+ css = StringUtils.isBlank(css)
+ ? "medium_fixedsize"
+ : css + " medium_fixedsize";
+ }
+ return css;
+ }
+ };
+ columns.add(column);
+ }
}
- }, ActionLink.ActionType.CREATE, StandardEntitlement.ANYTYPECLASS_CREATE).addWithRoles(
- new ActionLink<Serializable>() {
+ }
+
+ columns.add(new AbstractColumn<AnyTypeClassTO, String>(new ResourceModel("actions", "")) {
- private static final long serialVersionUID = -3722207913631435501L;
+ private static final long serialVersionUID = 2054811145491901166L;
@Override
- public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
- if (anyTypeClasses != null && anyTypeClasses.getModelObject() != null) {
- modal.header(Model.of(anyTypeClasses.getModelObject().getKey()));
- modal.setFormModel(anyTypeClasses.getModelObject());
- modal.addSumbitButton();
- modal.show(true);
- target.add(modal.setContent(new AnyTypeClassModalPanel(modal, pageRef, false)));
- }
+ public String getCssClass() {
+ return "action";
}
- }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPECLASS_UPDATE).addWithRoles(
+
+ @Override
+ public void populateItem(final Item<ICellPopulator<AnyTypeClassTO>> item, final String componentId,
+ final IModel<AnyTypeClassTO> model) {
+
+ final ActionLinksPanel.Builder<Serializable> actionLinks =
+ ActionLinksPanel.builder(page.getPageReference());
+ actionLinks.setDisableIndicator(true);
+ actionLinks.addWithRoles(new ActionLink<Serializable>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+ send(AnyTypeClassesPanel.this, Broadcast.EXACT,
+ new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+ }
+ }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPECLASS_UPDATE).addWithRoles(
new ActionLink<Serializable>() {
private static final long serialVersionUID = -3722207913631435501L;
@@ -155,35 +225,52 @@ public class AnyTypeClassesPanel extends Panel {
@Override
public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
try {
- if (anyTypeClasses != null && anyTypeClasses.getModelObject() != null) {
- SyncopeConsoleSession.get()
- .getService(AnyTypeClassService.class).delete(anyTypeClasses.getModelObject().
- getKey());
- anyTypeClasses.setModelObject(null);
- anyTypeClasses.setChoices(SyncopeConsoleSession.get().getService(
- AnyTypeClassService.class).
- list());
- target.add(anyTypeClasses);
- target.add(updateAnyTypeClassDetails(new AnyTypeClassTO(), true));
- info(getString(Constants.OPERATION_SUCCEEDED));
- }
+ SyncopeConsoleSession.get().
+ getService(AnyTypeClassService.class).delete(model.getObject().getKey());
+ info(getString(Constants.OPERATION_SUCCEEDED));
+ target.add(container);
} catch (Exception e) {
- LOG.error("While deleting AnyTypeClass", e);
+ LOG.error("While deleting AnyTypeClassTO", e);
error(getString(Constants.ERROR) + ": " + e.getMessage());
}
((AbstractBasePage) getPage()).getNotificationPanel().refresh(target);
}
}, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE);
- container.add(actionLinks.build("editRemove"));
+ item.add(actionLinks.build(componentId));
+ }
+ });
+
+ return columns;
+
}
- private Panel updateAnyTypeClassDetails(final AnyTypeClassTO anyTypeClassTO, final boolean visible) {
- anyTypeClassesDetails = new AnyTypeClassDetails("anyTypeClassesDetails", anyTypeClassTO, false);
- anyTypeClassesDetails.setOutputMarkupId(true);
- anyTypeClassesDetails.setOutputMarkupPlaceholderTag(true);
- anyTypeClassesDetails.setVisible(visible);
- anyTypeClassesDetails.setEnabled(false);
- return anyTypeClassesDetails;
+ protected final class AnyTypeClassProvider extends SearchableDataProvider<AnyTypeClassTO> {
+
+ private static final long serialVersionUID = -185944053385660794L;
+
+ private final SortableDataProviderComparator<AnyTypeClassTO> comparator;
+
+ private AnyTypeClassProvider(final int paginatorRows) {
+ super(paginatorRows);
+ comparator = new SortableDataProviderComparator<>(this);
+ }
+
+ @Override
+ public Iterator<AnyTypeClassTO> iterator(final long first, final long count) {
+ final List<AnyTypeClassTO> list = SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list();
+ Collections.sort(list, comparator);
+ return list.subList((int) first, (int) first + (int) count).iterator();
+ }
+
+ @Override
+ public long size() {
+ return SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list().size();
+ }
+
+ @Override
+ public IModel<AnyTypeClassTO> model(final AnyTypeClassTO object) {
+ return new CompoundPropertyModel<>(object);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/DerSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DerSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DerSchemaDetails.java
index e013dcb..5c4b7d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DerSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DerSchemaDetails.java
@@ -18,17 +18,12 @@
*/
package org.apache.syncope.client.console.panels;
-import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.JexlHelpUtils;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.common.lib.to.AbstractSchemaTO;
-import org.apache.syncope.common.lib.to.DerSchemaTO;
import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.PropertyModel;
public class DerSchemaDetails extends AbstractSchemaDetailsPanel {
@@ -37,8 +32,8 @@ public class DerSchemaDetails extends AbstractSchemaDetailsPanel {
public DerSchemaDetails(final String id,
final PageReference pageReference,
- final BaseModal<AbstractSchemaTO> modal) {
- super(id, pageReference, modal);
+ final AbstractSchemaTO schemaTO) {
+ super(id, pageReference, schemaTO);
final AjaxTextFieldPanel expression = new AjaxTextFieldPanel("expression", getString("expression"),
new PropertyModel<String>(schemaTO, "expression"));
@@ -51,25 +46,4 @@ public class DerSchemaDetails extends AbstractSchemaDetailsPanel {
schemaForm.add(questionMarkJexlHelp);
questionMarkJexlHelp.add(jexlHelp);
}
-
- @Override
- public void getOnSubmit(final AjaxRequestTarget target,
- final BaseModal<?> modal, final Form<?> form, final PageReference pageReference, final boolean createFlag) {
-
- try {
- final DerSchemaTO updatedDerSchemaTO = DerSchemaTO.class.cast(form.getModelObject());
- if (createFlag) {
- schemaRestClient.createDerSchema(updatedDerSchemaTO);
- } else {
- schemaRestClient.updateDerSchema(updatedDerSchemaTO);
- }
-
- info(getString(Constants.OPERATION_SUCCEEDED));
- modal.close(target);
- } catch (Exception e) {
- LOG.error("While creating or updating derived schema", e);
- error(getString(Constants.ERROR) + ": " + e.getMessage());
- modal.getNotificationPanel().refresh(target);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/NotificationPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/NotificationPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/NotificationPanel.java
index 2583a86..ce41387 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/NotificationPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/NotificationPanel.java
@@ -37,6 +37,7 @@ public class NotificationPanel extends FeedbackPanel {
public NotificationPanel(final String id) {
super(id);
+ //element.kendoNotification.widget.fn.options.autoHideAfter
final Options options = new Options();
options.set("position", "{ pinned: true }");
options.set("templates",
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
index f556680..2f6ed23 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
@@ -24,15 +24,15 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.JexlHelpUtils;
+import org.apache.syncope.client.console.commons.PropertyList;
import org.apache.syncope.client.console.init.MIMETypesLoader;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
-import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.AbstractSchemaTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.types.AttrSchemaType;
@@ -44,12 +44,10 @@ import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
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.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.util.string.Strings;
public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
@@ -65,14 +63,14 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
public PlainSchemaDetails(
final String id,
final PageReference pageReference,
- final BaseModal<AbstractSchemaTO> modal) {
- super(id, pageReference, modal);
+ final AbstractSchemaTO schemaTO) {
+ super(id, pageReference, schemaTO);
final AjaxDropDownChoicePanel<AttrSchemaType> type = new AjaxDropDownChoicePanel<>(
"type", getString("type"), new PropertyModel<AttrSchemaType>(schemaTO, "type"));
type.setChoices(Arrays.asList(AttrSchemaType.values()));
- type.setEnabled(schemaTO.getKey() == null || schemaTO.getKey().isEmpty());
+ type.setEnabled(schemaTO == null || schemaTO.getKey() == null || schemaTO.getKey().isEmpty());
type.addRequiredLabel();
schemaForm.add(type);
@@ -97,14 +95,80 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
final AjaxTextFieldPanel enumerationValuesPanel = new AjaxTextFieldPanel("panel", "enumerationValues",
new Model<String>(null));
- enumerationValues = new MultiFieldPanel.Builder<>(
- new ListModel<String>(getEnumValuesAsList(((PlainSchemaTO) schemaTO).getEnumerationValues()))).build(
+ enumerationValues = new MultiFieldPanel.Builder<String>(
+ new PropertyModel<List<String>>(schemaTO, "enumerationValues") {
+
+ private static final long serialVersionUID = -4953564762272833993L;
+
+ @Override
+ public PropertyList<PlainSchemaTO> getObject() {
+ return new PropertyList<PlainSchemaTO>(PlainSchemaTO.class.cast(schemaTO)) {
+
+ @Override
+ public String getValues() {
+ return PlainSchemaTO.class.cast(schemaTO).getEnumerationValues();
+ }
+
+ @Override
+ public void setValues(final List<String> list) {
+ PlainSchemaTO.class.cast(schemaTO).setEnumerationValues(getEnumValuesAsString(list));
+ }
+ };
+ }
+
+ @Override
+ public void setObject(final List<String> object) {
+ PlainSchemaTO.class.cast(schemaTO).setEnumerationValues(PropertyList.getEnumValuesAsString(object));
+ }
+ }) {
+
+ private static final long serialVersionUID = -8752965211744734798L;
+
+ @Override
+ protected String newModelObject() {
+ return StringUtils.EMPTY;
+ }
+
+ }.build(
"enumerationValues",
"enumerationValues",
enumerationValuesPanel);
- enumerationKeys = new MultiFieldPanel.Builder<>(
- new ListModel<String>(getEnumValuesAsList(((PlainSchemaTO) schemaTO).getEnumerationKeys()))).build(
+ enumerationKeys = new MultiFieldPanel.Builder<String>(
+ new PropertyModel<List<String>>(schemaTO, "enumerationKeys") {
+
+ private static final long serialVersionUID = -4953564762272833993L;
+
+ @Override
+ public PropertyList<PlainSchemaTO> getObject() {
+ return new PropertyList<PlainSchemaTO>(PlainSchemaTO.class.cast(schemaTO)) {
+
+ @Override
+ public String getValues() {
+ return PlainSchemaTO.class.cast(schemaTO).getEnumerationKeys();
+ }
+
+ @Override
+ public void setValues(final List<String> list) {
+ PlainSchemaTO.class.cast(schemaTO).setEnumerationKeys(PropertyList.getEnumValuesAsString(list));
+ }
+ };
+ }
+
+ @Override
+ public void setObject(final List<String> object) {
+ PlainSchemaTO.class.cast(schemaTO).setEnumerationKeys(PropertyList.getEnumValuesAsString(object));
+ }
+ }) {
+
+ private static final long serialVersionUID = -8752965211744734798L;
+
+ @Override
+ protected String newModelObject() {
+ return StringUtils.EMPTY;
+ }
+
+ }.build(
"enumerationKeys",
"enumerationKeys",
new AjaxTextFieldPanel("panel", "enumerationKeys", new Model<String>()));
@@ -172,7 +236,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
@Override
protected List<String> load() {
- return schemaRestClient.getAllValidatorClasses();
+ return new ArrayList<>(SyncopeConsoleSession.get().getSyncopeTO().getValidators());
}
};
@@ -182,8 +246,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
validatorClass.setChoices(validatorsList.getObject());
schemaForm.add(validatorClass);
- final AutoCompleteTextField<String> mandatoryCondition
- = new AutoCompleteTextField<String>("mandatoryCondition") {
+ final AutoCompleteTextField<String> mandatoryCondition =
+ new AutoCompleteTextField<String>("mandatoryCondition") {
private static final long serialVersionUID = -2428903969518079100L;
@@ -251,8 +315,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
if (enumerationValuesPanel.isRequired()) {
enumerationValuesPanel.removeRequiredLabel();
}
- enumerationValues.setModelObject(getEnumValuesAsList(null));
- enumerationKeys.setModelObject(getEnumValuesAsList(null));
+ enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+ enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
encryptedParams.setVisible(false);
if (secretKey.isRequired()) {
@@ -275,8 +339,10 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
if (!enumerationValuesPanel.isRequired()) {
enumerationValuesPanel.addRequiredLabel();
}
- enumerationValues.setModelObject(getEnumValuesAsList(((PlainSchemaTO) schema).getEnumerationValues()));
- enumerationKeys.setModelObject(getEnumValuesAsList(((PlainSchemaTO) schema).getEnumerationKeys()));
+ enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(((PlainSchemaTO) schema).
+ getEnumerationValues()));
+ enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(((PlainSchemaTO) schema).
+ getEnumerationKeys()));
encryptedParams.setVisible(false);
if (secretKey.isRequired()) {
@@ -299,8 +365,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
if (enumerationValuesPanel.isRequired()) {
enumerationValuesPanel.removeRequiredLabel();
}
- enumerationValues.setModelObject(getEnumValuesAsList(null));
- enumerationKeys.setModelObject(getEnumValuesAsList(null));
+ enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+ enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
encryptedParams.setVisible(true);
if (!secretKey.isRequired()) {
@@ -321,8 +387,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
if (enumerationValuesPanel.isRequired()) {
enumerationValuesPanel.removeRequiredLabel();
}
- enumerationValues.setModelObject(getEnumValuesAsList(null));
- enumerationKeys.setModelObject(getEnumValuesAsList(null));
+ enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+ enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
encryptedParams.setVisible(false);
if (secretKey.isRequired()) {
@@ -345,8 +411,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
if (enumerationValuesPanel.isRequired()) {
enumerationValuesPanel.removeRequiredLabel();
}
- enumerationValues.setModelObject(getEnumValuesAsList(null));
- enumerationKeys.setModelObject(getEnumValuesAsList(null));
+ enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+ enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
encryptedParams.setVisible(false);
if (secretKey.isRequired()) {
@@ -363,60 +429,4 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
mimeType.setChoices(null);
}
}
-
- private String getEnumValuesAsString(final List<String> enumerationValues) {
- final StringBuilder builder = new StringBuilder();
-
- for (String str : enumerationValues) {
- if (StringUtils.isNotBlank(str)) {
- if (builder.length() > 0) {
- builder.append(SyncopeConstants.ENUM_VALUES_SEPARATOR);
- }
-
- builder.append(str.trim());
- }
- }
-
- return builder.toString();
- }
-
- private List<String> getEnumValuesAsList(final String enumerationValues) {
- final List<String> values = new ArrayList<>();
-
- if (StringUtils.isNotBlank(enumerationValues)) {
- for (String value : enumerationValues.split(SyncopeConstants.ENUM_VALUES_SEPARATOR)) {
- values.add(value.trim());
- }
- } else {
- values.add(StringUtils.EMPTY);
- }
-
- return values;
- }
-
- @Override
- public void getOnSubmit(final AjaxRequestTarget target, final BaseModal<?> modal,
- final Form<?> form, final PageReference pageReference, final boolean createFlag) {
-
- try {
- final PlainSchemaTO updatedPlainSchemaTO = PlainSchemaTO.class.cast(form.getModelObject());
-
- updatedPlainSchemaTO.setEnumerationValues(
- getEnumValuesAsString(enumerationValues.getView().getModelObject()));
- updatedPlainSchemaTO.setEnumerationKeys(getEnumValuesAsString(enumerationKeys.getView().getModelObject()));
-
- if (createFlag) {
- schemaRestClient.createPlainSchema(updatedPlainSchemaTO);
- } else {
- schemaRestClient.updatePlainSchema(updatedPlainSchemaTO);
- }
-
- info(getString(Constants.OPERATION_SUCCEEDED));
- modal.close(target);
- } catch (Exception e) {
- LOG.error("While creating or updating plain schema", e);
- error(getString(Constants.ERROR) + ": " + e.getMessage());
- modal.getNotificationPanel().refresh(target);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5296cad/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
index bb30f7b..dabeb85 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
@@ -19,36 +19,30 @@
package org.apache.syncope.client.console.panels;
import java.util.Arrays;
-import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
import org.apache.syncope.common.lib.to.AbstractSchemaTO;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-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.model.Model;
public class SchemaModalPanel extends AbstractModalPanel<AbstractSchemaTO> {
private static final long serialVersionUID = -4681998932778822125L;
- private AbstractSchemaDetailsPanel schemaPanel;
+ private final AbstractSchemaDetailsPanel schemaPanel;
- private final boolean createFlag;
+ private final AbstractSchemaTO schemaTO;
public SchemaModalPanel(
final BaseModal<AbstractSchemaTO> modal,
- final PageReference pageRef, final boolean createFlag) {
+ final AbstractSchemaTO schemaTO,
+ final PageReference pageRef) {
super(modal, pageRef);
- this.createFlag = createFlag;
- final BaseModal<AbstractSchemaTO> schemaModal = modal;
+ this.schemaTO = schemaTO;
- final Panel panel = this;
final Form<SchemaType> kindForm = new Form<>("kindForm");
add(kindForm);
@@ -57,29 +51,11 @@ public class SchemaModalPanel extends AbstractModalPanel<AbstractSchemaTO> {
kind.setChoices(Arrays.asList(SchemaType.values()));
kind.setOutputMarkupId(true);
- SchemaType schemaType = SchemaType.PLAIN;
- if (!createFlag) {
- schemaType = SchemaType.fromToClass(schemaModal.getFormModel().getClass());
- kind.setModelObject(schemaType);
- kind.setEnabled(false);
- }
-
- ((DropDownChoice) kind.getField()).setNullValid(false);
+ kind.setModelObject(SchemaType.fromToClass(schemaTO.getClass()));
+ kind.setEnabled(false);
kindForm.add(kind);
- kind.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
- private static final long serialVersionUID = -1107858522700306810L;
-
- @Override
- protected void onUpdate(final AjaxRequestTarget target) {
- schemaPanel = getSchemaPanel("details", kind.getModelObject(), modal);
- panel.addOrReplace(schemaPanel);
- target.add(panel);
- }
- });
-
- schemaPanel = getSchemaPanel("details", schemaType, modal);
+ schemaPanel = getSchemaPanel("details", SchemaType.fromToClass(schemaTO.getClass()), modal);
schemaPanel.setOutputMarkupId(true);
addOrReplace(schemaPanel);
}
@@ -88,7 +64,7 @@ public class SchemaModalPanel extends AbstractModalPanel<AbstractSchemaTO> {
final SchemaType schemaType, final BaseModal<AbstractSchemaTO> modal) {
final AbstractSchemaDetailsPanel panel;
- if (createFlag) {
+ if (schemaTO.getKey() != null) {
try {
final Class<? extends AbstractSchemaTO> schemaTOClass = schemaType.getToClass();
modal.setFormModel((AbstractSchemaTO) schemaTOClass.newInstance());
@@ -99,21 +75,16 @@ public class SchemaModalPanel extends AbstractModalPanel<AbstractSchemaTO> {
switch (schemaType) {
case DERIVED:
- panel = new DerSchemaDetails(id, pageRef, modal);
+ panel = new DerSchemaDetails(id, pageRef, schemaTO);
break;
case VIRTUAL:
- panel = new VirSchemaDetails(id, pageRef, modal);
+ panel = new VirSchemaDetails(id, pageRef, schemaTO);
break;
case PLAIN:
default:
- panel = new PlainSchemaDetails(id, pageRef, modal);
+ panel = new PlainSchemaDetails(id, pageRef, schemaTO);
}
panel.setOutputMarkupId(true);
return panel;
}
-
- @Override
- public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
- schemaPanel.getOnSubmit(target, modal, form, pageRef, createFlag);
- }
}