@Override
  public Object clone() {
    try {
      BaseFileInputFiles cloned = (BaseFileInputFiles) super.clone();
      cloned.fileName = Arrays.copyOf( fileName, fileName.length );
      cloned.fileMask = Arrays.copyOf( fileMask, fileMask.length );
      cloned.excludeFileMask = Arrays.copyOf( excludeFileMask, excludeFileMask.length );
      cloned.fileRequired = Arrays.copyOf( fileRequired, fileRequired.length );
      cloned.includeSubFolders = Arrays.copyOf( includeSubFolders, includeSubFolders.length );
      return cloned;
    } catch ( CloneNotSupportedException ex ) {
      throw new IllegalArgumentException( "Clone not supported for " + this.getClass().getName() );
    }
  }
@Test
  public void testClone() {
    BaseFileInputFiles orig = new BaseFileInputFiles();
    orig.fileName = new String[] { "1", "2" };
    orig.fileMask = new String[] { "3", "4" };
    orig.excludeFileMask = new String[] { "5", "6" };
    orig.fileRequired = new String[] { "7", "8" };
    orig.includeSubFolders = new String[] { "9", "0" };

    BaseFileInputFiles clone = (BaseFileInputFiles) orig.clone();
    assertNotEquals( orig.fileName, clone.fileName );
    assertTrue( Arrays.equals( orig.fileName, clone.fileName ) );
    assertNotEquals( orig.fileMask, clone.fileMask );
    assertTrue( Arrays.equals( orig.fileMask, clone.fileMask ) );
    assertNotEquals( orig.excludeFileMask, clone.excludeFileMask );
    assertTrue( Arrays.equals( orig.excludeFileMask, clone.excludeFileMask ) );
    assertNotEquals( orig.fileRequired, clone.fileRequired );
    assertTrue( Arrays.equals( orig.fileRequired, clone.fileRequired ) );
    assertNotEquals( orig.includeSubFolders, clone.includeSubFolders );
    assertTrue( Arrays.equals( orig.includeSubFolders, clone.includeSubFolders ) );
  }