• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.preload.ui;
2 
3 import com.android.ddmlib.Client;
4 import com.android.ddmlib.ClientData;
5 import java.io.File;
6 import java.util.LinkedList;
7 import java.util.List;
8 import javax.swing.Action;
9 import javax.swing.ListModel;
10 import javax.swing.table.TableModel;
11 
12 public class SequenceUI implements IUI {
13 
14     private ListModel<Client> clientListModel;
15     @SuppressWarnings("unused")
16     private TableModel dataTableModel;
17     private List<Action> actions;
18 
19     private List<Object> sequence = new LinkedList<>();
20 
SequenceUI()21     public SequenceUI() {
22     }
23 
24     @Override
isSingleThreaded()25     public boolean isSingleThreaded() {
26         return true;
27     }
28 
29     @Override
prepare(ListModel<Client> clientListModel, TableModel dataTableModel, List<Action> actions)30     public void prepare(ListModel<Client> clientListModel, TableModel dataTableModel,
31             List<Action> actions) {
32         this.clientListModel = clientListModel;
33         this.dataTableModel = dataTableModel;
34         this.actions = actions;
35     }
36 
action(Action a)37     public SequenceUI action(Action a) {
38         sequence.add(a);
39         return this;
40     }
41 
action(Class<? extends Action> actionClass)42     public SequenceUI action(Class<? extends Action> actionClass) {
43         for (Action a : actions) {
44             if (actionClass.equals(a.getClass())) {
45                 sequence.add(a);
46                 return this;
47             }
48         }
49         throw new IllegalArgumentException("No action of class " + actionClass + " found.");
50     }
51 
confirmYes()52     public SequenceUI confirmYes() {
53         sequence.add(Boolean.TRUE);
54         return this;
55     }
56 
confirmNo()57     public SequenceUI confirmNo() {
58         sequence.add(Boolean.FALSE);
59         return this;
60     }
61 
input(String input)62     public SequenceUI input(String input) {
63         sequence.add(input);
64         return this;
65     }
66 
input(File... f)67     public SequenceUI input(File... f) {
68         sequence.add(f);
69         return this;
70     }
71 
output(File f)72     public SequenceUI output(File f) {
73         sequence.add(f);
74         return this;
75     }
76 
tableRow(int i)77     public SequenceUI tableRow(int i) {
78         sequence.add(i);
79         return this;
80     }
81 
82     private class ClientSelector {
83         private String pkg;
84 
ClientSelector(String pkg)85         public ClientSelector(String pkg) {
86             this.pkg = pkg;
87         }
88 
getClient()89         public Client getClient() {
90             for (int i = 0; i < clientListModel.getSize(); i++) {
91                 ClientData cd = clientListModel.getElementAt(i).getClientData();
92                 if (cd != null) {
93                     String s = cd.getClientDescription();
94                     if (pkg.equals(s)) {
95                         return clientListModel.getElementAt(i);
96                     }
97                 }
98             }
99             throw new RuntimeException("Didn't find client " + pkg);
100         }
101     }
102 
client(String pkg)103     public SequenceUI client(String pkg) {
104         sequence.add(new ClientSelector(pkg));
105         return this;
106     }
107 
choice(String pattern)108     public SequenceUI choice(String pattern) {
109         sequence.add(pattern);
110         return this;
111     }
112 
113     @Override
ready()114     public void ready() {
115         // Run the actions.
116         // No iterator or foreach loop as the sequence will be emptied while running.
117         try {
118             while (!sequence.isEmpty()) {
119                 Object next = sequence.remove(0);
120                 if (next instanceof Action) {
121                     ((Action)next).actionPerformed(null);
122                 } else {
123                     throw new IllegalStateException("Didn't expect a non-action: " + next);
124                 }
125             }
126         } catch (Exception e) {
127             e.printStackTrace(System.out);
128         }
129 
130         // Now shut down.
131         System.exit(0);
132     }
133 
134     @Override
getSelectedClient()135     public Client getSelectedClient() {
136         Object next = sequence.remove(0);
137         if (next instanceof ClientSelector) {
138             return ((ClientSelector)next).getClient();
139         }
140         throw new IllegalStateException("Unexpected: " + next);
141     }
142 
143     @Override
getSelectedDataTableRow()144     public int getSelectedDataTableRow() {
145         Object next = sequence.remove(0);
146         if (next instanceof Integer) {
147             return ((Integer)next).intValue();
148         }
149         throw new IllegalStateException("Unexpected: " + next);
150     }
151 
152     @Override
showWaitDialog()153     public void showWaitDialog() {
154     }
155 
156     @Override
updateWaitDialog(String s)157     public void updateWaitDialog(String s) {
158         System.out.println(s);
159     }
160 
161     @Override
hideWaitDialog()162     public void hideWaitDialog() {
163     }
164 
165     @Override
showMessageDialog(String s)166     public void showMessageDialog(String s) {
167         System.out.println(s);
168     }
169 
170     @Override
showConfirmDialog(String title, String message)171     public boolean showConfirmDialog(String title, String message) {
172         Object next = sequence.remove(0);
173         if (next instanceof Boolean) {
174             return ((Boolean)next).booleanValue();
175         }
176         throw new IllegalStateException("Unexpected: " + next);
177     }
178 
179     @Override
showInputDialog(String message)180     public String showInputDialog(String message) {
181         Object next = sequence.remove(0);
182         if (next instanceof String) {
183             return (String)next;
184         }
185         throw new IllegalStateException("Unexpected: " + next);
186     }
187 
188     @Override
showChoiceDialog(String title, String message, T[] choices)189     public <T> T showChoiceDialog(String title, String message, T[] choices) {
190         Object next = sequence.remove(0);
191         if (next instanceof String) {
192             String s = (String)next;
193             for (T t : choices) {
194                 if (t.toString().contains(s)) {
195                     return t;
196                 }
197             }
198             return null;
199         }
200         throw new IllegalStateException("Unexpected: " + next);
201     }
202 
203     @Override
showSaveDialog()204     public File showSaveDialog() {
205         Object next = sequence.remove(0);
206         if (next instanceof File) {
207             System.out.println(next);
208             return (File)next;
209         }
210         throw new IllegalStateException("Unexpected: " + next);
211     }
212 
213     @Override
showOpenDialog(boolean multi)214     public File[] showOpenDialog(boolean multi) {
215         Object next = sequence.remove(0);
216         if (next instanceof File[]) {
217             return (File[])next;
218         }
219         throw new IllegalStateException("Unexpected: " + next);
220     }
221 
222 }
223