Revision f6cd2099

b/src/gr/grnet/pithos/web/client/FilesPropertiesDialog.java
35 35
package gr.grnet.pithos.web.client;
36 36

  
37 37
import gr.grnet.pithos.web.client.components.TristateCheckBox;
38
import gr.grnet.pithos.web.client.foldertree.File;
39
import gr.grnet.pithos.web.client.foldertree.Folder;
38 40
import gr.grnet.pithos.web.client.rest.MultiplePostCommand;
39 41
import gr.grnet.pithos.web.client.rest.RestException;
40 42
import gr.grnet.pithos.web.client.rest.resource.FileResource;
......
71 73
 */
72 74
public class FilesPropertiesDialog extends AbstractPropertiesDialog {
73 75

  
74
	private final TristateCheckBox versionedCheck;
76
//	private final TristateCheckBox versionedCheck;
75 77

  
76
	private final List<FileResource> files;
78
	private final List<File> files;
77 79

  
78 80
	private Boolean initialVersioned;
79 81

  
......
83 85
	 *
84 86
	 * @param _files
85 87
	 */
86
	public FilesPropertiesDialog(final List<FileResource> _files) {
88
	public FilesPropertiesDialog(GSS _app, final List<File> _files) {
87 89
		super();
88 90

  
89 91
		files = _files;
90
		int versionedNum = 0;
91
		for (FileResource fr : files)
92
			if (fr.isVersioned()) versionedNum++;
93
		Boolean versioned = null;
94
		if (versionedNum==0) versioned = false;
95
		if (versionedNum==files.size()) versioned = true;
96
		initialVersioned = versioned;
97
		versionedCheck = new TristateCheckBox(versioned);
92
//		int versionedNum = 0;
93
//		for (File fr : files)
94
//			if (fr.isVersioned()) versionedNum++;
95
//		Boolean versioned = null;
96
//		if (versionedNum == 0)
97
//            versioned = false;
98
//		if (versionedNum == files.size())
99
//            versioned = true;
100

  
101
//		initialVersioned = versioned;
102
//		versionedCheck = new TristateCheckBox(versioned);
98 103

  
99 104
		// Set the dialog's caption.
100 105
		setText("Files properties");
......
105 110
		// Inner contains generalPanel and permPanel.
106 111
		inner = new DecoratedTabPanel();
107 112
		inner.setAnimationEnabled(true);
108
		final VerticalPanel generalPanel = new VerticalPanel();
109
		final HorizontalPanel buttons = new HorizontalPanel();
110
		final VerticalPanel verPanel = new VerticalPanel();
111
		final HorizontalPanel vPanel = new HorizontalPanel();
112 113

  
113
		inner.add(generalPanel, "General");
114
		inner.add(verPanel, "Versions");
115
		inner.selectTab(0);
114
		inner.add(createGeneralPanel(), "General");
116 115

  
117
		final FlexTable generalTable = new FlexTable();
118
		generalTable.setText(0, 0, String.valueOf(files.size())+" files selected");
119
		generalTable.setText(1, 0, "Folder");
120
		generalTable.setText(2, 0, "Tags");
121
		FileResource firstFile = files.get(0);
122
		if(firstFile.getFolderName() != null)
123
			generalTable.setText(1, 1, firstFile.getFolderName());
124
		else
125
			generalTable.setText(1, 1, "-");
116
        final VerticalPanel verPanel = new VerticalPanel();
126 117

  
127
		// Find if tags are identical
128
		List<String> tagsList = files.get(0).getTags();
129
		List<String> tagss;
130
		for (int i=1; i<files.size(); i++) {
131
			tagss = files.get(i).getTags();
132
			if (tagsList.size() != tagss.size() || !tagsList.containsAll(tagss)) {
133
				tagsList = null;
134
				break;
135
			}
136
		}
137
		// Get the tags.
138
		StringBuffer tagsBuffer = new StringBuffer();
139
		if (tagsList==null)
140
			tagsBuffer.append(MULTIPLE_VALUES_TEXT);
141
		else {
142
			Iterator i = tagsList.iterator();
143
			while (i.hasNext()) {
144
				String tag = (String) i.next();
145
				tagsBuffer.append(tag).append(", ");
146
			}
147
			if (tagsBuffer.length() > 1)
148
				tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);
149
		}
150
		initialTagText = tagsBuffer.toString();
151
		tags.setText(initialTagText);
152
		tags.addFocusHandler(new FocusHandler() {
153
			@Override
154
			public void onFocus(FocusEvent event) {
155
				if (MULTIPLE_VALUES_TEXT.equals(tags.getText()))
156
					tags.setText("");
157
			}
158
		}
159
		);
118
//        final HorizontalPanel vPanel = new HorizontalPanel();
119
//        vPanel.setSpacing(8);
120
//        vPanel.addStyleName("pithos-TabPanelBottom");
121
//        vPanel.add(new Label("Versioned"));
122
//        vPanel.add(versionedCheck);
123
//
124
//        verPanel.add(vPanel);
160 125

  
161
		generalTable.setWidget(2, 1, tags);
162
		generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
163
		generalTable.getFlexCellFormatter().setColSpan(0, 0, 2);
164
		generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
165
		generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");
166
		generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");
167
		generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");
168
		generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");
169
		generalTable.setCellSpacing(4);
126
		inner.add(verPanel, "Versions");
127
		inner.selectTab(0);
128
        outer.add(inner);
170 129

  
130
        final HorizontalPanel buttons = new HorizontalPanel();
171 131
		// Create the 'OK' button, along with a listener that hides the dialog
172 132
		// when the button is clicked.
173 133
		final Button ok = new Button("OK", new ClickHandler() {
......
191 151
		buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
192 152
		buttons.setSpacing(8);
193 153
		buttons.addStyleName("pithos-TabPanelBottom");
154
		outer.add(buttons);
155
		outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);
156
		outer.addStyleName("pithos-TabPanelBottom");
194 157

  
195
		generalPanel.add(generalTable);
158
		focusPanel.setFocus(true);
159
		setWidget(outer);
160
	}
196 161

  
197
		// Asynchronously retrieve the tags defined by this user.
198
		DeferredCommand.addCommand(new Command() {
162
    private VerticalPanel createGeneralPanel() {
163
        VerticalPanel generalPanel = new VerticalPanel();
199 164

  
200
			@Override
201
			public void execute() {
202
				updateTags();
203
			}
204
		});
165
        final FlexTable generalTable = new FlexTable();
166
        generalTable.setText(0, 0, String.valueOf(files.size())+" files selected");
167
        generalTable.setText(1, 0, "Folder");
168
        generalTable.setText(2, 0, "Tags");
169
        Folder parent = files.get(0).getParent();
170
        if(parent != null)
171
            generalTable.setText(1, 1, parent.getName());
172
        else
173
            generalTable.setText(1, 1, "-");
174

  
175
		// Find if tags are identical
176
//		List<String> tagsList = files.get(0).getTags();
177
//		List<String> tagss;
178
//		for (int i=1; i<files.size(); i++) {
179
//			tagss = files.get(i).getTags();
180
//			if (tagsList.size() != tagss.size() || !tagsList.containsAll(tagss)) {
181
//				tagsList = null;
182
//				break;
183
//			}
184
//		}
185
//		// Get the tags.
186
//		StringBuffer tagsBuffer = new StringBuffer();
187
//		if (tagsList==null)
188
//			tagsBuffer.append(MULTIPLE_VALUES_TEXT);
189
//		else {
190
//			Iterator i = tagsList.iterator();
191
//			while (i.hasNext()) {
192
//				String tag = (String) i.next();
193
//				tagsBuffer.append(tag).append(", ");
194
//			}
195
//			if (tagsBuffer.length() > 1)
196
//				tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);
197
//		}
198
//		initialTagText = tagsBuffer.toString();
199
//		tags.setText(initialTagText);
200
//		tags.addFocusHandler(new FocusHandler() {
201
//			@Override
202
//			public void onFocus(FocusEvent event) {
203
//				if (MULTIPLE_VALUES_TEXT.equals(tags.getText()))
204
//					tags.setText("");
205
//			}
206
//		}
207
//		);
208
//
209
//		generalTable.setWidget(2, 1, tags);
210
		generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
211
		generalTable.getFlexCellFormatter().setColSpan(0, 0, 2);
212
		generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
213
		generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");
214
		generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");
215
		generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");
216
		generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");
217
		generalTable.setCellSpacing(4);
218

  
219
        generalPanel.add(generalTable);
220

  
221
		// Asynchronously retrieve the tags defined by this user.
222
//		DeferredCommand.addCommand(new Command() {
223
//
224
//			@Override
225
//			public void execute() {
226
//				updateTags();
227
//			}
228
//		});
205 229

  
206 230
		DisclosurePanel allTags = new DisclosurePanel("All tags");
207 231
		allTagsContent = new FlowPanel();
......
209 233
		generalPanel.add(allTags);
210 234
		generalPanel.setSpacing(4);
211 235

  
212

  
213
		vPanel.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
214
		vPanel.setSpacing(8);
215
		vPanel.addStyleName("pithos-TabPanelBottom");
216
		vPanel.add(new Label("Versioned"));
217

  
218
		vPanel.add(versionedCheck);
219
		verPanel.add(vPanel);
220
		outer.add(inner);
221
		outer.add(buttons);
222
		outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);
223
		outer.addStyleName("pithos-TabPanelBottom");
224

  
225
		focusPanel.setFocus(true);
226
		setWidget(outer);
227
	}
228

  
236
        return generalPanel;
237
    }
229 238

  
230 239
	/**
231 240
	 * Accepts any change and updates the file
......
233 242
	 */
234 243
	@Override
235 244
	protected void accept() {
236
		JSONObject json = new JSONObject();
237
		if ( versionedCheck.getState()!=null && !versionedCheck.getState().equals(initialVersioned) )
238
				json.put("versioned", JSONBoolean.getInstance(versionedCheck.getState()));
239

  
240
		JSONArray taga = new JSONArray();
241
		int i = 0;
242
		String tagText = tags.getText();
243
		if (!MULTIPLE_VALUES_TEXT.equals(tagText) && !initialTagText.equals(tagText)) {
244
			String[] tagset = tagText.split(",");
245
			for (String t : tagset) {
246
				JSONString to = new JSONString(t);
247
				taga.set(i, to);
248
				i++;
249
			}
250
			json.put("tags", taga);
251
		}
252
		String jsonString = json.toString();
253
		if(jsonString.equals("{}")){
254
			GWT.log("NO CHANGES", null);
255
			return;
256
		}
257
		final List<String> fileIds = new ArrayList<String>();
258
		for(FileResource f : files)
259
			fileIds.add(f.getUri()+"?update=");
260
		MultiplePostCommand rt = new MultiplePostCommand(fileIds.toArray(new String[0]), jsonString, 200){
261

  
262
			@Override
263
			public void onComplete() {
264
				GSS.get().getTreeView().refreshCurrentNode(false);
265
			}
266

  
267
			@Override
268
			public void onError(String p, Throwable t) {
269
				GWT.log("", t);
270
				if(t instanceof RestException){
271
					int statusCode = ((RestException)t).getHttpStatusCode();
272
					if(statusCode == 405)
273
						GSS.get().displayError("You don't have the necessary permissions");
274
					else if(statusCode == 404)
275
						GSS.get().displayError("File does not exist");
276
					else if(statusCode == 409)
277
						GSS.get().displayError("A file with the same name already exists");
278
					else if(statusCode == 413)
279
						GSS.get().displayError("Your quota has been exceeded");
280
					else
281
						GSS.get().displayError("Unable to modify file::"+((RestException)t).getHttpStatusText());
282
				}
283
				else
284
					GSS.get().displayError("System error modifying file:"+t.getMessage());
285
			}
286
		};
287
		DeferredCommand.addCommand(rt);
245
//		JSONObject json = new JSONObject();
246
//		if ( versionedCheck.getState()!=null && !versionedCheck.getState().equals(initialVersioned) )
247
//				json.put("versioned", JSONBoolean.getInstance(versionedCheck.getState()));
248
//
249
//		JSONArray taga = new JSONArray();
250
//		int i = 0;
251
//		String tagText = tags.getText();
252
//		if (!MULTIPLE_VALUES_TEXT.equals(tagText) && !initialTagText.equals(tagText)) {
253
//			String[] tagset = tagText.split(",");
254
//			for (String t : tagset) {
255
//				JSONString to = new JSONString(t);
256
//				taga.set(i, to);
257
//				i++;
258
//			}
259
//			json.put("tags", taga);
260
//		}
261
//		String jsonString = json.toString();
262
//		if(jsonString.equals("{}")){
263
//			GWT.log("NO CHANGES", null);
264
//			return;
265
//		}
266
//		final List<String> fileIds = new ArrayList<String>();
267
//		for(FileResource f : files)
268
//			fileIds.add(f.getUri()+"?update=");
269
//		MultiplePostCommand rt = new MultiplePostCommand(fileIds.toArray(new String[0]), jsonString, 200){
270
//
271
//			@Override
272
//			public void onComplete() {
273
//				GSS.get().getTreeView().refreshCurrentNode(false);
274
//			}
275
//
276
//			@Override
277
//			public void onError(String p, Throwable t) {
278
//				GWT.log("", t);
279
//				if(t instanceof RestException){
280
//					int statusCode = ((RestException)t).getHttpStatusCode();
281
//					if(statusCode == 405)
282
//						GSS.get().displayError("You don't have the necessary permissions");
283
//					else if(statusCode == 404)
284
//						GSS.get().displayError("File does not exist");
285
//					else if(statusCode == 409)
286
//						GSS.get().displayError("A file with the same name already exists");
287
//					else if(statusCode == 413)
288
//						GSS.get().displayError("Your quota has been exceeded");
289
//					else
290
//						GSS.get().displayError("Unable to modify file::"+((RestException)t).getHttpStatusText());
291
//				}
292
//				else
293
//					GSS.get().displayError("System error modifying file:"+t.getMessage());
294
//			}
295
//		};
296
//		DeferredCommand.addCommand(rt);
288 297
	}
289

  
290

  
291 298
}
b/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java
114 114
        else if (resource instanceof List) {
115 115
            List<File> files = (List<File>) resource;
116 116
            if (files.size() > 1) {
117
//                FilesPropertiesDialog dlg = new FilesPropertiesDialog(files);
118
//                dlg.selectTab(tabToShow);
119
//                dlg.center();
117
                FilesPropertiesDialog dlg = new FilesPropertiesDialog(app, files);
118
                dlg.selectTab(tabToShow);
119
                dlg.center();
120 120
            }
121 121
            else {
122 122
                FilePropertiesDialog dlg = new FilePropertiesDialog(app, files.get(0));

Also available in: Unified diff