Skip to content

adding an additional import format for a CDB domain

craigmcchesney edited this page May 11, 2021 · 6 revisions

Table of Contents

define import spreadsheet columns and create test spreadsheet

Cable Catalog Item	Connector Name	Description	                Connector Type	Is Male
91795	                S-F-1	        female safeconn connector	#SAFECONN	FALSE

create ImportHelperBase subclass to handle spreadsheet format

  • subclass extends ImportHelperBase (or a class derived from it) and specifies type parameters for the domain object the import process will create and the controller to use for creating them, e.g.,
public class ImportHelperCableCatalogConnectors extends ImportHelperBase<ItemConnector, ItemConnectorController> {
<snip>
  • override getEntityController() e.g.,
    @Override
    public ItemConnectorController getEntityController() {
        return ItemConnectorController.getInstance();
    }
  • override getFilenameBase() e.g.,
    @Override
    public String getFilenameBase() {
        return "Cable Catalog Connectors";
    }
  • override getColumnSpecs() with a column spec for each column of the import spreadsheet format e.g.,
    @Override
    protected List<ColumnSpec> getColumnSpecs() {
        
        List<ColumnSpec> specs = new ArrayList<>();
        
        specs.add(new IdOrNameRefColumnSpec(
                "Cable Catalog Item", 
                "item", 
                "setItem", 
                "ID or name of parent cable catalog item. Name must be unique and prefixed with '#'.", 
                null,
                ColumnModeOptions.rCREATE(), 
                ItemDomainCableCatalogController.getInstance(), 
                Item.class, 
                null));   
        
        specs.add(new StringColumnSpec(
                "Connector Name", 
                KEY_NAME, 
                "setImportConnectorName", 
                "Name for cable connector.", 
                null,
                ColumnModeOptions.rCREATE(), 
                128));
        
        specs.add(new StringColumnSpec(
                "Description", 
                KEY_DESCRIPTION, 
                "setImportConnectorDescription", 
                "Connector description.", 
                null,
                ColumnModeOptions.oCREATE(), 
                128));
        
        specs.add(new IdOrNameRefColumnSpec(
                "Connector Type", 
                KEY_TYPE, 
                "setImportConnectorType", 
                "ID or name of connector type. Name must be unique and prefixed with '#'.", 
                null,
                ColumnModeOptions.oCREATE(), 
                ConnectorTypeController.getInstance(), 
                Item.class, 
                null));   
        
        specs.add(new BooleanColumnSpec(
                "Is Male", 
                KEY_GENDER, 
                "setImportConnectorGender", 
                "True/yes/1 if connector gender is male.", 
                null,
                ColumnModeOptions.oCREATE()));
        
        return specs;
    }
  • add override of createEntityInstance() to helper subclass to perform custom actions while creating entities from the spreadsheet e.g.,
    @Override
    protected CreateInfo createEntityInstance(Map<String, Object> rowMap) {
        
        boolean isValid = true;
        String validString = "";
        
        ItemConnector itemConnector = new ItemConnector();
        
        // create Connector
        String connectorName = (String) rowMap.get(KEY_NAME);
        String connectorDesc = (String) rowMap.get(KEY_DESCRIPTION);
        Boolean connectorIsMale = (Boolean) rowMap.get(KEY_GENDER);
        ConnectorType connectorType = (ConnectorType) rowMap.get(KEY_TYPE);

        itemConnector.setImportConnectorDetails(connectorName, connectorDesc, connectorIsMale, connectorType);
            
        return new CreateInfo(itemConnector, isValid, validString);
    }

add support as needed to model/controller classes

  • add methods if needed to handle column specs, e.g., for the "Connector Name" column above, need methods ItemConnector.set/getImportConnectorName(). In this case, they just access a transient instance variable for display in the import validation table. The work to actually retrieve the specified ConnectorType and create the corresponding Connector is triggered by createEntityInstance() as described above. e.g.,



  • add methods as needed to support createEntityInstance() in creating and initializing the new entity instance, e.g.,
    public void setImportConnectorDetails(
            String connectorName,
            String connectorDesc,
            Boolean isMale,
            ConnectorType connectorType) {
        
        Connector connector = new Connector();
        connector.setName(connectorName);
        connector.setDescription(connectorDesc);
        connector.setIsMale(isMale);
        connector.setConnectorType(connectorType);
        
        this.setConnector(connector);        
    }

add entry for new helper subclass to domain import info in controller

  • modify initializeDomainImportInfo() in the controller to add an entry for the new helper e.g.,
    @Override
    protected DomainImportExportInfo initializeDomainImportInfo() {
        
        List<ImportExportFormatInfo> formatInfo = new ArrayList<>();
        
        formatInfo.add(new ImportExportFormatInfo(
                "Basic Cable Catalog Format", ImportHelperCableCatalog.class));
        
        formatInfo.add(new ImportExportFormatInfo(
                "Cable Catalog Connector Creation Format", ImportHelperCableCatalogConnectors.class));
        
        String completionUrl = "/views/itemDomainCableCatalog/list?faces-redirect=true";
        
        return new DomainImportExportInfo(formatInfo, completionUrl);
    }
Clone this wiki locally