class ImportNodesProcess extends AbstractImportProcess {

    public static final String NODE_ID = "id";
    public static final String NODE_LABEL = "label";


    public ImportNodesProcess(SpreadsheetGeneralConfiguration generalConfig, SheetParser parser,
                              ContainerLoader container, ProgressTicket progressTicket) throws IOException {
        super(generalConfig, container, progressTicket, parser);
    }

    @Override
    public boolean execute() {<FILL_FUNCTION_BODY>}

    @Override
    protected void addColumn(String name, Class type) {
        container.addNodeColumn(name, type);
    }
}

        setupColumnsIndexesAndFindSpecialColumns(Arrays.asList(NODE_ID, NODE_LABEL), generalConfig.getColumnsClasses());

        Integer idColumnIndex = specialColumnsIndexMap.get(NODE_ID);
        Integer labelColumnIndex = specialColumnsIndexMap.get(NODE_LABEL);

        Progress.start(progressTicket);
        for (SheetRow row : parser) {
            if (cancel) {
                break;
            }

            if (!checkRow(row)) {
                continue;
            }

            String id = null;
            String label = null;
            if (idColumnIndex != null) {
                id = row.get(idColumnIndex);
            }
            if (labelColumnIndex != null) {
                label = row.get(labelColumnIndex);
            }

            NodeDraft node = id != null ? container.factory().newNodeDraft(id) : container.factory().newNodeDraft();

            if (label != null) {
                node.setLabel(label);
            }

            for (Map.Entry<String, Integer> columnEntry : headersIndexMap.entrySet()) {
                String column = columnEntry.getKey();
                Integer index = columnEntry.getValue();
                Class type = headersClassMap.get(column);

                if (type == null) {
                    continue;
                }

                Object value = row.get(index);
                if (value != null) {
                    value = parseValue((String) value, type, column);

                    if (value != null) {
                        node.setValue(column, value);
                    }
                }
            }

            container.addNode(node);
        }

        Progress.finish(progressTicket);

        return !cancel;
    
<methods>public void <init>(org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration, org.gephi.io.importer.api.ContainerLoader, org.gephi.utils.progress.ProgressTicket, org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser) ,public boolean cancel() ,public void close() throws java.io.IOException,public abstract boolean execute() ,public org.gephi.io.importer.api.Report getReport() <variables>protected boolean cancel,protected final non-sealed org.gephi.io.importer.api.ContainerLoader container,protected final non-sealed org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration generalConfig,protected final Map<java.lang.String,Class#RAW> headersClassMap,protected final Map<java.lang.String,java.lang.Integer> headersIndexMap,protected final non-sealed org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser parser,protected final non-sealed org.gephi.utils.progress.ProgressTicket progressTicket,protected final non-sealed org.gephi.io.importer.api.Report report,protected final Map<java.lang.String,java.lang.Integer> specialColumnsIndexMap