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/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/static/populate_setting_type.sql b/db/sql/static/populate_setting_type.sql index 92199c400..247c435ff 100644 --- a/db/sql/static/populate_setting_type.sql +++ b/db/sql/static/populate_setting_type.sql @@ -391,6 +391,22 @@ 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 new file mode 100644 index 000000000..f1857e4f4 --- /dev/null +++ b/db/sql/updates/updateTo3.17.0.sql @@ -0,0 +1,31 @@ +-- +-- 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); + +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.',''); + + +ALTER IGNORE TABLE `allowed_property_metadata_value` ADD COLUMN `sort_order` float(10,2) unsigned DEFAULT NULL AFTER `description`; 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; 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 55de482cf..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; @@ -19,7 +18,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; @@ -64,10 +62,12 @@ 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; 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; @@ -76,10 +76,9 @@ /** * * @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()); @@ -87,7 +86,7 @@ public abstract class ItemDomainMachineDesignBaseController private TreeNode unassignMachineTemplateNode = null; private List selectedUnassignTemplateNodes; @@ -122,14 +121,14 @@ public abstract class ItemDomainMachineDesignBaseController catalogItemsDraggedAsChildren = null; private TreeNode newCatalogItemsInMachineDesignModel = null; @@ -205,9 +204,9 @@ public void onDropFromJS() { @EJB ItemDomainMachineDesignFacade itemDomainMachineDesignFacade; - + @EJB - ItemFacade itemFacade; + ItemFacade itemFacade; public boolean isItemInventory(Item item) { return item instanceof ItemDomainInventory; @@ -216,7 +215,7 @@ public boolean isItemInventory(Item item) { public boolean isItemCatalog(Item item) { return item instanceof ItemDomainCatalog; } - + public boolean isItemApp(Item item) { return item instanceof ItemDomainApp; } @@ -237,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,6 +280,8 @@ public String getItemRepIcon(Item item) { return PortalStyles.machineDesignControlIcon.getValue(); } else if (isItemMachineDesignAndPower(item)) { return PortalStyles.machineDesignPowerIcon.getValue(); + } else if (isItemMachineDesignAndIOC(item)) { + return PortalStyles.machineDesignIOCIcon.getValue(); } else { return item.getDomain().getDomainRepIcon(); } @@ -297,25 +302,20 @@ public List getRelatedMAARCRelationshipsForCurrent() { return relatedMAARCRelationshipsForCurrent; } - @Override - public ItemGenericLazyDataModel createItemLazyDataModel() { - return new ItemGenericLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); - } - @Override public void resetListDataModel() { super.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); @@ -325,29 +325,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()); } @@ -391,6 +391,7 @@ public List getSelectedUnassignTemplateNodes() { public void setSelectedUnassignTemplateNodes(List selectedUnassignTemplateNodes) { this.selectedUnassignTemplateNodes = selectedUnassignTemplateNodes; } + // // public MachineTreeNode getCurrentMachineDesignListRootTreeNode() { @@ -639,9 +640,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"; } @@ -703,14 +704,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() { @@ -1020,123 +1021,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() { @@ -1543,9 +1544,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() { @@ -2293,7 +2294,7 @@ private void reassignTemplateVarsForSelectedMdCreatedFromTemplateRecursivelly(It reassignTemplateVarsForSelectedMdCreatedFromTemplateRecursivelly(containedItem, itemsToUpdate); } } - + public void generateTemplateVarsForSelectedMdCreatedFromTemplate() { ItemDomainMachineDesign selectedItem = getItemFromSelectedItemInTreeTable(); @@ -3480,9 +3481,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 { 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; 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..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 @@ -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..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 @@ -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() { @@ -66,7 +72,7 @@ public static ItemDomainMachineDesignDeletedItemsController getInstance() { } @Override - protected ItemDomainMachineDesignSettings createNewSettingObject() { + protected ItemDomainMachineDesignDeletedItemSettings 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 new file mode 100644 index 000000000..d65eb8c73 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/ItemDomainMachineDesignIOCController.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers; + +import gov.anl.aps.cdb.common.exceptions.CdbException; +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.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.List; +import javax.enterprise.context.SessionScoped; +import javax.inject.Named; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * + * @author djarosz + */ +@Named(ItemDomainMachineDesignIOCController.CONTROLLER_NAMED) +@SessionScoped +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; + + 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 + } + + @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 ItemDomainMachineDesignIOCSettings createNewSettingObject() { + return new ItemDomainMachineDesignIOCSettings(this); + } + + @Override + public String getItemListPageTitle() { + return "IOC Item List"; + } + + @Override + public ItemDomainMachineDesignIOCLazyDataModel createItemLazyDataModel() { + return new ItemDomainMachineDesignIOCLazyDataModel(getEntityDbFacade(), getDefaultDomain(), settingObject); + } + + @Override + public boolean getEntityDisplayDeletedItems() { + return false; + } + + @Override + public boolean getEntityDisplayImportButton() { + return false; + } + + @Override + public boolean getEntityDisplayExportButton() { + return false; + } + + @Override + public boolean getEntityDisplayItemConnectors() { + return false; + } + + @Override + public boolean getEntityDisplayItemElements() { + return false; + } + + @Override + public String prepareCreate() { + // Reset variables + parentMachineSelectionTreeNode = null; + + return super.prepareCreate(); + } + + @Override + public String create() { + ItemDomainMachineDesign current = getCurrent(); + ItemDomainMachineDesign parentMachineDesign = current.getParentMachineDesignPlaceholder(); + + if (parentMachineDesign != null) { + UserInfo user = SessionUtility.getUser(); + + try { + getControllerUtility().updateMachineParent(current, user, parentMachineDesign); + } catch (CdbException ex) { + LOGGER.error(ex); + } + } + + 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(); + ItemDomainMachineDesign parentItem = (ItemDomainMachineDesign) machineElement.getContainedItem(); + + current.setParentMachineDesignPlaceholder(parentItem); + + } + } + +} 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..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 @@ -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(); @@ -243,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 23b41de07..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,10 +9,12 @@ 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; 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 +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()); @@ -37,6 +39,11 @@ public abstract class ItemDomainMachineDesignRelationshipBaseController getMachineElementsRelatedToCurrent() { ItemDomainMachineDesign current = getCurrent(); 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..814690a1d --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/settings/ItemDomainMachineDesignIOCSettings.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers.settings; + +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; + +/** + * + * @author djarosz + */ +public class ItemDomainMachineDesignIOCSettings extends ItemSettings { + + 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"; + + private boolean machineTagDisplay; + private boolean functionTagDisplay; + private boolean deploymentStatusDisplay; + + private String machineTagFilter; + private String functionTagFilter; + private String deploymentStatusFilter; + + public ItemDomainMachineDesignIOCSettings(ItemDomainMachineDesignIOCController parentController) { + super(parentController); + displayNumberOfItemsPerPage = 25; + + machineTagDisplay = true; + functionTagDisplay = true; + deploymentStatusDisplay = true; + } + + @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); + } + + public boolean isMachineTagDisplay() { + return machineTagDisplay; + } + + public void setMachineTagDisplay(boolean machineTagDisplay) { + this.machineTagDisplay = machineTagDisplay; + } + + public boolean isFunctionTagDisplay() { + return functionTagDisplay; + } + + public void setFunctionTagDisplay(boolean functionTagDisplay) { + this.functionTagDisplay = functionTagDisplay; + } + + public String getMachineTagFilter() { + return machineTagFilter; + } + + public void setMachineTagFilter(String machineTagFilter) { + this.machineTagFilter = machineTagFilter; + } + + public String getFunctionTagFilter() { + return functionTagFilter; + } + + public void setFunctionTagFilter(String functionTagFilter) { + this.functionTagFilter = functionTagFilter; + } + + public boolean isDeploymentStatusDisplay() { + return deploymentStatusDisplay; + } + + public void setDeploymentStatusDisplay(boolean deploymentStatusDisplay) { + this.deploymentStatusDisplay = deploymentStatusDisplay; + } + + public String getDeploymentStatusFilter() { + return deploymentStatusFilter; + } + + public void setDeploymentStatusFilter(String deploymentStatusFilter) { + this.deploymentStatusFilter = deploymentStatusFilter; + } + +} 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..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 @@ -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) { @@ -388,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(); @@ -399,6 +408,7 @@ public ItemDomainEntity createEntityInstance(UserInfo sessionUser) { } else { item.init(ei); } + assignEntityTypeForNewInstance(item); // initialize core metadata if subclass uses that facility item.initializeCoreMetadataPropertyValue(); @@ -529,6 +539,7 @@ public PropertyType prepareCoreMetadataPropertyType() { ptmList.add(ptm); } propertyType.setPropertyTypeMetadataList(ptmList); + propertyType.setDefaultValue(propInfo.getDefaultPropertyValue()); try { propertyTypeControllerUtility.create(propertyType, null); @@ -920,7 +931,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/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 new file mode 100644 index 000000000..19de20ba4 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/controllers/utilities/ItemDomainMachineDesignIOCControllerUtility.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) UChicago Argonne, LLC. All rights reserved. + * See LICENSE file. + */ +package gov.anl.aps.cdb.portal.controllers.utilities; + +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.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; +import org.apache.logging.log4j.Logger; + +/** + * + * @author darek + */ +public class ItemDomainMachineDesignIOCControllerUtility extends ItemDomainMachineDesignBaseControllerUtility { + + private static final Logger logger = LogManager.getLogger(ItemDomainMachineDesignIOCControllerUtility.class.getName()); + + @Override + public List getItemList() { + return itemFacade.getIOCItems(); + } + + @Override + public String getDisplayEntityTypeName() { + return "IOC Item"; + } + + @Override + public ItemMetadataPropertyInfo createCoreMetadataPropertyInfo() { + + ItemMetadataPropertyInfo info + = new ItemMetadataPropertyInfo("IOC Metadata", IOC_ITEM_INTERNAL_PROPERTY_TYPE); + + info.setDefaultPropertyValue("IOC Instructions"); + + info.setDefaultPropertyText("# Preboot: # Postboot: # Power Cycle: "); + + info.addField( + ItemMetadataIOC.IOC_ITEM_MACHINE_TAG_KEY, + "Machine Tag", + "Machine Tag.", + ItemMetadataFieldType.STRING, + "", + null, + "Details"); + + info.addField( + ItemMetadataIOC.IOC_ITEM_FUNCTION_TAG_KEY, + "Function Tag", + "Function Tag.", + ItemMetadataFieldType.STRING, + "", + null, + "Details"); + + info.addField( + ItemMetadataIOC.IOC_DEPLOYMENT_STATUS_KEY, + "Deployment Status", + "IOC Deployment Status", + ItemMetadataFieldType.STRING, + "", + List.of("Production", "Ancillary", "Test Stand", "Development", "Planned", "Inactive"), + "Details"); + + 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); + } + + 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; + } + + @Override + public boolean isEntityHasItemIdentifier1() { + return false; + } + + @Override + public boolean isEntityHasQrId() { + return false; + } + +} 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/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( 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..ed5ac01a1 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/beans/builder/ItemDomainMachineDesignIOCQueryBuilder.java @@ -0,0 +1,39 @@ +/* + * 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 gov.anl.aps.cdb.portal.model.db.entities.ItemMetadataIOC; +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); + } + + @Override + protected String getCoreMetadataPropertyName() { + return ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE; + } + +} 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..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) @@ -48,6 +49,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 +83,15 @@ public void setDescription(String description) { this.description = description; } + public Float getSortOrder() { + return sortOrder; + } + + 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/Item.java b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/Item.java index caaecf1f9..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; @@ -22,6 +21,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 +1601,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 +1614,7 @@ public Item getCreatedFromTemplate() { ItemElementRelationship ier = getCreatedFromTemplateRelationship(); if (ier != null) { createdFromTemplate = ier.getSecondItemElement().getParentItem(); - } + } templateInfoLoaded = true; } @@ -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() { @@ -1933,6 +1936,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; @@ -1969,6 +1975,42 @@ 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; + } + + 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 { validateCoreMetadataKey(key); @@ -2000,6 +2042,11 @@ public PropertyType getCoreMetadataPropertyType() { return coreMetadataPropertyType; } + @JsonIgnore + public Object getItemMetadataObject() { + return this; + } + protected CdbEntity getEntityById(String id) { if (id != null && !id.isEmpty()) { 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..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 @@ -13,12 +13,14 @@ 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; 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; @@ -80,6 +82,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; @@ -89,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; @@ -212,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) { @@ -231,6 +249,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 @@ -248,6 +283,8 @@ public ItemController getItemDomainController() { return ItemDomainMachineDesignControlController.getInstance(); } else if (isItemPower(this)) { return ItemDomainMachineDesignPowerController.getInstance(); + } else if (isItemIOC(this)) { + return ItemDomainMachineDesignIOCController.getInstance(); } return ItemDomainMachineDesignController.getInstance(); } @@ -266,6 +303,9 @@ public ItemDomainMachineDesignBaseControllerUtility getItemControllerUtility() { if (isItemInventory(this)) { return new ItemDomainMachineDesignInventoryControllerUtility(); } + if (isItemIOC(this)) { + return new ItemDomainMachineDesignIOCControllerUtility(); + } return new ItemDomainMachineDesignControllerUtility(); } @@ -302,6 +342,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() { @@ -597,6 +641,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; @@ -821,7 +877,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()); 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 new file mode 100644 index 000000000..5785f4e90 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/portal/model/db/entities/ItemMetadataIOC.java @@ -0,0 +1,187 @@ +/* + * 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 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"; + public final static String IOC_ITEM_FUNCTION_TAG_KEY = "functionTag"; + public final static String IOC_DEPLOYMENT_STATUS_KEY = "deploymentStatus"; + + private String machineTag; + 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); + } + + 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 getDeploymentStatus() throws CdbException { + if (deploymentStatus == null) { + deploymentStatus = getCoreMetadataPropertyFieldValue(IOC_DEPLOYMENT_STATUS_KEY); + } + return deploymentStatus; + } + + public void setDeploymentStatus(String deploymentStatus) throws CdbException { + this.deploymentStatus = deploymentStatus; + setCoreMetadataPropertyFieldValue(IOC_DEPLOYMENT_STATUS_KEY, deploymentStatus); + } + + 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:\n"); + if (preBoot != null && !preBoot.isEmpty()) { + bootInstructions.append(preBoot).append("\n"); + } + bootInstructions.append("\n\n"); + + bootInstructions.append("# Postboot:\n"); + if (postBoot != null && !postBoot.isEmpty()) { + bootInstructions.append(postBoot).append("\n"); + } + bootInstructions.append("\n\n"); + + bootInstructions.append("# Power Cycle:\n"); + if (powerCycle != null && !powerCycle.isEmpty()) { + bootInstructions.append(powerCycle).append("\n"); + } + bootInstructions.append("\n\n"); + + bootInstructions.append("\n"); + if (additionalMd != null && !additionalMd.isEmpty()) { + if (!additionalMd.startsWith("#")) { + bootInstructions.append("# Additional Notes\n"); + } + bootInstructions.append(additionalMd).append("\n"); + } + bootInstructions.append(""); + setBootInstructions(bootInstructions.toString().trim()); + } + + public String getBootInstructions() { + PropertyValue pv = getCoreMetadataPropertyValue(); + + if (pv != null) { + return pv.getText(); + } + + return null; + } + + private void setBootInstructions(String bootInstructions) { + PropertyValue pv = getCoreMetadataPropertyValue(); + pv.setText(bootInstructions); + } + +} 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/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); } - + } 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..57feac493 --- /dev/null +++ b/src/java/CdbWebPortal/src/java/gov/anl/aps/cdb/rest/routes/IOCItemRoute.java @@ -0,0 +1,318 @@ +/* + * 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.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; +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; +import javax.ws.rs.POST; +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; + +/** + * + * @author djarosz + */ +@Path("/IOCItems") +@Tag(name = "IOCItems") +public class IOCItemRoute extends ItemBaseRoute { + + @EJB + ItemDomainMachineDesignFacade machineFacade; + + @EJB + PropertyTypeFacade propertyTypeFacade; + + @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, + @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 { + + 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, 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 = "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, + @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); + } + } + + 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."); + } + 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 + @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 = "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, prebootInstructions, postbootInstructions, powerCycleInstructions, additionalInstructions, true); + } + + private void verifyItemReady(ItemDomainMachineDesign item) throws CdbException { + if (ItemDomainMachineDesign.isItemDeleted(item)) { + throw new CdbException("The machine id " + item.getId() + " is a deleted item."); + } + } + + 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)) { + throw new CdbException("Not and IOC Item"); + } + + ItemMetadataIOC iocInfo = iocItem.getIocInfo(); + if (machineTag != null) { + iocInfo.setMachineTag(machineTag); + } + if (functionTag != null) { + iocInfo.setFunctionTag(functionTag); + } + if (deploymentStatus != null) { + iocInfo.setDeploymentStatus(deploymentStatus); + } + + 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(); + } + + if (performUpdate) { + iocItem = utility.update(iocItem, currentUser); + } + + return iocItem; + } + + @GET + @Path("/all") + @Produces(MediaType.APPLICATION_JSON) + public List getIOCItemList() { + List iocItems = machineFacade.getIOCItems(); + + 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("/coreMetadataPropertyType") + @Produces(MediaType.APPLICATION_JSON) + public PropertyType getIOCItemCorePropertyType() { + return propertyTypeFacade.findByName(ItemMetadataIOC.IOC_ITEM_INTERNAL_PROPERTY_TYPE); + } + + private List getIOCPropertyAllowedValues(String keyName) { + PropertyType property = getIOCItemCorePropertyType(); + + PropertyTypeMetadata propertyTypeMetadataForKey = property.getPropertyTypeMetadataForKey(keyName); + return propertyTypeMetadataForKey.getAllowedPropertyMetadataValueList(); + } + +} 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; 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; + } + } 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; 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 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 diff --git a/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml b/src/java/CdbWebPortal/web/templates/portalViewMenubarTemplate.xhtml index 1908ae02e..9346ea3f4 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' : ''} "/> + - + - + + + @@ -26,8 +28,8 @@ See LICENSE file. - - + + diff --git a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditFields.xhtml index 6e1ea3bb0..d5bd4fe9b 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,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..dc4bec9f3 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyEditValue.xhtml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + #{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 642333432..a28da22af 100644 --- a/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml +++ b/src/java/CdbWebPortal/web/views/item/private/coreMetadataPropertyFields.xhtml @@ -6,14 +6,15 @@ See LICENSE file. + xmlns:p="http://primefaces.org/ui"> + + + @@ -21,77 +22,7 @@ See LICENSE file. - - - - - - - - - - - - - - - - - - - - - - - "#{entityController.prepareLinkDisplay(metadataValue)}" - - - - - - - - - - - - - -
- - "#{entityController.prepareLinkDisplay(url)}" - -
-
- -
-
- - - -
+
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/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 @@ + + + + + + + + + + + + + + + + + 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)}" + +
+
+ +
+
+ + + +
+ +
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}

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. - + + + 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/create.xhtml b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml new file mode 100644 index 000000000..19959d4a9 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/create.xhtml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..4f23938ea --- /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/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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 new file mode 100644 index 000000000..9b3bfc094 --- /dev/null +++ b/src/java/CdbWebPortal/web/views/itemDomainMachineDesignIOC/view.xhtml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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. - + + + + + 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} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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()