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}