source: main/trunk/greenstone3/src/java/org/greenstone/admin/guiext/SequenceList.java@ 22185

Last change on this file since 22185 was 22185, checked in by sjm84, 14 years ago

Added password, browsing and checking functionality as well as some basic extension state checking

File size: 6.1 KB
Line 
1package org.greenstone.admin.guiext;
2
3import org.w3c.dom.Element;
4
5import org.greenstone.admin.GAI;
6
7import java.util.Properties;
8import java.util.ArrayList;
9
10import javax.swing.JButton;
11
12import java.io.File;
13import java.io.FileInputStream;
14import java.io.FileOutputStream;
15
16public class SequenceList
17{
18 protected ArrayList _steps = new ArrayList();
19 protected ExtensionInformation _parent = null;
20 protected Properties _dependencies = null;
21
22 public SequenceList(Element sequenceElement, ExtensionInformation parent)
23 {
24 _parent = parent;
25
26 loadExtensionStatesFromFile();
27
28 if(sequenceElement != null){
29 Element[] stepElements = ExtXMLHelper.getMultipleChildElements(sequenceElement, ExtXMLHelper.STEP, true);
30 if(stepElements == null || stepElements.length == 0){
31 System.err.println("This <" + ExtXMLHelper.SEQUENCE_LIST + "> element does not have any valid <" + ExtXMLHelper.STEP + "> elements");
32 }
33 else{
34 for(int i = 0; i < stepElements.length; i++){
35 Element currentStep = stepElements[i];
36 String action = currentStep.getAttribute("action");
37
38 if(i == 0 && !action.equals("download")){
39 _steps.add(new DownloadStep(this));
40 }
41
42 if(action.equals("download")){
43 _steps.add(new DownloadStep(currentStep, this));
44 }
45 else if(action.equals("properties")){
46 _steps.add(new PropertiesStep(currentStep, this));
47 }
48 else if(action.equals("button")){
49 _steps.add(new CommandStep(currentStep, this));
50 }
51 else if(action.equals("panel")){
52 _steps.add(new PanelStep(currentStep, this));
53 }
54 else if(action.equals("remove")){
55 _steps.add(new RemoveStep(currentStep, this));
56 }
57 else{
58 System.err.println("\"" + action + "\" is not a valid action attribute for <" + ExtXMLHelper.STEP + "> elements (valid options are \"download\", \"properties\", \"panel\", \"button\") or \"remove\"");
59 }
60
61 if((i == stepElements.length-1) && !action.equals("remove")){
62 _steps.add(new RemoveStep((DownloadStep)_steps.get(0), this));
63 }
64 }
65 }
66 }
67 else{
68 System.err.println("This <" + ExtXMLHelper.SEQUENCE_LIST + "> element is null");
69 }
70 }
71
72 public ExtensionInformation getParent()
73 {
74 return _parent;
75 }
76
77 public Step[] getSteps()
78 {
79 return (Step[])(_steps.toArray(new Step[0]));
80 }
81
82 public JButton[] getButtons()
83 {
84 if(_steps == null){
85 System.err.println("Cannot get buttons for this sequence list as it has no steps");
86 return null;
87 }
88
89 JButton[] buttons = new JButton[_steps.size()];
90 for(int i = 0; i < _steps.size(); i++){
91 buttons[i] = ((Step)_steps.get(i)).getButton();
92 }
93
94 return buttons;
95 }
96
97 private void loadExtensionStatesFromFile()
98 {
99 if(_dependencies == null){
100 _dependencies = new Properties();
101 }
102
103 String fileName = GAI.getGSDL3ExtensionHome() + System.getProperty("file.separator") + "extensionStates.properties";
104 try{
105 File stateFile = new File(fileName);
106
107 if(stateFile.exists()){
108 _dependencies.load(new FileInputStream(new File(fileName)));
109 }
110 }
111 catch(Exception ex){
112 ex.printStackTrace();
113 }
114 }
115
116 private void saveExtensionStatesToFile()
117 {
118 String fileName = GAI.getGSDL3ExtensionHome() + System.getProperty("file.separator") + "extensionStates.properties";
119 try{
120 _dependencies.store(new FileOutputStream(new File(fileName)), null);
121 }
122 catch(Exception ex){
123 ex.printStackTrace();
124 }
125 }
126
127 public boolean addDependency(String id)
128 {
129 if(_dependencies != null){
130 _dependencies.setProperty(_parent.getFileStem() + "." + id, "true");
131 saveExtensionStatesToFile();
132 return true;
133 }
134 else{
135 System.err.println("Cannot add dependency as it has not yet been loaded");
136 return false;
137 }
138 }
139
140 public void rollbackTo(String id)
141 {
142 if(_dependencies != null){
143 rollbackToRecursive(id);
144 saveExtensionStatesToFile();
145 }
146 else{
147 System.err.println("Cannot remove dependency as it has not yet been loaded");
148 }
149 }
150
151 private void rollbackToRecursive(String id)
152 {
153 Step rollbackStep = null;
154 ArrayList dependsSteps = new ArrayList();
155 for(int i = 0; i < _steps.size(); i++){
156 if(((Step)(_steps.get(i))).getId().equals(id)){
157 rollbackStep = (Step)_steps.get(i);
158 }
159
160 String[] depends = ((Step)_steps.get(i)).getDependsOn().split(",");
161
162 for(int j = 0; j < depends.length; j++){
163 if(depends[j].equals(id)){
164 dependsSteps.add(((Step)_steps.get(i)).getId());
165 }
166 }
167 }
168
169 _dependencies.setProperty(_parent.getFileStem() + "." + id, "false");
170
171 for(int i = 0; i < dependsSteps.size(); i++){
172 rollbackToRecursive((String)dependsSteps.get(i));
173 }
174 }
175
176 public void clearPropertySteps()
177 {
178 for(int i = 0; i < _steps.size(); i++){
179 Step currentStep = (Step)_steps.get(i);
180 if(currentStep instanceof PropertiesStep){
181 ((PropertiesStep)currentStep).setPropertiesToDefaults();
182 }
183 }
184 }
185
186 public void registerStepCompletion(Step step)
187 {
188 addDependency(step.getId());
189
190 if(!step.getRollbacks().equals("")){
191 String[] rollbacks = step.getRollbacks().split(",");
192 for(int k = 0; k < rollbacks.length; k++){
193 rollbackTo(rollbacks[k]);
194 }
195 }
196
197 updateButtons();
198 }
199
200 public void updateButtons()
201 {
202 loadExtensionStatesFromFile();
203
204 ExtensionInformation currentExtension = _parent;
205 String fileStem = currentExtension.getFileStem();
206
207 File extDir = new File(currentExtension.getExtensionDirectory());
208 if(!extDir.exists()){
209 rollbackTo("");
210 }
211
212 for(int i = 0; i < _steps.size(); i++){
213 Step currentStep = (Step)_steps.get(i);
214 JButton currentButton = currentStep.getButton();
215
216 //If this step button depends on another button then disabled it
217 String dependsOn = currentStep.getDependsOn();
218 if(dependsOn.equals("")){
219 currentButton.setEnabled(true);
220 }
221 else{
222 String[] dependsList = dependsOn.split(",");
223 boolean enable = true;
224 for(int j = 0; j < dependsList.length; j++){
225 String propertyName = fileStem + "." + dependsList[j];
226
227 if(_dependencies.getProperty(propertyName) == null || _dependencies.getProperty(propertyName).equals("false")){
228 enable = false;
229 }
230 }
231 currentButton.setEnabled(enable);
232 }
233 }
234 }
235}
Note: See TracBrowser for help on using the repository browser.