001package com.ganteater.ae; 002 003import java.util.ArrayList; 004import java.util.Iterator; 005import java.util.List; 006 007import org.apache.commons.lang.ArrayUtils; 008import org.apache.commons.lang.StringUtils; 009 010public class ChoiceTaskRunner implements MultiTaskRunDialog { 011 012 private String[] taskNames; 013 014 List<String> activeTaskArray = new ArrayList<String>(); 015 016 String[] status; 017 018 boolean start = false; 019 020 private String name; 021 022 private boolean errorrState = false; 023 024 private boolean closeDialog = false; 025 026 private boolean exceptionIgnore; 027 028 private boolean useHistory; 029 030 private boolean visible; 031 032 public ChoiceTaskRunner(String name, final boolean useHistory) { 033 this.name = name; 034 this.useHistory = useHistory; 035 this.setVisible(true); 036 } 037 038 public void showDialog(String name, String[] theNames, boolean notifyMe) { 039 040 closeDialog = false; 041 this.taskNames = theNames; 042 043 if (useHistory) { 044 String defaultTasks = AEWorkspace.getInstance().getDefaultUserConfiguration("MultiTaskRunDialog:" + this.name, ""); 045 046 String[] strings = StringUtils.splitPreserveAllTokens(defaultTasks, ";"); 047 for (String taskName : strings) { 048 if (ArrayUtils.indexOf(taskNames, taskName) >= 0 && !activeTaskArray.contains(taskName)) 049 activeTaskArray.add(taskName); 050 } 051 } 052 053 status = new String[taskNames.length]; 054 } 055 056 public Iterator<String> getSelectedTasks() { 057 058 List<String> list = new ArrayList<String>(); 059 if (closeDialog && start == false) 060 return list.iterator(); 061 for (String name : taskNames) { 062 if (activeTaskArray.contains(name)) 063 list.add(name); 064 } 065 066 return list.iterator(); 067 } 068 069 public void begin(String taskName) { 070 int row = ArrayUtils.indexOf(taskNames, taskName); 071 this.status[row] = "in progress"; 072 073 } 074 075 public void done() { 076 if (errorrState) { 077 start = false; 078 } 079 errorrState = true; 080 } 081 082 public void end(String taskName, boolean statusOk) { 083 int row = ArrayUtils.indexOf(taskNames, taskName); 084 this.status[row] = statusOk ? "ok" : "failed"; 085 if (statusOk == false) 086 errorrState = true; 087 } 088 089 public boolean isExceptionIgnore() { 090 return exceptionIgnore; 091 } 092 093 public int getColumnCount() { 094 return 3; 095 } 096 097 public int getRowCount() { 098 return taskNames.length; 099 } 100 101 public Object getValueAt(int row, int coll) { 102 if (coll == 0) { 103 String name = taskNames[row]; 104 return activeTaskArray.contains(name); 105 } 106 if (coll == 2) { 107 String status = this.status[row]; 108 return status == null ? "" : status; 109 } 110 return taskNames[row]; 111 } 112 113 public void select(String[] activeTaskArray, boolean defaultMode) { 114 this.activeTaskArray.clear(); 115 for (String activeTask : activeTaskArray) 116 this.activeTaskArray.add(activeTask); 117 118 if (defaultMode) { 119 start = true; 120 } 121 } 122 123 public boolean isStarted() { 124 return start; 125 } 126 127 public void setExceptionIgnore(boolean exceptionIgnore) { 128 this.exceptionIgnore = exceptionIgnore; 129 } 130 131 public String getName() { 132 return name; 133 } 134 135 public void start() { 136 start = true; 137 } 138 139 public String[] getTaskNames() { 140 return taskNames; 141 } 142 143 @Override 144 public boolean isVisible() { 145 return visible; 146 } 147 148 public void setVisible(boolean visible) { 149 this.visible = visible; 150 } 151 152}