From db8190ca7d31831c0ffa9d152fb4905e2f862461 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Thu, 14 Jul 2016 15:11:06 +0200 Subject: [PATCH 1/5] fixing execute changes task handler - concrete type for delta instead of FocusType.. --- .../midpoint/model/impl/sync/ExecuteChangesTaskHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java index 451975ae297..620de1ef4e5 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java @@ -104,6 +104,9 @@ private void executeChange(PrismObject focalObject, Task coordinatorT ObjectDelta delta = createDeltaFromTask(coordinatorTask); delta.setOid(focalObject.getOid()); + if (focalObject.getCompileTimeClass() != null) { + delta.setObjectTypeClass(focalObject.getCompileTimeClass()); + } prismContext.adopt(delta); Collection> deltas = new ArrayList<>(); From f222764c7510f988ff94e7238d4684395c45c649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20L=C3=ADzner?= Date: Thu, 14 Jul 2016 15:13:13 +0200 Subject: [PATCH 2/5] Travis oraclejdk8 build --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0ab263f7fc..a743e1fc463 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,13 +22,13 @@ script: mvn clean install addons: hostname: localhost # workaround for short hostname - #apt: - # packages: - # - oracle-java8-installer # install newest JDK8 + apt: + packages: + - oracle-java8-installer # install newest JDK8 #- openjdk-8-jdk jdk: - openjdk7 - oraclejdk7 #- openjdk8 - #- oraclejdk8 + - oraclejdk8 From a57e736b45dc0a2fe4c0a288d1bd1bf70578c718 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Thu, 14 Jul 2016 17:41:51 +0200 Subject: [PATCH 3/5] splitting list resources page to list resources and list connector hosts pages.. --- .../midpoint/gui/api/page/PageBase.java | 4 + .../admin/resources/PageAdminResources.java | 4 + .../admin/resources/PageConnectorHosts.html | 26 ++ .../admin/resources/PageConnectorHosts.java | 354 ++++++++++++++++++ .../page/admin/resources/PageResources.html | 4 - .../page/admin/resources/PageResources.java | 192 +--------- .../localization/Midpoint.properties | 3 + .../security/api/AuthorizationConstants.java | 4 + 8 files changed, 399 insertions(+), 192 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index 74907eee338..0bfd8b36e6d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -141,6 +141,7 @@ import com.evolveum.midpoint.web.page.admin.reports.PageNewReport; import com.evolveum.midpoint.web.page.admin.reports.PageReport; import com.evolveum.midpoint.web.page.admin.reports.PageReports; +import com.evolveum.midpoint.web.page.admin.resources.PageConnectorHosts; import com.evolveum.midpoint.web.page.admin.resources.PageImportResource; import com.evolveum.midpoint.web.page.admin.resources.PageResource; import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard; @@ -1082,6 +1083,9 @@ private MainMenuItem createResourcesItems() { PageImportResource.class); submenu.add(n); + MenuItem connectorHostsList = new MenuItem(createStringResource("PageAdmin.menu.top.connectorHosts.list"), + PageConnectorHosts.class); + submenu.add(connectorHostsList); return item; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageAdminResources.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageAdminResources.java index feac34cd2ba..60e21bbba66 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageAdminResources.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageAdminResources.java @@ -62,6 +62,10 @@ public class PageAdminResources extends PageAdmin { private static final String OPERATION_SAVE_SYNC_TASK = DOT_CLASS + "saveSyncTask"; protected static final Trace LOGGER = TraceManager.getTrace(PageAdminResources.class); + + public static final String AUTH_CONNECTOR_HOSTS_ALL = AuthorizationConstants.AUTZ_UI_CONNECTOR_HOSTS_ALL_URL; + public static final String AUTH_CONNECTOR_HOSTS_ALL_LABEL = "PageAdminResources.auth.connectorHostsAll.label"; + public static final String AUTH_CONNECTOR_HOSTS_ALL_DESCRIPTION = "PageAdminResources.auth.connectorHostsAll.description"; public static final String AUTH_RESOURCE_ALL = AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL; public static final String AUTH_RESOURCE_ALL_LABEL = "PageAdminResources.auth.resourcesAll.label"; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.html new file mode 100644 index 00000000000..0add8a6be3f --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.html @@ -0,0 +1,26 @@ + + + + + + +
+
+ + + + \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.java new file mode 100644 index 00000000000..cb04c8510e8 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageConnectorHosts.java @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2010-2015 Evolveum + * + * Licensed 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 com.evolveum.midpoint.web.page.admin.resources; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel; +import com.evolveum.midpoint.web.component.search.*; +import com.evolveum.midpoint.web.session.PageStorage; +import com.evolveum.midpoint.web.session.SessionStorage; +import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; +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.Form; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.evolveum.midpoint.gui.api.GuiStyleConstants; +import com.evolveum.midpoint.gui.api.component.MainObjectListPanel; +import com.evolveum.midpoint.gui.api.model.LoadableModel; +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.prism.delta.ObjectDelta; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.schema.GetOperationOptions; +import com.evolveum.midpoint.schema.RetrieveOption; +import com.evolveum.midpoint.schema.SelectorOptions; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.result.OperationResultStatus; +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.logging.LoggingUtils; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider; +import com.evolveum.midpoint.web.component.data.BoxedTablePanel; +import com.evolveum.midpoint.web.component.data.ObjectDataProvider; +import com.evolveum.midpoint.web.component.data.Table; +import com.evolveum.midpoint.web.component.data.column.CheckBoxColumn; +import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn; +import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction; +import com.evolveum.midpoint.web.component.data.column.InlineMenuHeaderColumn; +import com.evolveum.midpoint.web.component.data.column.LinkColumn; +import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; +import com.evolveum.midpoint.web.component.util.SelectableBean; +import com.evolveum.midpoint.web.page.admin.configuration.PageDebugView; +import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction; +import com.evolveum.midpoint.web.session.ResourcesStorage; +import com.evolveum.midpoint.web.session.UserProfileStorage; +import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorHostType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; + +/** + * @author lazyman + */ +@PageDescriptor(url = "/admin/connectorHosts", action = { + @AuthorizationAction(actionUri = PageAdminResources.AUTH_CONNECTOR_HOSTS_ALL, label = PageAdminResources.AUTH_CONNECTOR_HOSTS_ALL_LABEL, description = PageAdminResources.AUTH_CONNECTOR_HOSTS_ALL_DESCRIPTION), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CONNECTOR_HOSTS_ALL_URL, label = "PageResources.auth.connectorHosts.label", description = "PageResources.auth.connectorHosts.description") }) +public class PageConnectorHosts extends PageAdminResources { + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(PageConnectorHosts.class); + private static final String DOT_CLASS = PageConnectorHosts.class.getName() + "."; + private static final String OPERATION_DELETE_HOSTS = DOT_CLASS + "deleteHosts"; + private static final String OPERATION_CONNECTOR_DISCOVERY = DOT_CLASS + "connectorDiscovery"; + + private static final String ID_MAIN_FORM = "mainForm"; + private static final String ID_CONNECTOR_TABLE = "connectorTable"; + + private IModel searchModel; + + public PageConnectorHosts() { + this(true); + } + + public PageConnectorHosts(boolean clearSessionPaging) { + this(clearSessionPaging, ""); + } + + public PageConnectorHosts(String searchText) { + this(true, searchText); + } + + public PageConnectorHosts(boolean clearSessionPaging, String searchText) { + + searchModel = new LoadableModel(false) { + private static final long serialVersionUID = 1L; + + @Override + protected Search load() { + return SearchFactory.createSearch(ConnectorHostType.class, getPrismContext(), + getModelInteractionService()); + } + }; + + initLayout(); + } + + private void initLayout() { + Form mainForm = new Form<>(ID_MAIN_FORM); + add(mainForm); + + BoxedTablePanel connectorHosts = new BoxedTablePanel( + ID_CONNECTOR_TABLE, + new ObjectDataProvider(PageConnectorHosts.this, + ConnectorHostType.class), + initConnectorHostsColumns(), UserProfileStorage.TableId.PAGE_RESOURCES_CONNECTOR_HOSTS, + (int) getItemsPerPage(UserProfileStorage.TableId.PAGE_RESOURCES_CONNECTOR_HOSTS)) { + private static final long serialVersionUID = 1L; + + @Override + protected WebMarkupContainer createHeader(String headerId) { + return new SearchFormPanel(headerId, searchModel) { + private static final long serialVersionUID = 1L; + + @Override + protected void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { + PageConnectorHosts.this.searchHostPerformed(query, target); + } + }; + } + }; + connectorHosts.setOutputMarkupId(true); + mainForm.add(connectorHosts); + } + + private List> initConnectorHostsColumns() { + List> columns = new ArrayList<>(); + + IColumn column = new CheckBoxHeaderColumn(); + columns.add(column); + + column = new LinkColumn>( + createStringResource("pageResources.connector.name"), "name", "value.name") { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target, + IModel> rowModel) { + ConnectorHostType host = rowModel.getObject().getValue(); + // resourceDetailsPerformed(target, host.getOid()); + } + }; + columns.add(column); + + columns.add(new PropertyColumn(createStringResource("pageResources.connector.hostname"), + "value.hostname")); + columns.add(new PropertyColumn(createStringResource("pageResources.connector.port"), "value.port")); + columns.add( + new PropertyColumn(createStringResource("pageResources.connector.timeout"), "value.timeout")); + columns.add(new CheckBoxColumn(createStringResource("pageResources.connector.protectConnection"), + "value.protectConnection")); + + InlineMenuHeaderColumn menu = new InlineMenuHeaderColumn(initInlineHostsMenu()); + columns.add(menu); + + return columns; + } + + private List initInlineHostsMenu() { + List headerMenuItems = new ArrayList<>(); + headerMenuItems.add(new InlineMenuItem(createStringResource("PageBase.button.delete"), + new HeaderMenuAction(this) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + deleteHostPerformed(target); + } + })); + headerMenuItems.add(new InlineMenuItem(createStringResource("pageResources.button.discoveryRemote"), + new HeaderMenuAction(this) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + discoveryRemotePerformed(target); + } + })); + + return headerMenuItems; + } + + private void deleteHostPerformed(AjaxRequestTarget target) { + List> selected = WebComponentUtil + .getSelectedData(getConnectorHostTable()); + if (selected.isEmpty()) { + warn(getString("pageResources.message.noHostSelected")); + target.add(getFeedbackPanel()); + return; + } + + ConfirmationPanel dialog = new ConfirmationPanel(((PageBase) getPage()).getMainPopupBodyId(), + createDeleteConfirmString("pageResources.message.deleteHostConfirm", + "pageResources.message.deleteHostsConfirm", false)) { + private static final long serialVersionUID = 1L; + @Override + public void yesPerformed(AjaxRequestTarget target) { + ((PageBase) getPage()).hideMainPopup(target); + deleteHostConfirmedPerformed(target); + } + }; + ((PageBase) getPage()).showMainPopup(dialog, target); + + } + + private Table getConnectorHostTable() { + return (Table) get(createComponentPath(ID_MAIN_FORM, ID_CONNECTOR_TABLE)); + } + + /** + * @param oneDeleteKey + * message if deleting one item + * @param moreDeleteKey + * message if deleting more items + * @param resources + * if true selecting resources if false selecting from hosts + */ + private IModel createDeleteConfirmString(final String oneDeleteKey, final String moreDeleteKey, + final boolean resources) { + return new AbstractReadOnlyModel() { + private static final long serialVersionUID = 1L; + @Override + public String getObject() { + List> selected = WebComponentUtil.getSelectedData(getConnectorHostTable()); + + switch (selected.size()) { + case 1: + Object first = selected.get(0); + String name = WebComponentUtil + .getName(((SelectableBean) first).getValue()); + return createStringResource(oneDeleteKey, name).getString(); + default: + return createStringResource(moreDeleteKey, selected.size()).getString(); + } + } + }; + } + + private void deleteHostConfirmedPerformed(AjaxRequestTarget target) { + Table hostTable = getConnectorHostTable(); + List> selected = WebComponentUtil.getSelectedData(hostTable); + + OperationResult result = new OperationResult(OPERATION_DELETE_HOSTS); + for (SelectableBean selectable : selected) { + try { + Task task = createSimpleTask(OPERATION_DELETE_HOSTS); + + ObjectDelta delta = ObjectDelta.createDeleteDelta(ConnectorHostType.class, + selectable.getValue().getOid(), getPrismContext()); + getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, + result); + } catch (Exception ex) { + result.recordPartialError("Couldn't delete host.", ex); + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete host", ex); + } + } + + result.recomputeStatus(); + if (result.isSuccess()) { + result.recordStatus(OperationResultStatus.SUCCESS, + "The resource(s) have been successfully deleted."); + } + + BaseSortableDataProvider provider = (BaseSortableDataProvider) hostTable.getDataTable() + .getDataProvider(); + provider.clearCache(); + + showResult(result); + target.add(getFeedbackPanel(), (Component) hostTable); + } + + private void discoveryRemotePerformed(AjaxRequestTarget target) { + target.add(getFeedbackPanel()); + + PageBase page = (PageBase) getPage(); + Task task = page.createSimpleTask(OPERATION_CONNECTOR_DISCOVERY); + OperationResult result = task.getResult(); + List> selected = WebComponentUtil + .getSelectedData(getConnectorHostTable()); + if (selected.isEmpty()) { + warn(getString("pageResources.message.noHostSelected")); + return; + } + + for (SelectableBean bean : selected) { + ConnectorHostType host = bean.getValue(); + try { + getModelService().discoverConnectors(host, task, result); + } catch (Exception ex) { + result.recordFatalError("Fail to discover connectors on host '" + host.getHostname() + ":" + + host.getPort() + "'", ex); + } + } + + result.recomputeStatus(); + showResult(result); + } + + private void searchHostPerformed(ObjectQuery query, AjaxRequestTarget target) { + target.add(getFeedbackPanel()); + + Table panel = getConnectorHostTable(); + DataTable table = panel.getDataTable(); + ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider(); + provider.setQuery(query); + provider.setOptions(SelectorOptions.createCollection(GetOperationOptions.createNoFetch())); + + target.add((Component) panel); + } + + private void deleteResourceSyncTokenPerformed(AjaxRequestTarget target, ResourceType resourceType) { + deleteSyncTokenPerformed(target, resourceType); + } + + private void editResourcePerformed(ResourceType resourceType) { + PageParameters parameters = new PageParameters(); + parameters.add(OnePageParameterEncoder.PARAMETER, resourceType.getOid()); + setResponsePage(new PageResourceWizard(parameters)); + } + + private void editAsXmlPerformed(ResourceType resourceType) { + PageParameters parameters = new PageParameters(); + parameters.add(PageDebugView.PARAM_OBJECT_ID, resourceType.getOid()); + parameters.add(PageDebugView.PARAM_OBJECT_TYPE, ResourceType.class.getSimpleName()); + setResponsePage(PageDebugView.class, parameters); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.html index 35fc2f62bc2..9cffaf6736c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.html @@ -19,11 +19,7 @@
-

- -

-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.java index e413bc7b65e..76a4f00fe94 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResources.java @@ -84,20 +84,17 @@ @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_RESOURCES_URL, label = "PageResources.auth.resources.label", description = "PageResources.auth.resources.description") }) public class PageResources extends PageAdminResources { + private static final long serialVersionUID = 1L; private static final Trace LOGGER = TraceManager.getTrace(PageResources.class); private static final String DOT_CLASS = PageResources.class.getName() + "."; private static final String OPERATION_TEST_RESOURCE = DOT_CLASS + "testResource"; - private static final String OPERATION_SYNC_STATUS = DOT_CLASS + "syncStatus"; private static final String OPERATION_DELETE_RESOURCES = DOT_CLASS + "deleteResources"; - private static final String OPERATION_DELETE_HOSTS = DOT_CLASS + "deleteHosts"; - private static final String OPERATION_CONNECTOR_DISCOVERY = DOT_CLASS + "connectorDiscovery"; private static final String ID_MAIN_FORM = "mainForm"; private static final String ID_TABLE = "table"; private static final String ID_CONNECTOR_TABLE = "connectorTable"; private IModel searchModel; - private IModel chSearchModel; private ResourceType singleDelete; public PageResources() { @@ -115,6 +112,7 @@ public PageResources(String searchText) { public PageResources(boolean clearSessionPaging, String searchText) { searchModel = new LoadableModel(false) { + private static final long serialVersionUID = 1L; @Override protected Search load() { ResourcesStorage storage = getSessionStorage().getResources(); @@ -129,15 +127,6 @@ protected Search load() { } }; - chSearchModel = new LoadableModel(false) { - - @Override - protected Search load() { - return SearchFactory.createSearch(ConnectorHostType.class, getPrismContext(), - getModelInteractionService()); - } - }; - if (StringUtils.isNotEmpty(searchText)){ initSearch(searchText); } @@ -198,26 +187,6 @@ protected void newObjectPerformed(AjaxRequestTarget target) { resourceListPanel.setAdditionalBoxCssClasses(GuiStyleConstants.CLASS_OBJECT_RESOURCE_BOX_CSS_CLASSES); mainForm.add(resourceListPanel); - BoxedTablePanel connectorHosts = new BoxedTablePanel(ID_CONNECTOR_TABLE, - new ObjectDataProvider(PageResources.this, ConnectorHostType.class), - initConnectorHostsColumns(), UserProfileStorage.TableId.PAGE_RESOURCES_CONNECTOR_HOSTS, - (int) getItemsPerPage(UserProfileStorage.TableId.PAGE_RESOURCES_CONNECTOR_HOSTS)) { - private static final long serialVersionUID = 1L; - - @Override - protected WebMarkupContainer createHeader(String headerId) { - return new SearchFormPanel(headerId, chSearchModel) { - private static final long serialVersionUID = 1L; - - @Override - protected void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { - PageResources.this.searchHostPerformed(query, target); - } - }; - } - }; - connectorHosts.setOutputMarkupId(true); - mainForm.add(connectorHosts); } private List createRowMenuItems() { @@ -305,88 +274,12 @@ public void onClick(AjaxRequestTarget target) { return headerMenuItems; } - private List> initConnectorHostsColumns() { - List> columns = new ArrayList<>(); - - IColumn column = new CheckBoxHeaderColumn(); - columns.add(column); - - column = new LinkColumn>( - createStringResource("pageResources.connector.name"), "name", "value.name") { - - @Override - public void onClick(AjaxRequestTarget target, - IModel> rowModel) { - ConnectorHostType host = rowModel.getObject().getValue(); - // resourceDetailsPerformed(target, host.getOid()); - } - }; - columns.add(column); - - columns.add(new PropertyColumn(createStringResource("pageResources.connector.hostname"), - "value.hostname")); - columns.add(new PropertyColumn(createStringResource("pageResources.connector.port"), "value.port")); - columns.add( - new PropertyColumn(createStringResource("pageResources.connector.timeout"), "value.timeout")); - columns.add(new CheckBoxColumn(createStringResource("pageResources.connector.protectConnection"), - "value.protectConnection")); - - InlineMenuHeaderColumn menu = new InlineMenuHeaderColumn(initInlineHostsMenu()); - columns.add(menu); - - return columns; - } - - private List initInlineHostsMenu() { - List headerMenuItems = new ArrayList<>(); - headerMenuItems.add(new InlineMenuItem(createStringResource("PageBase.button.delete"), - new HeaderMenuAction(this) { - - @Override - public void onClick(AjaxRequestTarget target) { - deleteHostPerformed(target); - } - })); - headerMenuItems.add(new InlineMenuItem(createStringResource("pageResources.button.discoveryRemote"), - new HeaderMenuAction(this) { - - @Override - public void onClick(AjaxRequestTarget target) { - discoveryRemotePerformed(target); - } - })); - - return headerMenuItems; - } - private void resourceDetailsPerformed(AjaxRequestTarget target, String oid) { PageParameters parameters = new PageParameters(); parameters.add(OnePageParameterEncoder.PARAMETER, oid); setResponsePage(PageResource.class, parameters); } - private void deleteHostPerformed(AjaxRequestTarget target) { - List> selected = WebComponentUtil - .getSelectedData(getConnectorHostTable()); - if (selected.isEmpty()) { - warn(getString("pageResources.message.noHostSelected")); - target.add(getFeedbackPanel()); - return; - } - - ConfirmationPanel dialog = new ConfirmationPanel(((PageBase)getPage()).getMainPopupBodyId(), - createDeleteConfirmString("pageResources.message.deleteHostConfirm", - "pageResources.message.deleteHostsConfirm", false)){ - @Override - public void yesPerformed(AjaxRequestTarget target) { - ((PageBase)getPage()).hideMainPopup(target); - deleteHostConfirmedPerformed(target); - } - }; - ((PageBase)getPage()).showMainPopup(dialog, target); - - } - private List isAnyResourceSelected(AjaxRequestTarget target, ResourceType single) { List selected = null; if (single != null) { @@ -445,22 +338,16 @@ private IModel createDeleteConfirmString(final String oneDeleteKey, fina @Override public String getObject() { List selected = new ArrayList(); - if (resources) { if (singleDelete != null) { selected.add(singleDelete); } else { selected = getResourceTable().getSelectedObjects(); } - } else { - selected = WebComponentUtil.getSelectedData(getConnectorHostTable()); - } - + switch (selected.size()) { case 1: Object first = selected.get(0); - String name = resources ? WebComponentUtil.getName(((ResourceType) first)) - : WebComponentUtil - .getName(((SelectableBean) first).getValue()); + String name = WebComponentUtil.getName(((ResourceType) first)); return createStringResource(oneDeleteKey, name).getString(); default: return createStringResource(moreDeleteKey, selected.size()).getString(); @@ -469,39 +356,6 @@ public String getObject() { }; } - private void deleteHostConfirmedPerformed(AjaxRequestTarget target) { - Table hostTable = getConnectorHostTable(); - List> selected = WebComponentUtil.getSelectedData(hostTable); - - OperationResult result = new OperationResult(OPERATION_DELETE_HOSTS); - for (SelectableBean selectable : selected) { - try { - Task task = createSimpleTask(OPERATION_DELETE_HOSTS); - - ObjectDelta delta = ObjectDelta.createDeleteDelta(ConnectorHostType.class, - selectable.getValue().getOid(), getPrismContext()); - getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, - result); - } catch (Exception ex) { - result.recordPartialError("Couldn't delete host.", ex); - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete host", ex); - } - } - - result.recomputeStatus(); - if (result.isSuccess()) { - result.recordStatus(OperationResultStatus.SUCCESS, - "The resource(s) have been successfully deleted."); - } - - BaseSortableDataProvider provider = (BaseSortableDataProvider) hostTable.getDataTable() - .getDataProvider(); - provider.clearCache(); - - showResult(result); - target.add(getFeedbackPanel(), (Component) hostTable); - } - private void deleteResourceConfirmedPerformed(AjaxRequestTarget target) { List selected = new ArrayList<>(); @@ -538,33 +392,6 @@ private void deleteResourceConfirmedPerformed(AjaxRequestTarget target) { target.add(getFeedbackPanel(), (Component) getResourceTable()); } - private void discoveryRemotePerformed(AjaxRequestTarget target) { - target.add(getFeedbackPanel()); - - PageBase page = (PageBase) getPage(); - Task task = page.createSimpleTask(OPERATION_CONNECTOR_DISCOVERY); - OperationResult result = task.getResult(); - List> selected = WebComponentUtil - .getSelectedData(getConnectorHostTable()); - if (selected.isEmpty()) { - warn(getString("pageResources.message.noHostSelected")); - return; - } - - for (SelectableBean bean : selected) { - ConnectorHostType host = bean.getValue(); - try { - getModelService().discoverConnectors(host, task, result); - } catch (Exception ex) { - result.recordFatalError("Fail to discover connectors on host '" + host.getHostname() + ":" - + host.getPort() + "'", ex); - } - } - - result.recomputeStatus(); - showResult(result); - } - private void testResourcePerformed(AjaxRequestTarget target, ResourceType resourceType) { OperationResult result = new OperationResult(OPERATION_TEST_RESOURCE); @@ -604,17 +431,6 @@ private void testResourcePerformed(AjaxRequestTarget target, ResourceType resour target.add(getResourceTable()); } - private void searchHostPerformed(ObjectQuery query, AjaxRequestTarget target) { - target.add(getFeedbackPanel()); - - Table panel = getConnectorHostTable(); - DataTable table = panel.getDataTable(); - ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider(); - provider.setQuery(query); - provider.setOptions(SelectorOptions.createCollection(GetOperationOptions.createNoFetch())); - - target.add((Component) panel); - } private void deleteResourceSyncTokenPerformed(AjaxRequestTarget target, ResourceType resourceType) { deleteSyncTokenPerformed(target, resourceType); diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 41a648faa4e..d115f96e22d 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -988,6 +988,7 @@ PageAdmin.menu.top.resources.new=New resource PageAdmin.menu.top.resources.view=View resource PageAdmin.menu.top.resources.edit=Edit resource PageAdmin.menu.top.resources=Resources +PageAdmin.menu.top.connectorHosts.list=List connector hosts PageAdmin.menu.top.roles.list=List roles PageAdmin.menu.top.roles.new=New role PageAdmin.menu.top.roles=Roles @@ -3255,3 +3256,5 @@ operation.com.evolveum.midpoint.web.page.admin.services.PageServices.reconcileOb operation.com.evolveum.midpoint.web.page.admin.services.PageServices.reconcileObject=Reconcile service (GUI) operation.com.evolveum.midpoint.web.page.admin.services.PageServices.deleteObjects=Delete services (GUI) operation.com.evolveum.midpoint.web.page.admin.services.PageServices.deleteObject=Delete service (GUI) +operation.com.evolveum.midpoint.web.page.admin.resources.ResourceContentTabPanel.importObject=Import object (GUI) +PageConnectorHosts.title=Connector hosts \ No newline at end of file diff --git a/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java b/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java index b3e91eafa2d..55234de4d2f 100644 --- a/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java +++ b/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java @@ -110,6 +110,10 @@ public class AuthorizationConstants { public static final QName AUTZ_UI_RESOURCES_QNAME = new QName(NS_AUTHORIZATION_UI, "resources"); public static final String AUTZ_UI_RESOURCES_URL = NS_AUTHORIZATION_UI + "#resources"; + + public static final QName AUTZ_UI_CONNECTOR_HOSTS_ALL_QNAME = new QName(NS_AUTHORIZATION_UI, "connectorHostsAll"); + public static final String AUTZ_UI_CONNECTOR_HOSTS_ALL_URL = NS_AUTHORIZATION_UI + "#connectorHostsAll"; + // Resource XML editor public static final QName AUTZ_UI_RESOURCE_QNAME = new QName(NS_AUTHORIZATION_UI, "resource"); From d4c08811d41c5e36b88ed5d58c13657c1f1ec2a7 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Thu, 14 Jul 2016 17:42:24 +0200 Subject: [PATCH 4/5] support for path in report data source.. --- .../evolveum/midpoint/report/impl/MidPointDataSource.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/MidPointDataSource.java b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/MidPointDataSource.java index 18ab11cc10f..cb61edefd6f 100644 --- a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/MidPointDataSource.java +++ b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/MidPointDataSource.java @@ -23,10 +23,12 @@ import com.evolveum.midpoint.prism.PrismReference; import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.Referencable; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectListType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; public class MidPointDataSource implements JRDataSource{ @@ -76,7 +78,9 @@ public Object getFieldValue(JRField jrField) throws JRException { return ((PrismContainer) parent1).getParent(); } - Item i = currentObject.findItem(new QName(fieldName)); + ItemPathType itemPathType = new ItemPathType(fieldName); + ItemPath path = itemPathType.getItemPath(); + Item i = currentObject.findItem(path); if (i == null) { return null; } From c00f607d678d3c26e863b40d8e358d6935552347 Mon Sep 17 00:00:00 2001 From: Ivan Noris Date: Fri, 15 Jul 2016 12:50:43 +0200 Subject: [PATCH 5/5] Added note about role in progress that should not be imported --- samples/stories/multitenant-idm-saas/readme.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/stories/multitenant-idm-saas/readme.txt b/samples/stories/multitenant-idm-saas/readme.txt index d1e6ed895f5..2462644698c 100644 --- a/samples/stories/multitenant-idm-saas/readme.txt +++ b/samples/stories/multitenant-idm-saas/readme.txt @@ -148,7 +148,8 @@ your CSV file with customer info! - Import password policies - Import object templates - Import resources -- Import roles +- Import roles (Please do not import/use "role-meta-ldap-customer-group.xml", +it's work in progress.) - System Configuration: Object Policies: UserType = "User Template" - System Configuration: Object Policies: OrgType = "Organization Object Template" - Resource "CRM Simulation" - click Content, and import any of the entries by