<commit_before> /**********************************************************************
 **                                                                   **
 **               This code belongs to the KETTLE project.            **
 **                                                                   **
 **                                                                   **
 **                                                                   **
 **********************************************************************/


package be.ibridge.kettle.job.entry.deletefiles;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import be.ibridge.kettle.core.widget.TableView;
import be.ibridge.kettle.core.ColumnInfo;
import be.ibridge.kettle.core.Const;
import be.ibridge.kettle.core.Props;
import be.ibridge.kettle.core.WindowProperty;
import be.ibridge.kettle.core.util.StringUtil;
import be.ibridge.kettle.core.widget.TextVar;
import be.ibridge.kettle.job.JobMeta;
import be.ibridge.kettle.job.dialog.JobDialog;
import be.ibridge.kettle.job.entry.JobEntryDialogInterface;
import be.ibridge.kettle.job.entry.JobEntryInterface;
import be.ibridge.kettle.trans.step.BaseStepDialog;


/**
 * This dialog allows you to edit the Delete File job entry settings.
 *
 * @author <NAME>
 * @since  06-05-2007
 */
public class JobEntryDeleteFilesDialog extends Dialog implements JobEntryDialogInterface
{
   private static final String[] FILETYPES = new String[] {
           Messages.getString("JobDeleteFiles.Filetype.All") };
	
	private Label        wlName;
	private Text         wName;
    private FormData     fdlName, fdName;

	private Label        wlFilename;
	private Button       wbFilename;
	private TextVar      wFilename;
	private FormData     fdlFilename, fdbFilename, fdFilename;
	
    private Label        wlIgnoreErrors;
    private Button       wIgnoreErrors;
    private FormData     fdlIgnoreErrors, fdIgnoreErrors;

	private Label        wlDeleteFolder;
	private Button       wDeleteFolder;
	private FormData     fdlDeleteFolder, fdDeleteFolder;

	private Label        wlIncludeSubfolders;
	private Button       wIncludeSubfolders;
	private FormData     fdlIncludeSubfolders, fdIncludeSubfolders;

	private Button       wOK, wCancel;
	private Listener     lsOK, lsCancel;

	private JobEntryDeleteFiles jobEntry;
	private Shell         	    shell;
	private Props       	    props;

	private SelectionAdapter lsDef;

	private boolean changed;

	private Label wlPrevious;

	private Button wPrevious;

	private FormData fdlPrevious, fdPrevious;

	private Label wlFields;

	private TableView wFields;

	private FormData fdlFields, fdFields;

	private Group wSettings;
	private FormData fdSettings;

	private Label wlFilemask;
	private TextVar wFilemask;
	private FormData fdlFilemask, fdFilemask;

	private Button       wbdFilename; // Delete
	private Button       wbeFilename; // Edit
	private Button       wbaFilename; // Add or change
	private FormData fdbeFilename, fdbaFilename, fdbdFilename;

	public JobEntryDeleteFilesDialog(Shell parent, JobEntryDeleteFiles jobEntry, JobMeta jobMeta)
	{
		super(parent, SWT.NONE);
		props=Props.getInstance();
		this.jobEntry=jobEntry;

		if (this.jobEntry.getName() == null) 
			this.jobEntry.setName(Messages.getString("JobDeleteFiles.Name.Default"));
	}

	public JobEntryInterface open()
	{
		Shell parent = getParent();
		Display display = parent.getDisplay();

        shell = new Shell(parent, props.getJobsDialogStyle());
        props.setLook(shell);
        JobDialog.setShellImage(shell, jobEntry);
		
		ModifyListener lsMod = new ModifyListener()
		{
			public void modifyText(ModifyEvent e)
			{
				jobEntry.setChanged();
			}
		};
		changed = jobEntry.hasChanged();

		FormLayout formLayout = new FormLayout ();
		formLayout.marginWidth  = Const.FORM_MARGIN;
		formLayout.marginHeight = Const.FORM_MARGIN;

		shell.setLayout(formLayout);
		shell.setText(Messages.getString("JobDeleteFiles.Title"));

		int middle = props.getMiddlePct();
		int margin = Const.MARGIN;

		// Filename line
		wlName=new Label(shell, SWT.RIGHT);
		wlName.setText(Messages.getString("JobDeleteFiles.Name.Label"));
 		props.setLook(wlName);
		fdlName=new FormData();
		fdlName.left = new FormAttachment(0, 0);
		fdlName.right= new FormAttachment(middle, -margin);
		fdlName.top  = new FormAttachment(0, margin);
		wlName.setLayoutData(fdlName);
		wName=new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
 		props.setLook(wName);
		wName.addModifyListener(lsMod);
		fdName=new FormData();
		fdName.left = new FormAttachment(middle, 0);
		fdName.top  = new FormAttachment(0, margin);
		fdName.right= new FormAttachment(100, 0);
		wName.setLayoutData(fdName);

		// SETTINGS grouping?
		// ////////////////////////
		// START OF SETTINGS GROUP
		// 

		wSettings = new Group(shell, SWT.SHADOW_NONE);
		props.setLook(wSettings);
		wSettings.setText(Messages.getString("JobDeleteFiles.Settings.Label"));

		FormLayout groupLayout = new FormLayout();
		groupLayout.marginWidth = 10;
		groupLayout.marginHeight = 10;
		wSettings.setLayout(groupLayout);

		wlIncludeSubfolders = new Label(wSettings, SWT.RIGHT);
		wlIncludeSubfolders.setText(Messages.getString("JobDeleteFiles.IncludeSubfolders.Label"));
		props.setLook(wlIncludeSubfolders);
		fdlIncludeSubfolders = new FormData();
		fdlIncludeSubfolders.left = new FormAttachment(0, 0);
		fdlIncludeSubfolders.top = new FormAttachment(wName, margin);
		fdlIncludeSubfolders.right = new FormAttachment(middle, -margin);
		wlIncludeSubfolders.setLayoutData(fdlIncludeSubfolders);
		wIncludeSubfolders = new Button(wSettings, SWT.CHECK);
		props.setLook(wIncludeSubfolders);
		wIncludeSubfolders.setToolTipText(Messages.getString("JobDeleteFiles.IncludeSubfolders.Tooltip"));
		fdIncludeSubfolders = new FormData();
		fdIncludeSubfolders.left = new FormAttachment(middle, 0);
		fdIncludeSubfolders.top = new FormAttachment(wName, margin);
		fdIncludeSubfolders.right = new FormAttachment(100, 0);
		wIncludeSubfolders.setLayoutData(fdIncludeSubfolders);
		wIncludeSubfolders.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
				UseSubFolder();
			}
		});
		
		// DeleteFolder Option : If selected, files won't be deleted
		wlDeleteFolder = new Label(wSettings, SWT.RIGHT);
		wlDeleteFolder.setText(Messages.getString("JobDeleteFiles.DeleteFolder.Label"));
		props.setLook(wlDeleteFolder);
		fdlDeleteFolder = new FormData();
		fdlDeleteFolder.left = new FormAttachment(0, 0);
		fdlDeleteFolder.top = new FormAttachment(wIncludeSubfolders, margin);
		fdlDeleteFolder.right = new FormAttachment(middle, -margin);
		wlDeleteFolder.setLayoutData(fdlDeleteFolder);
		wDeleteFolder = new Button(wSettings, SWT.CHECK);
		props.setLook(wDeleteFolder);
		wDeleteFolder.setToolTipText(Messages.getString("JobDeleteFiles.DeleteFolder.Tooltip"));
		fdDeleteFolder = new FormData();
		fdDeleteFolder.left = new FormAttachment(middle, 0);
		fdDeleteFolder.top = new FormAttachment(wIncludeSubfolders, margin);
		fdDeleteFolder.right = new FormAttachment(100, 0);
		wDeleteFolder.setLayoutData(fdDeleteFolder);
		wDeleteFolder.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
			}
		});

		wlIgnoreErrors = new Label(wSettings, SWT.RIGHT);
		wlIgnoreErrors.setText(Messages.getString("JobDeleteFiles.IgnoreErrors.Label"));
		props.setLook(wlIgnoreErrors);
		fdlIgnoreErrors = new FormData();
		fdlIgnoreErrors.left = new FormAttachment(0, 0);
		fdlIgnoreErrors.top = new FormAttachment(wDeleteFolder, margin);
		fdlIgnoreErrors.right = new FormAttachment(middle, -margin);
		wlIgnoreErrors.setLayoutData(fdlIgnoreErrors);
		wIgnoreErrors = new Button(wSettings, SWT.CHECK);
		props.setLook(wIgnoreErrors);
		wIgnoreErrors.setToolTipText(Messages.getString("JobDeleteFiles.IgnoreErrors.Tooltip"));
		fdIgnoreErrors = new FormData();
		fdIgnoreErrors.left = new FormAttachment(middle, 0);
		fdIgnoreErrors.top = new FormAttachment(wDeleteFolder, margin);
		fdIgnoreErrors.right = new FormAttachment(100, 0);
		wIgnoreErrors.setLayoutData(fdIgnoreErrors);
		wIgnoreErrors.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
			}
		});
	
		wlPrevious = new Label(wSettings, SWT.RIGHT);
		wlPrevious.setText(Messages.getString("JobDeleteFiles.Previous.Label"));
		props.setLook(wlPrevious);
		fdlPrevious = new FormData();
		fdlPrevious.left = new FormAttachment(0, 0);
		fdlPrevious.top = new FormAttachment(wIgnoreErrors, margin );
		fdlPrevious.right = new FormAttachment(middle, -margin);
		wlPrevious.setLayoutData(fdlPrevious);
		wPrevious = new Button(wSettings, SWT.CHECK);
		props.setLook(wPrevious);
		wPrevious.setSelection(jobEntry.argFromPrevious);
		wPrevious.setToolTipText(Messages.getString("JobDeleteFiles.Previous.Tooltip"));
		fdPrevious = new FormData();
		fdPrevious.left = new FormAttachment(middle, 0);
		fdPrevious.top = new FormAttachment(wIgnoreErrors, margin );
		fdPrevious.right = new FormAttachment(100, 0);
		wPrevious.setLayoutData(fdPrevious);
		wPrevious.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.argFromPrevious = !jobEntry.argFromPrevious;
				jobEntry.setChanged();
				wlFields.setEnabled(!jobEntry.argFromPrevious);
				wFields.setEnabled(!jobEntry.argFromPrevious);
			}
		});
		fdSettings = new FormData();
		fdSettings.left = new FormAttachment(0, margin);<commit_msg>In Deletefiles job entry set more indication of which options are not available.<commit_after> /**********************************************************************
 **                                                                   **
 **               This code belongs to the KETTLE project.            **
 **                                                                   **
 **                                                                   **
 **                                                                   **
 **********************************************************************/


package be.ibridge.kettle.job.entry.deletefiles;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import be.ibridge.kettle.core.widget.TableView;
import be.ibridge.kettle.core.ColumnInfo;
import be.ibridge.kettle.core.Const;
import be.ibridge.kettle.core.Props;
import be.ibridge.kettle.core.WindowProperty;
import be.ibridge.kettle.core.util.StringUtil;
import be.ibridge.kettle.core.widget.TextVar;
import be.ibridge.kettle.job.JobMeta;
import be.ibridge.kettle.job.dialog.JobDialog;
import be.ibridge.kettle.job.entry.JobEntryDialogInterface;
import be.ibridge.kettle.job.entry.JobEntryInterface;
import be.ibridge.kettle.trans.step.BaseStepDialog;


/**
 * This dialog allows you to edit the Delete File job entry settings.
 *
 * @author <NAME>
 * @since  06-05-2007
 */
public class JobEntryDeleteFilesDialog extends Dialog implements JobEntryDialogInterface
{
   private static final String[] FILETYPES = new String[] {
           Messages.getString("JobDeleteFiles.Filetype.All") };
	
	private Label        wlName;
	private Text         wName;
    private FormData     fdlName, fdName;

	private Label        wlFilename;
	private Button       wbFilename;
	private TextVar      wFilename;
	private FormData     fdlFilename, fdbFilename, fdFilename;
	
    private Label        wlIgnoreErrors;
    private Button       wIgnoreErrors;
    private FormData     fdlIgnoreErrors, fdIgnoreErrors;

	private Label        wlDeleteFolder;
	private Button       wDeleteFolder;
	private FormData     fdlDeleteFolder, fdDeleteFolder;

	private Label        wlIncludeSubfolders;
	private Button       wIncludeSubfolders;
	private FormData     fdlIncludeSubfolders, fdIncludeSubfolders;

	private Button       wOK, wCancel;
	private Listener     lsOK, lsCancel;

	private JobEntryDeleteFiles jobEntry;
	private Shell         	    shell;
	private Props       	    props;

	private SelectionAdapter lsDef;

	private boolean changed;

	private Label wlPrevious;
	private Button wPrevious;
	private FormData fdlPrevious, fdPrevious;

	private Label wlFields;
	private TableView wFields;
	private FormData fdlFields, fdFields;

	private Group wSettings;
	private FormData fdSettings;

	private Label    wlFilemask;
	private TextVar  wFilemask;
	private FormData fdlFilemask, fdFilemask;

	private Button   wbdFilename; // Delete
	private Button   wbeFilename; // Edit
	private Button   wbaFilename; // Add or change
	private FormData fdbeFilename, fdbaFilename, fdbdFilename;

	public JobEntryDeleteFilesDialog(Shell parent, JobEntryDeleteFiles jobEntry, JobMeta jobMeta)
	{
		super(parent, SWT.NONE);
		props=Props.getInstance();
		this.jobEntry=jobEntry;

		if (this.jobEntry.getName() == null) 
			this.jobEntry.setName(Messages.getString("JobDeleteFiles.Name.Default"));
	}

	public JobEntryInterface open()
	{
		Shell parent = getParent();
		Display display = parent.getDisplay();

        shell = new Shell(parent, props.getJobsDialogStyle());
        props.setLook(shell);
        JobDialog.setShellImage(shell, jobEntry);
		
		ModifyListener lsMod = new ModifyListener()
		{
			public void modifyText(ModifyEvent e)
			{
				jobEntry.setChanged();
			}
		};
		changed = jobEntry.hasChanged();

		FormLayout formLayout = new FormLayout ();
		formLayout.marginWidth  = Const.FORM_MARGIN;
		formLayout.marginHeight = Const.FORM_MARGIN;

		shell.setLayout(formLayout);
		shell.setText(Messages.getString("JobDeleteFiles.Title"));

		int middle = props.getMiddlePct();
		int margin = Const.MARGIN;

		// Filename line
		wlName=new Label(shell, SWT.RIGHT);
		wlName.setText(Messages.getString("JobDeleteFiles.Name.Label"));
 		props.setLook(wlName);
		fdlName=new FormData();
		fdlName.left = new FormAttachment(0, 0);
		fdlName.right= new FormAttachment(middle, -margin);
		fdlName.top  = new FormAttachment(0, margin);
		wlName.setLayoutData(fdlName);
		wName=new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
 		props.setLook(wName);
		wName.addModifyListener(lsMod);
		fdName=new FormData();
		fdName.left = new FormAttachment(middle, 0);
		fdName.top  = new FormAttachment(0, margin);
		fdName.right= new FormAttachment(100, 0);
		wName.setLayoutData(fdName);

		// SETTINGS grouping?
		// ////////////////////////
		// START OF SETTINGS GROUP
		// 

		wSettings = new Group(shell, SWT.SHADOW_NONE);
		props.setLook(wSettings);
		wSettings.setText(Messages.getString("JobDeleteFiles.Settings.Label"));

		FormLayout groupLayout = new FormLayout();
		groupLayout.marginWidth = 10;
		groupLayout.marginHeight = 10;
		wSettings.setLayout(groupLayout);

		wlIncludeSubfolders = new Label(wSettings, SWT.RIGHT);
		wlIncludeSubfolders.setText(Messages.getString("JobDeleteFiles.IncludeSubfolders.Label"));
		props.setLook(wlIncludeSubfolders);
		fdlIncludeSubfolders = new FormData();
		fdlIncludeSubfolders.left = new FormAttachment(0, 0);
		fdlIncludeSubfolders.top = new FormAttachment(wName, margin);
		fdlIncludeSubfolders.right = new FormAttachment(middle, -margin);
		wlIncludeSubfolders.setLayoutData(fdlIncludeSubfolders);
		wIncludeSubfolders = new Button(wSettings, SWT.CHECK);
		props.setLook(wIncludeSubfolders);
		wIncludeSubfolders.setToolTipText(Messages.getString("JobDeleteFiles.IncludeSubfolders.Tooltip"));
		fdIncludeSubfolders = new FormData();
		fdIncludeSubfolders.left = new FormAttachment(middle, 0);
		fdIncludeSubfolders.top = new FormAttachment(wName, margin);
		fdIncludeSubfolders.right = new FormAttachment(100, 0);
		wIncludeSubfolders.setLayoutData(fdIncludeSubfolders);
		wIncludeSubfolders.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
				UseSubFolder();
			}
		});
		
		// DeleteFolder Option : If selected, files won't be deleted
		wlDeleteFolder = new Label(wSettings, SWT.RIGHT);
		wlDeleteFolder.setText(Messages.getString("JobDeleteFiles.DeleteFolder.Label"));
		props.setLook(wlDeleteFolder);
		fdlDeleteFolder = new FormData();
		fdlDeleteFolder.left = new FormAttachment(0, 0);
		fdlDeleteFolder.top = new FormAttachment(wIncludeSubfolders, margin);
		fdlDeleteFolder.right = new FormAttachment(middle, -margin);
		wlDeleteFolder.setLayoutData(fdlDeleteFolder);
		wDeleteFolder = new Button(wSettings, SWT.CHECK);
		props.setLook(wDeleteFolder);
		wDeleteFolder.setToolTipText(Messages.getString("JobDeleteFiles.DeleteFolder.Tooltip"));
		fdDeleteFolder = new FormData();
		fdDeleteFolder.left = new FormAttachment(middle, 0);
		fdDeleteFolder.top = new FormAttachment(wIncludeSubfolders, margin);
		fdDeleteFolder.right = new FormAttachment(100, 0);
		wDeleteFolder.setLayoutData(fdDeleteFolder);
		wDeleteFolder.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
			}
		});

		wlIgnoreErrors = new Label(wSettings, SWT.RIGHT);
		wlIgnoreErrors.setText(Messages.getString("JobDeleteFiles.IgnoreErrors.Label"));
		props.setLook(wlIgnoreErrors);
		fdlIgnoreErrors = new FormData();
		fdlIgnoreErrors.left = new FormAttachment(0, 0);
		fdlIgnoreErrors.top = new FormAttachment(wDeleteFolder, margin);
		fdlIgnoreErrors.right = new FormAttachment(middle, -margin);
		wlIgnoreErrors.setLayoutData(fdlIgnoreErrors);
		wIgnoreErrors = new Button(wSettings, SWT.CHECK);
		props.setLook(wIgnoreErrors);
		wIgnoreErrors.setToolTipText(Messages.getString("JobDeleteFiles.IgnoreErrors.Tooltip"));
		fdIgnoreErrors = new FormData();
		fdIgnoreErrors.left = new FormAttachment(middle, 0);
		fdIgnoreErrors.top = new FormAttachment(wDeleteFolder, margin);
		fdIgnoreErrors.right = new FormAttachment(100, 0);
		wIgnoreErrors.setLayoutData(fdIgnoreErrors);
		wIgnoreErrors.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.setChanged();
			}
		});
	
		wlPrevious = new Label(wSettings, SWT.RIGHT);
		wlPrevious.setText(Messages.getString("JobDeleteFiles.Previous.Label"));
		props.setLook(wlPrevious);
		fdlPrevious = new FormData();
		fdlPrevious.left = new FormAttachment(0, 0);
		fdlPrevious.top = new FormAttachment(wIgnoreErrors, margin );
		fdlPrevious.right = new FormAttachment(middle, -margin);
		wlPrevious.setLayoutData(fdlPrevious);
		wPrevious = new Button(wSettings, SWT.CHECK);
		props.setLook(wPrevious);
		wPrevious.setSelection(jobEntry.argFromPrevious);
		wPrevious.setToolTipText(Messages.getString("JobDeleteFiles.Previous.Tooltip"));
		fdPrevious = new FormData();
		fdPrevious.left = new FormAttachment(middle, 0);
		fdPrevious.top = new FormAttachment(wIgnoreErrors, margin );
		fdPrevious.right = new FormAttachment(100, 0);
		wPrevious.setLayoutData(fdPrevious);
		wPrevious.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				jobEntry.argFromPrevious = !jobEntry.argFromPrevious;
				jobEntry.setChanged();
				wlFields.setEnabled(!jobEntry.argFromPrevious);
				wFields.setEnabled(!jobEntry.argFromPrevious);
				
				wFilename.setEnabled(!jobEntry.argFromPrevious);
				wlFilename.setEnabled(!jobEntry.argFromPrevious);
				wbFilename.setEnabled(!jobEntry.argFromPrevious);
				
				wlFilemask.setEnabled(!jobEntry.argFromPrevious);
				wFilemask.setEnabled(!jobEntry.argFromPrevious);
				
				wbdFilename.setEnabled(!jobEntry.argFromPrevious);
				wbeFilename.setEnabled(!jobEntry.argFromPrevious);
				wbaFilename.setEnabled(!jobEntry.argFromPrevious);
			}
		});
		fdSettings = new FormData();
		fdSettings.left = new FormAttachment(0, margin);
{'fraction_non_alphanumeric': 0.114996005451384, 'fraction_numerical': 0.004699468960007519, 'mean_word_length': 4.260815822002472, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 24, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5938342', 'n_tokens_mistral': 6852, 'n_tokens_neox': 6274, 'n_words': 1193}