Use an exponential backoff strategy for retrying rolled back transactions.
[pithos] / src / gr / ebs / gss / client / TopPanel.java
1 /*\r
2  * Copyright 2007, 2008, 2009 Electronic Business Systems Ltd.\r
3  *\r
4  * This file is part of GSS.\r
5  *\r
6  * GSS is free software: you can redistribute it and/or modify\r
7  * it under the terms of the GNU General Public License as published by\r
8  * the Free Software Foundation, either version 3 of the License, or\r
9  * (at your option) any later version.\r
10  *\r
11  * GSS is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  * GNU General Public License for more details.\r
15  *\r
16  * You should have received a copy of the GNU General Public License\r
17  * along with GSS.  If not, see <http://www.gnu.org/licenses/>.\r
18  */\r
19 package gr.ebs.gss.client;\r
20 \r
21 import com.google.gwt.user.client.Command;\r
22 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
23 import com.google.gwt.user.client.ui.Composite;\r
24 import com.google.gwt.user.client.ui.HTML;\r
25 import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
26 import com.google.gwt.user.client.ui.HasVerticalAlignment;\r
27 import com.google.gwt.user.client.ui.HorizontalPanel;\r
28 import com.google.gwt.user.client.ui.ImageBundle;\r
29 import com.google.gwt.user.client.ui.MenuBar;\r
30 import com.google.gwt.user.client.ui.MenuItem;\r
31 \r
32 /**\r
33  * The top panel, which contains the menu bar icons and the user name.\r
34  */\r
35 public class TopPanel extends Composite {\r
36 \r
37         /**\r
38          * A constant that denotes the completion of an IncrementalCommand.\r
39          */\r
40         public static final boolean DONE = false;\r
41 \r
42         /**\r
43          * An image bundle for this widgets images.\r
44          */\r
45         public interface Images extends ImageBundle, FileMenu.Images, EditMenu.Images,\r
46                         SettingsMenu.Images, GroupMenu.Images, FilePropertiesDialog.Images,\r
47                         HelpMenu.Images {\r
48 \r
49                 @Resource("gr/ebs/gss/resources/exit.png")\r
50                 AbstractImagePrototype exit();\r
51 \r
52                 @Resource("gr/ebs/gss/resources/folder_blue.png")\r
53                 AbstractImagePrototype folder();\r
54 \r
55                 @Resource("gr/ebs/gss/resources/edit.png")\r
56                 AbstractImagePrototype edit();\r
57 \r
58                 @Resource("gr/ebs/gss/resources/edit_group.png")\r
59                 AbstractImagePrototype group();\r
60 \r
61                 @Resource("gr/ebs/gss/resources/configure.png")\r
62                 AbstractImagePrototype configure();\r
63 \r
64                 @Resource("gr/ebs/gss/resources/help.png")\r
65                 AbstractImagePrototype help();\r
66 \r
67                 @Resource("gr/ebs/gss/resources/pithos-logo.png")\r
68                 AbstractImagePrototype gssLogo();\r
69 \r
70                 @Resource("gr/ebs/gss/resources/grnet-logo.png")\r
71                 AbstractImagePrototype grnetLogo();\r
72         }\r
73 \r
74         /**\r
75          * The menu bar widget.\r
76          */\r
77         private MenuBar menu;\r
78 \r
79         /**\r
80          * The file menu widget.\r
81          */\r
82         private FileMenu fileMenu;\r
83 \r
84         /**\r
85          * The edit menu widget.\r
86          */\r
87         private EditMenu editMenu;\r
88 \r
89         /**\r
90          * The group menu widget.\r
91          */\r
92         private GroupMenu groupMenu;\r
93 \r
94         /**\r
95          * The settings menu widget.\r
96          */\r
97         private SettingsMenu settingsMenu;\r
98 \r
99         /**\r
100          * The help menu widget.\r
101          */\r
102         private HelpMenu helpMenu;\r
103 \r
104         /**\r
105          * The constructor for the top panel.\r
106          *\r
107          * @param images the supplied images\r
108          */\r
109         public TopPanel(Images images) {\r
110                 fileMenu = new FileMenu(images);\r
111                 editMenu = new EditMenu(images);\r
112                 groupMenu = new GroupMenu(images);\r
113                 settingsMenu = new SettingsMenu(images);\r
114                 helpMenu = new HelpMenu(images);\r
115                 HorizontalPanel outer = new HorizontalPanel();\r
116 \r
117                 outer.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);\r
118 \r
119                 menu = new MenuBar();\r
120                 menu.setWidth("100%");\r
121                 menu.setAutoOpen(false);\r
122                 menu.setAnimationEnabled(true);\r
123                 menu.setStyleName("toolbarmenu");\r
124 \r
125                 Command quitCommand = new Command(){\r
126                         public void execute() {\r
127                                 QuitDialog dlg = new QuitDialog();\r
128                                 dlg.center();\r
129                         }\r
130                 };\r
131                 MenuItem quitItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
132                                         images.exit().getHTML() + "</td><td>Quit</td></tr></table>", true, quitCommand);\r
133                 MenuItem fileItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
134                                         images.folder().getHTML() + "</td><td>File</td></tr></table>", true, new MenuBar(true)){\r
135                         @Override\r
136                         public MenuBar getSubMenu() {\r
137                                 return fileMenu.createMenu();\r
138                         }\r
139                 };\r
140                 MenuItem editItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
141                                         images.edit().getHTML() + "</td><td>Edit</td></tr></table>", true, new MenuBar(true)){\r
142                         @Override\r
143                         public MenuBar getSubMenu() {\r
144                                 return editMenu.createMenu();\r
145                         }\r
146                 };\r
147                 MenuItem groupItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
148                                         images.group().getHTML() + "</td><td>Group</td></tr></table>", true,\r
149                                         groupMenu.getContextMenu());\r
150                 MenuItem configureItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
151                                         images.configure().getHTML() + "</td><td>Settings</td></tr></table>",\r
152                                         true,settingsMenu.getContextMenu());\r
153                 MenuItem helpItem = new MenuItem("<table style='font-size: 100%'><tr><td>" +\r
154                                         images.help().getHTML() + "</td><td>Help</td></tr></table>", true, new MenuBar(true)){\r
155                         @Override\r
156                         public MenuBar getSubMenu() {\r
157                                 return helpMenu.createMenu();\r
158                         }\r
159                 };\r
160                 menu.addItem(quitItem);\r
161                 menu.addItem(fileItem);\r
162                 menu.addItem(editItem);\r
163                 menu.addItem(groupItem);\r
164                 menu.addItem(configureItem);\r
165                 menu.addItem(helpItem);\r
166 \r
167                 outer.setSpacing(2);\r
168                 outer.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);\r
169                 outer.setCellVerticalAlignment(menu, HasVerticalAlignment.ALIGN_MIDDLE);\r
170                 outer.add(menu);\r
171                 outer.setStyleName("toolbar");\r
172 \r
173                 HTML logos = new HTML("<table><tr><td><a href='http://pithos.grnet.gr/' target='gss'>" +\r
174                                         images.gssLogo().getHTML() + "</a><a href='http://www.grnet.gr/' " +\r
175                                         "target='grnet'>" + images.grnetLogo().getHTML()+"</a></td></tr></table>");\r
176                 outer.add(logos);\r
177 \r
178                 outer.setCellHorizontalAlignment(logos, HasHorizontalAlignment.ALIGN_RIGHT);\r
179 \r
180                 initWidget(outer);\r
181         }\r
182 \r
183         /**\r
184          * Retrieve the fileMenu.\r
185          *\r
186          * @return the fileMenu\r
187          */\r
188         FileMenu getFileMenu() {\r
189                 return fileMenu;\r
190         }\r
191 \r
192         /**\r
193          * Retrieve the editMenu.\r
194          *\r
195          * @return the editMenu\r
196          */\r
197         EditMenu getEditMenu() {\r
198                 return editMenu;\r
199         }\r
200 }\r