Source code: plugins/SimpleSort.java
1 package plugins;
2
3 import java.util.Vector;
4 import java.util.Random;
5
6 import javax.swing.JPanel;
7 import javax.swing.JLabel;
8 import javax.swing.JScrollPane;
9 import javax.swing.JList;
10
11 import java.awt.GridLayout;
12 import java.awt.GridBagLayout;
13 import java.awt.GridBagConstraints;
14 import java.awt.BorderLayout;
15 import java.awt.Insets;
16
17 import java.awt.event.*;
18
19 import javax.swing.JButton;
20 import javax.swing.JSlider;
21 import javax.swing.event.ChangeEvent;
22
23 import javax.swing.SwingConstants;
24 import javax.swing.BorderFactory;
25
26 import java.awt.SystemColor;
27 import java.awt.Dimension;
28
29 import musli.aorta.Creator;
30 import musli.aorta.Worker;
31 import musli.aorta.Tasklet;
32 import musli.util.Logger;
33
34 /**
35 * This is the GUI part of the Tasklet, allowing the user to set the parameters
36 * for the task and "fire".
37 * The corresponding tasklet is the "SimpleSortTasklet.java"
38 *
39 * @author Olle Persson
40 */
41 public class SimpleSort extends Creator
42 {
43 Vector v;
44
45 final int SPLITS = 3;
46 final int ELEMENTS = 10;
47 final int MAXSPLITS = 30;
48 final int MAXELEMENTS = 100000;
49 final int MAXRANDOMVALUE = 100000;
50
51 int elementsNo = ELEMENTS;
52 int splits = SPLITS;
53 long startTime;
54
55 Random r = new Random(System.currentTimeMillis());
56
57 /// JPanel jPanelMain = new JPanel();
58 JPanel jPanelLeft = new JPanel();
59 JPanel jPanelCenter = new JPanel();
60 JPanel jPanelRight = new JPanel();
61 JScrollPane jScrollPaneCenter = new JScrollPane();
62 GridBagLayout gridBagLayoutMain = new GridBagLayout();
63 BorderLayout borderLayoutRoot = new BorderLayout();
64 BorderLayout borderLayoutCenter = new BorderLayout();
65 GridLayout gridLayoutRight = new GridLayout(10,1);
66 GridLayout gridLayoutLeft = new GridLayout(3,1);
67 JSlider jSliderElements = new JSlider();
68 JSlider jSliderSplits = new JSlider();
69 JButton jButtonRandom = new JButton();
70 JButton jButtonSort = new JButton();
71 JList jListElements = new JList();
72 JLabel jLabelElements = new JLabel();
73 JLabel jLabelStartTime = new JLabel();
74 JLabel jLabelStartTimeValue = new JLabel();
75 JLabel jLabelEndTime = new JLabel();
76 JLabel jLabelEndTimeValue = new JLabel();
77 JLabel jLabelDiffTime = new JLabel();
78 JLabel jLabelDiffTimeValue = new JLabel();
79 JLabel jLabelSplitsValue = new JLabel();
80 JLabel jLabelSplits = new JLabel();
81
82 /**
83 * Creates our GUI
84 *
85 */
86 public void initGUI()
87 {
88 // this.getContentPane().setLayout(borderLayoutRoot);
89 setLayout(gridBagLayoutMain);
90 jSliderElements.setValue(ELEMENTS);
91 jSliderElements.setMinimum(1);
92 jSliderElements.setPreferredSize(new Dimension(200, 19));
93 jSliderElements.setMaximum(MAXELEMENTS);
94 jSliderElements.addChangeListener(new javax.swing.event.ChangeListener()
95 {
96 public void stateChanged(ChangeEvent e)
97 {
98 jSliderElements_stateChanged(e);
99 }
100 });
101 jLabelElements.setHorizontalAlignment(SwingConstants.CENTER);
102 jLabelElements.setHorizontalTextPosition(SwingConstants.CENTER);
103 jLabelElements.setText(""+ELEMENTS);
104 jLabelElements.setVerticalAlignment(SwingConstants.BOTTOM);
105 jButtonRandom.setText("Random");
106 jButtonRandom.addActionListener(new java.awt.event.ActionListener()
107 {
108 public void actionPerformed(ActionEvent e)
109 {
110 jButtonRandom_actionPerformed(e);
111 }
112 });
113 jPanelLeft.setLayout(gridLayoutLeft);
114 jPanelCenter.setLayout(borderLayoutCenter);
115 jPanelLeft.setBorder(BorderFactory.createLineBorder(SystemColor.controlText,1));
116 jPanelRight.setBorder(BorderFactory.createLineBorder(SystemColor.controlText,1));
117 jPanelRight.setLayout(gridLayoutRight);
118 jPanelCenter.setBorder(BorderFactory.createLineBorder(SystemColor.controlText,1));
119 jPanelCenter.setPreferredSize(new Dimension(100, 100));
120 jLabelStartTime.setText(" Starttime:");
121 jLabelEndTime.setText(" Endtime:");
122 jLabelDiffTime.setText(" Difftime (msec):");
123 jButtonSort.setText("Sort");
124 jButtonSort.addActionListener(new java.awt.event.ActionListener()
125 {
126 public void actionPerformed(ActionEvent e)
127 {
128 jButtonSort_actionPerformed(e);
129 }
130 });
131 jSliderSplits.setValue(SPLITS);
132 jSliderSplits.setMinimum(1);
133 jSliderSplits.setMaximum(MAXSPLITS);
134 jSliderSplits.setPreferredSize(new Dimension(200, 19));
135 jSliderSplits.addChangeListener(new javax.swing.event.ChangeListener()
136 {
137 public void stateChanged(ChangeEvent e)
138 {
139 jSliderSplits_stateChanged(e);
140 }
141 });
142 jLabelSplitsValue.setHorizontalAlignment(SwingConstants.CENTER);
143 jLabelSplitsValue.setText(""+SPLITS);
144 jLabelSplitsValue.setVerticalAlignment(SwingConstants.BOTTOM);
145 jLabelStartTimeValue.setHorizontalAlignment(SwingConstants.CENTER);
146 jLabelEndTimeValue.setHorizontalAlignment(SwingConstants.CENTER);
147 jLabelDiffTimeValue.setHorizontalAlignment(SwingConstants.CENTER);
148 jLabelSplits.setText(" Splits:");
149 jLabelSplits.setVerticalAlignment(SwingConstants.BOTTOM);
150 jScrollPaneCenter.setPreferredSize(new Dimension(100, 100));
151 /// add(jPanelMain, BorderLayout.CENTER);
152 add(jPanelLeft, new GridBagConstraints(0, 0, 1, 1, 0.4, 1.0
153 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
154 jPanelLeft.add(jLabelElements, null);
155 jPanelLeft.add(jSliderElements, null);
156 jPanelLeft.add(jButtonRandom, null);
157 add(jPanelCenter, new GridBagConstraints(1, 0, 1, 1, 0.2, 1.0
158 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
159 jPanelCenter.add(jScrollPaneCenter, BorderLayout.CENTER);
160 jScrollPaneCenter.getViewport().add(jListElements, null);
161 add(jPanelRight, new GridBagConstraints(2, 0, 1, 1, 0.4, 1.0
162 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
163 jPanelRight.add(jLabelStartTime, null);
164 jPanelRight.add(jLabelStartTimeValue, null);
165 jPanelRight.add(jLabelEndTime, null);
166 jPanelRight.add(jLabelEndTimeValue, null);
167 jPanelRight.add(jLabelDiffTime, null);
168 jPanelRight.add(jLabelDiffTimeValue, null);
169 jPanelRight.add(jLabelSplits, null);
170 jPanelRight.add(jLabelSplitsValue, null);
171 jPanelRight.add(jSliderSplits, null);
172 jPanelRight.add(jButtonSort, null);
173
174 // this.pack();
175 // this.setVisible(true);
176 }
177
178 void jSliderElements_stateChanged(ChangeEvent e)
179 {
180 elementsNo=jSliderElements.getValue();
181 jLabelElements.setText("" + elementsNo);
182 }
183
184 void jButtonRandom_actionPerformed(ActionEvent e)
185 {
186 generateRandomnumbers();
187 }
188
189 private void generateRandomnumbers()
190 {
191 v = new Vector();
192 for(int i = 0; i < elementsNo; i++)
193 {
194 v.addElement(new Integer(r.nextInt(MAXRANDOMVALUE)));
195 }
196
197 jListElements.setListData(v);
198 }
199
200 void jSliderSplits_stateChanged(ChangeEvent e)
201 {
202 jLabelSplitsValue.setText("" + jSliderSplits.getValue());
203 }
204
205 void jButtonSort_actionPerformed(ActionEvent e)
206 {
207 if(v == null)
208 {
209 generateRandomnumbers();
210 }
211
212 startTime = System.currentTimeMillis();
213 jLabelStartTimeValue.setText(""+startTime); // Sort the list.
214 jLabelEndTimeValue.setText("");
215 jLabelDiffTimeValue.setText("");
216
217
218
219 Thread t = new Thread (new Runnable()
220 {
221 public void run()
222 {
223 int nr = (v.size()/jSliderSplits.getValue())+1;
224 SimpleSortTasklet t=new SimpleSortTasklet( Worker.getInstance().createTaskID(), v, nr);
225 t.setProcessor(musli.aorta.TailRecursiveProcessor.class);
226 fireCompute(t);
227 }
228 });
229
230 t.start();
231 }
232
233
234 //********'********'********'********'********'********'********'********'********'********'
235 /**
236 * Present result of the task compute.
237 *@param task our finished task.
238 */
239 public void viewResult(Object obj)
240 {
241
242 Tasklet task=(Tasklet)obj;
243
244 long eTime = System.currentTimeMillis();
245 jLabelEndTimeValue.setText(""+eTime);
246 jLabelDiffTimeValue.setText(""+(eTime-startTime));
247 v = (Vector)task.getResult();
248 jListElements.setListData(v);
249 }
250
251 /**
252 * Gives the classname for our algortim part.
253 *@return The Class
254 */
255 public Class taskClass()
256 {
257 Class theClass=null;
258 try
259 {
260 theClass=Class.forName("plugins.SimpleSortTasklet");
261 }
262 catch(Exception e)
263 {
264 Logger.log("Problem with plugin:"+e);
265 }
266
267 return theClass;
268 }
269 }