class DeviceWrapper extends RowWrapper<DeviceExcelInfo> {

    Map<String, PropertyMetadata> tagMapping = new HashMap<>();

    Map<String, ConfigPropertyMetadata> configMapping = new HashMap<>();

    static Map<String, String> headerMapping = DeviceExcelInfo.getImportHeaderMapping();

    public static DeviceWrapper empty = new DeviceWrapper(Collections.emptyList(), Collections.emptyList());

    public DeviceWrapper(List<PropertyMetadata> tags, List<ConfigPropertyMetadata> configs) {
        for (PropertyMetadata tag : tags) {
            tagMapping.put(tag.getName(), tag);
        }
        for (ConfigPropertyMetadata config : configs) {
            configMapping.put(config.getName(), config);
        }
    }

    @Override
    protected DeviceExcelInfo newInstance() {
        return new DeviceExcelInfo();
    }

    @Override
    protected DeviceExcelInfo wrap(DeviceExcelInfo deviceExcelInfo, Cell header, Cell cell) {<FILL_FUNCTION_BODY>}
}

        String headerText = header.valueAsText().orElse("null");

        PropertyMetadata maybeTag = tagMapping.get(headerText);
        ConfigPropertyMetadata maybeConfig = configMapping.get(headerText);
        if (maybeTag != null) {
            deviceExcelInfo.tag(maybeTag.getId(), headerText, cell.value().orElse(null), maybeTag.getValueType().getId());
        } else if (maybeConfig != null) {
            deviceExcelInfo.config(maybeConfig.getProperty(), cell.value().orElse(null));
        } else {
            deviceExcelInfo.with(headerMapping.getOrDefault(headerText, headerText), cell.value().orElse(null));
        }
        deviceExcelInfo.setRowNumber(cell.getRowIndex());

        return deviceExcelInfo;
    
<no_super_class>