Program: 20734
Project: 20734
Buggy source:
/** 
 * Als Dummy wird ein downloadlink bezeicnet, der nicht ind er downloadliste war, sondern nur angelegt wurde um als container für ein externes archiv zu dienen. Zur Fortschrittsanzeige wird ein progresscontroller verwendet
 * @param id
 * @param controller
 */
private void onExtractionDummyEvent(int id,ExtractionController controller){
  ProgressController pc=controller.getProgressController();
switch (id) {
case ExtractionConstants.WRAPPER_STARTED:
    pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
  break;
case ExtractionConstants.INVALID_BINARY:
logger.severe("String_Node_Str");
this.getPluginConfig().setProperty(ExtractionConstants.CONFIG_KEY_UNRARCOMMAND,null);
this.getPluginConfig().setProperty(ExtractionConstants.UNRAR_HASH,null);
this.getPluginConfig().save();
controller.getArchiv().setActive(false);
break;
case ExtractionConstants.WRAPPER_EXTRACTION_FAILED:
if (controller.getException() != null) {
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str")+ "String_Node_Str"+ controller.getException().getMessage());
}
 else {
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
}
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
case ExtractionConstants.WRAPPER_PASSWORD_NEEDED_TO_CONTINUE:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
if (this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_ASK_UNKNOWN_PASS,true)) {
String pass=UserIO.getInstance().requestInputDialog(0,JDL.LF("String_Node_Str","String_Node_Str",controller.getArchiv().getFirstDownloadLink().getName()),null);
if (pass == null || pass.length() == 0) {
this.onFinished(controller);
break;
}
controller.getArchiv().setPassword(pass);
}
break;
case ExtractionConstants.WRAPPER_PASSWORT_CRACKING:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
pc.setRange(controller.getPasswordList().size());
pc.setStatus(controller.getCrackProgress());
break;
case ExtractionConstants.WRAPPER_START_OPEN_ARCHIVE:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
break;
case ExtractionConstants.WRAPPER_OPEN_ARCHIVE_SUCCESS:
assignRealDownloadDir(controller);
break;
case ExtractionConstants.WRAPPER_PASSWORD_FOUND:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
break;
case ExtractionConstants.WRAPPER_ON_PROGRESS:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
pc.setRange(controller.getArchiv().getSize());
pc.setStatus(controller.getArchiv().getExtracted());
break;
case ExtractionConstants.WRAPPER_EXTRACTION_FAILED_CRC:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
case ExtractionConstants.WRAPPER_FINISHED_SUCCESSFULL:
File[] files=new File[controller.getPostProcessingFiles().size()];
int i=0;
for (String f : controller.getPostProcessingFiles()) {
files[i++]=new File(f);
}
JDUtilities.getController().fireControlEvent(new ControlEvent(wrapper,ControlEvent.CONTROL_ON_FILEOUTPUT,files));
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
if (this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_REMOVE_INFO_FILE,false)) {
File fileOutput=new File(controller.getArchiv().getFirstDownloadLink().getFileOutput());
File infoFiles=new File(fileOutput.getParentFile(),fileOutput.getName().replaceFirst("String_Node_Str","String_Node_Str") + "String_Node_Str");
if (infoFiles.exists() && infoFiles.delete()) {
logger.info(infoFiles.getName() + "String_Node_Str");
}
}
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
}
}

Fixed version (ground truth):
/** 
 * Als Dummy wird ein downloadlink bezeicnet, der nicht ind er downloadliste war, sondern nur angelegt wurde um als container für ein externes archiv zu dienen. Zur Fortschrittsanzeige wird ein progresscontroller verwendet
 * @param id
 * @param controller
 */
private void onExtractionDummyEvent(int id,ExtractionController controller){
  ProgressController pc=controller.getProgressController();
switch (id) {
case ExtractionConstants.WRAPPER_STARTED:
    pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
  break;
case ExtractionConstants.INVALID_BINARY:
logger.severe("String_Node_Str");
this.getPluginConfig().setProperty(ExtractionConstants.CONFIG_KEY_UNRARCOMMAND,null);
this.getPluginConfig().setProperty(ExtractionConstants.UNRAR_HASH,null);
this.getPluginConfig().save();
controller.getArchiv().setActive(false);
break;
case ExtractionConstants.WRAPPER_EXTRACTION_FAILED:
if (controller.getException() != null) {
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str")+ "String_Node_Str"+ controller.getException().getMessage());
}
 else {
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
}
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
case ExtractionConstants.WRAPPER_PASSWORD_NEEDED_TO_CONTINUE:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
if (this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_ASK_UNKNOWN_PASS,true)) {
String pass=UserIO.getInstance().requestInputDialog(0,JDL.LF("String_Node_Str","String_Node_Str",controller.getArchiv().getFirstDownloadLink().getName()),null);
if (pass == null || pass.length() == 0) {
this.onFinished(controller);
break;
}
controller.getArchiv().setPassword(pass);
}
break;
case ExtractionConstants.WRAPPER_PASSWORT_CRACKING:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
pc.setRange(controller.getPasswordList().size());
pc.setStatus(controller.getCrackProgress());
break;
case ExtractionConstants.WRAPPER_START_OPEN_ARCHIVE:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
break;
case ExtractionConstants.WRAPPER_OPEN_ARCHIVE_SUCCESS:
assignRealDownloadDir(controller);
break;
case ExtractionConstants.WRAPPER_PASSWORD_FOUND:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
break;
case ExtractionConstants.WRAPPER_ON_PROGRESS:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
pc.setRange(controller.getArchiv().getSize());
pc.setStatus(controller.getArchiv().getExtracted());
break;
case ExtractionConstants.WRAPPER_EXTRACTION_FAILED_CRC:
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
case ExtractionConstants.WRAPPER_FINISHED_SUCCESSFULL:
File[] files=new File[controller.getPostProcessingFiles().size()];
int i=0;
for (String f : controller.getPostProcessingFiles()) {
files[i++]=new File(f);
}
JDUtilities.getController().fireControlEvent(new ControlEvent(wrapper,ControlEvent.CONTROL_ON_FILEOUTPUT,files));
pc.setStatusText(controller.getArchiv().getFirstDownloadLink().getFileOutput() + "String_Node_Str" + JDL.L("String_Node_Str","String_Node_Str"));
if (this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_REMOVE_INFO_FILE,false)) {
File fileOutput=new File(controller.getArchiv().getFirstDownloadLink().getFileOutput());
File infoFiles=new File(fileOutput.getParentFile(),fileOutput.getName().replaceFirst("String_Node_Str","String_Node_Str") + "String_Node_Str");
if (infoFiles.exists() && infoFiles.delete()) {
logger.info(infoFiles.getName() + "String_Node_Str");
}
}
controller.getArchiv().setActive(false);
this.onFinished(controller);
break;
case ExtractionConstants.NOT_ENOUGH_SPACE:
for (DownloadLink link : controller.getArchiv().getDownloadLinks()) {
if (link == null) continue;
link.getLinkStatus().setStatus(LinkStatus.FINISHED);
link.getLinkStatus().setStatusText(JDL.L("String_Node_Str","String_Node_Str"));
link.requestGuiUpdate();
}
this.onFinished(controller);
break;
}
}