Revision b3832e45 src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java

b/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java
45 45
import gr.grnet.pithos.web.client.foldertree.Folder;
46 46
import gr.grnet.pithos.web.client.foldertree.Resource;
47 47
import gr.grnet.pithos.web.client.rest.HeadRequest;
48
import gr.grnet.pithos.web.client.rest.PutRequest;
48 49
import gr.grnet.pithos.web.client.rest.RestException;
49 50

  
50 51
import java.util.List;
......
91 92
		    containerPanel.hide();
92 93

  
93 94
        if (resource instanceof Folder) {
94
            Folder folder = (Folder) resource;
95
            final Folder folder = (Folder) resource;
95 96
            switch (tabToShow) {
96 97
				case PROPERTIES:
97 98
					FolderPropertiesDialog dlg = new FolderPropertiesDialog(app, false, folder);
98 99
					dlg.center();
99 100
					break;
100 101
				case PERMISSIONS:
101
					FolderPermissionsDialog dlg1 = new FolderPermissionsDialog(app, folder);
102
					dlg1.center();
102
					final FolderPermissionsDialog dlg1 = new FolderPermissionsDialog(app, folder);
103
					scheduleFolderHeadCommand(folder, dlg1);
103 104
					break;
104 105
				default:
105 106
					break;
......
113 114
                dlg.center();
114 115
            }
115 116
            else {
117
				File f = files.get(0);
118
				PopupPanel dlg = null;
116 119
            	switch (tabToShow) {
117 120
					case PROPERTIES:
118
						File f = files.get(0);
119
		                final FilePropertiesDialog dlg = new FilePropertiesDialog(app, f);
120
		                HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), f.getOwner(), f.getUri(), f) {
121

  
122
		                	@Override
123
		                	public void onSuccess(File _result) {
124
		                		dlg.center();
125
		                	}
126

  
127
							@Override
128
							public void onError(Throwable t) {
129
			                    GWT.log("Error heading file", t);
130
								app.setError(t);
131
			                    if (t instanceof RestException)
132
			                        app.displayError("Error heading file: " + ((RestException) t).getHttpStatusText());
133
			                    else
134
			                        app.displayError("System error heading folder: " + t.getMessage());
135
							}
136

  
137
							@Override
138
							protected void onUnauthorized(Response response) {
139
								app.sessionExpired();
140
							}
141
						};
142
						headFile.setHeader("X-Auth-Token", app.getToken());
143
						Scheduler.get().scheduleDeferred(headFile);
121
		                dlg = new FilePropertiesDialog(app, f);
122
		                scheduleFileHeadCommand(f, dlg);
144 123
						break;
145 124
					case PERMISSIONS:
146
		                FilePermissionsDialog dlg1 = new FilePermissionsDialog(app, files.get(0));
147
		                dlg1.center();
125
		                dlg = new FilePermissionsDialog(app, f);
126
		                scheduleFileHeadCommand(f, dlg);
148 127
						break;
149 128
					case VERSIONS:
150 129
		                FileVersionsDialog dlg2 = new FileVersionsDialog(app, files.get(0));
......
156 135
            }
157 136
        }
158 137
	}
138

  
139
	private void scheduleFileHeadCommand(File f, final PopupPanel dlg) {
140
		HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), f.getOwner(), f.getUri(), f) {
141

  
142
			@Override
143
			public void onSuccess(File _result) {
144
				dlg.center();
145
			}
146

  
147
			@Override
148
			public void onError(Throwable t) {
149
		        GWT.log("Error heading file", t);
150
				app.setError(t);
151
		        if (t instanceof RestException)
152
		            app.displayError("Error heading file: " + ((RestException) t).getHttpStatusText());
153
		        else
154
		            app.displayError("System error heading file: " + t.getMessage());
155
			}
156

  
157
			@Override
158
			protected void onUnauthorized(Response response) {
159
				app.sessionExpired();
160
			}
161
		};
162
		headFile.setHeader("X-Auth-Token", app.getToken());
163
		Scheduler.get().scheduleDeferred(headFile);
164
	}
165
	
166
	void scheduleFolderHeadCommand(final Folder folder, final FolderPermissionsDialog dlg) {
167
		HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, app.getApiPath(), folder.getOwner(), folder.getUri(), folder) {
168

  
169
			@Override
170
			public void onSuccess(Folder _result) {
171
				dlg.center();
172
			}
173

  
174
			@Override
175
			public void onError(Throwable t) {
176
		        if (t instanceof RestException) {
177
		        	if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
178
                        final String path = folder.getUri();
179
                        PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path) {
180
                            @Override
181
                            public void onSuccess(Resource _result) {
182
                            	scheduleFolderHeadCommand(folder, dlg);
183
                            }
184

  
185
                            @Override
186
                            public void onError(Throwable _t) {
187
                                GWT.log("", _t);
188
        						app.setError(_t);
189
                                if(_t instanceof RestException){
190
                                    app.displayError("Unable to create folder: " + ((RestException) _t).getHttpStatusText());
191
                                }
192
                                else
193
                                    app.displayError("System error creating folder: " + _t.getMessage());
194
                            }
195

  
196
            				@Override
197
            				protected void onUnauthorized(Response response) {
198
            					app.sessionExpired();
199
            				}
200
                        };
201
                        newFolder.setHeader("X-Auth-Token", app.getToken());
202
                        newFolder.setHeader("Content-Type", "application/folder");
203
                        newFolder.setHeader("Accept", "*/*");
204
                        newFolder.setHeader("Content-Length", "0");
205
                        Scheduler.get().scheduleDeferred(newFolder);
206
		        	}
207
		        	else
208
		        		app.displayError("Error heading folder: " + ((RestException) t).getHttpStatusText());
209
		        }
210
		        else
211
		            app.displayError("System error heading folder: " + t.getMessage());
212

  
213
		        GWT.log("Error heading folder", t);
214
				app.setError(t);
215
			}
216

  
217
			@Override
218
			protected void onUnauthorized(Response response) {
219
				app.sessionExpired();
220
			}
221
		};
222
		headFolder.setHeader("X-Auth-Token", app.getToken());
223
		Scheduler.get().scheduleDeferred(headFolder);
224
	}
159 225
}

Also available in: Unified diff