From 32b7eb2cf43b4f4ab6433a312f3ebb2209b941b6 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:15:06 -0500 Subject: [PATCH 01/80] Add necessary schema changes to support subtype for IOC machine element. #1670 --- db/sql/static/populate_allowed_entity_type_domain.sql | 3 ++- db/sql/static/populate_entity_type.sql | 3 ++- db/sql/updates/updateTo3.17.0.sql | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 db/sql/updates/updateTo3.17.0.sql diff --git a/db/sql/static/populate_allowed_entity_type_domain.sql b/db/sql/static/populate_allowed_entity_type_domain.sql index 022052006..753c1861d 100644 --- a/db/sql/static/populate_allowed_entity_type_domain.sql +++ b/db/sql/static/populate_allowed_entity_type_domain.sql @@ -12,6 +12,7 @@ INSERT INTO `allowed_entity_type_domain` VALUES (6,7), (6,8), (6,9), -(6,10); +(6,10), +(6,11); /*!40000 ALTER TABLE `allowed_entity_type_domain` ENABLE KEYS */; UNLOCK TABLES; diff --git a/db/sql/static/populate_entity_type.sql b/db/sql/static/populate_entity_type.sql index 1166556ad..b1e87cd01 100644 --- a/db/sql/static/populate_entity_type.sql +++ b/db/sql/static/populate_entity_type.sql @@ -10,6 +10,7 @@ INSERT INTO `entity_type` VALUES (7,'Inventory','Entity type used for marking a sub domain of intevntory type items.'), (8,'Deleted','Entity type used for marking an item deleted.'), (9,'Control','Entity type used for marking a sub domain of control type items.'), -(10,'Power','Entity type used for marking a sub domain of power type items.'); +(10,'Power','Entity type used for marking a sub domain of power type items.'), +(11,'IOC','Entity type used for marking a sub domain of ioc type items.'); /*!40000 ALTER TABLE `entity_type` ENABLE KEYS */; UNLOCK TABLES; diff --git a/db/sql/updates/updateTo3.17.0.sql b/db/sql/updates/updateTo3.17.0.sql new file mode 100644 index 000000000..e2012fba0 --- /dev/null +++ b/db/sql/updates/updateTo3.17.0.sql @@ -0,0 +1,10 @@ +-- +-- Copyright (c) UChicago Argonne, LLC. All rights reserved. +-- See LICENSE file. +-- + +-- Execute by running `mysql CDB_DB_NAME -h 127.0.0.1 -u cdb -p < updateTo3.16.2.sql` + + +INSERT IGNORE INTO `entity_type` VALUES (11,'IOC','Entity type used for marking a sub domain of ioc type items.'); +INSERT IGNORE INTO `allowed_entity_type_domain` VALUES (6,11); From 90a5f1851da1fb7c41871053dea84fcb9d8dd0ed Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:16:55 -0500 Subject: [PATCH 02/80] Expose lazy data model attribute of the controller. #1670 --- .../ItemDomainMachineDesignBaseController.java | 13 ++++--------- .../ItemDomainMachineDesignController.java | 8 +++++++- ...emDomainMachineDesignDeletedItemsController.java | 8 +++++++- .../ItemDomainMachineDesignInventoryController.java | 8 +++++++- ...mainMachineDesignRelationshipBaseController.java | 8 +++++++- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java index 55de482cf..0b6cb2d61 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java @@ -19,7 +19,6 @@ import gov.anl.aps.cdb.portal.import_export.import_.helpers.ImportHelperMachineTemplateInstantiation; import gov.anl.aps.cdb.portal.import_export.import_.objects.ValidInfo; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignBaseTreeNode; -import gov.anl.aps.cdb.portal.model.ItemGenericLazyDataModel; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.beans.RelationshipTypeFacade; import gov.anl.aps.cdb.portal.model.db.entities.CdbEntity; @@ -68,6 +67,7 @@ import gov.anl.aps.cdb.portal.import_export.import_.objects.WarningInfo; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; import static gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode.CONNECTOR_NODE_TYPE; +import gov.anl.aps.cdb.portal.model.ItemLazyDataModel; import gov.anl.aps.cdb.portal.model.db.beans.ItemFacade; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainApp; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainCableDesign; @@ -78,8 +78,8 @@ * @author djarosz * @param */ -public abstract class ItemDomainMachineDesignBaseController - extends ItemController +public abstract class ItemDomainMachineDesignBaseController + extends ItemController implements CableWizardClient { private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignBaseController.class.getName()); @@ -295,12 +295,7 @@ public List getRelatedMAARCRelationshipsForCurrent() { } return relatedMAARCRelationshipsForCurrent; - } - - @Override - public ItemGenericLazyDataModel createItemLazyDataModel() { - return new ItemGenericLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); - } + } @Override public void resetListDataModel() { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java index b61624419..d5db91116 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java @@ -22,6 +22,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import gov.anl.aps.cdb.portal.controllers.extensions.CableWizardClient; +import gov.anl.aps.cdb.portal.model.ItemGenericLazyDataModel; /** * @@ -29,11 +30,16 @@ */ @Named(ItemDomainMachineDesignController.controllerNamed) @SessionScoped -public class ItemDomainMachineDesignController extends ItemDomainMachineDesignBaseController implements CableWizardClient { +public class ItemDomainMachineDesignController extends ItemDomainMachineDesignBaseController implements CableWizardClient { private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignController.class.getName()); public final static String controllerNamed = "itemDomainMachineDesignController"; + + @Override + public ItemGenericLazyDataModel createItemLazyDataModel() { + return new ItemGenericLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); + } @Override protected ItemDomainMachineDesignSettings createNewSettingObject() { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java index b0985bd29..e1bcd9189 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java @@ -11,6 +11,7 @@ import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignDeletedControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; +import gov.anl.aps.cdb.portal.model.ItemGenericLazyDataModel; import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; @@ -33,7 +34,7 @@ */ @Named(ItemDomainMachineDesignDeletedItemsController.CONTROLLER_NAMED) @SessionScoped -public class ItemDomainMachineDesignDeletedItemsController extends ItemDomainMachineDesignBaseController { +public class ItemDomainMachineDesignDeletedItemsController extends ItemDomainMachineDesignBaseController { public final static String CONTROLLER_NAMED = "itemDomainMachineDesignDeletedItemsController"; private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignDeletedItemsController.class.getName()); @@ -46,6 +47,11 @@ public class ItemDomainMachineDesignDeletedItemsController extends ItemDomainMac private TreeNode permanentlyRemoveNode = new DefaultTreeNode(); private String permanentlyRemoveDisplayName = null; private String permanentlyRemoveMessage = null; + + @Override + public ItemGenericLazyDataModel createItemLazyDataModel() { + return new ItemGenericLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); + } @Override public String getItemListPageTitle() { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java index e3bf119bb..bdfdc3ef4 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java @@ -13,6 +13,7 @@ import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignInventoryControllerUtility; import gov.anl.aps.cdb.portal.import_export.import_.helpers.ImportHelperMachineInventory; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; +import gov.anl.aps.cdb.portal.model.ItemGenericLazyDataModel; import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainInventory; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; @@ -39,13 +40,18 @@ @Named(ItemDomainMachineDesignInventoryController.controllerNamed) @SessionScoped -public class ItemDomainMachineDesignInventoryController extends ItemDomainMachineDesignBaseController implements IItemStatusController { +public class ItemDomainMachineDesignInventoryController extends ItemDomainMachineDesignBaseController implements IItemStatusController { public final static String controllerNamed = "itemDomainMachineDesignInventoryController"; private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignInventoryController.class.getName()); private final static String pluginItemMachineDesignSectionsName = "itemMachineDesignInventoryDetailsViewSections"; + @Override + public ItemGenericLazyDataModel createItemLazyDataModel() { + return new ItemGenericLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); + } + @Override public void createListDataModel() { List itemList = getAllObjectList(); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java index 23b41de07..e44632eec 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java @@ -13,6 +13,7 @@ import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignBaseTreeNode; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignRelationshipTreeNode; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; +import gov.anl.aps.cdb.portal.model.ItemGenericLazyDataModel; import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; @@ -24,7 +25,7 @@ import org.apache.logging.log4j.Logger; import org.primefaces.event.NodeSelectEvent; -public abstract class ItemDomainMachineDesignRelationshipBaseController extends ItemDomainMachineDesignBaseController { +public abstract class ItemDomainMachineDesignRelationshipBaseController extends ItemDomainMachineDesignBaseController { private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignRelationshipBaseController.class.getName()); @@ -37,6 +38,11 @@ public abstract class ItemDomainMachineDesignRelationshipBaseController getMachineElementsRelatedToCurrent() { ItemDomainMachineDesign current = getCurrent(); From 211475fd1453cd93d3b1f86b235ddd8eda11429d Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:39:09 -0500 Subject: [PATCH 03/80] Add IOC entity type constant. #1670 --- .../java/gov/anl/aps/cdb/portal/constants/EntityTypeName.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/EntityTypeName.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/EntityTypeName.java index 255f6ffec..ad536216f 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/EntityTypeName.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/EntityTypeName.java @@ -9,13 +9,15 @@ public enum EntityTypeName { inventory("Inventory", EntityTypeName.INVENTORY_ID), deleted("Deleted", EntityTypeName.DELETED_ID), power("Power", EntityTypeName.POWER_ID), - control("Control", EntityTypeName.CONTROL_ID); + control("Control", EntityTypeName.CONTROL_ID), + ioc("IOC", EntityTypeName.IOC_ID); public final static int TEMPLATE_ID = 5; public final static int INVENTORY_ID = 7; public final static int DELETED_ID = 8; public final static int POWER_ID = 10; public final static int CONTROL_ID = 9; + public final static int IOC_ID = 11; private String value; private int dbId; From 867e5ec29439dd42bc29b1ebba9055d777126881 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:39:34 -0500 Subject: [PATCH 04/80] remove unused import --- .../controllers/ItemDomainMachineDesignControlController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignControlController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignControlController.java index 7b2d6980c..064ab0755 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignControlController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignControlController.java @@ -12,7 +12,6 @@ import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignControlControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignRelationshipTreeNode; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; -import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.beans.PropertyValueFacade; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; From ef5a8d636f2095c6fc80adee670363a9987c96d6 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:40:51 -0500 Subject: [PATCH 05/80] Add a query builder for ioc type items. #1670 --- ...emDomainMachineDesignIOCLazyDataModel.java | 29 ++++++++++++++++ ...temDomainMachineDesignIOCQueryBuilder.java | 33 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/ItemDomainMachineDesignIOCLazyDataModel.java create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/ItemDomainMachineDesignIOCLazyDataModel.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/ItemDomainMachineDesignIOCLazyDataModel.java new file mode 100644 index 000000000..9676577a0 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/ItemDomainMachineDesignIOCLazyDataModel.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.model; + +import gov.anl.aps.cdb.portal.controllers.settings.ItemSettings; +import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; +import gov.anl.aps.cdb.portal.model.db.beans.builder.ItemDomainMachineDesignIOCQueryBuilder; +import gov.anl.aps.cdb.portal.model.db.entities.Domain; +import java.util.Map; +import org.primefaces.model.SortOrder; + +/** + * + * @author djarosz + */ +public class ItemDomainMachineDesignIOCLazyDataModel extends ItemLazyDataModel { + + public ItemDomainMachineDesignIOCLazyDataModel(ItemDomainMachineDesignFacade facade, Domain itemDomain, ItemSettings settings) { + super(facade, itemDomain, settings); + } + + @Override + protected ItemDomainMachineDesignIOCQueryBuilder getQueryBuilder(Map filterMap, String sortField, SortOrder sortOrder) { + return new ItemDomainMachineDesignIOCQueryBuilder(itemDomain.getId(), filterMap, sortField, sortOrder, settings); + } + +} diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java new file mode 100644 index 000000000..3a289ad59 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.model.db.beans.builder; + +import gov.anl.aps.cdb.portal.constants.EntityTypeName; +import gov.anl.aps.cdb.portal.controllers.settings.ItemSettings; +import java.util.Map; +import org.primefaces.model.SortOrder; + +/** + * + * @author djarosz + */ +public class ItemDomainMachineDesignIOCQueryBuilder extends ItemQueryBuilder { + + // Only show IOC type items. + String defaultFilter = QueryTranslator.entityTypeName.getParent() + ".id = " + EntityTypeName.IOC_ID; + + public ItemDomainMachineDesignIOCQueryBuilder(Integer domainId, Map filterMap, String sortField, SortOrder sortOrder, ItemSettings scopeSettings) { + super(domainId, filterMap, sortField, sortOrder, scopeSettings); + } + + @Override + protected void generateWhereString() { + super.generateWhereString(); + + include_etl = true; + appendRawWhere(defaultFilter); + } + +} From e997fc1d74844f89358af15b5f024e41abb98303 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:41:30 -0500 Subject: [PATCH 06/80] add ability to fetch ioc items from facade. #1670 --- .../model/db/beans/ItemDomainMachineDesignFacade.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/ItemDomainMachineDesignFacade.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/ItemDomainMachineDesignFacade.java index a3fbd9b44..096b8f63f 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/ItemDomainMachineDesignFacade.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/ItemDomainMachineDesignFacade.java @@ -53,6 +53,13 @@ public ItemDomainMachineDesign edit(ItemDomainMachineDesign entity) { return result; } + + public List getIOCItems() { + return findByDomainAndEntityType( + ItemDomainName.machineDesign.getValue(), + EntityTypeName.ioc.getValue() + ); + } public List getMachineDesignTemplates() { return findByDomainAndEntityType( From 3b9884631c41bced11be0d8c968e5bc36fa8755b Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:43:05 -0500 Subject: [PATCH 07/80] Add ioc type items controllers and settings. #1670 --- .../ItemDomainMachineDesignIOCController.java | 57 +++++++++++++++++++ .../ItemDomainMachineDesignIOCSettings.java | 20 +++++++ ...mainMachineDesignIOCControllerUtility.java | 21 +++++++ 3 files changed, 98 insertions(+) create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java new file mode 100644 index 000000000..effdf3d0e --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers; + +import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignIOCSettings; +import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; +import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignIOCLazyDataModel; +import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; +import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import java.util.List; +import javax.enterprise.context.SessionScoped; +import javax.inject.Named; + +/** + * + * @author djarosz + */ +@Named(ItemDomainMachineDesignIOCController.CONTROLLER_NAMED) +@SessionScoped +public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesignBaseController { + + public final static String CONTROLLER_NAMED = "itemDomainMachineDesignIOCController"; + + @Override + public ItemDomainMachineDesignTreeNode loadMachineDesignRootTreeNode(List itemsWithoutParents) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public ItemDomainMachineDesignTreeNode createMachineTreeNodeInstance() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + protected ItemDomainMachineDesignIOCControllerUtility createControllerUtilityInstance() { + return new ItemDomainMachineDesignIOCControllerUtility(); + } + + @Override + protected ItemDomainMachineDesignSettings createNewSettingObject() { + return new ItemDomainMachineDesignIOCSettings(this); + } + + @Override + public String getItemListPageTitle() { + return "IOC Item List"; + } + + @Override + public ItemDomainMachineDesignIOCLazyDataModel createItemLazyDataModel() { + return new ItemDomainMachineDesignIOCLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); + } + +} diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java new file mode 100644 index 000000000..e05a1ebf1 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers.settings; + +import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignBaseController; + +/** + * + * @author djarosz + */ +public class ItemDomainMachineDesignIOCSettings extends ItemDomainMachineDesignSettings { + + public ItemDomainMachineDesignIOCSettings(ItemDomainMachineDesignBaseController parentController) { + super(parentController); + displayNumberOfItemsPerPage = 25; + } + +} diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java new file mode 100644 index 000000000..1387bb931 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers.utilities; + +import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import java.util.List; + +/** + * + * @author darek + */ +public class ItemDomainMachineDesignIOCControllerUtility extends ItemDomainMachineDesignBaseControllerUtility { + + @Override + public List getItemList() { + return itemFacade.getIOCItems(); + } + +} From 483b6a82c1743cd5e06e6b0c82025ead4a83c53b Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:43:25 -0500 Subject: [PATCH 08/80] Provide a correct controller utility for ioc items. #1670 --- .../portal/model/db/entities/ItemDomainMachineDesign.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java index 5bd094589..82b55f1c7 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java @@ -19,6 +19,7 @@ import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignControlControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignDeletedControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignInventoryControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignPowerControllerUtility; import gov.anl.aps.cdb.portal.utilities.SearchResult; @@ -266,6 +267,9 @@ public ItemDomainMachineDesignBaseControllerUtility getItemControllerUtility() { if (isItemInventory(this)) { return new ItemDomainMachineDesignInventoryControllerUtility(); } + if (isItemIOC(this)) { + return new ItemDomainMachineDesignIOCControllerUtility(); + } return new ItemDomainMachineDesignControllerUtility(); } @@ -302,6 +306,10 @@ public static boolean isItemDeleted(Item item) { public static boolean isItemInventory(Item item) { return isItemEntityType(item, EntityTypeName.inventory.getValue()); } + + public static boolean isItemIOC(Item item) { + return isItemEntityType(item, EntityTypeName.ioc.getValue()); + } @Override public String toString() { From ad690206aaf32a9de7be26060b4d30d02213288b Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:44:25 -0500 Subject: [PATCH 09/80] Add new API for IOC items. Ability to convert a md to IOC type item. #1670 --- .../gov/anl/aps/cdb/rest/CdbRestService.java | 1 + .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/CdbRestService.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/CdbRestService.java index fdd85b6e6..2ba76d604 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/CdbRestService.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/CdbRestService.java @@ -55,6 +55,7 @@ private Set> getRestResourceClasses() { resources.add(gov.anl.aps.cdb.rest.routes.LogRoute.class); resources.add(gov.anl.aps.cdb.rest.routes.MAARCItemRoute.class); resources.add(gov.anl.aps.cdb.rest.routes.MachineDesignItemRoute.class); + resources.add(gov.anl.aps.cdb.rest.routes.IOCItemRoute.class); resources.add(gov.anl.aps.cdb.rest.routes.PropertyTypeRoute.class); resources.add(gov.anl.aps.cdb.rest.routes.PropertyValueRoute.class); resources.add(gov.anl.aps.cdb.rest.routes.SearchRoute.class); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java new file mode 100644 index 000000000..2448fca06 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.rest.routes; + +import gov.anl.aps.cdb.common.exceptions.AuthorizationError; +import gov.anl.aps.cdb.common.exceptions.CdbException; +import gov.anl.aps.cdb.portal.constants.EntityTypeName; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; +import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; +import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; +import gov.anl.aps.cdb.rest.authentication.Secured; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import javax.ejb.EJB; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * + * @author djarosz + */ +@Path("/IOCItems") +@Tag(name = "IOCItems") +public class IOCItemRoute extends ItemBaseRoute { + + @EJB + ItemDomainMachineDesignFacade machineFacade; + + @POST + @Path("/convertToIOC/{mdId}") + @Produces(MediaType.APPLICATION_JSON) + @Operation(summary = "Move machine to a new parent.") + @SecurityRequirement(name = "cdbAuth") + @Secured + public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machineId) throws AuthorizationError, CdbException { + ItemDomainMachineDesign machine = machineFacade.find(machineId); + + UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); + + machine.addEntityType(EntityTypeName.ioc.getValue()); + + ItemDomainMachineDesignBaseControllerUtility utility = machine.getItemControllerUtility(); + machine = utility.update(machine, currentUser); + + return machine; + } + +} From f30f5c45ddf6a892bca05e01fd03e0f9fd90e5b0 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 10 Jun 2025 09:45:55 -0500 Subject: [PATCH 10/80] Add default item views for IOCs. #1670 --- .../templates/portalViewMenubarTemplate.xhtml | 5 ++++ .../itemDomainMachineDesignIOC/create.xhtml | 23 +++++++++++++++++ .../itemDomainMachineDesignIOC/edit.xhtml | 25 +++++++++++++++++++ .../itemDomainMachineDesignIOC/list.xhtml | 21 ++++++++++++++++ .../itemDomainMachineDesignIOC/view.xhtml | 25 +++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/list.xhtml create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml diff --git a/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml b/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml index 1908ae02e..828bbbfd2 100644 --- a/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml +++ b/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml @@ -94,6 +94,11 @@ See LICENSE file. icon="ui-icon-cable-design" url="#{request.contextPath}/views/itemDomainCableDesign/list" styleClass="#{fn:startsWith(view.viewId, '/views/itemDomainCableDesign/list') ? 'activeMenuItem' : ''} "/> + + + + + + + + + + + + + + + + + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml new file mode 100644 index 000000000..f925001de --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/list.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/list.xhtml new file mode 100644 index 000000000..00f35a135 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/list.xhtml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml new file mode 100644 index 000000000..e391fbb38 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + From 6fa22a79dfc2691e72d783df022859cd310297e4 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 17 Jun 2025 14:28:49 -0500 Subject: [PATCH 11/80] Add ioc icon in the machine design hierarchy. #1670 --- .../gov/anl/aps/cdb/portal/constants/PortalStyles.java | 10 ++++------ .../ItemDomainMachineDesignBaseController.java | 8 +++++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/PortalStyles.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/PortalStyles.java index fc801d868..b0c5f3e19 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/PortalStyles.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/constants/PortalStyles.java @@ -7,15 +7,13 @@ public enum PortalStyles { favoritesOn("favoriteOn"), favoritesOff("favoriteOff"), - - rowStyleErrorInEntity("errorItemInRow"), + rowStyleErrorInEntity("errorItemInRow"), rowStyleNewEntity("newItemInRow"), - - itemConnectorIcon("ui-icon-item-connector"), - + itemConnectorIcon("ui-icon-item-connector"), machineDesingTemplateIcon("ui-icon-machine-design-template"), - machineDesignControlIcon("fa fa-code"), + machineDesignControlIcon("fa fa-code"), machineDesignPowerIcon("fa fa-bolt"), + machineDesignIOCIcon("ui-icon-control"), machineDesignIcon("ui-icon-machine-design"), catalogIcon("ui-icon-catalog"), inventoryIcon("ui-icon-inventory"), diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java index 0b6cb2d61..c6b3bc65a 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java @@ -236,6 +236,10 @@ protected boolean isMachineDesignAndEntityType(Item item, EntityTypeName entityT return false; } + + public boolean isItemMachineDesignAndIOC(Item item) { + return isMachineDesignAndEntityType(item, EntityTypeName.ioc); + } public boolean isItemMachineDesignAndPower(Item item) { return isMachineDesignAndEntityType(item, EntityTypeName.power); @@ -277,7 +281,9 @@ public String getItemRepIcon(Item item) { return PortalStyles.machineDesignControlIcon.getValue(); } else if (isItemMachineDesignAndPower(item)) { return PortalStyles.machineDesignPowerIcon.getValue(); - } else { + } else if (isItemMachineDesignAndIOC(item)) { + return PortalStyles.machineDesignIOCIcon.getValue(); + }else { return item.getDomain().getDomainRepIcon(); } } From 9c9b15c5593f9b2bc70d87a8adfbc6e4948a8c47 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 17 Jun 2025 14:28:53 -0500 Subject: [PATCH 12/80] format --- ...ItemDomainMachineDesignBaseController.java | 193 +++++++++--------- 1 file changed, 97 insertions(+), 96 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java index c6b3bc65a..797c104ef 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java @@ -87,7 +87,7 @@ public abstract class ItemDomainMachineDesignBaseController private TreeNode unassignMachineTemplateNode = null; private List selectedUnassignTemplateNodes; @@ -122,14 +122,14 @@ public abstract class ItemDomainMachineDesignBaseController catalogItemsDraggedAsChildren = null; private TreeNode newCatalogItemsInMachineDesignModel = null; @@ -205,9 +205,9 @@ public void onDropFromJS() { @EJB ItemDomainMachineDesignFacade itemDomainMachineDesignFacade; - + @EJB - ItemFacade itemFacade; + ItemFacade itemFacade; public boolean isItemInventory(Item item) { return item instanceof ItemDomainInventory; @@ -216,7 +216,7 @@ public boolean isItemInventory(Item item) { public boolean isItemCatalog(Item item) { return item instanceof ItemDomainCatalog; } - + public boolean isItemApp(Item item) { return item instanceof ItemDomainApp; } @@ -236,7 +236,7 @@ protected boolean isMachineDesignAndEntityType(Item item, EntityTypeName entityT return false; } - + public boolean isItemMachineDesignAndIOC(Item item) { return isMachineDesignAndEntityType(item, EntityTypeName.ioc); } @@ -282,8 +282,8 @@ public String getItemRepIcon(Item item) { } else if (isItemMachineDesignAndPower(item)) { return PortalStyles.machineDesignPowerIcon.getValue(); } else if (isItemMachineDesignAndIOC(item)) { - return PortalStyles.machineDesignIOCIcon.getValue(); - }else { + return PortalStyles.machineDesignIOCIcon.getValue(); + } else { return item.getDomain().getDomainRepIcon(); } } @@ -301,7 +301,7 @@ public List getRelatedMAARCRelationshipsForCurrent() { } return relatedMAARCRelationshipsForCurrent; - } + } @Override public void resetListDataModel() { @@ -309,14 +309,14 @@ public void resetListDataModel() { currentMachineDesignListRootTreeNode = null; machineDesignTemplateRootTreeNode = null; machineDesignTreeRootTreeNode = null; - favoriteMachineDesignTreeRootTreeNode = null; - unassignMachineTemplateNode = null; - selectedUnassignTemplateNodes = null; + favoriteMachineDesignTreeRootTreeNode = null; + unassignMachineTemplateNode = null; + selectedUnassignTemplateNodes = null; } // - + // - public void prepareUnassignMachineTemplate() { + public void prepareUnassignMachineTemplate() { ItemElement selectedItemElement = getItemElementFromSelectedItemInTreeTable(); unassignMachineTemplateNode = new DefaultTreeNode(); TreeNode child = new DefaultTreeNode(selectedItemElement); @@ -326,29 +326,29 @@ public void prepareUnassignMachineTemplate() { generateUnassignTree(child); } - public void unassignMachineTemplateForSelection() { + public void unassignMachineTemplateForSelection() { UserInfo user = SessionUtility.getUser(); CdbRole sessionRole = (CdbRole) SessionUtility.getRole(); - List machineElements = new ArrayList<>(); + List machineElements = new ArrayList<>(); boolean proceedWithUpdate = true; for (TreeNode selectedNode : selectedUnassignTemplateNodes) { ItemElement element = (ItemElement) selectedNode.getData(); - ItemDomainMachineDesign containedItem = (ItemDomainMachineDesign) element.getContainedItem(); - - if (sessionRole != CdbRole.ADMIN) { + ItemDomainMachineDesign containedItem = (ItemDomainMachineDesign) element.getContainedItem(); + + if (sessionRole != CdbRole.ADMIN) { if (!AuthorizationUtility.isEntityWriteableByUser(containedItem, user)) { proceedWithUpdate = false; SessionUtility.addErrorMessage("Error", "Cannot proceed with update. User does not have permission to item %s " + containedItem.toString()); - break; + break; } - } - machineElements.add(element); + } + machineElements.add(element); } - + if (proceedWithUpdate) { try { - getControllerUtility().unassignMachineTemplate(machineElements, user); + getControllerUtility().unassignMachineTemplate(machineElements, user); } catch (CdbException ex) { SessionUtility.addErrorMessage("Error", "Could not delete item relationships: " + ex.getMessage()); } @@ -392,6 +392,7 @@ public List getSelectedUnassignTemplateNodes() { public void setSelectedUnassignTemplateNodes(List selectedUnassignTemplateNodes) { this.selectedUnassignTemplateNodes = selectedUnassignTemplateNodes; } + // // public MachineTreeNode getCurrentMachineDesignListRootTreeNode() { @@ -640,9 +641,9 @@ public String listViewForCurrentEntity() { */ public String listForCurrentEntity() { ItemDomainMachineDesign current = getCurrent(); - return listForEntity(current); + return listForEntity(current); } - + public static String listForEntity(ItemDomainMachineDesign machine) { return "list?id=" + machine.getId() + "&faces-redirect=true"; } @@ -704,14 +705,14 @@ public void resetListConfigurationVariables() { displayAssignCatalogItemListConfigurationPanel = false; displayAssignInventoryItemListConfigurationPanel = false; displayUpdateInstalledInventoryStateDialogContents = false; - displayUpdateInstalledItemQridDialogContents = false; + displayUpdateInstalledItemQridDialogContents = false; displayAttachTemplateToMachine = false; displayMachineDesignReorderOverlayPanel = false; catalogItemsDraggedAsChildren = null; newCatalogItemsInMachineDesignModel = null; currentMachineDesignListRootTreeNode = null; - - assignItemDomainSelection = ASSIGN_ITEM_DEFAULT_DOMAIN; + + assignItemDomainSelection = ASSIGN_ITEM_DEFAULT_DOMAIN; } public void prepareAddPlaceholder() { @@ -1021,123 +1022,123 @@ public void updateInventoryInstallState() { resetListConfigurationVariables(); expandToSelectedTreeNodeAndSelect(); } - + public void preapreUpdateInstalledQrId(ItemDomainMachineDesign machine, String onSuccess) { // Verify permission to item CdbRole sessionRole = (CdbRole) SessionUtility.getRole(); UserInfo sessionUser = (UserInfo) SessionUtility.getUser(); - if (sessionRole != CdbRole.ADMIN) { - if (!AuthorizationUtility.isEntityWriteableByUser(machine, sessionUser)) { + if (sessionRole != CdbRole.ADMIN) { + if (!AuthorizationUtility.isEntityWriteableByUser(machine, sessionUser)) { SessionUtility.addErrorMessage("Error", "Cannot proceed with update. User does not have permission to item " + machine.toString()); - return; - } + return; + } } - - displayUpdateInstalledItemQridDialogContents = true; + + displayUpdateInstalledItemQridDialogContents = true; machine.setQrIdForAssignedItem(null); setCurrent(machine); SessionUtility.executeRemoteCommand(onSuccess); } - + public String updateInstalledQrId(String failRemoteCommand) { ItemDomainMachineDesign current = getCurrent(); - String qrIdForAssignedItem = current.getQrIdForAssignedItem(); - - Item newAssignedItem = null; - boolean update = false; - + String qrIdForAssignedItem = current.getQrIdForAssignedItem(); + + Item newAssignedItem = null; + boolean update = false; + // Blank input if (qrIdForAssignedItem == null || qrIdForAssignedItem.isEmpty()) { Item assignedItem = current.getAssignedItem(); if (assignedItem instanceof ItemDomainInventory) { - newAssignedItem = assignedItem.getDerivedFromItem(); - update = true; + newAssignedItem = assignedItem.getDerivedFromItem(); + update = true; } } else { // QRID entered - Integer qrid = null; - qrIdForAssignedItem = qrIdForAssignedItem.toLowerCase(); + Integer qrid = null; + qrIdForAssignedItem = qrIdForAssignedItem.toLowerCase(); if (qrIdForAssignedItem.contains("qrid=")) { - qrIdForAssignedItem = qrIdForAssignedItem.split("qrid=")[1]; - } + qrIdForAssignedItem = qrIdForAssignedItem.split("qrid=")[1]; + } try { - qrid = Integer.valueOf(qrIdForAssignedItem); + qrid = Integer.valueOf(qrIdForAssignedItem); } catch (NumberFormatException ex) { SessionUtility.addErrorMessage("Parse Error", "Cannot extract qrid from '" + qrIdForAssignedItem + "'"); SessionUtility.executeRemoteCommand(failRemoteCommand); - return null; + return null; } - + if (qrid != null) { Item scannedItem = itemFacade.findByQrId(qrid); if (scannedItem instanceof ItemDomainInventory) { Item assignedItem = current.getAssignedItem(); if (assignedItem == null) { - newAssignedItem = scannedItem; - update = true; + newAssignedItem = scannedItem; + update = true; } else { - Item catalogItem = null; + Item catalogItem = null; if (assignedItem instanceof ItemDomainInventory) { - catalogItem = assignedItem.getDerivedFromItem(); + catalogItem = assignedItem.getDerivedFromItem(); } else if (assignedItem instanceof ItemDomainCatalog) { - catalogItem = assignedItem; + catalogItem = assignedItem; } - + if (catalogItem != null) { - Item qridCatalog = scannedItem.getDerivedFromItem(); - if (!qridCatalog.equals(catalogItem)) { + Item qridCatalog = scannedItem.getDerivedFromItem(); + if (!qridCatalog.equals(catalogItem)) { SessionUtility.addErrorMessage("Cannot update", "Inventory must be of type " + catalogItem.toString()); SessionUtility.executeRemoteCommand(failRemoteCommand); - return null; - } else { - newAssignedItem = scannedItem; - update = true; - } + return null; + } else { + newAssignedItem = scannedItem; + update = true; + } } else { SessionUtility.addErrorMessage("Cannot update", "Only inventory qrids are supported."); SessionUtility.executeRemoteCommand(failRemoteCommand); - return null; - } + return null; + } } } else { SessionUtility.addErrorMessage("Cannot update", "Only inventory qrids are supported."); SessionUtility.executeRemoteCommand(failRemoteCommand); - return null; - } - } + return null; + } + } } - + if (update) { UserInfo sessionUser = (UserInfo) SessionUtility.getUser(); controllerUtility cu = getControllerUtility(); try { cu.updateAssignedItem(current, newAssignedItem, sessionUser); - update(); + update(); } catch (CdbException ex) { SessionUtility.addErrorMessage("Error", ex.getErrorMessage()); - } - } - - displayUpdateInstalledItemQridDialogContents = false; - + } + } + + displayUpdateInstalledItemQridDialogContents = false; + if (isCurrentViewIdView()) { - return viewForCurrentEntity(); + return viewForCurrentEntity(); } if (isCurrentViewIdListView()) { - return listViewForCurrentEntity(); + return listViewForCurrentEntity(); } - + return listForCurrentEntity(); } - - private boolean isCurrentViewIdView() { - String currentViewId = SessionUtility.getCurrentViewId(); - return currentViewId.contains("/view.xhtml"); + + private boolean isCurrentViewIdView() { + String currentViewId = SessionUtility.getCurrentViewId(); + return currentViewId.contains("/view.xhtml"); } - - private boolean isCurrentViewIdListView() { - String currentViewId = SessionUtility.getCurrentViewId(); - return currentViewId.contains("/listView.xhtml"); + + private boolean isCurrentViewIdListView() { + String currentViewId = SessionUtility.getCurrentViewId(); + return currentViewId.contains("/listView.xhtml"); } public void prepareAssignInventoryMachineDesignListConfiguration() { @@ -1544,9 +1545,9 @@ public void prepareAssignCatalogListConfiguration() { displayListConfigurationView = true; displayAssignCatalogItemListConfigurationPanel = true; } - + public boolean isAssignApp() { - return assignItemDomainSelection.equals(ASSIGN_ITEM_APP_DOMAIN); + return assignItemDomainSelection.equals(ASSIGN_ITEM_APP_DOMAIN); } public String completeAssignCatalogListConfiguration() { @@ -2294,7 +2295,7 @@ private void reassignTemplateVarsForSelectedMdCreatedFromTemplateRecursivelly(It reassignTemplateVarsForSelectedMdCreatedFromTemplateRecursivelly(containedItem, itemsToUpdate); } } - + public void generateTemplateVarsForSelectedMdCreatedFromTemplate() { ItemDomainMachineDesign selectedItem = getItemFromSelectedItemInTreeTable(); @@ -3481,9 +3482,9 @@ public void prepareMachineAssignRepresentingAssemblyElement() { SessionUtility.addErrorMessage("Represented Parent", "Parent item is represented by another assembly part, cannot link another level of representation."); return; } - + Item assignedItem = parentMachineDesign.getAssignedItem(); - + if (assignedItem != null && assignedItem.getItemElementDisplayList().size() != 0) { elementsAvaiableForNodeRepresentation = controllerUtility.fetchElementsAvaiableForNodeRepresentation(current); } else { From a6a155f61be026ed138774b35a459646c2a626f9 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 17 Jun 2025 14:31:54 -0500 Subject: [PATCH 13/80] Hide deleted items on ioc page. #1670 --- .../controllers/ItemDomainMachineDesignIOCController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index effdf3d0e..4a9667d0a 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -54,4 +54,9 @@ public ItemDomainMachineDesignIOCLazyDataModel createItemLazyDataModel() { return new ItemDomainMachineDesignIOCLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); } + @Override + public boolean getEntityDisplayDeletedItems() { + return false; + } + } From 19f2e5a9ae2b985dea6f94595e56886836823b06 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 17 Jun 2025 14:57:09 -0500 Subject: [PATCH 14/80] Resolve higlighting. #1670 --- .../CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml b/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml index 828bbbfd2..9346ea3f4 100644 --- a/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml +++ b/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml @@ -98,7 +98,7 @@ See LICENSE file. id="machineIOCMenubarButton" icon="ui-icon-control" url="#{request.contextPath}/views/itemDomainMachineDesignIOC/list" - styleClass="#{fn:startsWith(view.viewId, '/views/itemDomainMachineDesignControl/list') ? 'activeMenuItem' : ''} "/> + styleClass="#{fn:startsWith(view.viewId, '/views/itemDomainMachineDesignIOC/list') ? 'activeMenuItem' : ''} "/> Date: Tue, 17 Jun 2025 14:57:27 -0500 Subject: [PATCH 15/80] Add appropriate entity type display name. #1670 --- .../ItemDomainMachineDesignIOCControllerUtility.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 1387bb931..3857e20d1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -18,4 +18,9 @@ public List getItemList() { return itemFacade.getIOCItems(); } + @Override + public String getDisplayEntityTypeName() { + return "IOC Item"; + } + } From 41a0ddfecc09507ff8cd073a6232b0f880659abb Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 17 Jun 2025 14:59:15 -0500 Subject: [PATCH 16/80] Resolve create page for IOCs. Assign correct entity type. Hide export/import. #1670 --- .../ItemDomainMachineDesignIOCController.java | 38 ++++++++++++++++++- .../itemDomainMachineDesignIOC/create.xhtml | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index 4a9667d0a..876451d18 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -4,15 +4,21 @@ */ package gov.anl.aps.cdb.portal.controllers; +import gov.anl.aps.cdb.common.exceptions.CdbException; +import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignIOCSettings; import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignIOCLazyDataModel; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; +import gov.anl.aps.cdb.portal.model.db.entities.EntityType; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import java.util.ArrayList; import java.util.List; import javax.enterprise.context.SessionScoped; import javax.inject.Named; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * @@ -23,6 +29,8 @@ public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesignBaseController { public final static String CONTROLLER_NAMED = "itemDomainMachineDesignIOCController"; + + private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignIOCController.class.getName()); @Override public ItemDomainMachineDesignTreeNode loadMachineDesignRootTreeNode(List itemsWithoutParents) { @@ -47,7 +55,7 @@ protected ItemDomainMachineDesignSettings createNewSettingObject() { @Override public String getItemListPageTitle() { return "IOC Item List"; - } + } @Override public ItemDomainMachineDesignIOCLazyDataModel createItemLazyDataModel() { @@ -59,4 +67,32 @@ public boolean getEntityDisplayDeletedItems() { return false; } + @Override + public boolean getEntityDisplayImportButton() { + return false; + } + + @Override + public boolean getEntityDisplayExportButton() { + return false; + } + + @Override + public String prepareCreate() { + String createRedirect = super.prepareCreate(); + + ItemDomainMachineDesign current = getCurrent(); + String iocEntityTypeName = EntityTypeName.ioc.getValue(); + EntityType iocEntityType = entityTypeFacade.findByName(iocEntityTypeName); + try { + current.setEntityTypeList(new ArrayList<>()); + } catch (CdbException ex) { + LOGGER.error(ex); + } + current.getEntityTypeList().add(iocEntityType); + + + return createRedirect; + } + } diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml index 79ea13b4c..f17fd6e70 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -11,7 +11,7 @@ See LICENSE file. - + From 918dfbaeddd77cc97ce5958a04265a0225be4a74 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 19 Jun 2025 08:13:23 -0500 Subject: [PATCH 17/80] Ensure correct redirect on view page. #1670 --- .../web/views/itemDomainMachineDesignIOC/view.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml index e391fbb38..6eec52626 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -13,7 +13,7 @@ See LICENSE file. - + From 7c713df77d02d27b881cde89953e04330a71ecf5 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 19 Jun 2025 08:14:34 -0500 Subject: [PATCH 18/80] The standard create form should not perform any action on "enter" key press. #1670 --- .../web/views/item/private/templates/itemCreateTemplate.xhtml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/templates/itemCreateTemplate.xhtml b/src/java/CdbWebPortal/web/views/item/private/templates/itemCreateTemplate.xhtml index d71ac247e..57fc26372 100644 --- a/src/java/CdbWebPortal/web/views/item/private/templates/itemCreateTemplate.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/templates/itemCreateTemplate.xhtml @@ -26,7 +26,8 @@ See LICENSE file. : Create #{entityController.displayEntityTypeName} - +

Add #{entityController.displayEntityTypeName}

From 8b1c4ca169a24e417fbf97fad842c10f895623d8 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 19 Jun 2025 08:17:04 -0500 Subject: [PATCH 19/80] Allow setting of parent machine element for when creating a machine element and selecting its parent. Needed to create IOCs #1670 --- .../db/entities/ItemDomainMachineDesign.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java index 82b55f1c7..f370008e1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java @@ -232,6 +232,23 @@ public ItemElement getParentMachineElement() { return parentMachineElement; } + + @JsonIgnore + public void setParentMachineElement(ItemElement itemElement) throws CdbException { + parentMachineElement = null; + getParentMachineElement(); + if (parentMachineElement != null) { + throw new CdbException("Already part of machine design hieararchy. Cannot create parent element."); + } + + List itemElementMemberList = getItemElementMemberList(); + if (itemElementMemberList == null) { + itemElementMemberList = new ArrayList<>(); + setItemElementMemberList(itemElementMemberList); + } + itemElementMemberList.add(itemElement); + parentMachineElement = itemElement; + } @Override @JsonIgnore @@ -829,7 +846,7 @@ public static ItemDomainMachineDesign importInstantiateTemplateUnderParent( newItem = utility.createMachineDesignFromTemplateHierachically( itemElement, templateItem, user, group, nameVars); setImportChildParentRelationship(newItem, parentItem, itemElement); - + } catch (CdbException | CloneNotSupportedException ex) { LOGGER.error(logMethodName + "failed to instantiate template " + templateItem.getName() + ": " + ex.toString()); From 1f8d1396cb6e9da952a3324e6070e2b35d449b8b Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 19 Jun 2025 08:20:23 -0500 Subject: [PATCH 20/80] Add functionality to specify a machine parent for a new IOC. #1670 --- .../ItemDomainMachineDesignIOCController.java | 87 +++++++++++++++++-- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index 876451d18..ce29ab224 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -12,7 +12,11 @@ import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignIOCLazyDataModel; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; import gov.anl.aps.cdb.portal.model.db.entities.EntityType; +import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; +import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; +import gov.anl.aps.cdb.portal.utilities.SessionUtility; import java.util.ArrayList; import java.util.List; import javax.enterprise.context.SessionScoped; @@ -29,9 +33,12 @@ public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesignBaseController { public final static String CONTROLLER_NAMED = "itemDomainMachineDesignIOCController"; - + private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignIOCController.class.getName()); + private ItemDomainMachineDesignTreeNode parentMachineSelectionTreeNode; + private ItemDomainMachineDesignTreeNode parentMachineSelectedTreeNode = null; + @Override public ItemDomainMachineDesignTreeNode loadMachineDesignRootTreeNode(List itemsWithoutParents) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody @@ -55,7 +62,7 @@ protected ItemDomainMachineDesignSettings createNewSettingObject() { @Override public String getItemListPageTitle() { return "IOC Item List"; - } + } @Override public ItemDomainMachineDesignIOCLazyDataModel createItemLazyDataModel() { @@ -69,18 +76,22 @@ public boolean getEntityDisplayDeletedItems() { @Override public boolean getEntityDisplayImportButton() { - return false; + return false; } @Override public boolean getEntityDisplayExportButton() { - return false; - } + return false; + } @Override public String prepareCreate() { + // Reset variables + parentMachineSelectionTreeNode = null; + String createRedirect = super.prepareCreate(); + // Assign IOC type ItemDomainMachineDesign current = getCurrent(); String iocEntityTypeName = EntityTypeName.ioc.getValue(); EntityType iocEntityType = entityTypeFacade.findByName(iocEntityTypeName); @@ -90,9 +101,69 @@ public String prepareCreate() { LOGGER.error(ex); } current.getEntityTypeList().add(iocEntityType); - - - return createRedirect; + + // Create placeholder for machine parent element. + UserInfo user = SessionUtility.getUser(); + ItemElement parentItemElement = getControllerUtility().createItemElement(current, user); + parentItemElement.setParentItem(null); + parentItemElement.setContainedItem(current); + try { + current.setParentMachineElement(parentItemElement); + } catch (CdbException ex) { + LOGGER.error(ex); + } + + return createRedirect; + } + + @Override + public String create() { + ItemDomainMachineDesign current = getCurrent(); + ItemDomainMachineDesign parentMachineDesign = current.getParentMachineDesign(); + + if (parentMachineDesign == null) { + SessionUtility.addWarningMessage("Machine Parent", "Machine Parent must be specified"); + return null; + } + + String createRedirect = super.create(); + + return createRedirect; + } + + public ItemDomainMachineDesignTreeNode getParentMachineSelectionTreeNode() { + if (parentMachineSelectionTreeNode == null) { + ItemDomainMachineDesignController instance = ItemDomainMachineDesignController.getInstance(); + parentMachineSelectionTreeNode = instance.loadMachineDesignRootTreeNode(); + + } + return parentMachineSelectionTreeNode; + } + + public ItemDomainMachineDesignTreeNode getParentMachineSelectedTreeNode() { + return parentMachineSelectedTreeNode; + } + + public void setParentMachineSelectedTreeNode(ItemDomainMachineDesignTreeNode parentMachineSelectedTreeNode) { + this.parentMachineSelectedTreeNode = parentMachineSelectedTreeNode; + + if (parentMachineSelectedTreeNode != null) { + ItemElement machineElement = (ItemElement) parentMachineSelectedTreeNode.getData(); + + if (machineElement.getId() == null) { + return; + } + + ItemDomainMachineDesign current = getCurrent(); + Item parentItem = machineElement.getContainedItem(); + + String elementName = getControllerUtility().generateUniqueElementNameForItem(parentItem); + + ItemElement parentMachineElement = current.getParentMachineElement(); + parentMachineElement.setName(elementName); + + parentMachineElement.setParentItem(parentItem); + } } } From 3947ea76472814569a4cedf660122ce1a460b9c7 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 19 Jun 2025 08:21:07 -0500 Subject: [PATCH 21/80] Add views to allow setting machine parent. #1670 --- .../itemDomainMachineDesignIOC/create.xhtml | 22 +++++++- ...reateIocMachineParentSelectionDialog.xhtml | 52 +++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/createIocMachineParentSelectionDialog.xhtml diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml index f17fd6e70..55076f39e 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -7,7 +7,8 @@ See LICENSE file. + template="../item/private/templates/itemCreateTemplate.xhtml" + xmlns:p="http://primefaces.org/ui"> @@ -15,7 +16,24 @@ See LICENSE file. - + + + + + + + + + + + + + + + + + + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/createIocMachineParentSelectionDialog.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/createIocMachineParentSelectionDialog.xhtml new file mode 100644 index 000000000..df40f9e21 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/createIocMachineParentSelectionDialog.xhtml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 930c781569ce94411d4189867d5d4887409f11dc Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Fri, 20 Jun 2025 11:15:18 -0500 Subject: [PATCH 22/80] Standardize the settings to allow using the base item settings if neeed. #1670 --- .../controllers/ItemDomainMachineDesignBaseController.java | 5 ++--- .../controllers/ItemDomainMachineDesignController.java | 2 +- .../ItemDomainMachineDesignDeletedItemsController.java | 4 ++-- .../controllers/ItemDomainMachineDesignIOCController.java | 5 ++--- .../ItemDomainMachineDesignInventoryController.java | 4 ++-- .../ItemDomainMachineDesignRelationshipBaseController.java | 3 ++- .../settings/ItemDomainMachineDesignIOCSettings.java | 3 ++- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java index 797c104ef..445016742 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignBaseController.java @@ -11,7 +11,6 @@ import gov.anl.aps.cdb.portal.constants.ItemDomainName; import gov.anl.aps.cdb.portal.constants.ItemElementRelationshipTypeNames; import gov.anl.aps.cdb.portal.constants.PortalStyles; -import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.import_export.import_.helpers.ImportHelperMachineAssignTemplate; import gov.anl.aps.cdb.portal.import_export.import_.helpers.ImportHelperMachineHierarchy; @@ -63,6 +62,7 @@ import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; import gov.anl.aps.cdb.portal.controllers.extensions.CableWizardClient; +import gov.anl.aps.cdb.portal.controllers.settings.ItemSettings; import gov.anl.aps.cdb.portal.import_export.import_.objects.ValidWarningInfo; import gov.anl.aps.cdb.portal.import_export.import_.objects.WarningInfo; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; @@ -76,9 +76,8 @@ /** * * @author djarosz - * @param */ -public abstract class ItemDomainMachineDesignBaseController +public abstract class ItemDomainMachineDesignBaseController extends ItemController implements CableWizardClient { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java index d5db91116..08451ae74 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignController.java @@ -30,7 +30,7 @@ */ @Named(ItemDomainMachineDesignController.controllerNamed) @SessionScoped -public class ItemDomainMachineDesignController extends ItemDomainMachineDesignBaseController implements CableWizardClient { +public class ItemDomainMachineDesignController extends ItemDomainMachineDesignBaseController implements CableWizardClient { private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignController.class.getName()); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java index e1bcd9189..04cc53d9b 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java @@ -34,7 +34,7 @@ */ @Named(ItemDomainMachineDesignDeletedItemsController.CONTROLLER_NAMED) @SessionScoped -public class ItemDomainMachineDesignDeletedItemsController extends ItemDomainMachineDesignBaseController { +public class ItemDomainMachineDesignDeletedItemsController extends ItemDomainMachineDesignBaseController { public final static String CONTROLLER_NAMED = "itemDomainMachineDesignDeletedItemsController"; private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignDeletedItemsController.class.getName()); @@ -72,7 +72,7 @@ public static ItemDomainMachineDesignDeletedItemsController getInstance() { } @Override - protected ItemDomainMachineDesignSettings createNewSettingObject() { + protected ItemDomainMachineDesignDeletedSettings createNewSettingObject() { return new ItemDomainMachineDesignDeletedItemSettings(this); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index ce29ab224..cbdc9d275 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -7,7 +7,6 @@ import gov.anl.aps.cdb.common.exceptions.CdbException; import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignIOCSettings; -import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignIOCLazyDataModel; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; @@ -30,7 +29,7 @@ */ @Named(ItemDomainMachineDesignIOCController.CONTROLLER_NAMED) @SessionScoped -public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesignBaseController { +public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesignBaseController { public final static String CONTROLLER_NAMED = "itemDomainMachineDesignIOCController"; @@ -55,7 +54,7 @@ protected ItemDomainMachineDesignIOCControllerUtility createControllerUtilityIns } @Override - protected ItemDomainMachineDesignSettings createNewSettingObject() { + protected ItemDomainMachineDesignIOCSettings createNewSettingObject() { return new ItemDomainMachineDesignIOCSettings(this); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java index bdfdc3ef4..bdf03c1bf 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignInventoryController.java @@ -40,7 +40,7 @@ @Named(ItemDomainMachineDesignInventoryController.controllerNamed) @SessionScoped -public class ItemDomainMachineDesignInventoryController extends ItemDomainMachineDesignBaseController implements IItemStatusController { +public class ItemDomainMachineDesignInventoryController extends ItemDomainMachineDesignBaseController implements IItemStatusController { public final static String controllerNamed = "itemDomainMachineDesignInventoryController"; private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignInventoryController.class.getName()); @@ -249,7 +249,7 @@ protected ItemDomainMachineDesign performItemRedirection(ItemDomainMachineDesign } @Override - protected ItemDomainMachineDesignSettings createNewSettingObject() { + protected ItemDomainMachineDesignInventorySettings createNewSettingObject() { return new ItemDomainMachineDesignInventorySettings(this); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java index e44632eec..2458a8ee7 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignRelationshipBaseController.java @@ -9,6 +9,7 @@ import gov.anl.aps.cdb.common.exceptions.InvalidObjectState; import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.constants.ItemElementRelationshipTypeNames; +import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignRelationshipBaseControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignBaseTreeNode; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignRelationshipTreeNode; @@ -25,7 +26,7 @@ import org.apache.logging.log4j.Logger; import org.primefaces.event.NodeSelectEvent; -public abstract class ItemDomainMachineDesignRelationshipBaseController extends ItemDomainMachineDesignBaseController { +public abstract class ItemDomainMachineDesignRelationshipBaseController extends ItemDomainMachineDesignBaseController { private static final Logger LOGGER = LogManager.getLogger(ItemDomainMachineDesignRelationshipBaseController.class.getName()); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index e05a1ebf1..bac20e53e 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -5,12 +5,13 @@ package gov.anl.aps.cdb.portal.controllers.settings; import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignBaseController; +import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignIOCController; /** * * @author djarosz */ -public class ItemDomainMachineDesignIOCSettings extends ItemDomainMachineDesignSettings { +public class ItemDomainMachineDesignIOCSettings extends ItemSettings { public ItemDomainMachineDesignIOCSettings(ItemDomainMachineDesignBaseController parentController) { super(parentController); From 108c1e25cbc15381bc8039c485c297ed29181690 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Fri, 20 Jun 2025 11:27:23 -0500 Subject: [PATCH 23/80] typo --- .../ItemDomainMachineDesignDeletedItemsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java index 04cc53d9b..91e694bdc 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignDeletedItemsController.java @@ -72,7 +72,7 @@ public static ItemDomainMachineDesignDeletedItemsController getInstance() { } @Override - protected ItemDomainMachineDesignDeletedSettings createNewSettingObject() { + protected ItemDomainMachineDesignDeletedItemSettings createNewSettingObject() { return new ItemDomainMachineDesignDeletedItemSettings(this); } From 92da6db26bb1950c7d7bda87438e04aa00756aad Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Fri, 20 Jun 2025 11:41:31 -0500 Subject: [PATCH 24/80] Add settings specific to IOC machine design items. #1670 --- db/sql/static/populate_setting_type.sql | 18 ++++ db/sql/updates/updateTo3.17.0.sql | 18 ++++ .../ItemDomainMachineDesignIOCSettings.java | 97 ++++++++++++++++++- 3 files changed, 131 insertions(+), 2 deletions(-) diff --git a/db/sql/static/populate_setting_type.sql b/db/sql/static/populate_setting_type.sql index 92199c400..a61822121 100644 --- a/db/sql/static/populate_setting_type.sql +++ b/db/sql/static/populate_setting_type.sql @@ -391,6 +391,24 @@ description.','true'), (21417,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), (21418,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), (21419,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId5','Display property value for property type id #5.',''), + +(21500,'ItemDomainMachineDesignIOC.List.Display.AlternateName','Display alternate name.','false'), +(21501,'ItemDomainMachineDesignIOC.List.Display.Description','Display design description.','true'), +(21502,'ItemDomainMachineDesignIOC.List.Display.ItemProject','Display project.','false'), +(21503,'ItemDomainMachineDesignIOC.List.Display.Id','Display id.','false'), +(21504,'ItemDomainMachineDesignIOC.List.Display.QrId','Display QR id.','false'), +(21505,'ItemDomainMachineDesignIOC.List.Display.OwnerUser','Display owner username.','false'), +(21506,'ItemDomainMachineDesignIOC.List.Display.OwnerGroup','Display owner group name.','false'), +(21507,'ItemDomainMachineDesignIOC.List.Display.CreatedByUser','Display created by username.','false'), +(21508,'ItemDomainMachineDesignIOC.List.Display.CreatedOnDateTime','Display created on date/time.','false'), +(21509,'ItemDomainMachineDesignIOC.List.Display.LastModifiedByUser','Display last modified by username.','false'), +(21510,'ItemDomainMachineDesignIOC.List.Display.LastModifiedOnDateTime','Display last modified on date/time.','false'), +(21511,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId1','Display property value for property type id #1.',''), +(21512,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId2','Display property value for property type id #2.',''), +(21513,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), +(21514,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), +(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.','') + (22000,'ItemDomainMAARC.List.Display.NumberOfItemsPerPage', 'Display specified number of items per page.','25'), (22001,'ItemDomainMAARC.List.Display.Id','Display component id.','false'), (22002,'ItemDomainMAARC.List.Display.EntityTypes','Display Item Entity Types','true'), diff --git a/db/sql/updates/updateTo3.17.0.sql b/db/sql/updates/updateTo3.17.0.sql index e2012fba0..de1cbda87 100644 --- a/db/sql/updates/updateTo3.17.0.sql +++ b/db/sql/updates/updateTo3.17.0.sql @@ -8,3 +8,21 @@ INSERT IGNORE INTO `entity_type` VALUES (11,'IOC','Entity type used for marking a sub domain of ioc type items.'); INSERT IGNORE INTO `allowed_entity_type_domain` VALUES (6,11); + +INSERT IGNORE INTO `setting_type` VALUES +(21500,'ItemDomainMachineDesignIOC.List.Display.AlternateName','Display alternate name.','false'), +(21501,'ItemDomainMachineDesignIOC.List.Display.Description','Display design description.','true'), +(21502,'ItemDomainMachineDesignIOC.List.Display.ItemProject','Display project.','false'), +(21503,'ItemDomainMachineDesignIOC.List.Display.Id','Display id.','false'), +(21504,'ItemDomainMachineDesignIOC.List.Display.QrId','Display QR id.','false'), +(21505,'ItemDomainMachineDesignIOC.List.Display.OwnerUser','Display owner username.','false'), +(21506,'ItemDomainMachineDesignIOC.List.Display.OwnerGroup','Display owner group name.','false'), +(21507,'ItemDomainMachineDesignIOC.List.Display.CreatedByUser','Display created by username.','false'), +(21508,'ItemDomainMachineDesignIOC.List.Display.CreatedOnDateTime','Display created on date/time.','false'), +(21509,'ItemDomainMachineDesignIOC.List.Display.LastModifiedByUser','Display last modified by username.','false'), +(21510,'ItemDomainMachineDesignIOC.List.Display.LastModifiedOnDateTime','Display last modified on date/time.','false'), +(21511,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId1','Display property value for property type id #1.',''), +(21512,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId2','Display property value for property type id #2.',''), +(21513,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), +(21514,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), +(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.',''); \ No newline at end of file diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index bac20e53e..eb443502c 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -4,8 +4,11 @@ */ package gov.anl.aps.cdb.portal.controllers.settings; -import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignBaseController; +import java.util.Map; + import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignIOCController; +import gov.anl.aps.cdb.portal.model.db.entities.SettingEntity; +import gov.anl.aps.cdb.portal.model.db.entities.SettingType; /** * @@ -13,9 +16,99 @@ */ public class ItemDomainMachineDesignIOCSettings extends ItemSettings { - public ItemDomainMachineDesignIOCSettings(ItemDomainMachineDesignBaseController parentController) { + private static final String DISPLAY_ALTERNATE_NAME_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.AlternateName"; + private static final String DISPLAY_DESIGN_DESCRIPTION_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.Description"; + private static final String DISPLAY_PROJECT_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.ItemProject"; + private static final String DISPLAY_ID_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.Id"; + private static final String DISPLAY_QR_ID_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.QrId"; + private static final String DISPLAY_OWNER_USER_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.OwnerUser"; + private static final String DISPLAY_OWNER_GROUP_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.OwnerGroup"; + private static final String DISPLAY_CREATED_BY_USER_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.CreatedByUser"; + private static final String DISPLAY_CREATED_ON_DATE_TIME_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.CreatedOnDateTime"; + private static final String DISPLAY_LAST_MODIFIED_BY_USER_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.LastModifiedByUser"; + private static final String DISPLAY_LAST_MODIFIED_ON_DATE_TIME_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.LastModifiedOnDateTime"; + + private static final String DISPLAY_PROPERTY_TYPE_ID_1_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.PropertyTypeId1"; + private static final String DISPLAY_PROPERTY_TYPE_ID_2_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.PropertyTypeId2"; + private static final String DISPLAY_PROPERTY_TYPE_ID_3_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.PropertyTypeId3"; + private static final String DISPLAY_PROPERTY_TYPE_ID_4_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.PropertyTypeId4"; + private static final String DISPLAY_PROPERTY_TYPE_ID_5_SETTING_TYPE_KEY = "ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5"; + + public ItemDomainMachineDesignIOCSettings(ItemDomainMachineDesignIOCController parentController) { super(parentController); displayNumberOfItemsPerPage = 25; } + @Override + protected void updateSettingsFromSettingTypeDefaults(Map settingTypeMap) { + super.updateSettingsFromSettingTypeDefaults(settingTypeMap); + + displayItemIdentifier1 = Boolean.valueOf(settingTypeMap.get(DISPLAY_ALTERNATE_NAME_SETTING_TYPE_KEY).getDefaultValue()); + displayDescription = Boolean.valueOf(settingTypeMap.get(DISPLAY_DESIGN_DESCRIPTION_SETTING_TYPE_KEY).getDefaultValue()); + displayItemProject = Boolean.valueOf(settingTypeMap.get(DISPLAY_PROJECT_SETTING_TYPE_KEY).getDefaultValue()); + + displayId = Boolean.valueOf(settingTypeMap.get(DISPLAY_ID_SETTING_TYPE_KEY).getDefaultValue()); + displayQrId = Boolean.valueOf(settingTypeMap.get(DISPLAY_QR_ID_SETTING_TYPE_KEY).getDefaultValue()); + displayOwnerUser = Boolean.valueOf(settingTypeMap.get(DISPLAY_OWNER_USER_SETTING_TYPE_KEY).getDefaultValue()); + displayOwnerGroup = Boolean.valueOf(settingTypeMap.get(DISPLAY_OWNER_GROUP_SETTING_TYPE_KEY).getDefaultValue()); + displayCreatedByUser = Boolean.valueOf(settingTypeMap.get(DISPLAY_CREATED_BY_USER_SETTING_TYPE_KEY).getDefaultValue()); + displayCreatedOnDateTime = Boolean.valueOf(settingTypeMap.get(DISPLAY_CREATED_ON_DATE_TIME_SETTING_TYPE_KEY).getDefaultValue()); + displayLastModifiedByUser = Boolean.valueOf(settingTypeMap.get(DISPLAY_LAST_MODIFIED_BY_USER_SETTING_TYPE_KEY).getDefaultValue()); + displayLastModifiedOnDateTime = Boolean.valueOf(settingTypeMap.get(DISPLAY_LAST_MODIFIED_ON_DATE_TIME_SETTING_TYPE_KEY).getDefaultValue()); + + displayPropertyTypeId1 = parseSettingValueAsInteger(settingTypeMap.get(DISPLAY_PROPERTY_TYPE_ID_1_SETTING_TYPE_KEY).getDefaultValue()); + displayPropertyTypeId2 = parseSettingValueAsInteger(settingTypeMap.get(DISPLAY_PROPERTY_TYPE_ID_2_SETTING_TYPE_KEY).getDefaultValue()); + displayPropertyTypeId3 = parseSettingValueAsInteger(settingTypeMap.get(DISPLAY_PROPERTY_TYPE_ID_3_SETTING_TYPE_KEY).getDefaultValue()); + displayPropertyTypeId4 = parseSettingValueAsInteger(settingTypeMap.get(DISPLAY_PROPERTY_TYPE_ID_4_SETTING_TYPE_KEY).getDefaultValue()); + displayPropertyTypeId5 = parseSettingValueAsInteger(settingTypeMap.get(DISPLAY_PROPERTY_TYPE_ID_5_SETTING_TYPE_KEY).getDefaultValue()); + } + + @Override + protected void updateSettingsFromSessionSettingEntity(SettingEntity settingEntity) { + super.updateSettingsFromSessionSettingEntity(settingEntity); + + displayItemIdentifier1 = settingEntity.getSettingValueAsBoolean(DISPLAY_ALTERNATE_NAME_SETTING_TYPE_KEY, displayItemIdentifier1); + displayDescription = settingEntity.getSettingValueAsBoolean(DISPLAY_DESIGN_DESCRIPTION_SETTING_TYPE_KEY, displayDescription); + displayItemProject = settingEntity.getSettingValueAsBoolean(DISPLAY_PROJECT_SETTING_TYPE_KEY, displayItemProject); + + displayId = settingEntity.getSettingValueAsBoolean(DISPLAY_ID_SETTING_TYPE_KEY, displayId); + displayQrId = settingEntity.getSettingValueAsBoolean(DISPLAY_QR_ID_SETTING_TYPE_KEY, displayQrId); + displayOwnerUser = settingEntity.getSettingValueAsBoolean(DISPLAY_OWNER_USER_SETTING_TYPE_KEY, displayOwnerUser); + displayOwnerGroup = settingEntity.getSettingValueAsBoolean(DISPLAY_OWNER_GROUP_SETTING_TYPE_KEY, displayOwnerGroup); + displayCreatedByUser = settingEntity.getSettingValueAsBoolean(DISPLAY_CREATED_BY_USER_SETTING_TYPE_KEY, displayCreatedByUser); + displayCreatedOnDateTime = settingEntity.getSettingValueAsBoolean(DISPLAY_CREATED_ON_DATE_TIME_SETTING_TYPE_KEY, displayCreatedOnDateTime); + displayLastModifiedByUser = settingEntity.getSettingValueAsBoolean(DISPLAY_LAST_MODIFIED_BY_USER_SETTING_TYPE_KEY, displayLastModifiedByUser); + displayLastModifiedOnDateTime = settingEntity.getSettingValueAsBoolean(DISPLAY_LAST_MODIFIED_ON_DATE_TIME_SETTING_TYPE_KEY, displayLastModifiedOnDateTime); + + displayPropertyTypeId1 = settingEntity.getSettingValueAsInteger(DISPLAY_PROPERTY_TYPE_ID_1_SETTING_TYPE_KEY, displayPropertyTypeId1); + displayPropertyTypeId2 = settingEntity.getSettingValueAsInteger(DISPLAY_PROPERTY_TYPE_ID_2_SETTING_TYPE_KEY, displayPropertyTypeId2); + displayPropertyTypeId3 = settingEntity.getSettingValueAsInteger(DISPLAY_PROPERTY_TYPE_ID_3_SETTING_TYPE_KEY, displayPropertyTypeId3); + displayPropertyTypeId4 = settingEntity.getSettingValueAsInteger(DISPLAY_PROPERTY_TYPE_ID_4_SETTING_TYPE_KEY, displayPropertyTypeId4); + displayPropertyTypeId5 = settingEntity.getSettingValueAsInteger(DISPLAY_PROPERTY_TYPE_ID_5_SETTING_TYPE_KEY, displayPropertyTypeId5); + } + + @Override + protected void saveSettingsForSessionSettingEntity(SettingEntity settingEntity) { + super.saveSettingsForSessionSettingEntity(settingEntity); + + settingEntity.setSettingValue(DISPLAY_ALTERNATE_NAME_SETTING_TYPE_KEY, displayItemIdentifier1); + settingEntity.setSettingValue(DISPLAY_DESIGN_DESCRIPTION_SETTING_TYPE_KEY, displayDescription); + settingEntity.setSettingValue(DISPLAY_PROJECT_SETTING_TYPE_KEY, displayItemProject); + + settingEntity.setSettingValue(DISPLAY_ID_SETTING_TYPE_KEY, displayId); + settingEntity.setSettingValue(DISPLAY_QR_ID_SETTING_TYPE_KEY, displayQrId); + settingEntity.setSettingValue(DISPLAY_OWNER_USER_SETTING_TYPE_KEY, displayOwnerUser); + settingEntity.setSettingValue(DISPLAY_OWNER_GROUP_SETTING_TYPE_KEY, displayOwnerGroup); + settingEntity.setSettingValue(DISPLAY_CREATED_BY_USER_SETTING_TYPE_KEY, displayCreatedByUser); + settingEntity.setSettingValue(DISPLAY_CREATED_ON_DATE_TIME_SETTING_TYPE_KEY, displayCreatedOnDateTime); + settingEntity.setSettingValue(DISPLAY_LAST_MODIFIED_BY_USER_SETTING_TYPE_KEY, displayLastModifiedByUser); + settingEntity.setSettingValue(DISPLAY_LAST_MODIFIED_ON_DATE_TIME_SETTING_TYPE_KEY, displayLastModifiedOnDateTime); + + settingEntity.setSettingValue(DISPLAY_PROPERTY_TYPE_ID_1_SETTING_TYPE_KEY, displayPropertyTypeId1); + settingEntity.setSettingValue(DISPLAY_PROPERTY_TYPE_ID_2_SETTING_TYPE_KEY, displayPropertyTypeId2); + settingEntity.setSettingValue(DISPLAY_PROPERTY_TYPE_ID_3_SETTING_TYPE_KEY, displayPropertyTypeId3); + settingEntity.setSettingValue(DISPLAY_PROPERTY_TYPE_ID_4_SETTING_TYPE_KEY, displayPropertyTypeId4); + settingEntity.setSettingValue(DISPLAY_PROPERTY_TYPE_ID_5_SETTING_TYPE_KEY, displayPropertyTypeId5); + } + } From 1662eee9a3b1db58965c474b36d17e41fde1bb41 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:49:32 -0500 Subject: [PATCH 25/80] Add core metadata for ioc type machines. #1670 --- ...mainMachineDesignIOCControllerUtility.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 3857e20d1..346de88f9 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -4,7 +4,11 @@ */ package gov.anl.aps.cdb.portal.controllers.utilities; +import gov.anl.aps.cdb.common.constants.ItemMetadataFieldType; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; +import static gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE; +import gov.anl.aps.cdb.portal.view.objects.ItemMetadataPropertyInfo; import java.util.List; /** @@ -20,7 +24,34 @@ public List getItemList() { @Override public String getDisplayEntityTypeName() { - return "IOC Item"; + return "IOC Item"; + } + + @Override + public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { + + ItemMetadataPropertyInfo info + = new ItemMetadataPropertyInfo("IOC Metadata", IOC_ITEM_INTERNAL_PROPERTY_TYPE); + + info.addField( + ItemMetadataIOC.IOC_ITEM_MACHINE_TAG_KEY, + "Machine Tag", + "Machine Tag.", + ItemMetadataFieldType.STRING, + "", + null, + null); + + info.addField( + ItemMetadataIOC.IOC_ITEM_FUNCTION_TAG_KEY, + "Function Tag", + "Function Tag.", + ItemMetadataFieldType.STRING, + "", + null, + null); + + return info; } } From dc4a282e844cb07995d7b99cfa5838b6b8dad114 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:50:47 -0500 Subject: [PATCH 26/80] Add ioc Metadata object and abstract metadata object to not be only the entity. #1670 --- .../cdb/portal/model/db/entities/Item.java | 8 ++ .../db/entities/ItemDomainMachineDesign.java | 15 ++++ .../model/db/entities/ItemMetadataIOC.java | 75 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index caaecf1f9..2dccebcfd 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java @@ -1933,6 +1933,9 @@ public PropertyValue getCoreMetadataPropertyValue() { if (info != null) { if (coreMetadataPropertyValue == null) { List propertyValueList = getPropertyValueList(); + if (propertyValueList == null) { + propertyValueList = new ArrayList<>(); + } for (PropertyValue propertyValue : propertyValueList) { if (propertyValue.getPropertyType().getName().equals(info.getPropertyName())) { coreMetadataPropertyValue = propertyValue; @@ -1999,6 +2002,11 @@ public PropertyType getCoreMetadataPropertyType() { } return coreMetadataPropertyType; } + + @JsonIgnore + public Object getItemMetadataObject() { + return this; + } protected CdbEntity getEntityById(String id) { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java index f370008e1..b345d6084 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java @@ -81,6 +81,9 @@ public class ItemDomainMachineDesign extends LocatableStatusItem { // collection of machine design items to update when updating this machine design item private transient List itemsToUpdate = null; + + // Encapsulated matadata for IOC type machines. + private transient ItemMetadataIOC iocInfo; // private transient List relatedMAARCRelationshipsForCurrent = null; @@ -622,6 +625,18 @@ public String getMoveToTrashRowStyle() { } } + @Override + public Object getItemMetadataObject() { + return getIocInfo(); + } + + public ItemMetadataIOC getIocInfo() { + if (iocInfo == null && isItemIOC(this)) { + iocInfo = new ItemMetadataIOC(this); + } + return iocInfo; + } + @JsonIgnore public List getControlRelationshipList() { return controlRelationshipList; diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java new file mode 100644 index 000000000..780f05778 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.model.db.entities; + +import gov.anl.aps.cdb.common.exceptions.CdbException; + +/** + * + * @author djarosz + */ +public class ItemMetadataIOC { + + private ItemDomainMachineDesign iocItem; + + public final static String IOC_ITEM_INTERNAL_PROPERTY_TYPE = "ioc_info_internal_property_type"; + public final static String IOC_ITEM_MACHINE_TAG_KEY = "machineTag"; + public final static String IOC_ITEM_FUNCTION_TAG_KEY = "functionTag"; + + private String machineTag; + private String functionTag; + + public ItemMetadataIOC(ItemDomainMachineDesign iocItem) { + this.iocItem = iocItem; + } + + public String getMachineTag() throws CdbException { + if (machineTag == null) { + machineTag = getCoreMetadataPropertyFieldValue(IOC_ITEM_MACHINE_TAG_KEY); + } + return machineTag; + } + + public void setMachineTag(String machineTag) throws CdbException { + this.machineTag = machineTag; + setCoreMetadataPropertyFieldValue(IOC_ITEM_MACHINE_TAG_KEY, machineTag); + } + + public String getFunctionTag() throws CdbException { + if (functionTag == null) { + functionTag = getCoreMetadataPropertyFieldValue(IOC_ITEM_FUNCTION_TAG_KEY); + } + return functionTag; + } + + public void setFunctionTag(String functionTag) throws CdbException { + this.functionTag = functionTag; + setCoreMetadataPropertyFieldValue(IOC_ITEM_FUNCTION_TAG_KEY, functionTag); + } + + public String getBootInstructions() { + PropertyValue pv = iocItem.getCoreMetadataPropertyValue(); + + if (pv != null) { + return pv.getText(); + } + + return null; + } + + public void setBootInstructions(String bootInstructions) { + PropertyValue pv = iocItem.getCoreMetadataPropertyValue(); + pv.setText(bootInstructions); + } + + protected String getCoreMetadataPropertyFieldValue(String key) throws CdbException { + return iocItem.getCoreMetadataPropertyFieldValue(key); + } + + protected void setCoreMetadataPropertyFieldValue(String key, String value) throws CdbException { + iocItem.setCoreMetadataPropertyFieldValue(key, value); + } + +} From 7c6ca3d25b6df12ffec1cc348c9a676d2696f477 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:51:26 -0500 Subject: [PATCH 27/80] Use the new metadata object to display column. #1670 --- .../item/private/coreMetadataPropertyColumns.xhtml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyColumns.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyColumns.xhtml index e4643c1ed..c8430291c 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyColumns.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyColumns.xhtml @@ -10,11 +10,13 @@ See LICENSE file. xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" xmlns:p="http://primefaces.org/ui" xmlns:f="http://xmlns.jcp.org/jsf/core"> - + - + + + @@ -26,8 +28,8 @@ See LICENSE file. - - + + From 51dad0927dfcfb08a1fc0b8c654d9dc65f4f5720 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:51:43 -0500 Subject: [PATCH 28/80] Allow setting of the metadata fields using the API. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 2448fca06..470b8b9b8 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -11,9 +11,11 @@ import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; import gov.anl.aps.cdb.rest.authentication.Secured; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import javax.ejb.EJB; @@ -21,6 +23,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; /** @@ -40,14 +43,29 @@ public class IOCItemRoute extends ItemBaseRoute { @Operation(summary = "Move machine to a new parent.") @SecurityRequirement(name = "cdbAuth") @Secured - public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machineId) throws AuthorizationError, CdbException { + public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machineId, + @Parameter(description = "Machine Tag") @QueryParam("machineTag") String machineTag, + @Parameter(description = "Function Tag") @QueryParam("functionTag") String functionTag) throws AuthorizationError, CdbException { ItemDomainMachineDesign machine = machineFacade.find(machineId); UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); machine.addEntityType(EntityTypeName.ioc.getValue()); + if (ItemDomainMachineDesign.isItemDeleted(machine)) { + throw new CdbException("The machine id " + machine.getId() + " is a deleted item."); + } + ItemDomainMachineDesignBaseControllerUtility utility = machine.getItemControllerUtility(); + + ItemMetadataIOC iocInfo = machine.getIocInfo(); + if (machineTag != null) { + iocInfo.setMachineTag(machineTag); + } + if (functionTag != null) { + iocInfo.setFunctionTag(functionTag); + } + machine = utility.update(machine, currentUser); return machine; From 81c537eb11a0382ab23080caca03217ee1ab9c7e Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:51:59 -0500 Subject: [PATCH 29/80] Add minimal settings to display the new metadata columns. #1670 --- .../ItemDomainMachineDesignIOCSettings.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index eb443502c..995dafb91 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -33,10 +33,19 @@ public class ItemDomainMachineDesignIOCSettings extends ItemSettings Date: Thu, 26 Jun 2025 11:52:22 -0500 Subject: [PATCH 30/80] Add appropriate ',' and remove empty lines. --- db/sql/static/populate_setting_type.sql | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/db/sql/static/populate_setting_type.sql b/db/sql/static/populate_setting_type.sql index a61822121..247c435ff 100644 --- a/db/sql/static/populate_setting_type.sql +++ b/db/sql/static/populate_setting_type.sql @@ -391,7 +391,6 @@ description.','true'), (21417,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), (21418,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), (21419,'ItemDomainMachineDesignControl.List.Display.PropertyTypeId5','Display property value for property type id #5.',''), - (21500,'ItemDomainMachineDesignIOC.List.Display.AlternateName','Display alternate name.','false'), (21501,'ItemDomainMachineDesignIOC.List.Display.Description','Display design description.','true'), (21502,'ItemDomainMachineDesignIOC.List.Display.ItemProject','Display project.','false'), @@ -407,8 +406,7 @@ description.','true'), (21512,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId2','Display property value for property type id #2.',''), (21513,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), (21514,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), -(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.','') - +(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.',''), (22000,'ItemDomainMAARC.List.Display.NumberOfItemsPerPage', 'Display specified number of items per page.','25'), (22001,'ItemDomainMAARC.List.Display.Id','Display component id.','false'), (22002,'ItemDomainMAARC.List.Display.EntityTypes','Display Item Entity Types','true'), From 4f55331c8ad98027190f995779d62655dcd1ad37 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 11:52:46 -0500 Subject: [PATCH 31/80] Add basic input for machine and function tag ioc creation page. #1670 --- .../web/views/itemDomainMachineDesignIOC/create.xhtml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml index 55076f39e..be9f0f6d2 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -8,7 +8,8 @@ See LICENSE file. xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" template="../item/private/templates/itemCreateTemplate.xhtml" - xmlns:p="http://primefaces.org/ui"> + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> @@ -28,6 +29,12 @@ See LICENSE file. + + + + + +
From 83612b31e884f46de019c4163852f1006fb883cc Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 14:02:35 -0500 Subject: [PATCH 32/80] Add a section name. #1670 --- .../ItemDomainMachineDesignIOCControllerUtility.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 346de88f9..35fed2565 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -40,7 +40,7 @@ public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { ItemMetadataFieldType.STRING, "", null, - null); + "Details"); info.addField( ItemMetadataIOC.IOC_ITEM_FUNCTION_TAG_KEY, @@ -49,7 +49,7 @@ public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { ItemMetadataFieldType.STRING, "", null, - null); + "Details"); return info; } From feeab315d3bf29509cc1572b1327931e332935a7 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 14:06:50 -0500 Subject: [PATCH 33/80] Resolve redirects, clean up UI and ensure metadata is showing up. #1670 --- .../ItemDomainMachineDesignIOCController.java | 19 +++++++++++++++++++ .../db/entities/ItemDomainMachineDesign.java | 3 +++ .../private/coreMetadataPropertyFields.xhtml | 5 ++++- .../CdbWebPortal/web/views/item/view.xhtml | 6 ++---- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index cbdc9d275..eb0a8dd09 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -38,6 +38,15 @@ public class ItemDomainMachineDesignIOCController extends ItemDomainMachineDesig private ItemDomainMachineDesignTreeNode parentMachineSelectionTreeNode; private ItemDomainMachineDesignTreeNode parentMachineSelectedTreeNode = null; + public static ItemDomainMachineDesignIOCController getInstance() { + return (ItemDomainMachineDesignIOCController) SessionUtility.findBean(CONTROLLER_NAMED); + } + + @Override + protected String getViewPath() { + return "/views/itemDomainMachineDesignIOC/view.xhtml"; + } + @Override public ItemDomainMachineDesignTreeNode loadMachineDesignRootTreeNode(List itemsWithoutParents) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody @@ -83,6 +92,16 @@ public boolean getEntityDisplayExportButton() { return false; } + @Override + public boolean getEntityDisplayItemConnectors() { + return false; + } + + @Override + public boolean getEntityDisplayItemElements() { + return false; + } + @Override public String prepareCreate() { // Reset variables diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java index b345d6084..86f5ae4b3 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java @@ -13,6 +13,7 @@ import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignControlController; import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignController; import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignDeletedItemsController; +import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignIOCController; import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignInventoryController; import gov.anl.aps.cdb.portal.controllers.ItemDomainMachineDesignPowerController; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; @@ -269,6 +270,8 @@ public ItemController getItemDomainController() { return ItemDomainMachineDesignControlController.getInstance(); } else if (isItemPower(this)) { return ItemDomainMachineDesignPowerController.getInstance(); + } else if (isItemIOC(this)) { + return ItemDomainMachineDesignIOCController.getInstance(); } return ItemDomainMachineDesignController.getInstance(); } diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml index 642333432..a20a1c566 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml @@ -14,6 +14,9 @@ See LICENSE file. + + + @@ -25,7 +28,7 @@ See LICENSE file. - + diff --git a/src/java/CdbWebPortal/web/views/item/view.xhtml b/src/java/CdbWebPortal/web/views/item/view.xhtml index 1ed7657de..fc3382d0f 100644 --- a/src/java/CdbWebPortal/web/views/item/view.xhtml +++ b/src/java/CdbWebPortal/web/views/item/view.xhtml @@ -9,13 +9,11 @@ See LICENSE file. xmlns:ui="http://java.sun.com/jsf/facelets" template="private/templates/itemViewTemplate.xhtml"> - - - + - + From f6c5963fb3fad268294b6bb46f64f9c3682fd877 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 14:44:21 -0500 Subject: [PATCH 34/80] Resovle edit metadata page with statndized metadata object. #1670 --- .../views/item/private/coreMetadataPropertyEditFields.xhtml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml index 6e1ea3bb0..ce6bf2e85 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml @@ -14,6 +14,7 @@ See LICENSE file. + @@ -32,12 +33,12 @@ See LICENSE file. title="#{metadataDescription}"/> - From 75869fcd2179191e2cd32706d2c70ec78aac2735 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 14:44:31 -0500 Subject: [PATCH 35/80] Resolve edit page. #1670 --- .../web/views/itemDomainMachineDesignIOC/edit.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml index f925001de..4f23938ea 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/edit.xhtml @@ -13,7 +13,7 @@ See LICENSE file. - + From 4a245fd76275c6fb868e4bd7a1a61e69f1d57f4b Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 14:46:15 -0500 Subject: [PATCH 36/80] Add ioc deployment status field. #1670 --- .../ItemDomainMachineDesignIOCSettings.java | 35 ++++++++++++++----- ...mainMachineDesignIOCControllerUtility.java | 12 ++++++- .../model/db/entities/ItemMetadataIOC.java | 14 ++++++++ .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 6 +++- 4 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index 995dafb91..814690a1d 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -33,19 +33,22 @@ public class ItemDomainMachineDesignIOCSettings extends ItemSettings Date: Thu, 26 Jun 2025 15:03:39 -0500 Subject: [PATCH 37/80] Revert the base view page. This broke redirection. #1670 --- src/java/CdbWebPortal/web/views/item/view.xhtml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/java/CdbWebPortal/web/views/item/view.xhtml b/src/java/CdbWebPortal/web/views/item/view.xhtml index fc3382d0f..1ed7657de 100644 --- a/src/java/CdbWebPortal/web/views/item/view.xhtml +++ b/src/java/CdbWebPortal/web/views/item/view.xhtml @@ -9,11 +9,13 @@ See LICENSE file. xmlns:ui="http://java.sun.com/jsf/facelets" template="private/templates/itemViewTemplate.xhtml"> - + + + - + From dde477650bf3734c4aad3e1228740de67fa05c70 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 26 Jun 2025 15:11:23 -0500 Subject: [PATCH 38/80] Update copyright #1670 --- src/java/CdbWebPortal/src/java/resources.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/resources.properties b/src/java/CdbWebPortal/src/java/resources.properties index a786024ad..96b8516b9 100644 --- a/src/java/CdbWebPortal/src/java/resources.properties +++ b/src/java/CdbWebPortal/src/java/resources.properties @@ -5,7 +5,7 @@ CdbSoftwareVersionUrl=https://github.com/AdvancedPhotonSource/ComponentDB/ CdbBugReportUrl=https://github.com/AdvancedPhotonSource/ComponentDB/issues/new CdbCodeRepository=https://github.com/AdvancedPhotonSource/ComponentDB CdbPortalTitle=Component Database Portal 3 - Development -CdbCopyrightNotice=2014-2022 UChicago Argonne, LLC +CdbCopyrightNotice=2014-2025 UChicago Argonne, LLC SelectDataTableNumberOfRows=10 DialogDataTableNumberOfRows=5 From fb139d9df6e72248d2f7bdae26f6566bc746cf45 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 1 Jul 2025 12:05:37 -0500 Subject: [PATCH 39/80] Add functioanlity to display markdown preboot postboot etc. #1670 --- .../itemDomainMachineDesignIOC/view.xhtml | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml index 6eec52626..f1e7a8f20 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -7,7 +7,8 @@ See LICENSE file. + template="../item/private/templates/itemViewTemplate.xhtml" + xmlns:p="http://primefaces.org/ui"> @@ -20,6 +21,27 @@ See LICENSE file. + + + + + + + + + + + + + From 5d5ac59555c7ff9e1d14e98ffadadc08f4e3d263 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 1 Jul 2025 14:13:16 -0500 Subject: [PATCH 40/80] Add default Text and value for core metadata property. #1670 --- .../utilities/ItemControllerUtility.java | 1 + ...mainMachineDesignIOCControllerUtility.java | 14 ++++ .../cdb/portal/model/db/entities/Item.java | 5 +- .../objects/ItemMetadataPropertyInfo.java | 78 ++++++++++++------- 4 files changed, 67 insertions(+), 31 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java index 882ea409c..966cd84e8 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java @@ -529,6 +529,7 @@ public PropertyType prepareCoreMetadataPropertyType() { ptmList.add(ptm); } propertyType.setPropertyTypeMetadataList(ptmList); + propertyType.setDefaultValue(propInfo.getDefaultPropertyValue()); try { propertyTypeControllerUtility.create(propertyType, null); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index e99ebda83..e188455b6 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -34,6 +34,20 @@ public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { ItemMetadataPropertyInfo info = new ItemMetadataPropertyInfo("IOC Metadata", IOC_ITEM_INTERNAL_PROPERTY_TYPE); + info.setDefaultPropertyValue("IOC Instructions"); + + info.setDefaultPropertyText("# Preboot:\n" + + "\n" + + "\n" + + "\n" + + "# Postboot:\n" + + "\n" + + "\n" + + "\n" + + "# Power Cycle:\n" + + "\n" + + "\n"); + info.addField( ItemMetadataIOC.IOC_ITEM_MACHINE_TAG_KEY, "Machine Tag", diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index 2dccebcfd..879415145 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java @@ -1922,8 +1922,11 @@ public void initializeCoreMetadataPropertyValue() { public PropertyValue prepareCoreMetadataPropertyValue() { PropertyType propertyType = getCoreMetadataPropertyType(); - return getItemControllerUtility().preparePropertyTypeValueAdd( + ItemMetadataPropertyInfo info = getCoreMetadataPropertyInfo(); + PropertyValue pv = getItemControllerUtility().preparePropertyTypeValueAdd( this, propertyType, propertyType.getDefaultValue(), null); + pv.setText(info.getDefaultPropertyText()); + return pv; } public PropertyValue getCoreMetadataPropertyValue() { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/view/objects/ItemMetadataPropertyInfo.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/view/objects/ItemMetadataPropertyInfo.java index bcc027eca..50037bd97 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/view/objects/ItemMetadataPropertyInfo.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/view/objects/ItemMetadataPropertyInfo.java @@ -6,7 +6,6 @@ import gov.anl.aps.cdb.common.constants.ItemMetadataFieldType; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,22 +15,25 @@ * @author cdb */ public class ItemMetadataPropertyInfo { - + private static final String DEFAULT_GROUP = "default"; - + private String displayName = ""; private String propertyName = ""; - + private String defaultPropertyValue = ""; + + private String defaultPropertyText = null; + private List fieldList = new ArrayList<>(); private Map fieldMap = new HashMap<>(); private Map> groupMap = new HashMap<>(); private List groupList = new ArrayList<>(); - + public ItemMetadataPropertyInfo(String dn, String pn) { displayName = dn; propertyName = pn; } - + public String getDisplayName() { return displayName; } @@ -47,32 +49,48 @@ public String getPropertyName() { public void setPropertyName(String propertyName) { this.propertyName = propertyName; } - + + public String getDefaultPropertyValue() { + return defaultPropertyValue; + } + + public void setDefaultPropertyValue(String defaultPropertyValue) { + this.defaultPropertyValue = defaultPropertyValue; + } + + public String getDefaultPropertyText() { + return defaultPropertyText; + } + + public void setDefaultPropertyText(String defaultPropertyText) { + this.defaultPropertyText = defaultPropertyText; + } + public void addField( - String key, - String label, - String description, - ItemMetadataFieldType type, - String units, + String key, + String label, + String description, + ItemMetadataFieldType type, + String units, List allowedValues) { - + addField(key, label, description, type, units, allowedValues, null); } - + public void addField( - String key, - String label, - String description, - ItemMetadataFieldType type, - String units, + String key, + String label, + String description, + ItemMetadataFieldType type, + String units, List allowedValues, String group) { - - ItemMetadataFieldInfo info = - new ItemMetadataFieldInfo(key, label, description, type, units, allowedValues); + + ItemMetadataFieldInfo info + = new ItemMetadataFieldInfo(key, label, description, type, units, allowedValues); fieldList.add(info); fieldMap.put(key, info); - + if (group == null) { group = DEFAULT_GROUP; } @@ -86,19 +104,19 @@ public void addField( groupList.add(group); } } - + public List getFields() { return fieldList; } - + public List getGroupList() { return groupList; } - + public List getFieldsInDefaultGroup() { return getFieldsInGroup(DEFAULT_GROUP); } - + public List getFieldsInGroup(String group) { List groupFields = groupMap.get(group); if (groupFields == null) { @@ -107,13 +125,13 @@ public List getFieldsInGroup(String group) { return groupFields; } } - + public ItemMetadataFieldInfo getField(String key) { return fieldMap.get(key); } - + public boolean hasKey(String key) { return fieldMap.containsKey(key); } - + } From 4178fb82d92e53da46ddf1bd7cdaa177ead14f0a Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 1 Jul 2025 15:26:28 -0500 Subject: [PATCH 41/80] Add support for allowed values fetched out of core metadata property. #1670 --- .../cdb/portal/model/db/entities/Item.java | 7 +++++ .../model/db/entities/ItemMetadataIOC.java | 4 +++ .../private/coreMetadataPropertyFields.xhtml | 31 ++++++++++++++----- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index 879415145..626553b94 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java @@ -1975,6 +1975,13 @@ protected void setCoreMetadataPropertyFieldValue(String key, String value) throw propertyValue.setPropertyMetadataValue(key, value); } + public PropertyTypeMetadata getCorePropertyTypeMetadata(String key) throws CdbException { + PropertyType propertyType = getCoreMetadataPropertyType(); + PropertyTypeMetadata ptMetadata = propertyType.getPropertyTypeMetadataForKey(key); + + return ptMetadata; + } + protected String getCoreMetadataPropertyFieldValue(String key) throws CdbException { validateCoreMetadataKey(key); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java index 92c2abf0d..ad5d7c6f1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -86,4 +86,8 @@ protected void setCoreMetadataPropertyFieldValue(String key, String value) throw iocItem.setCoreMetadataPropertyFieldValue(key, value); } + public PropertyTypeMetadata getCorePropertyTypeMetadata(String key) throws CdbException { + return iocItem.getCorePropertyTypeMetadata(key); + } + } diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml index a20a1c566..aa44f4287 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml @@ -15,8 +15,8 @@ See LICENSE file. - - + + @@ -53,7 +53,7 @@ See LICENSE file. - + - + @@ -90,9 +90,26 @@ See LICENSE file. - + + + + + + #{allowedPropertyMetadataValueObject.metadataValue} +
+ +
+ +
+
From be9d9112a630d16e8a1d875a1220ccf5e8ae6a25 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 08:58:27 -0500 Subject: [PATCH 42/80] Standardize itemMetadata extension classes. #1670 --- .../model/db/entities/ItemMetadata.java | 37 +++++++++++++++++++ .../model/db/entities/ItemMetadataIOC.java | 24 +++--------- 2 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadata.java diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadata.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadata.java new file mode 100644 index 000000000..5dcd0622f --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadata.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.model.db.entities; + +import gov.anl.aps.cdb.common.exceptions.CdbException; + +/** + * + * @author djarosz + */ +public abstract class ItemMetadata { + + private MetadataTypeItem item; + + public ItemMetadata(MetadataTypeItem item) { + this.item = item; + } + + protected String getCoreMetadataPropertyFieldValue(String key) throws CdbException { + return item.getCoreMetadataPropertyFieldValue(key); + } + + protected void setCoreMetadataPropertyFieldValue(String key, String value) throws CdbException { + item.setCoreMetadataPropertyFieldValue(key, value); + } + + public PropertyTypeMetadata getCorePropertyTypeMetadata(String key) throws CdbException { + return item.getCorePropertyTypeMetadata(key); + } + + public PropertyValue getCoreMetadataPropertyValue() { + return item.getCoreMetadataPropertyValue(); + } + +} diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java index ad5d7c6f1..c249d1a09 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -10,9 +10,7 @@ * * @author djarosz */ -public class ItemMetadataIOC { - - private ItemDomainMachineDesign iocItem; +public class ItemMetadataIOC extends ItemMetadata { public final static String IOC_ITEM_INTERNAL_PROPERTY_TYPE = "ioc_info_internal_property_type"; public final static String IOC_ITEM_MACHINE_TAG_KEY = "machineTag"; @@ -24,7 +22,7 @@ public class ItemMetadataIOC { private String deploymentStatus; public ItemMetadataIOC(ItemDomainMachineDesign iocItem) { - this.iocItem = iocItem; + super(iocItem); } public String getMachineTag() throws CdbException { @@ -49,7 +47,7 @@ public String getFunctionTag() throws CdbException { public void setFunctionTag(String functionTag) throws CdbException { this.functionTag = functionTag; setCoreMetadataPropertyFieldValue(IOC_ITEM_FUNCTION_TAG_KEY, functionTag); - } + } public String getDeploymentStatus() throws CdbException { if (deploymentStatus == null) { @@ -64,7 +62,7 @@ public void setDeploymentStatus(String deploymentStatus) throws CdbException { } public String getBootInstructions() { - PropertyValue pv = iocItem.getCoreMetadataPropertyValue(); + PropertyValue pv = getCoreMetadataPropertyValue(); if (pv != null) { return pv.getText(); @@ -74,20 +72,8 @@ public String getBootInstructions() { } public void setBootInstructions(String bootInstructions) { - PropertyValue pv = iocItem.getCoreMetadataPropertyValue(); + PropertyValue pv = getCoreMetadataPropertyValue(); pv.setText(bootInstructions); } - protected String getCoreMetadataPropertyFieldValue(String key) throws CdbException { - return iocItem.getCoreMetadataPropertyFieldValue(key); - } - - protected void setCoreMetadataPropertyFieldValue(String key, String value) throws CdbException { - iocItem.setCoreMetadataPropertyFieldValue(key, value); - } - - public PropertyTypeMetadata getCorePropertyTypeMetadata(String key) throws CdbException { - return iocItem.getCorePropertyTypeMetadata(key); - } - } From fcc7127937a7843f325d66ab0b00f62092ab6e18 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 08:59:20 -0500 Subject: [PATCH 43/80] Add verification that allowed values are set appropriately during insert update of item if it has core metadata. #1670 --- .../utilities/ItemControllerUtility.java | 10 +++- .../cdb/portal/model/db/entities/Item.java | 46 +++++++++++++++---- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java index 966cd84e8..473347b1a 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java @@ -237,7 +237,11 @@ public String generateUniqueElementNameForItem(Item item) { return elementName; } - public void performPrepareEntityInsertUpdate(Item item, UserInfo userInfo) throws InvalidRequest { + public void performPrepareEntityInsertUpdate(Item item, UserInfo userInfo) throws InvalidRequest, CdbException { + if (item == null) { + throw new CdbException("Item is null"); + } + if (item instanceof LocatableItem) { LocatableItem locatableItem = (LocatableItem) item; LocatableItemControllerUtility locatableControllerUtility; @@ -245,6 +249,8 @@ public void performPrepareEntityInsertUpdate(Item item, UserInfo userInfo) throw locatableControllerUtility.updateItemLocation(locatableItem, userInfo); } addDynamicPropertiesToItem(item, userInfo); + + item.verifyAllowedValuesValidForCoreMetadata(); } public void addDynamicPropertiesToItem(Item item, UserInfo createdByUser) { @@ -921,7 +927,7 @@ public List getParentItemList(ItemDomainEntity itemEntity) { return parentItemList; } - + public ItemElementConstraintInformation loadItemElementConstraintInformation(ItemElement itemElement) { return new ItemElementConstraintInformation(itemElement); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index 626553b94..bfd09283a 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java @@ -22,6 +22,7 @@ import gov.anl.aps.cdb.portal.model.db.entities.comparator.ItemElementRelevantSortOrderComparator; import gov.anl.aps.cdb.portal.model.db.utilities.ItemElementUtility; import gov.anl.aps.cdb.portal.utilities.SearchResult; +import gov.anl.aps.cdb.portal.view.objects.ItemMetadataFieldInfo; import gov.anl.aps.cdb.portal.view.objects.ItemMetadataPropertyInfo; import io.swagger.v3.oas.annotations.media.Schema; import java.io.Serializable; @@ -1601,11 +1602,11 @@ public ItemElementRelationship getCreatedFromTemplateRelationship() { if (getItemElementRelationshipList() != null) { for (ItemElementRelationship ier : getItemElementRelationshipList()) { if (ier.getRelationshipType().getName().equals(machineDesignTemplateRelationshipTypeName)) { - return ier; + return ier; } } } - return null; + return null; } public Item getCreatedFromTemplate() { @@ -1614,7 +1615,7 @@ public Item getCreatedFromTemplate() { ItemElementRelationship ier = getCreatedFromTemplateRelationship(); if (ier != null) { createdFromTemplate = ier.getSecondItemElement().getParentItem(); - } + } templateInfoLoaded = true; } @@ -1926,7 +1927,7 @@ public PropertyValue prepareCoreMetadataPropertyValue() { PropertyValue pv = getItemControllerUtility().preparePropertyTypeValueAdd( this, propertyType, propertyType.getDefaultValue(), null); pv.setText(info.getDefaultPropertyText()); - return pv; + return pv; } public PropertyValue getCoreMetadataPropertyValue() { @@ -1937,7 +1938,7 @@ public PropertyValue getCoreMetadataPropertyValue() { if (coreMetadataPropertyValue == null) { List propertyValueList = getPropertyValueList(); if (propertyValueList == null) { - propertyValueList = new ArrayList<>(); + propertyValueList = new ArrayList<>(); } for (PropertyValue propertyValue : propertyValueList) { if (propertyValue.getPropertyType().getName().equals(info.getPropertyName())) { @@ -1979,7 +1980,36 @@ public PropertyTypeMetadata getCorePropertyTypeMetadata(String key) throws CdbEx PropertyType propertyType = getCoreMetadataPropertyType(); PropertyTypeMetadata ptMetadata = propertyType.getPropertyTypeMetadataForKey(key); - return ptMetadata; + return ptMetadata; + } + + public void verifyAllowedValuesValidForCoreMetadata() throws CdbException { + ItemMetadataPropertyInfo info = getCoreMetadataPropertyInfo(); + + if (info == null) { + return; + } + + for (ItemMetadataFieldInfo fieldInfo : info.getFields()) { + String key = fieldInfo.getKey(); + PropertyTypeMetadata ptMeta = getCorePropertyTypeMetadata(key); + String value = getCoreMetadataPropertyFieldValue(key); + + if (value == null) { + continue; + } + + boolean valid = true; + + if (ptMeta.getIsHaveAllowedValues()) { + valid = ptMeta.hasAllowedPropertyMetadataValue(value); + } + + if (!valid) { + String label = fieldInfo.getLabel(); + throw new CdbException("Invalid value for " + label + ". Value: " + value); + } + } } protected String getCoreMetadataPropertyFieldValue(String key) throws CdbException { @@ -2012,10 +2042,10 @@ public PropertyType getCoreMetadataPropertyType() { } return coreMetadataPropertyType; } - + @JsonIgnore public Object getItemMetadataObject() { - return this; + return this; } protected CdbEntity getEntityById(String id) { From baf79ce6a090f61f2bda4362c2d660704508f3fb Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 10:42:03 -0500 Subject: [PATCH 44/80] :floppy_disk: Update database to support sort order. #1670 --- db/sql/create_cdb_tables.sql | 1 + db/sql/updates/updateTo3.17.0.sql | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/db/sql/create_cdb_tables.sql b/db/sql/create_cdb_tables.sql index 1a1cf2bee..1173f20a0 100644 --- a/db/sql/create_cdb_tables.sql +++ b/db/sql/create_cdb_tables.sql @@ -921,6 +921,7 @@ CREATE TABLE `allowed_property_metadata_value` ( `property_type_metadata_id` int(11) unsigned NOT NULL, `metadata_value` varchar(255) NOT NULL, `description` varchar(256) DEFAULT NULL, + `sort_order` float(10,2) unsigned DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `allowed_property_metadata_value_u1` (`property_type_metadata_id`,`metadata_value`), KEY `allowed_property_metadata_value_k1` (`property_type_metadata_id`), diff --git a/db/sql/updates/updateTo3.17.0.sql b/db/sql/updates/updateTo3.17.0.sql index de1cbda87..f1857e4f4 100644 --- a/db/sql/updates/updateTo3.17.0.sql +++ b/db/sql/updates/updateTo3.17.0.sql @@ -25,4 +25,7 @@ INSERT IGNORE INTO `setting_type` VALUES (21512,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId2','Display property value for property type id #2.',''), (21513,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId3','Display property value for property type id #3.',''), (21514,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId4','Display property value for property type id #4.',''), -(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.',''); \ No newline at end of file +(21515,'ItemDomainMachineDesignIOC.List.Display.PropertyTypeId5','Display property value for property type id #5.',''); + + +ALTER IGNORE TABLE `allowed_property_metadata_value` ADD COLUMN `sort_order` float(10,2) unsigned DEFAULT NULL AFTER `description`; From 53b55e347f6a06bba70653b3fdcbd08242df06b0 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 10:44:25 -0500 Subject: [PATCH 45/80] :arrow_up_small: support sort order for allowed property metadata values. #1670 --- .../entities/AllowedPropertyMetadataValue.java | 10 ++++++++++ ...llowedPropertyTypeMetadataValueEditList.xhtml | 16 ++++++++++------ .../allowedPropertyTypeMetadataValueList.xhtml | 6 +++++- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java index c49cb95c1..c45207aeb 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java @@ -48,6 +48,8 @@ public class AllowedPropertyMetadataValue extends CdbEntity implements Serializa @JoinColumn(name = "property_type_metadata_id", referencedColumnName = "id") @ManyToOne(optional = false) private PropertyTypeMetadata propertyTypeMetadata; + @Column(name = "sort_order") + private Float sortOrder; public AllowedPropertyMetadataValue() { } @@ -80,6 +82,14 @@ public void setDescription(String description) { this.description = description; } + public Float getSortOrder() { + return sortOrder; + } + + public void setSortOrder(Float sortOrder) { + this.sortOrder = sortOrder; + } + @XmlTransient public PropertyTypeMetadata getPropertyTypeMetadata() { return propertyTypeMetadata; diff --git a/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueEditList.xhtml b/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueEditList.xhtml index 722c41163..2a5e489e3 100644 --- a/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueEditList.xhtml +++ b/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueEditList.xhtml @@ -8,7 +8,7 @@ See LICENSE file. xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://xmlns.jcp.org/jsf/html"> - +
- + - + - + - + + + + + - + diff --git a/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueList.xhtml b/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueList.xhtml index a5eb5bfd4..e052dbdca 100644 --- a/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueList.xhtml +++ b/src/java/CdbWebPortal/web/views/propertyMetadata/private/allowedPropertyTypeMetadataValueList.xhtml @@ -22,7 +22,11 @@ See LICENSE file. - +
+ + + + From 8b3ddc4fff2e96f10eafefd99e438346fe5357ed Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 10:44:49 -0500 Subject: [PATCH 46/80] Remove unused import --- .../java/gov/anl/aps/cdb/rest/routes/MachineDesignItemRoute.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/MachineDesignItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/MachineDesignItemRoute.java index 3de02c900..d03192584 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/MachineDesignItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/MachineDesignItemRoute.java @@ -10,7 +10,6 @@ import gov.anl.aps.cdb.common.exceptions.InvalidObjectState; import gov.anl.aps.cdb.common.exceptions.ObjectNotFound; import gov.anl.aps.cdb.portal.constants.ItemDomainName; -import gov.anl.aps.cdb.portal.controllers.utilities.CdbEntityControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignControlControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignControllerUtility; From 7d05f073a2d5eaa954e561dfaeaffa59639ddff8 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 10:46:54 -0500 Subject: [PATCH 47/80] :technologist: API :technologist: Add new API to support adding allowed values for metadata keys. #1670 --- .../AllowedPropertyMetadataValue.java | 4 +- .../model/db/entities/PropertyType.java | 17 ++- .../db/entities/PropertyTypeMetadata.java | 7 +- .../cdb/rest/routes/PropertyTypeRoute.java | 116 +++++++++++++----- 4 files changed, 99 insertions(+), 45 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java index c45207aeb..14cba5da4 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/AllowedPropertyMetadataValue.java @@ -4,6 +4,7 @@ */ package gov.anl.aps.cdb.portal.model.db.entities; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; @@ -40,7 +41,7 @@ public class AllowedPropertyMetadataValue extends CdbEntity implements Serializa private Integer id; @Basic(optional = false) @NotNull - @Size(min=1, max = 32) + @Size(min=1, max = 255) @Column(name = "metadata_value") private String metadataValue; @Size(max = 256) @@ -90,6 +91,7 @@ public void setSortOrder(Float sortOrder) { this.sortOrder = sortOrder; } + @JsonIgnore @XmlTransient public PropertyTypeMetadata getPropertyTypeMetadata() { return propertyTypeMetadata; diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyType.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyType.java index 9a2a6959b..509fc4240 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyType.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyType.java @@ -65,11 +65,9 @@ "propertyValueList", "propertyTypeCategory", "propertyTypeHandler", - "propertyTypeMetadataList", "allowedPropertyValueList", - //Transient Variables - "displayType", + "displayType", "allowedDomainString" }) @JsonInclude(JsonInclude.Include.NON_NULL) @@ -113,20 +111,20 @@ public class PropertyType extends CdbEntity implements Serializable { @JoinTable(name = "allowed_entity_type", joinColumns = { @JoinColumn(name = "property_type_id", referencedColumnName = "id")}, inverseJoinColumns = { @JoinColumn(name = "entity_type_id", referencedColumnName = "id")}) - @ManyToMany + @ManyToMany private List entityTypeList; - @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "propertyType") + @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "propertyType") private List propertyValueList; @JoinColumn(name = "property_type_category_id", referencedColumnName = "id") - @ManyToOne + @ManyToOne private PropertyTypeCategory propertyTypeCategory; @JoinColumn(name = "property_type_handler_id", referencedColumnName = "id") @ManyToOne(cascade = CascadeType.PERSIST) private PropertyTypeHandler propertyTypeHandler; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "propertyType") + @OneToMany(cascade = CascadeType.ALL, mappedBy = "propertyType") private List propertyTypeMetadataList; @OneToMany(cascade = CascadeType.ALL, mappedBy = "propertyType") - @OrderBy("sortOrder ASC") + @OrderBy("sortOrder ASC") private List allowedPropertyValueList; private transient List sortedAllowedPropertyValueList; @@ -291,11 +289,10 @@ public void setPropertyTypeHandler(PropertyTypeHandler propertyTypeHandler) { this.propertyTypeHandler = propertyTypeHandler; } - @XmlTransient public List getPropertyTypeMetadataList() { return propertyTypeMetadataList; } - + @XmlTransient public PropertyTypeMetadata getPropertyTypeMetadataForKey(String key) { if (propertyTypeMetadataList != null) { diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyTypeMetadata.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyTypeMetadata.java index 5016c7a60..b466b7103 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyTypeMetadata.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/PropertyTypeMetadata.java @@ -4,6 +4,7 @@ */ package gov.anl.aps.cdb.portal.model.db.entities; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.io.Serializable; import java.util.List; import javax.persistence.Basic; @@ -18,6 +19,7 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; +import javax.persistence.OrderBy; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -52,6 +54,7 @@ public class PropertyTypeMetadata extends CdbEntity implements Serializable { @ManyToOne(optional = false) private PropertyType propertyType; @OneToMany(cascade = CascadeType.ALL, mappedBy = "propertyTypeMetadata") + @OrderBy("sortOrder ASC") private List allowedPropertyMetadataValueList; public PropertyTypeMetadata() { @@ -85,6 +88,7 @@ public void setDescription(String description) { this.description = description; } + @JsonIgnore @XmlTransient public PropertyType getPropertyType() { return propertyType; @@ -94,7 +98,6 @@ public void setPropertyType(PropertyType propertyType) { this.propertyType = propertyType; } - @XmlTransient public List getAllowedPropertyMetadataValueList() { return allowedPropertyMetadataValueList; } @@ -103,6 +106,7 @@ public void setAllowedPropertyMetadataValueList(List 0; @@ -121,6 +125,7 @@ public boolean hasAllowedPropertyMetadataValue(String value) { return false; } + @JsonIgnore public boolean getIsHaveDescription() { return description != null && !description.equals(""); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyTypeRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyTypeRoute.java index b07f5fe8f..b5741662a 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyTypeRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyTypeRoute.java @@ -8,14 +8,19 @@ import gov.anl.aps.cdb.common.exceptions.CdbException; import gov.anl.aps.cdb.portal.constants.SystemPropertyTypeNames; import gov.anl.aps.cdb.portal.controllers.utilities.AllowedPropertyValueControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.PropertyTypeControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.PropertyTypeFacade; +import gov.anl.aps.cdb.portal.model.db.entities.AllowedPropertyMetadataValue; import gov.anl.aps.cdb.portal.model.db.entities.AllowedPropertyValue; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainCableInventory; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainInventory; import gov.anl.aps.cdb.portal.model.db.entities.PropertyType; +import gov.anl.aps.cdb.portal.model.db.entities.PropertyTypeMetadata; import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; import gov.anl.aps.cdb.rest.authentication.Secured; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; import javax.ejb.EJB; @@ -25,6 +30,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -36,69 +42,69 @@ @Path("/PropertyTypes") @Tag(name = "PropertyType") public class PropertyTypeRoute extends BaseRoute { - + private static final Logger LOGGER = LogManager.getLogger(PropertyType.class.getName()); - + @EJB private PropertyTypeFacade propertyTypeFacade; - + @GET - @Path("/all") - @Produces(MediaType.APPLICATION_JSON) - public List getAll() { + @Path("/all") + @Produces(MediaType.APPLICATION_JSON) + public List getAll() { LOGGER.debug("Fetching all property types."); return propertyTypeFacade.findAll(); } - + @GET @Path("/ById/{id}") @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Fetch an property type by its id.") public PropertyType getPropertyTypeById(@PathParam("id") int id) { - LOGGER.debug("Fetching property type by id: " + id); - return propertyTypeFacade.findById(id); + LOGGER.debug("Fetching property type by id: " + id); + return propertyTypeFacade.findById(id); } - + @GET @Path("/ByName/{name}") @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Fetch an property type by its name.") public PropertyType getPropertyTypeByName(@PathParam("name") String name) { - LOGGER.debug("Fetching property type by name: " + name); - return propertyTypeFacade.findByName(name); + LOGGER.debug("Fetching property type by name: " + name); + return propertyTypeFacade.findByName(name); } - + @GET - @Path("/inventoryStatusPropertyType") - @Produces(MediaType.APPLICATION_JSON) - public PropertyType getInventoryStatusPropertyType() { + @Path("/inventoryStatusPropertyType") + @Produces(MediaType.APPLICATION_JSON) + public PropertyType getInventoryStatusPropertyType() { LOGGER.debug("Fetching inventory item status property type."); - return propertyTypeFacade.findByName(ItemDomainInventory.ITEM_DOMAIN_INVENTORY_STATUS_PROPERTY_TYPE_NAME); + return propertyTypeFacade.findByName(ItemDomainInventory.ITEM_DOMAIN_INVENTORY_STATUS_PROPERTY_TYPE_NAME); } - + @GET - @Path("/cableInventoryStatusPropertyType") - @Produces(MediaType.APPLICATION_JSON) - public PropertyType getCableInventoryStatusPropertyType() { + @Path("/cableInventoryStatusPropertyType") + @Produces(MediaType.APPLICATION_JSON) + public PropertyType getCableInventoryStatusPropertyType() { LOGGER.debug("Fetching inventory item status property type."); - return propertyTypeFacade.findByName(ItemDomainCableInventory.ITEM_DOMAIN_CABLE_INVENTORY_STATUS_PROPERTY_TYPE_NAME); + return propertyTypeFacade.findByName(ItemDomainCableInventory.ITEM_DOMAIN_CABLE_INVENTORY_STATUS_PROPERTY_TYPE_NAME); } - + @GET - @Path("/controlInterfaceToParentPropertyType") - @Produces(MediaType.APPLICATION_JSON) - public PropertyType getControlInterfaceToParentPropertyType() { + @Path("/controlInterfaceToParentPropertyType") + @Produces(MediaType.APPLICATION_JSON) + public PropertyType getControlInterfaceToParentPropertyType() { String propertyTypeName = SystemPropertyTypeNames.cotrolInterface.getValue(); LOGGER.debug("Fetching operty type: " + propertyTypeName); - return propertyTypeFacade.findByName(propertyTypeName); + return propertyTypeFacade.findByName(propertyTypeName); } - + @PUT @Path("/ById/{id}/AllowedValue") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Secured - public AllowedPropertyValue addAllowedValue(@PathParam("id") int propertyTypeId, AllowedPropertyValue allowedPropertyValue) throws AuthorizationError, CdbException { + public AllowedPropertyValue addAllowedValue(@PathParam("id") int propertyTypeId, @RequestBody(required = true) AllowedPropertyValue allowedPropertyValue) throws AuthorizationError, CdbException { boolean currentRequestUserAdmin = isCurrentRequestUserAdmin(); if (!currentRequestUserAdmin) { AuthorizationError ex = new AuthorizationError("Only admins can create new allowed values."); @@ -106,12 +112,56 @@ public AllowedPropertyValue addAllowedValue(@PathParam("id") int propertyTypeId, throw ex; } UserInfo createdByUserInfo = getCurrentRequestUserInfo(); - PropertyType propertyType = getPropertyTypeById(propertyTypeId); + PropertyType propertyType = getPropertyTypeById(propertyTypeId); AllowedPropertyValueControllerUtility utility = new AllowedPropertyValueControllerUtility(); allowedPropertyValue.setPropertyType(propertyType); AllowedPropertyValue newAllowedValue = utility.create(allowedPropertyValue, createdByUserInfo); - return newAllowedValue; + return newAllowedValue; } - - + + @PUT + @Path("/ById/{id}/MetadataAllowedValue") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Secured + public PropertyType addMetadataAllowedValue(@PathParam("id") int propertyTypeId, + @Parameter(description = "Metadata Key", required = true) @QueryParam("metadataKey") String key, + @RequestBody(required = true) AllowedPropertyMetadataValue allowedPropertyMetadataValue) throws AuthorizationError, CdbException { + boolean currentRequestUserAdmin = isCurrentRequestUserAdmin(); + if (!currentRequestUserAdmin) { + AuthorizationError ex = new AuthorizationError("Only admins can create new allowed values."); + LOGGER.error(ex); + throw ex; + } + UserInfo createdByUserInfo = getCurrentRequestUserInfo(); + PropertyType propertyType = getPropertyTypeById(propertyTypeId); + + PropertyTypeMetadata ptMetadata = propertyType.getPropertyTypeMetadataForKey(key); + + if (ptMetadata == null) { + throw new CdbException("The metadata key provided does not exist for this property type."); + } + + String newAllowedValue = allowedPropertyMetadataValue.getMetadataValue(); + + if (ptMetadata.hasAllowedPropertyMetadataValue(newAllowedValue)) { + throw new CdbException("Property type allowed metadata value is already defined."); + } + + // Proceed with addition of new value. + List allowedPropertyMetadataValueList = ptMetadata.getAllowedPropertyMetadataValueList(); + AllowedPropertyMetadataValue newAllowedMetadataValue = new AllowedPropertyMetadataValue(); + newAllowedMetadataValue.setMetadataValue(allowedPropertyMetadataValue.getMetadataValue()); + newAllowedMetadataValue.setDescription(allowedPropertyMetadataValue.getDescription()); + newAllowedMetadataValue.setSortOrder(allowedPropertyMetadataValue.getSortOrder()); + newAllowedMetadataValue.setPropertyTypeMetadata(ptMetadata); + + allowedPropertyMetadataValueList.add(newAllowedMetadataValue); + + PropertyTypeControllerUtility utility = new PropertyTypeControllerUtility(); + + propertyType = utility.update(propertyType, createdByUserInfo); + return propertyType; + } + } From bbceccb5a7a638aba517d3931f7dae8a03e0677f Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 10:47:52 -0500 Subject: [PATCH 48/80] :technologist: API :technologist: Add new API to support fetching ioc item list. #1670 --- .../gov/anl/aps/cdb/rest/routes/IOCItemRoute.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index b44cd0515..565bf2428 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -7,7 +7,6 @@ import gov.anl.aps.cdb.common.exceptions.AuthorizationError; import gov.anl.aps.cdb.common.exceptions.CdbException; import gov.anl.aps.cdb.portal.constants.EntityTypeName; -import gov.anl.aps.cdb.portal.controllers.utilities.ItemControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; @@ -18,7 +17,9 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import javax.ejb.EJB; +import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -75,4 +76,13 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin return machine; } + @GET + @Path("/all") + @Produces(MediaType.APPLICATION_JSON) + public List getIOCItemList() { + List iocItems = machineFacade.getIOCItems(); + + return iocItems; + } + } From 4e5f3be96a59f974d3a5d78e6e55b2b5e3298b87 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 11:14:06 -0500 Subject: [PATCH 49/80] Add support for filtering on core metadata keys. #1670 --- .../builder/ItemDomainMachineDesignIOCQueryBuilder.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java index 3a289ad59..ed5ac01a1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java @@ -6,6 +6,7 @@ import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.settings.ItemSettings; +import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; import java.util.Map; import org.primefaces.model.SortOrder; @@ -30,4 +31,9 @@ protected void generateWhereString() { appendRawWhere(defaultFilter); } + @Override + protected String getCoreMetadataPropertyName() { + return ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE; + } + } From 2144a0ccf5ab260d373a41c730a4d8816043ce44 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 11:50:33 -0500 Subject: [PATCH 50/80] Standardize metadata edit value to support allwoed values on edit and view inplace edit. Also support textarea for URLS #1670 --- .../coreMetadataPropertyEditFields.xhtml | 16 +----- .../coreMetadataPropertyEditValue.xhtml | 51 +++++++++++++++++++ .../private/coreMetadataPropertyFields.xhtml | 21 +------- 3 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml index ce6bf2e85..e9e619038 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml @@ -33,21 +33,7 @@ See LICENSE file. title="#{metadataDescription}"/> - - - - - - +
diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml new file mode 100644 index 000000000..f2573c3fd --- /dev/null +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml @@ -0,0 +1,51 @@ + + + + + + + + + + + + #{allowedPropertyMetadataValueObject.metadataValue} +
+ +
+ +
+ + + + + + + + + + +
diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml index aa44f4287..5c04440ee 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml @@ -90,26 +90,7 @@ See LICENSE file. - - - - - - #{allowedPropertyMetadataValueObject.metadataValue} -
- -
- -
- +
From edca9e6b0bdec46cc15ad8decc3bc44658c19cb9 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 2 Jul 2025 11:53:01 -0500 Subject: [PATCH 51/80] Add repo URL support. #1670 --- .../ItemDomainMachineDesignIOCSettings.java | 19 +++++++++++++++++++ ...mainMachineDesignIOCControllerUtility.java | 9 +++++++++ .../model/db/entities/ItemMetadataIOC.java | 10 ++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index 814690a1d..becdb4e7d 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -37,10 +37,12 @@ public class ItemDomainMachineDesignIOCSettings extends ItemSettings { public final static String IOC_ITEM_FUNCTION_TAG_KEY = "functionTag"; public final static String IOC_DEPLOYMENT_STATUS_KEY = "deploymentStatus"; + public final static String REPO_URL_KEY = "repoUrl"; + private String machineTag; private String functionTag; private String deploymentStatus; @@ -61,6 +63,14 @@ public void setDeploymentStatus(String deploymentStatus) throws CdbException { setCoreMetadataPropertyFieldValue(IOC_DEPLOYMENT_STATUS_KEY, deploymentStatus); } + public String getRepoUrl() throws CdbException { + return getCoreMetadataPropertyFieldValue(REPO_URL_KEY); + } + + public void setRepoUrl(String repoURL) throws CdbException { + setCoreMetadataPropertyFieldValue(REPO_URL_KEY, repoURL); + } + public String getBootInstructions() { PropertyValue pv = getCoreMetadataPropertyValue(); From cc89bd7e95d85ed76906caac356b37760b8a0923 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:07:34 -0500 Subject: [PATCH 52/80] Ensure proper assignment of entity type for new instance. This also ensures creation of core metadata property during the create step. #1670 --- .../utilities/ItemControllerUtility.java | 4 ++++ ...mainMachineDesignIOCControllerUtility.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java index 473347b1a..75128f1cd 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemControllerUtility.java @@ -394,6 +394,9 @@ protected final ItemConnector prepareItemConnectorForDomain(ItemConnector itemCo protected abstract ItemDomainEntity instenciateNewItemDomainEntity(); + protected void assignEntityTypeForNewInstance(ItemDomainEntity item) { + } + @Override public ItemDomainEntity createEntityInstance(UserInfo sessionUser) { ItemDomainEntity item = instenciateNewItemDomainEntity(); @@ -405,6 +408,7 @@ public ItemDomainEntity createEntityInstance(UserInfo sessionUser) { } else { item.init(ei); } + assignEntityTypeForNewInstance(item); // initialize core metadata if subclass uses that facility item.initializeCoreMetadataPropertyValue(); diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 90d2df96d..d6b2f905c 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -7,10 +7,16 @@ import java.util.List; import gov.anl.aps.cdb.common.constants.ItemMetadataFieldType; +import gov.anl.aps.cdb.common.exceptions.CdbException; +import gov.anl.aps.cdb.portal.constants.EntityTypeName; +import gov.anl.aps.cdb.portal.model.db.entities.EntityType; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; import static gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE; import gov.anl.aps.cdb.portal.view.objects.ItemMetadataPropertyInfo; +import java.util.ArrayList; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * @@ -18,6 +24,8 @@ */ public class ItemDomainMachineDesignIOCControllerUtility extends ItemDomainMachineDesignBaseControllerUtility { + private static final Logger logger = LogManager.getLogger(ItemDomainMachineDesignIOCControllerUtility.class.getName()); + @Override public List getItemList() { return itemFacade.getIOCItems(); @@ -87,4 +95,17 @@ public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { return info; } + @Override + protected void assignEntityTypeForNewInstance(ItemDomainMachineDesign ioc) { + // Assign IOC type + String iocEntityTypeName = EntityTypeName.ioc.getValue(); + EntityType iocEntityType = entityTypeFacade.findByName(iocEntityTypeName); + try { + ioc.setEntityTypeList(new ArrayList<>()); + } catch (CdbException ex) { + logger.error(ex); + } + ioc.getEntityTypeList().add(iocEntityType); + } + } From c4b2bad6645814b7a1f70155d3b4bda6dd5dd5ab Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:11:16 -0500 Subject: [PATCH 53/80] Allow a way to add more panel grid conents for template use. --- .../item/private/templates/itemPanelGridTemplateBase.xhtml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/templates/itemPanelGridTemplateBase.xhtml b/src/java/CdbWebPortal/web/views/item/private/templates/itemPanelGridTemplateBase.xhtml index 00583ab19..5171115ad 100644 --- a/src/java/CdbWebPortal/web/views/item/private/templates/itemPanelGridTemplateBase.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/templates/itemPanelGridTemplateBase.xhtml @@ -52,7 +52,9 @@ See LICENSE file. - + + + From 0fd7c26d1a188d66e5a4c7eae1e410fedcbcdc0f Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:12:25 -0500 Subject: [PATCH 54/80] No longer need to assign ioc entity type since its done in the controller utility. #1670 --- .../ItemDomainMachineDesignIOCController.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index eb0a8dd09..b36a286c0 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -108,17 +108,7 @@ public String prepareCreate() { parentMachineSelectionTreeNode = null; String createRedirect = super.prepareCreate(); - - // Assign IOC type ItemDomainMachineDesign current = getCurrent(); - String iocEntityTypeName = EntityTypeName.ioc.getValue(); - EntityType iocEntityType = entityTypeFacade.findByName(iocEntityTypeName); - try { - current.setEntityTypeList(new ArrayList<>()); - } catch (CdbException ex) { - LOGGER.error(ex); - } - current.getEntityTypeList().add(iocEntityType); // Create placeholder for machine parent element. UserInfo user = SessionUtility.getUser(); From af4b05909f5b8519d6ff11d0518b5e2b61ce8f8c Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:14:05 -0500 Subject: [PATCH 55/80] Refactor itemMetadataObject and add filters and no value selection for the dropdown. #1670 --- .../item/private/coreMetadataPropertyEditValue.xhtml | 9 ++++++--- .../views/item/private/coreMetadataPropertyFields.xhtml | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml index f2573c3fd..dc4bec9f3 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml @@ -12,11 +12,14 @@ See LICENSE file. xmlns:p="http://primefaces.org/ui" xmlns:f="http://xmlns.jcp.org/jsf/core"> - + + + @@ -29,12 +32,12 @@ See LICENSE file. - - + - + From f9207992be629f917699667cd6d1591584a03abc Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:15:16 -0500 Subject: [PATCH 56/80] Add standard flat input form for core metadata attributes. Use the standard input for metadata values. #1670 --- .../coreMetadataPropertyFlatEditObject.xhtml | 37 +++++++++++++++++++ .../itemDomainMachineDesignIOC/create.xhtml | 12 ++---- 2 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatEditObject.xhtml diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatEditObject.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatEditObject.xhtml new file mode 100644 index 000000000..5a19c9aea --- /dev/null +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatEditObject.xhtml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml index be9f0f6d2..185152e33 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -8,8 +8,7 @@ See LICENSE file. xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" template="../item/private/templates/itemCreateTemplate.xhtml" - xmlns:p="http://primefaces.org/ui" - xmlns:h="http://xmlns.jcp.org/jsf/html"> + xmlns:p="http://primefaces.org/ui"> @@ -20,6 +19,8 @@ See LICENSE file. + + @@ -29,17 +30,10 @@ See LICENSE file. - - - - - -
- From 6f68e5f710c5a4f22643d5845fc6c009ddeaed25 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:34:25 -0500 Subject: [PATCH 57/80] Do not require machine parent to be specified to create an IOC item. #1670 --- .../ItemDomainMachineDesignIOCController.java | 50 ++++++++----------- .../db/entities/ItemDomainMachineDesign.java | 13 +++++ .../itemDomainMachineDesignIOC/create.xhtml | 2 +- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index b36a286c0..0a9df1c74 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -5,18 +5,14 @@ package gov.anl.aps.cdb.portal.controllers; import gov.anl.aps.cdb.common.exceptions.CdbException; -import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.settings.ItemDomainMachineDesignIOCSettings; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignIOCLazyDataModel; import gov.anl.aps.cdb.portal.model.ItemDomainMachineDesignTreeNode; -import gov.anl.aps.cdb.portal.model.db.entities.EntityType; -import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; import gov.anl.aps.cdb.portal.utilities.SessionUtility; -import java.util.ArrayList; import java.util.List; import javax.enterprise.context.SessionScoped; import javax.inject.Named; @@ -107,31 +103,29 @@ public String prepareCreate() { // Reset variables parentMachineSelectionTreeNode = null; - String createRedirect = super.prepareCreate(); - ItemDomainMachineDesign current = getCurrent(); - - // Create placeholder for machine parent element. - UserInfo user = SessionUtility.getUser(); - ItemElement parentItemElement = getControllerUtility().createItemElement(current, user); - parentItemElement.setParentItem(null); - parentItemElement.setContainedItem(current); - try { - current.setParentMachineElement(parentItemElement); - } catch (CdbException ex) { - LOGGER.error(ex); - } - - return createRedirect; + return super.prepareCreate(); } @Override public String create() { ItemDomainMachineDesign current = getCurrent(); - ItemDomainMachineDesign parentMachineDesign = current.getParentMachineDesign(); - - if (parentMachineDesign == null) { - SessionUtility.addWarningMessage("Machine Parent", "Machine Parent must be specified"); - return null; + ItemDomainMachineDesign parentMachineDesign = current.getParentMachineDesignPlaceholder(); + + if (parentMachineDesign != null) { + UserInfo user = SessionUtility.getUser(); + ItemElement parentItemElement = getControllerUtility().createItemElement(current, user); + parentItemElement.setContainedItem(current); + + // Assign parent + String elementName = getControllerUtility().generateUniqueElementNameForItem(parentMachineDesign); + parentItemElement.setName(elementName); + parentItemElement.setParentItem(parentMachineDesign); + + try { + current.setParentMachineElement(parentItemElement); + } catch (CdbException ex) { + LOGGER.error(ex); + } } String createRedirect = super.create(); @@ -163,14 +157,10 @@ public void setParentMachineSelectedTreeNode(ItemDomainMachineDesignTreeNode par } ItemDomainMachineDesign current = getCurrent(); - Item parentItem = machineElement.getContainedItem(); - - String elementName = getControllerUtility().generateUniqueElementNameForItem(parentItem); + ItemDomainMachineDesign parentItem = (ItemDomainMachineDesign) machineElement.getContainedItem(); - ItemElement parentMachineElement = current.getParentMachineElement(); - parentMachineElement.setName(elementName); + current.setParentMachineDesignPlaceholder(parentItem); - parentMachineElement.setParentItem(parentItem); } } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java index 86f5ae4b3..267ddddfb 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemDomainMachineDesign.java @@ -94,6 +94,10 @@ public class ItemDomainMachineDesign extends LocatableStatusItem { // Relationship machine elements private transient List machineElementsRelatedToThis = null; + + // Variable to hold a parent machine design reference pending creation of parent element. + private transient ItemDomainMachineDesign parentMachineDesignPlaceholder; + // private transient Item inventoryForElement = null; private transient boolean inventoryIsInstalled = true; @@ -217,6 +221,15 @@ public ItemDomainMachineDesign getParentMachineDesign() { return null; } + @JsonIgnore + public ItemDomainMachineDesign getParentMachineDesignPlaceholder() { + return parentMachineDesignPlaceholder; + } + + public void setParentMachineDesignPlaceholder(ItemDomainMachineDesign parentMachineDesignPlaceholder) { + this.parentMachineDesignPlaceholder = parentMachineDesignPlaceholder; + } + @JsonIgnore public ItemElement getParentMachineElement() { if (parentMachineElement == null) { diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml index 185152e33..19959d4a9 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -26,7 +26,7 @@ See LICENSE file. - + From c7ae90a04e3c5c4e045474b65d0ead7311acd127 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 09:34:45 -0500 Subject: [PATCH 58/80] Refactor itemMetadataListObject to metadata object. #1670 --- .../web/views/item/private/coreMetadataPropertyEditFields.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml index e9e619038..d5bd4fe9b 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml @@ -14,7 +14,7 @@ See LICENSE file. - + From 91b9cd775e4c880212bed89a7f2ef8dfbee2fad2 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 14:36:00 -0500 Subject: [PATCH 59/80] Update API to support updating ioc information including boot instructions. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 565bf2428..82e93b68d 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -51,16 +51,47 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin ItemDomainMachineDesign machine = machineFacade.find(machineId); UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); + verifyItemReady(machine); machine.addEntityType(EntityTypeName.ioc.getValue()); - if (ItemDomainMachineDesign.isItemDeleted(machine)) { - throw new CdbException("The machine id " + machine.getId() + " is a deleted item."); + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null); + } + + @POST + @Path("/updateIOCInfo/{iocId}") + @Produces(MediaType.APPLICATION_JSON) + @Operation(summary = "Update IOC Info.") + @SecurityRequirement(name = "cdbAuth") + @Secured + public ItemDomainMachineDesign updateIOCInfo(@PathParam("iocId") int iocId, + @Parameter(description = "Machine Tag") @QueryParam("machineTag") String machineTag, + @Parameter(description = "Function Tag") @QueryParam("functionTag") String functionTag, + @Parameter(description = "Deployment Status") @QueryParam("deploymentStatus") String deploymentStatus, + @Parameter(description = "Boot Instructions") @QueryParam("bootInstructions") String bootInstructions) throws AuthorizationError, CdbException { + + ItemDomainMachineDesign machine = machineFacade.find(iocId); + + UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); + verifyItemReady(machine); + + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, bootInstructions); + } + + private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { + if (ItemDomainMachineDesign.isItemDeleted(item)) { + throw new CdbException("The machine id " + item.getId() + " is a deleted item."); } + } - ItemDomainMachineDesignBaseControllerUtility utility = machine.getItemControllerUtility(); + private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, UserInfo currentUser, String machineTag, String functionTag, String deploymentStatus, String bootInstructions) throws CdbException { + ItemDomainMachineDesignBaseControllerUtility utility = iocItem.getItemControllerUtility(); + + if (!ItemDomainMachineDesign.isItemIOC(iocItem)) { + throw new CdbException("Not and IOC Item"); + } - ItemMetadataIOC iocInfo = machine.getIocInfo(); + ItemMetadataIOC iocInfo = iocItem.getIocInfo(); if (machineTag != null) { iocInfo.setMachineTag(machineTag); } @@ -71,9 +102,9 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin iocInfo.setDeploymentStatus(deploymentStatus); } - machine = utility.update(machine, currentUser); + iocItem = utility.update(iocItem, currentUser); - return machine; + return iocItem; } @GET From 23c23e1fdf59709b8d1bed47410d9591cbf4361e Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 14:42:58 -0500 Subject: [PATCH 60/80] Expose ioc item api in factory. #1670 --- .../python-client/CdbApiFactory.py | 360 ++++++++++-------- 1 file changed, 193 insertions(+), 167 deletions(-) diff --git a/tools/developer_tools/python-client/CdbApiFactory.py b/tools/developer_tools/python-client/CdbApiFactory.py index 3eb8dd12b..8941d92f5 100755 --- a/tools/developer_tools/python-client/CdbApiFactory.py +++ b/tools/developer_tools/python-client/CdbApiFactory.py @@ -5,8 +5,20 @@ import base64 import os -from cdbApi import ApiException, DomainApi, FileUploadObject, LocationItemsApi, LogApi, PropertyValueApi, \ - ComponentCatalogItemsApi, ComponentInventoryItemsApi, ApiExceptionMessage, CableImportApi, AppItemsApi, MAARCItemsApi +from cdbApi import ( + ApiException, + DomainApi, + FileUploadObject, + LocationItemsApi, + LogApi, + PropertyValueApi, + ComponentCatalogItemsApi, + ComponentInventoryItemsApi, + ApiExceptionMessage, + CableImportApi, + AppItemsApi, + MAARCItemsApi, +) from cdbApi.api.item_api import ItemApi from cdbApi.api.downloads_api import DownloadsApi from cdbApi.api.property_type_api import PropertyTypeApi @@ -16,6 +28,7 @@ from cdbApi.api.cable_catalog_items_api import CableCatalogItemsApi from cdbApi.api.cable_design_items_api import CableDesignItemsApi from cdbApi.api.machine_design_items_api import MachineDesignItemsApi +from cdbApi.api.ioc_items_api import IOCItemsApi from cdbApi.api.connector_types_api import ConnectorTypesApi from cdbApi.api_client import ApiClient from cdbApi.api.authentication_api import AuthenticationApi @@ -24,173 +37,186 @@ class CdbApiFactory: - HEADER_TOKEN_KEY = "token" - URL_FORMAT = "%s/views/item/view?id=%s" - - LOCATION_DOMAIN_ID = 1 - CATALOG_DOMAIN_ID = 2 - INVENTORY_DOMAIN_ID = 3 - MAARC_DOMAIN_ID= 5 - MACHINE_DESIGN_DOMAIN_ID = 6 - CABLE_CATALOG_DOMAIN_ID = 7 - CABLE_INVENTORY_DOMAIN_ID = 8 - CABLE_DESIGN_DOMAIN_ID = 9 - - def __init__(self, cdbUrl): - self.cdbUrl = cdbUrl - self.config = Configuration(host=self.cdbUrl) - self.apiClient = ApiClient(configuration=self.config) - self.itemApi = ItemApi(api_client=self.apiClient) - self.downloadsApi = DownloadsApi(api_client=self.apiClient) - self.propertyTypeApi = PropertyTypeApi(api_client=self.apiClient) - self.propertyValueApi = PropertyValueApi(api_client=self.apiClient) - self.usersApi = UsersApi(api_client=self.apiClient) - self.domainApi = DomainApi(api_client=self.apiClient) - self.sourceApi = SourcesApi(api_client=self.apiClient) - self.logApi = LogApi(api_client=self.apiClient) - self.cableCatalogItemApi = CableCatalogItemsApi(api_client=self.apiClient) - self.cableDesignItemApi = CableDesignItemsApi(api_client=self.apiClient) - self.machineDesignItemApi = MachineDesignItemsApi(api_client=self.apiClient) - self.maarcItemApi = MAARCItemsApi(api_client=self.apiClient) - self.appItemApi = AppItemsApi(api_client=self.apiClient) - self.locationItemApi = LocationItemsApi(api_client=self.apiClient) - self.componentCatalogItemApi = ComponentCatalogItemsApi(api_client=self.apiClient) - self.componentInventoryItemApi = ComponentInventoryItemsApi(api_client=self.apiClient) - self.connectorTypesApi = ConnectorTypesApi(api_client=self.apiClient) - self.cableImportApi = CableImportApi(api_client=self.apiClient) - self.searchApi = SearchApi(api_client=self.apiClient) - - self.authApi = AuthenticationApi(api_client=self.apiClient) - - def getItemApi(self) -> ItemApi: - return self.itemApi - - def getDomainApi(self) -> DomainApi: - return self.domainApi - - def getDownloadApi(self) -> DownloadsApi: - return self.downloadsApi - - def getPropertyTypeApi(self) -> PropertyTypeApi: - return self.propertyTypeApi - - def getPropertyValueApi(self) -> PropertyValueApi: - return self.propertyValueApi - - def getUsersApi(self) -> UsersApi: - return self.usersApi - - def getSourceApi(self) -> SourcesApi: - return self.sourceApi - - def getLogApi(self) -> LogApi: - return self.logApi - - def getCableCatalogItemApi(self) -> CableCatalogItemsApi: - return self.cableCatalogItemApi - - def getCableDesignItemApi(self) -> CableDesignItemsApi: - return self.cableDesignItemApi - - def getMachineDesignItemApi(self) -> MachineDesignItemsApi: - return self.machineDesignItemApi - - def getMAARCItemApi(self) -> MAARCItemsApi: - return self.maarcItemApi - - def getAppItemApi(self) -> AppItemsApi: - return self.appItemApi - - def getLocationItemApi(self) -> LocationItemsApi: - return self.locationItemApi - - def getComponentCatalogItemApi(self) -> ComponentCatalogItemsApi: - return self.componentCatalogItemApi - - def getConnectorTypesApi(self) -> ConnectorTypesApi: - return self.connectorTypesApi - - def getCableImportApi(self) -> CableImportApi: - return self.cableImportApi - - def getSearchApi(self) -> SearchApi: - return self.searchApi - - def generateCDBUrlForItemId(self, itemId): - return self.URL_FORMAT % (self.cdbUrl, str(itemId)) - - def authenticateUser(self, username, password): - response = self.authApi.authenticate_user_with_http_info(username=username, password=password) - - token = response[-1][self.HEADER_TOKEN_KEY] - self.setAuthenticateToken(token) - - def setAuthenticateToken(self, token): - self.apiClient.set_default_header(self.HEADER_TOKEN_KEY, token) - - def getAuthenticateToken(self): - return self.apiClient.default_headers[self.HEADER_TOKEN_KEY] - - def testAuthenticated(self): - self.authApi.verify_authenticated() + HEADER_TOKEN_KEY = "token" + URL_FORMAT = "%s/views/item/view?id=%s" + + LOCATION_DOMAIN_ID = 1 + CATALOG_DOMAIN_ID = 2 + INVENTORY_DOMAIN_ID = 3 + MAARC_DOMAIN_ID = 5 + MACHINE_DESIGN_DOMAIN_ID = 6 + CABLE_CATALOG_DOMAIN_ID = 7 + CABLE_INVENTORY_DOMAIN_ID = 8 + CABLE_DESIGN_DOMAIN_ID = 9 + + def __init__(self, cdbUrl): + self.cdbUrl = cdbUrl + self.config = Configuration(host=self.cdbUrl) + self.apiClient = ApiClient(configuration=self.config) + self.itemApi = ItemApi(api_client=self.apiClient) + self.downloadsApi = DownloadsApi(api_client=self.apiClient) + self.propertyTypeApi = PropertyTypeApi(api_client=self.apiClient) + self.propertyValueApi = PropertyValueApi(api_client=self.apiClient) + self.usersApi = UsersApi(api_client=self.apiClient) + self.domainApi = DomainApi(api_client=self.apiClient) + self.sourceApi = SourcesApi(api_client=self.apiClient) + self.logApi = LogApi(api_client=self.apiClient) + self.cableCatalogItemApi = CableCatalogItemsApi(api_client=self.apiClient) + self.cableDesignItemApi = CableDesignItemsApi(api_client=self.apiClient) + self.machineDesignItemApi = MachineDesignItemsApi(api_client=self.apiClient) + self.iocItemApi = IOCItemsApi(api_client=self.apiClient) + self.maarcItemApi = MAARCItemsApi(api_client=self.apiClient) + self.appItemApi = AppItemsApi(api_client=self.apiClient) + self.locationItemApi = LocationItemsApi(api_client=self.apiClient) + self.componentCatalogItemApi = ComponentCatalogItemsApi( + api_client=self.apiClient + ) + self.componentInventoryItemApi = ComponentInventoryItemsApi( + api_client=self.apiClient + ) + self.connectorTypesApi = ConnectorTypesApi(api_client=self.apiClient) + self.cableImportApi = CableImportApi(api_client=self.apiClient) + self.searchApi = SearchApi(api_client=self.apiClient) - def logOutUser(self): - self.authApi.log_out() - - @classmethod - def createFileUploadObject(cls, filePath): - data = open(filePath, "rb").read() - b64String = base64.b64encode(data).decode() + self.authApi = AuthenticationApi(api_client=self.apiClient) - fileName = os.path.basename(filePath) - return FileUploadObject(file_name=fileName, base64_binary=b64String) + def getItemApi(self) -> ItemApi: + return self.itemApi + + def getDomainApi(self) -> DomainApi: + return self.domainApi + + def getDownloadApi(self) -> DownloadsApi: + return self.downloadsApi + + def getPropertyTypeApi(self) -> PropertyTypeApi: + return self.propertyTypeApi + + def getPropertyValueApi(self) -> PropertyValueApi: + return self.propertyValueApi + + def getUsersApi(self) -> UsersApi: + return self.usersApi + + def getSourceApi(self) -> SourcesApi: + return self.sourceApi + + def getLogApi(self) -> LogApi: + return self.logApi + + def getCableCatalogItemApi(self) -> CableCatalogItemsApi: + return self.cableCatalogItemApi + + def getCableDesignItemApi(self) -> CableDesignItemsApi: + return self.cableDesignItemApi + + def getMachineDesignItemApi(self) -> MachineDesignItemsApi: + return self.machineDesignItemApi + + def getIOCItemApi(self) -> IOCItemsApi: + return self.iocItemApi + + def getMAARCItemApi(self) -> MAARCItemsApi: + return self.maarcItemApi + + def getAppItemApi(self) -> AppItemsApi: + return self.appItemApi + + def getLocationItemApi(self) -> LocationItemsApi: + return self.locationItemApi + + def getComponentCatalogItemApi(self) -> ComponentCatalogItemsApi: + return self.componentCatalogItemApi + + def getConnectorTypesApi(self) -> ConnectorTypesApi: + return self.connectorTypesApi + + def getCableImportApi(self) -> CableImportApi: + return self.cableImportApi + + def getSearchApi(self) -> SearchApi: + return self.searchApi + + def generateCDBUrlForItemId(self, itemId): + return self.URL_FORMAT % (self.cdbUrl, str(itemId)) + + def authenticateUser(self, username, password): + response = self.authApi.authenticate_user_with_http_info( + username=username, password=password + ) + + token = response[-1][self.HEADER_TOKEN_KEY] + self.setAuthenticateToken(token) + + def setAuthenticateToken(self, token): + self.apiClient.set_default_header(self.HEADER_TOKEN_KEY, token) + + def getAuthenticateToken(self): + return self.apiClient.default_headers[self.HEADER_TOKEN_KEY] + + def testAuthenticated(self): + self.authApi.verify_authenticated() + + def logOutUser(self): + self.authApi.log_out() + + @classmethod + def createFileUploadObject(cls, filePath): + data = open(filePath, "rb").read() + b64String = base64.b64encode(data).decode() + + fileName = os.path.basename(filePath) + return FileUploadObject(file_name=fileName, base64_binary=b64String) + + def parseApiException(self, openApiException): + responseType = ApiExceptionMessage.__name__ + openApiException.data = openApiException.body + exObj = self.apiClient.deserialize(openApiException, responseType) + exObj.status = openApiException.status + return exObj - def parseApiException(self, openApiException): - responseType = ApiExceptionMessage.__name__ - openApiException.data = openApiException.body - exObj = self.apiClient.deserialize(openApiException, responseType) - exObj.status = openApiException.status - return exObj def run_command(): - # Example - print("\nEnter cdb URL (ex: https://cdb.aps.anl.gov/cdb): ") - hostname = input() - - apiFactory = CdbApiFactory(hostname) - itemApi = apiFactory.getItemApi() - - catalogItems = itemApi.get_catalog_items() - catalogItem = catalogItems[0] - - # Lists of items seem to be lists of dict items - catalogId = catalogItem.id - - # Single items seem to be appropriate type - catalogFetchedById = itemApi.get_item_by_id(catalogId) - print(catalogFetchedById.name) - - inventoryItemPerCatalog = itemApi.get_items_derived_from_item_by_item_id(catalogId) - print(inventoryItemPerCatalog) - - print("\n\n\nWould you like to test authentication? (y/N): ") - resp = input() - if resp == 'y' or resp == "Y": - import getpass - print("Username: ") - username = input() - print("Password: ") - password = getpass.getpass() - - try: - apiFactory.authenticateUser(username, password) - apiFactory.testAuthenticated() - apiFactory.logOutUser() - except ApiException: - print("Authentication failed!") - exit(1) - - print("Success!") - -if __name__ == '__main__': - run_command() + # Example + print("\nEnter cdb URL (ex: https://cdb.aps.anl.gov/cdb): ") + hostname = input() + + apiFactory = CdbApiFactory(hostname) + itemApi = apiFactory.getItemApi() + + catalogItems = itemApi.get_catalog_items() + catalogItem = catalogItems[0] + + # Lists of items seem to be lists of dict items + catalogId = catalogItem.id + + # Single items seem to be appropriate type + catalogFetchedById = itemApi.get_item_by_id(catalogId) + print(catalogFetchedById.name) + + inventoryItemPerCatalog = itemApi.get_items_derived_from_item_by_item_id(catalogId) + print(inventoryItemPerCatalog) + + print("\n\n\nWould you like to test authentication? (y/N): ") + resp = input() + if resp == "y" or resp == "Y": + import getpass + + print("Username: ") + username = input() + print("Password: ") + password = getpass.getpass() + + try: + apiFactory.authenticateUser(username, password) + apiFactory.testAuthenticated() + apiFactory.logOutUser() + except ApiException: + print("Authentication failed!") + exit(1) + + print("Success!") + + +if __name__ == "__main__": + run_command() From 59899eddd31ea5123a691bbf2b64930eaef3a753 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 3 Jul 2025 15:10:13 -0500 Subject: [PATCH 61/80] Ensure to set boot instructions in API. #1670 --- .../src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 82e93b68d..c96bff395 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -102,6 +102,10 @@ private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, U iocInfo.setDeploymentStatus(deploymentStatus); } + if (bootInstructions != null) { + iocInfo.setBootInstructions(bootInstructions); + } + iocItem = utility.update(iocItem, currentUser); return iocItem; From d02e0a61ea7156fa6eb3e274ab3381ff5d5d622f Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:14:39 -0500 Subject: [PATCH 62/80] Standardize the markdown dialog to support customizations. Add metadtaa ioc functionality to support the preboot, postboot, etc. #1670 --- .../model/db/entities/ItemMetadataIOC.java | 110 ++++++++++++- .../propertyValueMarkdownValueDialog.xhtml | 125 +------------- ...ertyValueMarkdownValueDialogTemplate.xhtml | 153 ++++++++++++++++++ 3 files changed, 265 insertions(+), 123 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/propertyValue/private/template/propertyValueMarkdownValueDialogTemplate.xhtml diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java index 2742c197f..41322814f 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -23,6 +23,11 @@ public class ItemMetadataIOC extends ItemMetadata { private String functionTag; private String deploymentStatus; + private String preBoot = null; + private String postBoot = null; + private String powerCycle = null; + private String additionalMd = null; + public ItemMetadataIOC(ItemDomainMachineDesign iocItem) { super(iocItem); } @@ -71,6 +76,109 @@ public void setRepoUrl(String repoURL) throws CdbException { setCoreMetadataPropertyFieldValue(REPO_URL_KEY, repoURL); } + public String getPreBoot() { + loadInstructions(); + return preBoot; + } + + public void setPreBoot(String preBoot) { + this.preBoot = preBoot; + } + + public String getPostBoot() { + loadInstructions(); + return postBoot; + } + + public void setPostBoot(String postBoot) { + this.postBoot = postBoot; + } + + public String getPowerCycle() { + loadInstructions(); + return powerCycle; + } + + public void setPowerCycle(String powerCycle) { + this.powerCycle = powerCycle; + } + + public String getAdditionalMd() { + loadInstructions(); + return additionalMd; + } + + public void setAdditionalMd(String additionalMd) { + this.additionalMd = additionalMd; + } + + private void loadInstructions() { + if (preBoot != null) { + // Loaded + return; + } + + String bootInstructions = getBootInstructions(); + + if (bootInstructions != null) { + int preBootStart = bootInstructions.indexOf("# Preboot:"); + int preBootEnd = bootInstructions.indexOf(""); + if (preBootStart != -1 && preBootEnd != -1) { + preBoot = bootInstructions.substring(preBootStart + "# Preboot:".length(), preBootEnd).trim(); + } + + int postBootStart = bootInstructions.indexOf("# Postboot:"); + int postBootEnd = bootInstructions.indexOf(""); + if (postBootStart != -1 && postBootEnd != -1) { + postBoot = bootInstructions.substring(postBootStart + "# Postboot:".length(), postBootEnd).trim(); + } + + int powerCycleStart = bootInstructions.indexOf("# Power Cycle:"); + int powerCycleEnd = bootInstructions.indexOf(""); + if (powerCycleStart != -1 && powerCycleEnd != -1) { + powerCycle = bootInstructions.substring(powerCycleStart + "# Power Cycle:".length(), powerCycleEnd).trim(); + } + + int additionalMdStart = bootInstructions.indexOf(""); + int additionalMdEnd = bootInstructions.indexOf(""); + if (additionalMdStart != -1 && additionalMdEnd != -1) { + additionalMd = bootInstructions.substring(additionalMdStart + "".length(), additionalMdEnd).trim(); + } + } + } + + public void generateUpdatedInstructionsMarkdown() { + StringBuilder bootInstructions = new StringBuilder(); + + bootInstructions.append("# Preboot: "); + if (preBoot != null && !preBoot.isEmpty()) { + bootInstructions.append(preBoot); + } + bootInstructions.append(""); + + bootInstructions.append("# Postboot: "); + if (postBoot != null && !postBoot.isEmpty()) { + bootInstructions.append(postBoot); + } + bootInstructions.append(""); + + bootInstructions.append("# Power Cycle: "); + if (powerCycle != null && !powerCycle.isEmpty()) { + bootInstructions.append(powerCycle); + } + bootInstructions.append(""); + + bootInstructions.append(""); + if (additionalMd != null && !additionalMd.isEmpty()) { + if (!additionalMd.startsWith("#")) { + bootInstructions.append("# Additional Notes"); + } + bootInstructions.append(additionalMd); + } + bootInstructions.append(""); + setBootInstructions(bootInstructions.toString().trim()); + } + public String getBootInstructions() { PropertyValue pv = getCoreMetadataPropertyValue(); @@ -81,7 +189,7 @@ public String getBootInstructions() { return null; } - public void setBootInstructions(String bootInstructions) { + private void setBootInstructions(String bootInstructions) { PropertyValue pv = getCoreMetadataPropertyValue(); pv.setText(bootInstructions); } diff --git a/src/java/CdbWebPortal/web/views/propertyValue/private/propertyValueMarkdownValueDialog.xhtml b/src/java/CdbWebPortal/web/views/propertyValue/private/propertyValueMarkdownValueDialog.xhtml index dae68b99f..13168d241 100644 --- a/src/java/CdbWebPortal/web/views/propertyValue/private/propertyValueMarkdownValueDialog.xhtml +++ b/src/java/CdbWebPortal/web/views/propertyValue/private/propertyValueMarkdownValueDialog.xhtml @@ -5,128 +5,9 @@ See LICENSE file. --> - - - - - - - #{propertyValueObject.value} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:ui="http://java.sun.com/jsf/facelets"> + + diff --git a/src/java/CdbWebPortal/web/views/propertyValue/private/template/propertyValueMarkdownValueDialogTemplate.xhtml b/src/java/CdbWebPortal/web/views/propertyValue/private/template/propertyValueMarkdownValueDialogTemplate.xhtml new file mode 100644 index 000000000..42a3d45a3 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/propertyValue/private/template/propertyValueMarkdownValueDialogTemplate.xhtml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + #{propertyValueObject.value} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 33c7ccf9b41647cd75ad9dbfaa8aaf43b7b0770a Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:15:12 -0500 Subject: [PATCH 63/80] Allow some custom pasting functionality for customized markdown dialogs. #1670 --- .../web/resources/javascript/portal.js | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/java/CdbWebPortal/web/resources/javascript/portal.js b/src/java/CdbWebPortal/web/resources/javascript/portal.js index 331217f0d..1a4541e9e 100644 --- a/src/java/CdbWebPortal/web/resources/javascript/portal.js +++ b/src/java/CdbWebPortal/web/resources/javascript/portal.js @@ -13,11 +13,11 @@ let formId = ''; document.addEventListener('paste', pasteMarkdownTextArea); -function pasteMarkdownTextArea(event) { - loadFormId(); +function pasteMarkdownTextArea(event) { + loadFormId(); // Ignore non text area let srcElement = event.srcElement; - if (srcElement.id !== formId + ':propertyValueMarkdownValueDialogEditTabView:markdownPropertyTextareaEdit') { + if (!new RegExp(formId + ':propertyValueMarkdownValueDialogEditTabView.+markdownPropertyTextareaEdit').test(srcElement.id)) { return; } @@ -26,6 +26,10 @@ function pasteMarkdownTextArea(event) { if (pastedFiles.length > 0) { event.preventDefault(); + if (srcElement.id !== formId + ':propertyValueMarkdownValueDialogEditTabView:markdownPropertyTextareaEdit') { + return; + } + // Clear Upload Ref uploadRef = document.getElementById(formId + ':lastFileReference'); uploadRef.innerHTML = "" @@ -41,14 +45,14 @@ function pasteMarkdownTextArea(event) { // Link was pasted. event.preventDefault(); var newData = " [Link Text](" + pastedText + ") "; - addCustomDataToLogEntryValue(newData); + addCustomDataToLogEntryValue(newData, srcElement.id); } } } function pasteLatestFileReference() { - loadFormId(); - + loadFormId(); + let uploadRef = document.getElementById(formId + ':lastFileReference'); let fileRefMd = uploadRef.innerHTML; @@ -61,11 +65,10 @@ function pasteLatestFileReference() { addCustomDataToLogEntryValue(newData); } -function addCustomDataToLogEntryValue(newData) { - loadFormId(); - - let textArea = document.getElementById(formId + ':propertyValueMarkdownValueDialogEditTabView:markdownPropertyTextareaEdit'); +function addCustomDataToLogEntryValue(newData, elementId = formId + ':propertyValueMarkdownValueDialogEditTabView:markdownPropertyTextareaEdit') { + loadFormId(); + let textArea = document.getElementById(elementId); let exitingValue = $(textArea).val(); let curPos = textArea.selectionStart; @@ -76,12 +79,12 @@ function addCustomDataToLogEntryValue(newData) { function loadFormId() { if (formId === '') { for (let form of document.getElementsByTagName('form')) { - if (form.id.endsWith('ViewForm')) { + if (form.id.endsWith('ViewForm')) { formId = form.id; break; } } } - - return formId; + + return formId; } \ No newline at end of file From 9fc3658d5b5fb652ef823ade55eb00654f36e0e4 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:17:14 -0500 Subject: [PATCH 64/80] Add new template that follows the new format. #1670 --- .../ItemDomainMachineDesignIOCControllerUtility.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index d6b2f905c..5b435fac5 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -44,17 +44,7 @@ public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { info.setDefaultPropertyValue("IOC Instructions"); - info.setDefaultPropertyText("# Preboot:\n" - + "\n" - + "\n" - + "\n" - + "# Postboot:\n" - + "\n" - + "\n" - + "\n" - + "# Power Cycle:\n" - + "\n" - + "\n"); + info.setDefaultPropertyText("# Preboot: # Postboot: # Power Cycle: "); info.addField( ItemMetadataIOC.IOC_ITEM_MACHINE_TAG_KEY, From 5207f8596c96936406c73a96c01eedd83c6c0927 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:17:37 -0500 Subject: [PATCH 65/80] Update the template to add appropriate new lines. #1670 --- .../model/db/entities/ItemMetadataIOC.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java index 41322814f..0d66b4702 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -150,30 +150,30 @@ private void loadInstructions() { public void generateUpdatedInstructionsMarkdown() { StringBuilder bootInstructions = new StringBuilder(); - bootInstructions.append("# Preboot: "); + bootInstructions.append("# Preboot:\n"); if (preBoot != null && !preBoot.isEmpty()) { - bootInstructions.append(preBoot); + bootInstructions.append(preBoot).append("\n"); } - bootInstructions.append(""); + bootInstructions.append("\n\n"); - bootInstructions.append("# Postboot: "); + bootInstructions.append("# Postboot:\n"); if (postBoot != null && !postBoot.isEmpty()) { - bootInstructions.append(postBoot); + bootInstructions.append(postBoot).append("\n"); } - bootInstructions.append(""); + bootInstructions.append("\n\n"); - bootInstructions.append("# Power Cycle: "); + bootInstructions.append("# Power Cycle:\n"); if (powerCycle != null && !powerCycle.isEmpty()) { - bootInstructions.append(powerCycle); + bootInstructions.append(powerCycle).append("\n"); } - bootInstructions.append(""); + bootInstructions.append("\n\n"); - bootInstructions.append(""); + bootInstructions.append("\n"); if (additionalMd != null && !additionalMd.isEmpty()) { if (!additionalMd.startsWith("#")) { - bootInstructions.append("# Additional Notes"); + bootInstructions.append("# Additional Notes\n"); } - bootInstructions.append(additionalMd); + bootInstructions.append(additionalMd).append("\n"); } bootInstructions.append(""); setBootInstructions(bootInstructions.toString().trim()); From 3f33b248231cd201959df2113301ff550a06999f Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:17:57 -0500 Subject: [PATCH 66/80] Update API to support setting the new fields and generate markdown. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index c96bff395..1e38e5d13 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -55,7 +55,7 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin machine.addEntityType(EntityTypeName.ioc.getValue()); - return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null); + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null, null, null, null); } @POST @@ -68,14 +68,17 @@ public ItemDomainMachineDesign updateIOCInfo(@PathParam("iocId") int iocId, @Parameter(description = "Machine Tag") @QueryParam("machineTag") String machineTag, @Parameter(description = "Function Tag") @QueryParam("functionTag") String functionTag, @Parameter(description = "Deployment Status") @QueryParam("deploymentStatus") String deploymentStatus, - @Parameter(description = "Boot Instructions") @QueryParam("bootInstructions") String bootInstructions) throws AuthorizationError, CdbException { + @Parameter(description = "Preboot Instructions") @QueryParam("prebootInstructions") String prebootInstructions, + @Parameter(description = "Postboot Instructions") @QueryParam("postbootInstructions") String postbootInstructions, + @Parameter(description = "Power Cycle Instructions") @QueryParam("powerCycleInstructions") String powerCycleInstructions, + @Parameter(description = "Additional Instructions") @QueryParam("additionalInstructions") String additionalInstructions) throws AuthorizationError, CdbException { ItemDomainMachineDesign machine = machineFacade.find(iocId); UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); verifyItemReady(machine); - return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, bootInstructions); + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, prebootInstructions, postbootInstructions, powerCycleInstructions, additionalInstructions); } private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { @@ -84,7 +87,7 @@ private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { } } - private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, UserInfo currentUser, String machineTag, String functionTag, String deploymentStatus, String bootInstructions) throws CdbException { + private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, UserInfo currentUser, String machineTag, String functionTag, String deploymentStatus, String prebootInstructions, String postbootInstructions, String powerCycleInstructions, String additionalInstructions) throws CdbException { ItemDomainMachineDesignBaseControllerUtility utility = iocItem.getItemControllerUtility(); if (!ItemDomainMachineDesign.isItemIOC(iocItem)) { @@ -102,8 +105,30 @@ private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, U iocInfo.setDeploymentStatus(deploymentStatus); } - if (bootInstructions != null) { - iocInfo.setBootInstructions(bootInstructions); + boolean instructionsUpdated = false; + + if (prebootInstructions != null) { + iocInfo.setPreBoot(prebootInstructions); + instructionsUpdated = true; + } + + if (postbootInstructions != null) { + iocInfo.setPostBoot(postbootInstructions); + instructionsUpdated = true; + } + + if (powerCycleInstructions != null) { + iocInfo.setPowerCycle(powerCycleInstructions); + instructionsUpdated = true; + } + + if (additionalInstructions != null) { + iocInfo.setAdditionalMd(additionalInstructions); + instructionsUpdated = true; + } + + if (instructionsUpdated) { + iocInfo.generateUpdatedInstructionsMarkdown(); } iocItem = utility.update(iocItem, currentUser); From adafbb484fb68fb1f9c3f429c9d8f5c68be4723a Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 10:20:18 -0500 Subject: [PATCH 67/80] Add a new custom dialog for managing ioc instructions. #1670 --- .../iocInstructionsMarkdownDialog.xhtml | 60 +++++++++++++++++++ .../itemDomainMachineDesignIOC/view.xhtml | 45 +++++++------- 2 files changed, 81 insertions(+), 24 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/iocInstructionsMarkdownDialog.xhtml diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/iocInstructionsMarkdownDialog.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/iocInstructionsMarkdownDialog.xhtml new file mode 100644 index 000000000..2f03d6abd --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/private/iocInstructionsMarkdownDialog.xhtml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + +

Preboot

+ + +

Postboot

+ + +

Powercycle

+ + +

Additional Markdown

+ + + + + + + + + +
+ + + +
\ No newline at end of file diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml index f1e7a8f20..7f813b643 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -3,45 +3,42 @@ Copyright (c) UChicago Argonne, LLC. All rights reserved. See LICENSE file. --> - - + - + - - - - + + + + - - + + - + - - + + + update="@form:iocBootInstructionsMarkdownDialog" + oncomplete="PF('iocBootInstructionsMarkdownDialogWidget').initPosition(); + PF('iocBootInstructionsMarkdownDialogWidget').show()" /> - - + + + + \ No newline at end of file From 65a9db3ceeab8728288b0ac5f353f545bb6b2808 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 13:00:24 -0500 Subject: [PATCH 68/80] Standardize core metadata view field for reuse. #1670 --- .../private/coreMetadataPropertyFields.xhtml | 74 +--------------- .../coreMetadataPropertyViewField.xhtml | 87 +++++++++++++++++++ 2 files changed, 89 insertions(+), 72 deletions(-) create mode 100644 src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyViewField.xhtml diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml index 000ecfdc4..a28da22af 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml @@ -6,11 +6,9 @@ See LICENSE file. + xmlns:p="http://primefaces.org/ui"> @@ -24,75 +22,7 @@ See LICENSE file. - - - - - - - - - - - - - - - - - - - - - - - "#{entityController.prepareLinkDisplay(metadataValue)}" - - - - - - - - - - - - - -
- - "#{entityController.prepareLinkDisplay(url)}" - -
-
- -
-
- - - -
+
diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyViewField.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyViewField.xhtml new file mode 100644 index 000000000..1bedae12e --- /dev/null +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyViewField.xhtml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "#{entityController.prepareLinkDisplay(metadataValue)}" + + + + + + + + + + + + + +
+ + "#{entityController.prepareLinkDisplay(url)}" + +
+
+ +
+
+ + + +
+ +
From d8dcbcc4f283702911f09a101233f1aa3eed04a9 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 13:00:55 -0500 Subject: [PATCH 69/80] Add a new flat view object that can ve attached to view panelgrid.e #1670 --- .../coreMetadataPropertyFlatViewObject.xhtml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatViewObject.xhtml diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatViewObject.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatViewObject.xhtml new file mode 100644 index 000000000..f46fb6379 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFlatViewObject.xhtml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + From 5d03b28b6ac99e6e139e1a03e4b9e43a61b53e03 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 13:01:20 -0500 Subject: [PATCH 70/80] Use the new core metadata flat view object and hide core metadata panel. #1670 --- .../templates/itemViewTemplateBase.xhtml | 21 +++++++++++-------- .../itemDomainMachineDesignIOC/view.xhtml | 6 ++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/java/CdbWebPortal/web/views/item/private/templates/itemViewTemplateBase.xhtml b/src/java/CdbWebPortal/web/views/item/private/templates/itemViewTemplateBase.xhtml index b9a5e6dd2..179b9e01b 100644 --- a/src/java/CdbWebPortal/web/views/item/private/templates/itemViewTemplateBase.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/templates/itemViewTemplateBase.xhtml @@ -92,13 +92,16 @@ See LICENSE file. - - - + + + + + + @@ -139,9 +142,9 @@ See LICENSE file. rendered="#{entityController.displayCreatedFromCurrentItemList}" toggleable="true" collapsed="#{entityController.displayContentsOfCreatedFromTemplateItem}"> - + - + diff --git a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml index 7f813b643..9b3bfc094 100644 --- a/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -22,10 +22,16 @@ See LICENSE file. + + + + + + From c0f85de4ae28f811afb19fa1bf2abec736da3e5f Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Wed, 9 Jul 2025 13:01:34 -0500 Subject: [PATCH 71/80] Hide alternate name and qrid for IOCs. #1670 --- .../ItemDomainMachineDesignIOCControllerUtility.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 5b435fac5..ffb56ae83 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -98,4 +98,14 @@ protected void assignEntityTypeForNewInstance(ItemDomainMachineDesign ioc) { ioc.getEntityTypeList().add(iocEntityType); } + @Override + public boolean isEntityHasItemIdentifier1() { + return false; + } + + @Override + public boolean isEntityHasQrId() { + return false; + } + } From 1f7914faad1a364c9faf04fb7ec52c739ddd17e7 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 15 Jul 2025 09:20:47 -0500 Subject: [PATCH 72/80] Remove repo URL. #1670 --- .../ItemDomainMachineDesignIOCSettings.java | 19 ------------------- ...mainMachineDesignIOCControllerUtility.java | 9 --------- .../model/db/entities/ItemMetadataIOC.java | 12 +----------- 3 files changed, 1 insertion(+), 39 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java index becdb4e7d..814690a1d 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -37,12 +37,10 @@ public class ItemDomainMachineDesignIOCSettings extends ItemSettings { public final static String IOC_ITEM_FUNCTION_TAG_KEY = "functionTag"; public final static String IOC_DEPLOYMENT_STATUS_KEY = "deploymentStatus"; - public final static String REPO_URL_KEY = "repoUrl"; - private String machineTag; private String functionTag; private String deploymentStatus; @@ -68,14 +66,6 @@ public void setDeploymentStatus(String deploymentStatus) throws CdbException { setCoreMetadataPropertyFieldValue(IOC_DEPLOYMENT_STATUS_KEY, deploymentStatus); } - public String getRepoUrl() throws CdbException { - return getCoreMetadataPropertyFieldValue(REPO_URL_KEY); - } - - public void setRepoUrl(String repoURL) throws CdbException { - setCoreMetadataPropertyFieldValue(REPO_URL_KEY, repoURL); - } - public String getPreBoot() { loadInstructions(); return preBoot; @@ -146,7 +136,7 @@ private void loadInstructions() { } } } - + public void generateUpdatedInstructionsMarkdown() { StringBuilder bootInstructions = new StringBuilder(); From ed446dde5bea05e632078b2dc36c9addb7110576 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Tue, 15 Jul 2025 10:01:02 -0500 Subject: [PATCH 73/80] Ensure that uniqueness is not enforced for IOCs. #1670 --- ...ainMachineDesignBaseControllerUtility.java | 29 ++++++++++--------- ...mainMachineDesignIOCControllerUtility.java | 5 ++++ .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 3 ++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignBaseControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignBaseControllerUtility.java index e534eedcf..6bc60bcd0 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignBaseControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignBaseControllerUtility.java @@ -50,12 +50,16 @@ public ItemDomainMachineDesignBaseControllerUtility() { entityTypeFacade = EntityTypeFacade.getInstance(); } + protected boolean isApplyUniqueness() { + return true; + } + @Override protected boolean verifyItemNameCombinationUniqueness(Item item) { boolean unique = super.verifyItemNameCombinationUniqueness(item); // Ensure all machine designs are unique - if (!unique) { + if (isApplyUniqueness() && !unique) { String viewUUID = item.getViewUUID(); item.setItemIdentifier2(viewUUID); unique = true; @@ -729,7 +733,7 @@ private void updateRepresentingAssemblyElementForMachine(ItemDomainMachineDesign throw new InvalidObjectState(errMessage); } } - + ItemDomainMachineDesign parentMachineDesign = node.getParentMachineDesign(); if (representedElement != null && parentMachineDesign.getRepresentsCatalogElement() != null) { String errMessage = node.getName(); @@ -814,35 +818,34 @@ public List fetchElementsAvaiableForNodeRepresentation(ItemDomainMa return availableElementsForNodeRepresentation; } - + public void unassignMachineTemplate(List machineElementList, UserInfo updateUser) throws CdbException { - List relationshipsToDestroy = new ArrayList<>(); + List relationshipsToDestroy = new ArrayList<>(); List machinesToUpdate = new ArrayList<>(); ItemElementRelationshipControllerUtility ieru = new ItemElementRelationshipControllerUtility(); - + for (ItemElement element : machineElementList) { - boolean updateItem = false; + boolean updateItem = false; if (element.getDerivedFromItemElement() != null) { element.setDerivedFromItemElement(null); - updateItem = true; + updateItem = true; } ItemDomainMachineDesign containedItem = (ItemDomainMachineDesign) element.getContainedItem(); ItemElementRelationship templateRelationship = containedItem.getCreatedFromTemplateRelationship(); - if (templateRelationship != null) { - updateItem = true; + if (templateRelationship != null) { + updateItem = true; relationshipsToDestroy.add(templateRelationship); List childElements = containedItem.getItemElementDisplayList(); for (ItemElement derivedElement : childElements) { - derivedElement.setDerivedFromItemElement(null); + derivedElement.setDerivedFromItemElement(null); } } if (updateItem) { - machinesToUpdate.add(containedItem); + machinesToUpdate.add(containedItem); } } - - + updateList(machinesToUpdate, updateUser); ieru.destroyList(relationshipsToDestroy, null, updateUser); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index c5d7df8ce..95a4fe3c1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -89,6 +89,11 @@ protected void assignEntityTypeForNewInstance(ItemDomainMachineDesign ioc) { ioc.getEntityTypeList().add(iocEntityType); } + @Override + protected boolean isApplyUniqueness() { + return false; + } + @Override public boolean isEntityHasItemIdentifier1() { return false; diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 1e38e5d13..dc8ee45a3 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -50,6 +50,9 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin @Parameter(description = "Deployment Status") @QueryParam("deploymentStatus") String deploymentStatus) throws AuthorizationError, CdbException { ItemDomainMachineDesign machine = machineFacade.find(machineId); + // No uniqueness automation for IOCs. + machine.setItemIdentifier2(null); + UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); verifyItemReady(machine); From fd8344b5127746bc1377137e855d514bb47ca725 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 07:41:17 -0500 Subject: [PATCH 74/80] remove unused imports --- .../java/gov/anl/aps/cdb/rest/routes/PropertyValueRoute.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyValueRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyValueRoute.java index bbf061c60..7b0925777 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyValueRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/PropertyValueRoute.java @@ -8,10 +8,8 @@ import gov.anl.aps.cdb.common.exceptions.CdbException; import gov.anl.aps.cdb.common.exceptions.InvalidArgument; import gov.anl.aps.cdb.common.exceptions.ObjectNotFound; -import gov.anl.aps.cdb.portal.controllers.PropertyValueController; import gov.anl.aps.cdb.portal.controllers.utilities.CdbEntityControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemControllerUtility; -import gov.anl.aps.cdb.portal.controllers.utilities.PropertyValueControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemFacade; import gov.anl.aps.cdb.portal.model.db.beans.PropertyTypeFacade; import gov.anl.aps.cdb.portal.model.db.beans.PropertyValueFacade; From 371cc5b7ce26759a94f3a9e67b703bce82f7b7fe Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 07:42:42 -0500 Subject: [PATCH 75/80] Ensure that template and assigned item is removed from converted IOC. It can only be run by admin. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index dc8ee45a3..9f5e32701 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -6,17 +6,28 @@ import gov.anl.aps.cdb.common.exceptions.AuthorizationError; import gov.anl.aps.cdb.common.exceptions.CdbException; +import gov.anl.aps.cdb.common.exceptions.InvalidObjectState; import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemElementControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; +import gov.anl.aps.cdb.portal.model.db.beans.PropertyTypeFacade; +import gov.anl.aps.cdb.portal.model.db.entities.AllowedPropertyMetadataValue; +import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; +import gov.anl.aps.cdb.portal.model.db.entities.ItemProject; +import gov.anl.aps.cdb.portal.model.db.entities.PropertyType; +import gov.anl.aps.cdb.portal.model.db.entities.PropertyTypeMetadata; import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; import gov.anl.aps.cdb.rest.authentication.Secured; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.ws.rs.GET; @@ -48,14 +59,34 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin @Parameter(description = "Machine Tag") @QueryParam("machineTag") String machineTag, @Parameter(description = "Function Tag") @QueryParam("functionTag") String functionTag, @Parameter(description = "Deployment Status") @QueryParam("deploymentStatus") String deploymentStatus) throws AuthorizationError, CdbException { - ItemDomainMachineDesign machine = machineFacade.find(machineId); - // No uniqueness automation for IOCs. - machine.setItemIdentifier2(null); + if (!isCurrentRequestUserAdmin()) { + throw new AuthorizationError("IOCs should be created using IOC API. APIs can run this call."); + } + ItemDomainMachineDesign machine = machineFacade.find(machineId); UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); verifyItemReady(machine); + ItemElement machineElement = machine.getParentMachineElement(); + + if (machineElement != null) { + List machineElementList = new ArrayList<>(); + machineElementList.add(machineElement); + // Remove template + ItemDomainMachineDesignIOCControllerUtility utility = new ItemDomainMachineDesignIOCControllerUtility(); + utility.unassignMachineTemplate(machineElementList, currentUser); + + // Reload cache after template removal. + machine = machineFacade.find(machineId); + } + + // Unassign assigned item. + machine.setAssignedItem(null); + + // No uniqueness automation for IOCs. + machine.setItemIdentifier2(null); + machine.addEntityType(EntityTypeName.ioc.getValue()); return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null, null, null, null); From 7a5273690e524c76b585f52bcce9ff894e9d8122 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 07:43:41 -0500 Subject: [PATCH 76/80] Add functioanlity to fetch allwoed values for the various ioc info details such as deployment, machine and function tags. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 9f5e32701..504e5b866 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -49,6 +49,9 @@ public class IOCItemRoute extends ItemBaseRoute { @EJB ItemDomainMachineDesignFacade machineFacade; + @EJB + PropertyTypeFacade propertyTypeFacade; + @POST @Path("/convertToIOC/{mdId}") @Produces(MediaType.APPLICATION_JSON) @@ -179,4 +182,39 @@ public List getIOCItemList() { return iocItems; } + @GET + @Path("/allowedValues/machineTag") + @Produces(MediaType.APPLICATION_JSON) + public List getAllowedMachineTags() { + return getIOCPropertyAllowedValues(ItemMetadataIOC.IOC_ITEM_MACHINE_TAG_KEY); + } + + @GET + @Path("/allowedValues/functionTag") + @Produces(MediaType.APPLICATION_JSON) + public List getAllowedFunctionTags() { + return getIOCPropertyAllowedValues(ItemMetadataIOC.IOC_ITEM_FUNCTION_TAG_KEY); + } + + @GET + @Path("/allowedValues/deploymentStatus") + @Produces(MediaType.APPLICATION_JSON) + public List getAllowedDeploymentStatuses() { + return getIOCPropertyAllowedValues(ItemMetadataIOC.IOC_DEPLOYMENT_STATUS_KEY); + } + + @GET + @Path("/propertyType") + @Produces(MediaType.APPLICATION_JSON) + public PropertyType getIOCItemPropertyType() { + return propertyTypeFacade.findByName(ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE); + } + + private List getIOCPropertyAllowedValues(String keyName) { + PropertyType property = propertyTypeFacade.findByName(ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE); + + PropertyTypeMetadata propertyTypeMetadataForKey = property.getPropertyTypeMetadataForKey(keyName); + return propertyTypeMetadataForKey.getAllowedPropertyMetadataValueList(); + } + } From 28d0b1cf6cc7ecb81f53c9bf76a3818865810f15 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 07:44:07 -0500 Subject: [PATCH 77/80] Refactor #1670 --- .../src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 504e5b866..25c1fa0ed 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -211,7 +211,7 @@ public PropertyType getIOCItemPropertyType() { } private List getIOCPropertyAllowedValues(String keyName) { - PropertyType property = propertyTypeFacade.findByName(ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE); + PropertyType property = getIOCItemPropertyType(); PropertyTypeMetadata propertyTypeMetadataForKey = property.getPropertyTypeMetadataForKey(keyName); return propertyTypeMetadataForKey.getAllowedPropertyMetadataValueList(); From 138beabe191a9ccae6bcf96a8ed4a32f2dc6ca40 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 07:44:43 -0500 Subject: [PATCH 78/80] remove unused imports. --- .../src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index bfd09283a..6f90b204c 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java @@ -13,7 +13,6 @@ import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.constants.ItemElementRelationshipTypeNames; import gov.anl.aps.cdb.portal.controllers.ItemController; -import gov.anl.aps.cdb.portal.controllers.utilities.CdbEntityControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.EntityTypeControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemElementFacade; From 1bfb871bf2f7d1df98db6fee69f8dc6d42fe6272 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 08:24:10 -0500 Subject: [PATCH 79/80] Add functioanlity to add or update an ioc item. #1670 --- .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 94 +++++++++++++++++-- 1 file changed, 85 insertions(+), 9 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index 25c1fa0ed..c37a8c5f1 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -10,11 +10,9 @@ import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; -import gov.anl.aps.cdb.portal.controllers.utilities.ItemElementControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.beans.PropertyTypeFacade; import gov.anl.aps.cdb.portal.model.db.entities.AllowedPropertyMetadataValue; -import gov.anl.aps.cdb.portal.model.db.entities.Item; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; @@ -92,7 +90,83 @@ public ItemDomainMachineDesign convertMachineToIOC(@PathParam("mdId") int machin machine.addEntityType(EntityTypeName.ioc.getValue()); - return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null, null, null, null); + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, null, null, null, null, true); + } + + @POST + @Path("/IOCAddUpdate") + @Produces(MediaType.APPLICATION_JSON) + @Operation(summary = "Add or update IOC item.") + @SecurityRequirement(name = "cdbAuth") + @Secured + public ItemDomainMachineDesign addOrUpdateIOC( + @Parameter(description = "DB ID of the IOC. When none specified, a new item will be created.") @QueryParam("id") Integer id, + @Parameter(description = "IOC name (required for new items, optional for updates)") @QueryParam("name") String name, + @Parameter(description = "Description of the IOC (optional, updated when specified)") @QueryParam("description") String description, + @Parameter(description = "Project IDs to assign (required for new items, replaces existing assignments when specified)") @QueryParam("itemProjectIds") List itemProjectIds, + @Parameter(description = "Machine Tag (required for new items, updated when specified)") @QueryParam("machineTag") String machineTag, + @Parameter(description = "Function Tag (required for new items, updated when specified)") @QueryParam("functionTag") String functionTag, + @Parameter(description = "Deployment Status (required for new items, updated when specified)") @QueryParam("deploymentStatus") String deploymentStatus, + @Parameter(description = "Preboot Instructions (optional, updated when specified)") @QueryParam("prebootInstructions") String prebootInstructions, + @Parameter(description = "Postboot Instructions (optional, updated when specified)") @QueryParam("postbootInstructions") String postbootInstructions, + @Parameter(description = "Power Cycle Instructions (optional, updated when specified)") @QueryParam("powerCycleInstructions") String powerCycleInstructions, + @Parameter(description = "Additional Instructions (optional, updated when specified)") @QueryParam("additionalInstructions") String additionalInstructions) throws CdbException, AuthorizationError { + + ItemDomainMachineDesignIOCControllerUtility utility = new ItemDomainMachineDesignIOCControllerUtility(); + ItemDomainMachineDesign iocItem = null; + UserInfo user = getCurrentRequestUserInfo(); + + if (id != null) { + iocItem = machineFacade.find(id); + verifyCurrentUserPermissionForItem(iocItem); + verifyItemReady(iocItem); + } else { + iocItem = (ItemDomainMachineDesign) utility.createEntityInstance(user); + + // Initialize lists that will be populated below. + iocItem.setItemProjectList(new ArrayList<>()); + + // Add IOC entity type + iocItem.addEntityType(EntityTypeName.ioc.getValue()); + } + + // TODO add parent item + if (name != null) { + iocItem.setName(name); + } + + if (description != null) { + iocItem.setDescription(description); + } + + if (itemProjectIds != null && !itemProjectIds.isEmpty()) { + List itemProjectList = iocItem.getItemProjectList(); + itemProjectList.clear(); + for (int itemProjectId : itemProjectIds) { + ItemProject project = getItemProjectById(itemProjectId); + itemProjectList.add(project); + } + } + + // Verify that all required fields have been defined. + if (iocItem.getName() == null || iocItem.getName().isEmpty()) { + throw new InvalidObjectState("Required field IOC name has not been defined."); + } + if (iocItem.getItemProjectList().isEmpty()) { + throw new InvalidObjectState("Required field project has no assignment."); + } + + // Update IOC specific information + iocItem = updateIocInfo(iocItem, user, machineTag, functionTag, deploymentStatus, + prebootInstructions, postbootInstructions, powerCycleInstructions, additionalInstructions, false); + + if (id == null) { + iocItem = (ItemDomainMachineDesign) utility.create(iocItem, user); + } else { + iocItem = (ItemDomainMachineDesign) utility.update(iocItem, user); + } + + return iocItem; } @POST @@ -115,7 +189,7 @@ public ItemDomainMachineDesign updateIOCInfo(@PathParam("iocId") int iocId, UserInfo currentUser = verifyCurrentUserPermissionForItem(machine); verifyItemReady(machine); - return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, prebootInstructions, postbootInstructions, powerCycleInstructions, additionalInstructions); + return updateIocInfo(machine, currentUser, machineTag, functionTag, deploymentStatus, prebootInstructions, postbootInstructions, powerCycleInstructions, additionalInstructions, true); } private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { @@ -124,7 +198,7 @@ private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { } } - private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, UserInfo currentUser, String machineTag, String functionTag, String deploymentStatus, String prebootInstructions, String postbootInstructions, String powerCycleInstructions, String additionalInstructions) throws CdbException { + private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, UserInfo currentUser, String machineTag, String functionTag, String deploymentStatus, String prebootInstructions, String postbootInstructions, String powerCycleInstructions, String additionalInstructions, boolean performUpdate) throws CdbException { ItemDomainMachineDesignBaseControllerUtility utility = iocItem.getItemControllerUtility(); if (!ItemDomainMachineDesign.isItemIOC(iocItem)) { @@ -168,7 +242,9 @@ private ItemDomainMachineDesign updateIocInfo(ItemDomainMachineDesign iocItem, U iocInfo.generateUpdatedInstructionsMarkdown(); } - iocItem = utility.update(iocItem, currentUser); + if (performUpdate) { + iocItem = utility.update(iocItem, currentUser); + } return iocItem; } @@ -204,14 +280,14 @@ public List getAllowedDeploymentStatuses() { } @GET - @Path("/propertyType") + @Path("/coreMetadataPropertyType") @Produces(MediaType.APPLICATION_JSON) - public PropertyType getIOCItemPropertyType() { + public PropertyType getIOCItemCorePropertyType() { return propertyTypeFacade.findByName(ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE); } private List getIOCPropertyAllowedValues(String keyName) { - PropertyType property = getIOCItemPropertyType(); + PropertyType property = getIOCItemCorePropertyType(); PropertyTypeMetadata propertyTypeMetadataForKey = property.getPropertyTypeMetadataForKey(keyName); return propertyTypeMetadataForKey.getAllowedPropertyMetadataValueList(); From ce13dd371cfbe1e8ac5ab12664f3699aaa396424 Mon Sep 17 00:00:00 2001 From: Dariusz Jarosz Date: Thu, 17 Jul 2025 09:57:50 -0500 Subject: [PATCH 80/80] Add functionality to set a machine parent if applicable. #1670 --- .../ItemDomainMachineDesignIOCController.java | 9 +------- ...mainMachineDesignIOCControllerUtility.java | 22 +++++++++++++++++++ .../anl/aps/cdb/rest/routes/IOCItemRoute.java | 22 +++++++++++++++++++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java index 0a9df1c74..d65eb8c73 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -113,16 +113,9 @@ public String create() { if (parentMachineDesign != null) { UserInfo user = SessionUtility.getUser(); - ItemElement parentItemElement = getControllerUtility().createItemElement(current, user); - parentItemElement.setContainedItem(current); - - // Assign parent - String elementName = getControllerUtility().generateUniqueElementNameForItem(parentMachineDesign); - parentItemElement.setName(elementName); - parentItemElement.setParentItem(parentMachineDesign); try { - current.setParentMachineElement(parentItemElement); + getControllerUtility().updateMachineParent(current, user, parentMachineDesign); } catch (CdbException ex) { LOGGER.error(ex); } diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java index 95a4fe3c1..19de20ba4 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -11,8 +11,10 @@ import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.model.db.entities.EntityType; import gov.anl.aps.cdb.portal.model.db.entities.ItemDomainMachineDesign; +import gov.anl.aps.cdb.portal.model.db.entities.ItemElement; import gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; import static gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE; +import gov.anl.aps.cdb.portal.model.db.entities.UserInfo; import gov.anl.aps.cdb.portal.view.objects.ItemMetadataPropertyInfo; import java.util.ArrayList; import org.apache.logging.log4j.LogManager; @@ -89,6 +91,26 @@ protected void assignEntityTypeForNewInstance(ItemDomainMachineDesign ioc) { ioc.getEntityTypeList().add(iocEntityType); } + public void updateMachineParent(ItemDomainMachineDesign iocItem, UserInfo userInfo, ItemDomainMachineDesign parentMachine) throws CdbException { + if (!ItemDomainMachineDesign.isItemIOC(iocItem)) { + throw new CdbException("IOC item is not of type ioc"); + } + + ItemElement parentMachineElement = iocItem.getParentMachineElement(); + if (parentMachineElement == null) { + parentMachineElement = createItemElement(iocItem, userInfo); + parentMachineElement.setContainedItem(iocItem); + + String elementName = generateUniqueElementNameForItem(parentMachine); + parentMachineElement.setName(elementName); + + iocItem.setParentMachineElement(parentMachineElement); + } + + parentMachineElement.setParentItem(parentMachine); + + } + @Override protected boolean isApplyUniqueness() { return false; diff --git a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java index c37a8c5f1..57feac493 100644 --- a/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -6,10 +6,12 @@ import gov.anl.aps.cdb.common.exceptions.AuthorizationError; import gov.anl.aps.cdb.common.exceptions.CdbException; +import gov.anl.aps.cdb.common.exceptions.InvalidArgument; import gov.anl.aps.cdb.common.exceptions.InvalidObjectState; import gov.anl.aps.cdb.portal.constants.EntityTypeName; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignBaseControllerUtility; import gov.anl.aps.cdb.portal.controllers.utilities.ItemDomainMachineDesignIOCControllerUtility; +import gov.anl.aps.cdb.portal.controllers.utilities.ItemElementControllerUtility; import gov.anl.aps.cdb.portal.model.db.beans.ItemDomainMachineDesignFacade; import gov.anl.aps.cdb.portal.model.db.beans.PropertyTypeFacade; import gov.anl.aps.cdb.portal.model.db.entities.AllowedPropertyMetadataValue; @@ -104,6 +106,7 @@ public ItemDomainMachineDesign addOrUpdateIOC( @Parameter(description = "IOC name (required for new items, optional for updates)") @QueryParam("name") String name, @Parameter(description = "Description of the IOC (optional, updated when specified)") @QueryParam("description") String description, @Parameter(description = "Project IDs to assign (required for new items, replaces existing assignments when specified)") @QueryParam("itemProjectIds") List itemProjectIds, + @Parameter(description = "Parent Machine ID (-1 to clear parent, optional)") @QueryParam("parentMachineId") Integer parentMachineId, @Parameter(description = "Machine Tag (required for new items, updated when specified)") @QueryParam("machineTag") String machineTag, @Parameter(description = "Function Tag (required for new items, updated when specified)") @QueryParam("functionTag") String functionTag, @Parameter(description = "Deployment Status (required for new items, updated when specified)") @QueryParam("deploymentStatus") String deploymentStatus, @@ -148,6 +151,25 @@ public ItemDomainMachineDesign addOrUpdateIOC( } } + if (parentMachineId != null) { + if (parentMachineId == -1 && iocItem.getId() != null) { + // Clear parent + ItemElement parentMachineElement = iocItem.getParentMachineElement(); + if (parentMachineElement != null) { + ItemElementControllerUtility ieUtility = parentMachineElement.getControllerUtility(); + ieUtility.destroy(parentMachineElement, user); + iocItem = machineFacade.find(id); + } + } else { + ItemDomainMachineDesign parentMachine = machineFacade.find(parentMachineId); + + if (parentMachine.getEntityTypeList().isEmpty() == false) { + throw new InvalidArgument("Parent machine cannot be of any subtype."); + } + utility.updateMachineParent(iocItem, user, parentMachine); + } + } + // Verify that all required fields have been defined. if (iocItem.getName() == null || iocItem.getName().isEmpty()) { throw new InvalidObjectState("Required field IOC name has not been defined.");