import com.google.gwt.http.client.URL;\r
import com.google.gwt.user.client.Event.NativePreviewEvent;\r
import com.google.gwt.user.client.ui.*;\r
-import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;\r
-import gr.grnet.pithos.web.client.catalog.UserCatalogs;\r
import gr.grnet.pithos.web.client.grouptree.Group;\r
-import gr.grnet.pithos.web.client.grouptree.User;\r
import gr.grnet.pithos.web.client.rest.PostRequest;\r
import gr.grnet.pithos.web.client.rest.RestException;\r
\r
/**\r
* The widget that holds the folderName of the folder.\r
*/\r
- TextBox userDisplayNameTextBox = new TextBox();\r
+ TextBox userName = new TextBox();\r
\r
final VerticalPanel inner;\r
\r
FlexTable generalTable = new FlexTable();\r
generalTable.setText(0, 0, "Username");\r
\r
- generalTable.setWidget(0, 1, userDisplayNameTextBox);\r
+ generalTable.setWidget(0, 1, userName);\r
\r
generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
@Override\r
public void center() {\r
super.center();\r
- userDisplayNameTextBox.setFocus(true);\r
+ userName.setFocus(true);\r
}\r
\r
@Override\r
* Generate an RPC request to create a new folder.\r
*/\r
void addUser() {\r
- final String userDisplayName = userDisplayNameTextBox.getText().trim();\r
- if(userDisplayName.length() == 0) {\r
+ String name = userName.getText().trim();\r
+ if(name.length() == 0) {\r
return;\r
}\r
- if(!Const.EMAIL_REGEX.test(userDisplayName)) {\r
+ if(!Const.EMAIL_REGEX.test(name)) {\r
app.displayWarning("Username must be a valid email address");\r
return;\r
}\r
\r
- // Now get the userID\r
- final String userID = app.getUserIDForDisplayName(userDisplayName);\r
- if(userID != null) {\r
- doAddUser(userID, userDisplayName);\r
- }\r
- else {\r
- // Must call server to obtain userID\r
- new UpdateUserCatalogs(app, null, Helpers.toList(userDisplayName)) {\r
- @Override\r
- public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {\r
- final String userID = updatedUserCatalogs.getUserID(userDisplayName);\r
- if(userID != null) {\r
- doAddUser(userID, userDisplayName);\r
- }\r
- else {\r
- app.displayError("Unknown user " + userDisplayName);\r
- }\r
- }\r
- }.scheduleDeferred();\r
- }\r
- }\r
+ group.addMember(name);\r
+ String path = "?update=";\r
+ PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) {\r
\r
- private void doAddUser(String userID, String userDisplayName) {\r
- final User newUser = new User(userID, userDisplayName, group.getName());\r
- app.LOG("doAddUser() ", newUser);\r
- group.addUser(newUser);\r
- final String path = "?update=";\r
- PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) {\r
@Override\r
public void onSuccess(Resource result) {\r
app.updateGroupNode(group);\r
}\r
};\r
updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());\r
- final String groupMembers = group.encodeUserIDsForXAccountGroup();\r
+ String groupMembers = "";\r
+ for(String u : group.getMembers()) {\r
+ groupMembers += (URL.encodePathSegment(u) + ",");\r
+ }\r
updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), groupMembers);\r
Scheduler.get().scheduleDeferred(updateGroup);\r
}\r
public static final String TRASH_CONTAINER = "trash";
public static final RegExp EMAIL_REGEX = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+[.][A-Z]{2,4}$", "i");
public static final String X_ACCOUNT_GROUP_ = "X-Account-Group-";
- public static final String X_ACCOUNT_CONTAINER_COUNT = "X-Account-Container-Count";
- public static final String X_ACCOUNT_OBJECT_COUNT = "X-Account-Object-Count";
- public static final String X_ACCOUNT_BYTES_USED = "X-Account-Bytes-Used";
- public static final String X_ACCOUNT_POLICY_QUOTA = "X-Account-Policy-Quota";
- public static final String X_ACCOUNT_LAST_LOGIN = "X-Account-Last-Login";
- public static final String LAST_MODIFIED = "Last-Modified";
- public static final String NUMBER_FORMAT_1 = "######.#";
private Const() {}
if (iter.hasNext()) {\r
File f = iter.next();\r
String path = f.getUri();\r
- DeleteRequest deleteFile = new DeleteRequest(app, app.getApiPath(), f.getOwnerID(), URL.encode(path)) {\r
+ DeleteRequest deleteFile = new DeleteRequest(app.getApiPath(), f.getOwnerID(), URL.encode(path)) {\r
@Override\r
public void onSuccess(Resource result) {\r
deleteFile(iter);\r
*/
void sendFeedback() {
final String feedbackURL = otherProperties.get("feedbackUrl");
- PostRequest sendFeedback = new PostRequest(app, "", "", feedbackURL, "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getUserToken()) {
+ PostRequest sendFeedback = new PostRequest("", "", feedbackURL, "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getUserToken()) {
@Override
protected void onUnauthorized(Response response) {
\r
protected void updateMetaData(String api, String owner, final String path, final Map<String, Boolean[]> newPermissions) {\r
if (newPermissions != null) {\r
- PostRequest updateFile = new PostRequest(app, api, owner, path) {\r
+ PostRequest updateFile = new PostRequest(api, owner, path) {\r
@Override\r
public void onSuccess(Resource result) {\r
- HeadRequest<File> headFile = new HeadRequest<File>(app, File.class, app.getApiPath(), file.getOwnerID(), path, file) {\r
+ HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), file.getOwnerID(), path, file) {\r
\r
@Override\r
public void onSuccess(File _result) {\r
\r
if (newFilename != null) {\r
final String path = file.getParent().getUri() + "/" + newFilename;\r
- PutRequest updateFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) {\r
+ PutRequest updateFile = new PutRequest(app.getApiPath(), app.getUserID(), path) {\r
@Override\r
public void onSuccess(Resource result) {\r
updateMetaData(app.getApiPath(), file.getOwnerID(), path, newMeta);\r
\r
protected void updateMetaData(final String api, final String owner, final String path, Map<String, String> newMeta) {\r
if (newMeta != null) {\r
- PostRequest updateFile = new PostRequest(app, api, owner, path + "?update=") {\r
+ PostRequest updateFile = new PostRequest(api, owner, path + "?update=") {\r
@Override\r
public void onSuccess(Resource result) {\r
if (!app.isMySharedSelected())\r
\r
protected void updateMetaData(String api, String owner, final String path, final Boolean published) {\r
if (published != null) {\r
- PostRequest updateFile = new PostRequest(app, api, owner, path) {\r
+ PostRequest updateFile = new PostRequest(api, owner, path) {\r
@Override\r
public void onSuccess(Resource result) {\r
- HeadRequest<File> headFile = new HeadRequest<File>(app, File.class, app.getApiPath(), file.getOwnerID(), path, file) {\r
+ HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), file.getOwnerID(), path, file) {\r
\r
@Override\r
public void onSuccess(File _result) {\r
\r
protected void fetchVersions() {\r
String path = file.getUri() + "?format=json&version=list";\r
- GetRequest<FileVersions> getVersions = new GetRequest<FileVersions>(app, FileVersions.class, app.getApiPath(), file.getOwnerID(), path) {\r
+ GetRequest<FileVersions> getVersions = new GetRequest<FileVersions>(FileVersions.class, app.getApiPath(), file.getOwnerID(), path) {\r
\r
@Override\r
public void onSuccess(FileVersions _result) {\r
\r
protected void updateMetadata(final String path, final Map<String, Boolean[]> newPermissions) {\r
if (newPermissions != null) {\r
- PostRequest updateFolder = new PostRequest(app, app.getApiPath(), folder.getOwnerID(), path) {\r
+ PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwnerID(), path) {\r
@Override\r
public void onSuccess(Resource result) {\r
app.updateFolder(folder.getParent(), false, new Command() {\r
if (t instanceof RestException) {\r
if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder\r
final String path1 = folder.getUri();\r
- PutRequest newFolder = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path1) {\r
+ PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path1) {\r
@Override\r
public void onSuccess(Resource result) {\r
updateMetadata(path, newPermissions);\r
return;\r
}\r
String path = folder.getUri() + "/" + name;\r
- PutRequest createFolder = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path) {\r
+ PutRequest createFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) {\r
@Override\r
public void onSuccess(Resource result) {\r
app.updateFolder(folder, true, new Command() {\r
*/\r
package gr.grnet.pithos.web.client;\r
\r
+import gr.grnet.pithos.web.client.commands.AddUserCommand;\r
+import gr.grnet.pithos.web.client.foldertree.Folder;\r
+import gr.grnet.pithos.web.client.grouptree.Group;\r
+\r
import com.google.gwt.dom.client.NativeEvent;\r
import com.google.gwt.event.dom.client.ClickEvent;\r
import com.google.gwt.event.dom.client.ClickHandler;\r
import com.google.gwt.event.dom.client.KeyDownEvent;\r
import com.google.gwt.user.client.Command;\r
import com.google.gwt.user.client.Event.NativePreviewEvent;\r
-import com.google.gwt.user.client.ui.*;\r
-import gr.grnet.pithos.web.client.commands.AddUserCommand;\r
-import gr.grnet.pithos.web.client.grouptree.Group;\r
+import com.google.gwt.user.client.ui.Anchor;\r
+import com.google.gwt.user.client.ui.Button;\r
+import com.google.gwt.user.client.ui.DialogBox;\r
+import com.google.gwt.user.client.ui.FlexTable;\r
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
+import com.google.gwt.user.client.ui.TextBox;\r
+import com.google.gwt.user.client.ui.VerticalPanel;\r
\r
/**\r
* The 'Folder properties' dialog box implementation.\r
protected Pithos app;\r
\r
private Command callback;\r
-\r
- /**\r
- * The widget that holds the folderName of the folder.\r
- */\r
- TextBox groupNameTextBox = new TextBox();\r
-\r
- final VerticalPanel inner;\r
-\r
- public GroupCreateDialog(final Pithos app) {\r
- this(app, null);\r
- }\r
-\r
- /**\r
- * The widget's constructor.\r
- */\r
- public GroupCreateDialog(final Pithos app, Command callback) {\r
+ \r
+ /**\r
+ * The widget that holds the folderName of the folder.\r
+ */\r
+ TextBox groupName = new TextBox();\r
+\r
+ final VerticalPanel inner;\r
+\r
+ public GroupCreateDialog(final Pithos app) {\r
+ this(app, null);\r
+ }\r
+ \r
+ /**\r
+ * The widget's constructor.\r
+ */\r
+ public GroupCreateDialog(final Pithos app, Command callback) {\r
this.app = app;\r
this.callback = callback;\r
-\r
- Anchor close = new Anchor("close");\r
- close.addStyleName("close");\r
- close.addClickHandler(new ClickHandler() {\r
-\r
- @Override\r
- public void onClick(ClickEvent event) {\r
- hide();\r
- }\r
- });\r
-\r
- setGlassEnabled(true);\r
- setStyleName("pithos-DialogBox");\r
-\r
- // Enable IE selection for the dialog (must disable it upon closing it)\r
- Pithos.enableIESelection();\r
-\r
- // Use this opportunity to set the dialog's caption.\r
- setText("Create group");\r
-\r
- // Outer contains inner and buttons\r
- VerticalPanel outer = new VerticalPanel();\r
- outer.add(close);\r
- // Inner contains generalPanel and permPanel\r
- inner = new VerticalPanel();\r
- inner.addStyleName("inner");\r
-\r
- VerticalPanel generalPanel = new VerticalPanel();\r
+ \r
+ Anchor close = new Anchor("close");\r
+ close.addStyleName("close");\r
+ close.addClickHandler(new ClickHandler() {\r
+ \r
+ @Override\r
+ public void onClick(ClickEvent event) {\r
+ hide();\r
+ }\r
+ });\r
+\r
+ setGlassEnabled(true);\r
+ setStyleName("pithos-DialogBox");\r
+\r
+ // Enable IE selection for the dialog (must disable it upon closing it)\r
+ Pithos.enableIESelection();\r
+\r
+ // Use this opportunity to set the dialog's caption.\r
+ setText("Create group");\r
+\r
+ // Outer contains inner and buttons\r
+ VerticalPanel outer = new VerticalPanel();\r
+ outer.add(close);\r
+ // Inner contains generalPanel and permPanel\r
+ inner = new VerticalPanel();\r
+ inner.addStyleName("inner");\r
+\r
+ VerticalPanel generalPanel = new VerticalPanel();\r
FlexTable generalTable = new FlexTable();\r
generalTable.setText(0, 0, "Name");\r
\r
- generalTable.setWidget(0, 1, groupNameTextBox);\r
+ generalTable.setWidget(0, 1, groupName);\r
\r
generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
\r
outer.add(inner);\r
\r
- // Create the 'Create/Update' button, along with a listener that hides the dialog\r
- // when the button is clicked and quits the application.\r
- String okLabel = "Create";\r
- final Button ok = new Button(okLabel, new ClickHandler() {\r
- @Override\r
- public void onClick(ClickEvent event) {\r
- createGroup();\r
- closeDialog();\r
- }\r
- });\r
- ok.addStyleName("button");\r
- outer.add(ok);\r
+ // Create the 'Create/Update' button, along with a listener that hides the dialog\r
+ // when the button is clicked and quits the application.\r
+ String okLabel = "Create";\r
+ final Button ok = new Button(okLabel, new ClickHandler() {\r
+ @Override\r
+ public void onClick(ClickEvent event) {\r
+ createGroup();\r
+ closeDialog();\r
+ }\r
+ });\r
+ ok.addStyleName("button");\r
+ outer.add(ok);\r
outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);\r
\r
setWidget(outer);\r
- }\r
-\r
- @Override\r
- public void center() {\r
- super.center();\r
- groupNameTextBox.setFocus(true);\r
- }\r
-\r
- @Override\r
- protected void onPreviewNativeEvent(NativePreviewEvent preview) {\r
- super.onPreviewNativeEvent(preview);\r
-\r
- NativeEvent evt = preview.getNativeEvent();\r
- if(evt.getType().equals(KeyDownEvent.getType().getName()))\r
- // Use the popup's key preview hooks to close the dialog when either\r
- // enter or escape is pressed.\r
- {\r
- switch(evt.getKeyCode()) {\r
- case KeyCodes.KEY_ENTER:\r
- createGroup();\r
- closeDialog();\r
- break;\r
- case KeyCodes.KEY_ESCAPE:\r
+ }\r
+\r
+ @Override\r
+ public void center() {\r
+ super.center();\r
+ groupName.setFocus(true);\r
+ }\r
+\r
+ @Override\r
+ protected void onPreviewNativeEvent(NativePreviewEvent preview) {\r
+ super.onPreviewNativeEvent(preview);\r
+\r
+ NativeEvent evt = preview.getNativeEvent();\r
+ if (evt.getType().equals(KeyDownEvent.getType().getName()))\r
+ // Use the popup's key preview hooks to close the dialog when either\r
+ // enter or escape is pressed.\r
+ switch (evt.getKeyCode()) {\r
+ case KeyCodes.KEY_ENTER:\r
+ createGroup();\r
closeDialog();\r
- break;\r
- }\r
- }\r
- }\r
-\r
-\r
- /**\r
- * Enables IE selection prevention and hides the dialog\r
- * (we disable the prevention on creation of the dialog)\r
- */\r
- public void closeDialog() {\r
- Pithos.preventIESelection();\r
- hide();\r
- if(callback != null) {\r
- callback.execute();\r
- }\r
- }\r
-\r
- /**\r
- * Generate an RPC request to create a new folder.\r
- */\r
- void createGroup() {\r
- final String groupName = groupNameTextBox.getText().trim();\r
- if(groupName.length() == 0) {\r
- return;\r
- }\r
- Group group = app.addGroup(groupName);\r
-\r
- new AddUserCommand(app, null, group).execute();\r
- }\r
+ break;\r
+ case KeyCodes.KEY_ESCAPE:\r
+ closeDialog();\r
+ break;\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * Enables IE selection prevention and hides the dialog\r
+ * (we disable the prevention on creation of the dialog)\r
+ */\r
+ public void closeDialog() {\r
+ Pithos.preventIESelection();\r
+ hide();\r
+ if (callback != null)\r
+ callback.execute();\r
+ }\r
+\r
+ /**\r
+ * Generate an RPC request to create a new folder.\r
+ */\r
+ void createGroup() {\r
+ String name = groupName.getText().trim();\r
+ if (name.length() == 0)\r
+ return;\r
+ Group group = app.addGroup(name);\r
+ \r
+ new AddUserCommand(app, null, group).execute();\r
+ }\r
}\r
*/
package gr.grnet.pithos.web.client;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.json.client.JSONObject;
import gr.grnet.pithos.web.client.FilePermissionsDialog.Images;
import java.util.HashMap;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
+import gr.grnet.pithos.web.client.catalog.GetUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UserCatalogs;
new UpdateUserCatalogs(app, userID) {
@Override
public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
- final String displayName = updatedUserCatalogs.getUserDisplayName(userID);
+ final String displayName = updatedUserCatalogs.getDisplayName(userID);
permTable.setHTML(
ii,
0,
}
public String getCurrentUserDisplayNameOrID() {
- final String displayName = userCatalogs.getUserDisplayName(getUserID());
+ final String displayName = userCatalogs.getDisplayName(getUserID());
return displayName == null ? getUserID() : displayName;
}
public boolean hasUserDisplayNameForID(String userID) {
- return userCatalogs.getUserDisplayName(userID) != null;
- }
-
- public boolean hasUserIDForDisplayName(String displayName) {
- return userCatalogs.getUserID(displayName) != null;
+ return userCatalogs.getDisplayName(userID) != null;
}
public String getUserDisplayNameForID(String userID) {
- return userCatalogs.getUserDisplayName(userID);
+ return userCatalogs.getDisplayName(userID);
}
public String getUserIDForDisplayName(String displayName) {
}
final List<String> filtered = new ArrayList<String>();
for(String userID : userIDs) {
- if(!this.userCatalogs.hasUserID(userID)) {
+ if(!this.userCatalogs.hasID(userID)) {
filtered.add(userID);
}
}
}
}-*/;
- public static void LOG(Object ...args) {
+ public static void LOG(String ...args) {
final StringBuilder sb = new StringBuilder();
- for(Object arg : args) {
+ for(String arg : args) {
sb.append(arg);
}
if(sb.length() > 0) {
return true;
}
- HeadRequest<Folder> head = new HeadRequest<Folder>(Pithos.this, Folder.class, getApiPath(), f.getOwnerID(), "/" + f.getContainer()) {
+ HeadRequest<Folder> head = new HeadRequest<Folder>(Folder.class, getApiPath(), f.getOwnerID(), "/" + f.getContainer()) {
@Override
public void onSuccess(Folder _result) {
}
public void fetchAccount(final Command callback) {
- LOG("Pithos::fetchAccount(), callback = ", callback);
String path = "?format=json";
- GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(this, AccountResource.class, getApiPath(), userID, path) {
+ GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, getApiPath(), userID, path) {
@Override
public void onSuccess(AccountResource _result) {
account = _result;
}
public void updateStatistics() {
- HeadRequest<AccountResource> headAccount = new HeadRequest<AccountResource>(this, AccountResource.class, getApiPath(), userID, "", account) {
+ HeadRequest<AccountResource> headAccount = new HeadRequest<AccountResource>(AccountResource.class, getApiPath(), userID, "", account) {
@Override
public void onSuccess(AccountResource _result) {
protected void createHomeContainer(final AccountResource _account, final Command callback) {
String path = "/" + Const.HOME_CONTAINER;
- PutRequest createPithos = new PutRequest(this, getApiPath(), getUserID(), path) {
+ PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) {
@Override
public void onSuccess(Resource result) {
if(!_account.hasTrashContainer()) {
protected void createTrashContainer(final Command callback) {
String path = "/" + Const.TRASH_CONTAINER;
- PutRequest createPithos = new PutRequest(this, getApiPath(), getUserID(), path) {
+ PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) {
@Override
public void onSuccess(Resource result) {
fetchAccount(callback);
final PleaseWaitPopup pwp = new PleaseWaitPopup();
pwp.center();
String path = "/" + folder.getContainer() + "/" + folder.getPrefix() + "?delimiter=/" + "&t=" + System.currentTimeMillis();
- DeleteRequest deleteFolder = new DeleteRequest(this, getApiPath(), folder.getOwnerID(), path) {
+ DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), folder.getOwnerID(), path) {
@Override
protected void onUnauthorized(Response response) {
if(iter.hasNext()) {
File file = iter.next();
String path = targetUri + "/" + file.getName();
- PutRequest copyFile = new PutRequest(this, getApiPath(), targetUsername, path) {
+ PutRequest copyFile = new PutRequest(getApiPath(), targetUsername, path) {
@Override
public void onSuccess(Resource result) {
copyFiles(iter, targetUsername, targetUri, callback);
public void copyFolder(final Folder f, final String targetUsername, final String targetUri, boolean move, final Command callback) {
String path = targetUri + "?delimiter=/";
- PutRequest copyFolder = new PutRequest(this, getApiPath(), targetUsername, path) {
+ PutRequest copyFolder = new PutRequest(getApiPath(), targetUsername, path) {
@Override
public void onSuccess(Resource result) {
if(callback != null) {
groupTreeView.updateGroupNode(null);
}
- public Group addGroup(String groupName) {
- final Group group = new Group(groupName);
- account.addGroup(group);
+ public Group addGroup(String groupname) {
+ Group newGroup = new Group(groupname);
+ account.addGroup(newGroup);
groupTreeView.updateGroupNode(null);
- return group;
+ return newGroup;
}
public void removeGroup(Group group) {
}
}
else {
- HeadRequest<Folder> headFolder = new HeadRequest<Folder>(this, Folder.class, getApiPath(), folder.getOwnerID(), folder.getUri(), folder) {
+ HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, getApiPath(), folder.getOwnerID(), folder.getUri(), folder) {
@Override
public void onSuccess(Folder _result) {
if(t instanceof RestException) {
if(((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
final String path = folder.getUri();
- PutRequest newFolder = new PutRequest(Pithos.this, getApiPath(), folder.getOwnerID(), path) {
+ PutRequest newFolder = new PutRequest(getApiPath(), folder.getOwnerID(), path) {
@Override
public void onSuccess(Resource _result) {
scheduleFolderHeadCommand(folder, callback);
}
public void scheduleFileHeadCommand(File f, final Command callback) {
- HeadRequest<File> headFile = new HeadRequest<File>(this, File.class, getApiPath(), f.getOwnerID(), f.getUri(), f) {
+ HeadRequest<File> headFile = new HeadRequest<File>(File.class, getApiPath(), f.getOwnerID(), f.getUri(), f) {
@Override
public void onSuccess(File _result) {
public void emptyContainer(final Folder container) {
String path = "/" + container.getName() + "?delimiter=/";
- DeleteRequest delete = new DeleteRequest(this, getApiPath(), getUserID(), path) {
+ DeleteRequest delete = new DeleteRequest(getApiPath(), getUserID(), path) {
@Override
protected void onUnauthorized(Response response) {
}-*/;
@SuppressWarnings("unchecked")
- public static <T> T createFromResponse(Pithos app, Class<T> aClass, String owner, Response response, T result) {
+ public static <T> T createFromResponse(Class<T> aClass, String owner, Response response, T result) {
T result1 = null;
if(aClass.equals(AccountResource.class)) {
- result1 = (T) AccountResource.createFromResponse(app, owner, response, (AccountResource) result);
+ result1 = (T) AccountResource.createFromResponse(owner, response, (AccountResource) result);
}
else if(aClass.equals(Folder.class)) {
result1 = (T) Folder.createFromResponse(owner, response, (Folder) result);
void restoreVersion(int version) {
String path = file.getUri() + "?update=";
- PostRequest restoreVersion = new PostRequest(app, app.getApiPath(), file.getOwnerID(), path) {
+ PostRequest restoreVersion = new PostRequest(app.getApiPath(), file.getOwnerID(), path) {
@Override
public void onSuccess(Resource result) {
public void scheduleDeferred() {
Scheduler.get().scheduleDeferred(this);
}
-
- public void scheduleEntry() {
- Scheduler.get().scheduleEntry(this);
- }
}
);
}
- public boolean hasUserID(String id) {
+ public boolean hasID(String id) {
return id2name.containsKey(id);
}
- public boolean hasUserDisplayName(String displayName) {
- return name2id.containsKey(displayName);
+ public boolean hasName(String name) {
+ return name2id.containsKey(name);
}
- public String getUserDisplayName(String userID) {
- return id2name.get(userID);
+ public String getDisplayName(String id) {
+ return id2name.get(id);
}
- public String getUserID(String displayName) {
- return name2id.get(displayName);
+ public String getUserID(String name) {
+ return name2id.get(name);
}
@Override
*/
package gr.grnet.pithos.web.client.commands;
-import gr.grnet.pithos.web.client.Const;
import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import gr.grnet.pithos.web.client.grouptree.Group;
containerPanel.hide();
if (Window.confirm("Are you sure you want to delete group " + group.getName())) {
String path = "?update=";
- PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) {
+ PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) {
@Override
public void onSuccess(Resource result) {
app.sessionExpired();
}
};
- updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
- updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), "~");
+ updateGroup.setHeader("X-Auth-Token", app.getUserToken());
+ updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), "~");
Scheduler.get().scheduleDeferred(updateGroup);
}
}
if (iter.hasNext()) {
File file = iter.next();
String path = folder.getUri() + "/" + file.getName();
- PutRequest copyFile = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path) {
+ PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) {
@Override
public void onSuccess(Resource result) {
moveFiles(iter, callback);
*/
package gr.grnet.pithos.web.client.commands;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.http.client.Response;
-import com.google.gwt.http.client.URL;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.PopupPanel;
-import gr.grnet.pithos.web.client.Const;
import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import gr.grnet.pithos.web.client.grouptree.Group;
import gr.grnet.pithos.web.client.rest.PostRequest;
import gr.grnet.pithos.web.client.rest.RestException;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.PopupPanel;
+
/**
* Display the 'new folder' dialog for creating a new folder.
+ *
*/
public class RemoveUserCommand implements Command {
- private PopupPanel containerPanel;
+ private PopupPanel containerPanel;
User user;
Pithos app;
- /**
- * @param aContainerPanel
- */
- public RemoveUserCommand(Pithos _app, PopupPanel aContainerPanel, User _user) {
+ /**
+ * @param aContainerPanel
+ */
+ public RemoveUserCommand(Pithos _app, PopupPanel aContainerPanel, User _user){
app = _app;
- containerPanel = aContainerPanel;
- user = _user;
- }
-
- @Override
- public void execute() {
- if(containerPanel != null) {
- containerPanel.hide();
- }
- final String groupName = user.getGroup();
- final Group group = app.getAccount().getGroup(groupName);
- if(group == null) {
- return;
- }
- group.removeUser(user);
- String path = "?update=";
- PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) {
-
- @Override
- public void onSuccess(Resource result) {
- app.fetchAccount(new Command() {
-
- @Override
- public void execute() {
- Group updatedGroup2 = app.getAccount().getGroup(groupName);
- if(updatedGroup2 != null) {
- app.updateGroupNode(updatedGroup2);
- }
- else {
- app.updateGroupNode(null);
- }
- }
- });
- }
+ containerPanel = aContainerPanel;
+ user = _user;
+ }
- @Override
- public void onError(Throwable t) {
- GWT.log("", t);
- app.setError(t);
- if(t instanceof RestException) {
- app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText());
- }
- else {
- app.displayError("System error updating group:" + t.getMessage());
- }
- }
+ @Override
+ public void execute() {
+ if (containerPanel != null)
+ containerPanel.hide();
+ final String groupName = user.getGroup();
+ final Group group = app.getAccount().getGroup(groupName);
+ if (group == null)
+ return;
+ group.removeMember(user.getName());
+ String path = "?update=";
+ PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) {
+
+ @Override
+ public void onSuccess(Resource result) {
+ app.fetchAccount(new Command() {
+
+ @Override
+ public void execute() {
+ Group updatedGroup2 = app.getAccount().getGroup(groupName);
+ if (updatedGroup2 != null)
+ app.updateGroupNode(updatedGroup2);
+ else {
+ app.updateGroupNode(null);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("", t);
+ app.setError(t);
+ if (t instanceof RestException) {
+ app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText());
+ }
+ else
+ app.displayError("System error updating group:" + t.getMessage());
+ }
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
- final String groupMembers;
- if(!group.getUsers().isEmpty()) {
- groupMembers = group.encodeUserIDsForXAccountGroup();
- }
- else {
- groupMembers = "~";
- }
- updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), groupMembers);
- Scheduler.get().scheduleDeferred(updateGroup);
- }
+ @Override
+ protected void onUnauthorized(Response response) {
+ app.sessionExpired();
+ }
+ };
+ updateGroup.setHeader("X-Auth-Token", app.getUserToken());
+ String groupMembers = "";
+ if (!group.getMembers().isEmpty()) {
+ for (String u : group.getMembers())
+ groupMembers += (URL.encodePathSegment(u) + ",");
+ }
+ else
+ groupMembers = "~";
+ updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), groupMembers);
+ Scheduler.get().scheduleDeferred(updateGroup);
+ }
}
if (iter.hasNext()) {
File file = iter.next();
String path = "/" + Const.HOME_CONTAINER + "/" + file.getPath();
- PutRequest untrashFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) {
+ PutRequest untrashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) {
@Override
public void onSuccess(Resource result) {
untrashFiles(iter, callback);
if (iter.hasNext()) {
File file = iter.next();
String path = "/" + Const.TRASH_CONTAINER + "/" + file.getPath();
- PutRequest trashFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) {
+ PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) {
@Override
public void onSuccess(Resource result) {
trashFiles(iter, callback);
package gr.grnet.pithos.web.client.foldertree;
+import gr.grnet.pithos.web.client.Const;
+import gr.grnet.pithos.web.client.Resource;
+import gr.grnet.pithos.web.client.grouptree.Group;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
import com.google.gwt.http.client.Header;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
-import gr.grnet.pithos.web.client.Const;
-import gr.grnet.pithos.web.client.Pithos;
-import gr.grnet.pithos.web.client.Resource;
-import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;
-import gr.grnet.pithos.web.client.catalog.UserCatalogs;
-import gr.grnet.pithos.web.client.grouptree.Group;
-import gr.grnet.pithos.web.client.grouptree.User;
-
-import java.util.*;
/**
* Created by IntelliJ IDEA. User: chstath Date: 5/19/11 Time: 2:55 PM To change this template use File | Settings |
* File Templates.
*/
public class AccountResource extends Resource {
- private final Pithos app;
private long numberOfContainers = 0;
private Date lastLogin = null;
private Date lastModified = null;
-
+
private List<Folder> containers = new ArrayList<Folder>();
private Date currentLogin = null;
private List<Group> groups = new ArrayList<Group>();
- public AccountResource(Pithos app) {
- this.app = app;
- }
-
public long getQuota() {
return quota;
}
}
@Override
- public Date getLastModified() {
+ public Date getLastModified() {
return lastModified;
}
this.currentLogin = currentLogin;
}
- private void doAddUsersByIDs(final List<String> userIDs, final String groupName) {
- app.LOG("AccountResource::doAddUsersByIDs(), group = ", groupName);
- final Group group = new Group(groupName);
- for(String userID : userIDs) {
- final String userDisplayName = app.getUserDisplayNameForID(userID);
- final User user = new User(userID, userDisplayName, groupName);
- group.addUser(user);
- app.LOG("AccountResource::doAddUsersByIDs(), user = (", userID, ", ", userDisplayName, ")");
-
- }
- groups.add(group);
-
- }
-
public void populate(String owner, Response response) {
DateTimeFormat df = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822);
groups.clear();
-
- final Map<String, List<String>> parsedGroups = new HashMap<String, List<String>>();
-
- for(Header h : response.getHeaders()) {
- if(h != null) {
- String name = h.getName();
- if(name.startsWith(Const.X_ACCOUNT_GROUP_)) {
- final String groupName = URL.decodePathSegment(name.substring(Const.X_ACCOUNT_GROUP_.length()));
- final String[] users = h.getValue().split(",");
- final List<String> userIDs = new ArrayList<String>();
- for(String user : users) {
- final String userID = URL.decodePathSegment(user).trim();
- userIDs.add(userID);
- }
- parsedGroups.put(groupName, userIDs);
- }
- else if(name.equals(Const.X_ACCOUNT_CONTAINER_COUNT)) {
- numberOfContainers = Long.valueOf(h.getValue());
- }
- else if(name.equals(Const.X_ACCOUNT_OBJECT_COUNT)) {
- numberOfObjects = Long.valueOf(h.getValue());
- }
- else if(name.equals(Const.X_ACCOUNT_BYTES_USED)) {
- bytesUsed = Long.valueOf(h.getValue());
- }
- else if(name.equals(Const.X_ACCOUNT_POLICY_QUOTA)) {
- quota = Long.valueOf(h.getValue());
- }
- else if(name.equals(Const.X_ACCOUNT_LAST_LOGIN)) {
- lastLogin = df.parse(h.getValue());
- }
- else if(name.equals(Const.LAST_MODIFIED)) {
- lastModified = df.parse(h.getValue());
- }
- }
- }
-
- // Gather all unknown users for the groups
- final List<String> userIDsWithUnknownDisplayName = new ArrayList<String>();
- for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
- final List<String> groupUserIDs = parsedGroupEntry.getValue();
- userIDsWithUnknownDisplayName.addAll(app.filterUserIDsWithUnknownDisplayName(groupUserIDs));
- }
- if(userIDsWithUnknownDisplayName.size() == 0) {
- for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
- final String groupName = parsedGroupEntry.getKey();
- final List<String> groupUserIDs = parsedGroupEntry.getValue();
- doAddUsersByIDs(groupUserIDs, groupName);
- }
- }
- else {
- new UpdateUserCatalogs(app, userIDsWithUnknownDisplayName) {
- @Override
- public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
- for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
- final String groupName = parsedGroupEntry.getKey();
- final List<String> groupUserIDs = parsedGroupEntry.getValue();
- doAddUsersByIDs(groupUserIDs, groupName);
- }
- }
- }.scheduleEntry();
+ for (Header h : response.getHeaders()) {
+ if (h != null) {
+ String name = h.getName();
+ if (name.startsWith("X-Account-Group-")) {
+ String groupName = URL.decodePathSegment(name.substring("X-Account-Group-".length()));
+ Group g = new Group(groupName);
+ String[] members = h.getValue().split(",");
+ for (String s : members)
+ g.addMember(URL.decodePathSegment(s).trim());
+ groups.add(g);
+ }
+ else if (name.equals("X-Account-Container-Count")) {
+ numberOfContainers = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Object-Count")) {
+ numberOfObjects = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Bytes-Used")) {
+ bytesUsed = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Policy-Quota")) {
+ quota = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Last-Login")) {
+ lastLogin = df.parse(h.getValue());
+ }
+ else if (name.equals("Last-Modified")) {
+ lastModified = df.parse(h.getValue());
+ }
+ }
}
- if(response.getText() != null && response.getText().length() > 0) {
- containers.clear();
- JSONValue json = JSONParser.parseStrict(response.getText());
- JSONArray array = json.isArray();
- if(array != null) {
- for(int i = 0; i < array.size(); i++) {
- JSONObject o = array.get(i).isObject();
- if(o != null) {
- Folder f = new Folder();
- f.populate(null, o, owner, null);
- containers.add(f);
- }
- }
- }
+ if (response.getText() != null && response.getText().length() > 0) {
+ containers.clear();
+ JSONValue json = JSONParser.parseStrict(response.getText());
+ JSONArray array = json.isArray();
+ if (array != null) {
+ for (int i=0; i<array.size(); i++) {
+ JSONObject o = array.get(i).isObject();
+ if (o != null) {
+ Folder f = new Folder();
+ f.populate(null, o, owner, null);
+ containers.add(f);
+ }
+ }
+ }
}
}
- public static AccountResource createFromResponse(Pithos app, String owner, Response response, AccountResource result) {
- AccountResource a;
- if(result == null) {
- a = new AccountResource(app);
- }
- else {
- a = result;
- }
+ public static AccountResource createFromResponse(String owner, Response response, AccountResource result) {
+ AccountResource a;
+ if (result == null)
+ a = new AccountResource();
+ else
+ a = result;
a.populate(owner, response);
return a;
}
- private String getSize(Long size, Double division) {
- Double res = Double.valueOf(size.toString()) / division;
- NumberFormat nf = NumberFormat.getFormat(Const.NUMBER_FORMAT_1);
+ private String getSize(Long size, Double division){
+ Double res = Double.valueOf(size.toString())/division;
+ NumberFormat nf = NumberFormat.getFormat("######.#");
return nf.format(res);
}
public String getFileSizeAsString() {
- if(bytesUsed < 1024) {
+ if (bytesUsed < 1024)
return String.valueOf(bytesUsed) + "B";
- }
- else if(bytesUsed < 1024 * 1024) {
+ else if (bytesUsed < 1024*1024)
return getSize(bytesUsed, 1024D) + "KB";
- }
- else if(bytesUsed < 1024 * 1024 * 1024) {
- return getSize(bytesUsed, (1024D * 1024D)) + "MB";
- }
- return getSize(bytesUsed, (1024D * 1024D * 1024D)) + "GB";
+ else if (bytesUsed < 1024*1024*1024)
+ return getSize(bytesUsed,(1024D*1024D)) + "MB";
+ return getSize(bytesUsed , (1024D*1024D*1024D)) + "GB";
}
public String getQuotaAsString() {
- if(quota < 1024) {
+ if (quota < 1024)
return String.valueOf(quota) + "B";
- }
- else if(quota < 1024 * 1024) {
+ else if (quota < 1024 * 1024)
return getSize(quota, 1024D) + "KB";
- }
- else if(quota < 1024 * 1024 * 1024) {
- return getSize(quota, (1024D * 1024D)) + "MB";
- }
- return getSize(quota, (1024D * 1024D * 1024D)) + "GB";
+ else if (quota < 1024 * 1024 * 1024)
+ return getSize(quota,(1024D * 1024D)) + "MB";
+ return getSize(quota , (1024D * 1024D * 1024D)) + "GB";
}
public List<Group> getGroups() {
return groups;
}
-
+
public boolean hasHomeContainer() {
- for(Folder f : containers) {
- if(f.getName().equals(Const.HOME_CONTAINER)) {
- return true;
- }
- }
- return false;
+ for (Folder f : containers)
+ if (f.getName().equals(Const.HOME_CONTAINER))
+ return true;
+ return false;
}
public boolean hasTrashContainer() {
- for(Folder f : containers) {
- if(f.getName().equals(Const.TRASH_CONTAINER)) {
- return true;
- }
- }
- return false;
- }
-
- public void addGroup(Group group) {
- groups.add(group);
- }
-
- public void removeGroup(Group group) {
- groups.remove(group);
+ for (Folder f : containers)
+ if (f.getName().equals(Const.TRASH_CONTAINER))
+ return true;
+ return false;
}
- public Folder getTrash() {
- for(Folder c : containers) {
- if(c.getName().equals(Const.TRASH_CONTAINER)) {
- return c;
- }
- }
- return null;
- }
-
- public double getUsedPercentage() {
- if(quota == 0) {
- return 0;
- }
- return ((double) bytesUsed) / quota;
- }
-
- public Folder getPithos() {
- for(Folder f : containers) {
- if(f.getName().equals(Const.HOME_CONTAINER)) {
- return f;
- }
- }
- return null;
- }
-
- public Group getGroup(String groupName) {
- for(Group g : groups) {
- if(g.getName().equalsIgnoreCase(groupName)) {
- return g;
- }
- }
- return null;
- }
+ public void addGroup(Group newGroup) {
+ groups.add(newGroup);
+ }
+
+ public void removeGroup(Group group) {
+ groups.remove(group);
+ }
+
+ public Folder getTrash() {
+ for (Folder c : containers) {
+ if (c.getName().equals(Const.TRASH_CONTAINER))
+ return c;
+ }
+ return null;
+ }
+
+ public double getUsedPercentage() {
+ if (quota == 0)
+ return 0;
+ return ((double) bytesUsed) / quota;
+ }
+
+ public Folder getPithos() {
+ for (Folder f : containers)
+ if (f.getName().equals(Const.HOME_CONTAINER))
+ return f;
+ return null;
+ }
+
+ public Group getGroup(String groupName) {
+ for (Group g : groups)
+ if (g.getName().equalsIgnoreCase(groupName))
+ return g;
+ return null;
+ }
}
final Folder f = iter.next();
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
@Override
public void onSuccess(Folder _result) {
fetchFolder(iter, callback);
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
@Override
public void onSuccess(final Folder _result) {
if (showfiles)
package gr.grnet.pithos.web.client.grouptree;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
-public final class Group {
- private final String name;
+public class Group {
+ private String name;
- private final List<User> users = new ArrayList<User>();
+ private List<String> members = new ArrayList<String>();
- public Group(String name) {
- this.name = name;
+ public Group(String _name) {
+ name = _name;
}
- public List<User> getUsers() {
- return Collections.unmodifiableList(users);
+ public List<String> getMembers() {
+ return members;
}
public String getName() {
return name;
}
- public void addUser(User user) {
- this.users.add(user);
+ public void addMember(String user) {
+ members.add(user);
}
- public void removeUser(User user) {
- this.users.remove(user);
+ public void removeMember(String username) {
+ members.remove(username);
}
-
- public String encodeUserIDsForXAccountGroup() {
- final StringBuilder sb = new StringBuilder();
- for(int i=0; i<users.size(); i++) {
- final User user = users.get(i);
- sb.append(user.getUserID());
- if(i < users.size() - 1) {
- sb.append(",");
- }
- }
-
- return sb.toString();
- }
-
- @Override
- public String toString() {
- return "Group(" + name + ", " + users.size()+ " users)";
- }
-
}
package gr.grnet.pithos.web.client.grouptree;
+import gr.grnet.pithos.web.client.Pithos;
+import gr.grnet.pithos.web.client.commands.CreateGroupCommand;
+import gr.grnet.pithos.web.client.foldertree.File;
+import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.TreeViewModel;
-import gr.grnet.pithos.web.client.Pithos;
-import gr.grnet.pithos.web.client.commands.CreateGroupCommand;
-import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
public class GroupTreeViewModel implements TreeViewModel {
- final Group CreateGroupPlaceholder = new Group("Create new group...");
protected Pithos app;
- private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
+ private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
- @Override
- public void render(Context context, Group group, SafeHtmlBuilder sb) {
+ @Override
+ public void render(Context context, Group value, SafeHtmlBuilder sb) {
String html = AbstractImagePrototype.create(GroupTreeView.images.group()).getHTML();
sb.appendHtmlConstant(html).appendHtmlConstant(" ");
- sb.append(Templates.INSTANCE.nameSpan(group.getName()));
- }
-
+ sb.append(Templates.INSTANCE.nameSpan(value.getName()));
+ }
+
@Override
public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, Group group, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<Group> valueUpdater) {
- if(!group.equals(CreateGroupPlaceholder)) {
- GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true);
- if(event.getType().equals(ContextMenuEvent.getType().getName())) {
- GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group);
- menu.setPopupPosition(event.getClientX(), event.getClientY());
- menu.show();
- }
- }
+ if (!group.equals(createGroup)) {
+ GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true);
+ if (event.getType().equals(ContextMenuEvent.getType().getName())) {
+ GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group);
+ menu.setPopupPosition(event.getClientX(), event.getClientY());
+ menu.show();
+ }
+ }
}
- };
+ };
private Cell<User> userCell = new AbstractCell<User>(ContextMenuEvent.getType().getName()) {
- @Override
- public void render(Context context, User user, final SafeHtmlBuilder sb) {
+ @Override
+ public void render(Context context, User value, SafeHtmlBuilder sb) {
String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML();
sb.appendHtmlConstant(html).appendHtmlConstant(" ");
- final String userDisplayName = user.getUserDisplayName();
- sb.append(Templates.INSTANCE.nameSpan(userDisplayName));
- }
+ sb.append(Templates.INSTANCE.nameSpan(value.getName()));
+ }
@Override
public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, User user, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<User> valueUpdater) {
GroupTreeViewModel.this.userSelectionModel.setSelected(user, true);
- if(event.getType().equals(ContextMenuEvent.getType().getName())) {
+ if (event.getType().equals(ContextMenuEvent.getType().getName())) {
UserContextMenu menu = new UserContextMenu(app, GroupTreeView.images, user);
menu.setPopupPosition(event.getClientX(), event.getClientY());
menu.show();
protected ListDataProvider<Group> groupsDataProvider = new ListDataProvider<Group>();
protected Map<Group, ListDataProvider<User>> userDataProviderMap = new HashMap<Group, ListDataProvider<User>>();
-
+
SingleSelectionModel<Group> groupSelectionModel;
SingleSelectionModel<User> userSelectionModel;
+
+ final Group createGroup = new Group("Create new group...");
public GroupTreeViewModel(Pithos _app) {
app = _app;
- groupSelectionModel = new SingleSelectionModel<Group>();
- app.addSelectionModel(groupSelectionModel);
- groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
-
- @Override
- public void onSelectionChange(SelectionChangeEvent event) {
- Group selected = groupSelectionModel.getSelectedObject();
- if(selected != null) {
- app.deselectOthers(app.getGroupTreeView(), groupSelectionModel);
- app.showFiles(new HashSet<File>());
- app.disableUploadArea();
- app.upload.setEnabled(false);
- app.showRelevantToolbarButtons();
- if(selected.equals(CreateGroupPlaceholder)) {
- new CreateGroupCommand(app, null).execute();
- groupSelectionModel.setSelected(CreateGroupPlaceholder, false);
- }
- }
- else {
- if(app.getSelectedTree().equals(app.getGroupTreeView())) {
- app.setSelectedTree(null);
- }
- if(app.getSelectedTree() == null) {
- app.showRelevantToolbarButtons();
- }
- }
- }
- });
-
- userSelectionModel = new SingleSelectionModel<User>();
- app.addSelectionModel(userSelectionModel);
- userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
-
- @Override
- public void onSelectionChange(SelectionChangeEvent event) {
- if(userSelectionModel.getSelectedObject() != null) {
- app.deselectOthers(app.getGroupTreeView(), userSelectionModel);
- app.showFiles(new HashSet<File>());
- app.showRelevantToolbarButtons();
- }
- else {
- if(app.getSelectedTree().equals(app.getGroupTreeView())) {
- app.setSelectedTree(null);
- }
- if(app.getSelectedTree() == null) {
- app.showRelevantToolbarButtons();
- }
- }
- }
- });
- }
+ groupSelectionModel = new SingleSelectionModel<Group>();
+ app.addSelectionModel(groupSelectionModel);
+ groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
+
+ @Override
+ public void onSelectionChange(SelectionChangeEvent event) {
+ Group selected = groupSelectionModel.getSelectedObject();
+ if (selected != null) {
+ app.deselectOthers(app.getGroupTreeView(), groupSelectionModel);
+ app.showFiles(new HashSet<File>());
+ app.disableUploadArea();
+ app.upload.setEnabled(false);
+ app.showRelevantToolbarButtons();
+ if (selected.equals(createGroup)) {
+ new CreateGroupCommand(app, null).execute();
+ groupSelectionModel.setSelected(createGroup, false);
+ }
+ }
+ else {
+ if (app.getSelectedTree().equals(app.getGroupTreeView()))
+ app.setSelectedTree(null);
+ if (app.getSelectedTree() == null)
+ app.showRelevantToolbarButtons();
+ }
+ }
+ });
+
+ userSelectionModel = new SingleSelectionModel<User>();
+ app.addSelectionModel(userSelectionModel);
+ userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
+
+ @Override
+ public void onSelectionChange(SelectionChangeEvent event) {
+ if (userSelectionModel.getSelectedObject() != null) {
+ app.deselectOthers(app.getGroupTreeView(), userSelectionModel);
+ app.showFiles(new HashSet<File>());
+ app.showRelevantToolbarButtons();
+ }
+ else {
+ if (app.getSelectedTree().equals(app.getGroupTreeView()))
+ app.setSelectedTree(null);
+ if (app.getSelectedTree() == null)
+ app.showRelevantToolbarButtons();
+ }
+ }
+ });
+}
@Override
public <T> NodeInfo<?> getNodeInfo(T value) {
- app.LOG("GroupTreeViewModel::getNodeInfo(), value = ", value);
- if(value == null) {
- groupsDataProvider.getList().clear();
- groupsDataProvider.getList().addAll(app.getAccount().getGroups());
- groupsDataProvider.getList().add(CreateGroupPlaceholder);
+ if (value == null) {
+ groupsDataProvider.getList().clear();
+ groupsDataProvider.getList().addAll(app.getAccount().getGroups());
+ groupsDataProvider.getList().add(createGroup);
return new DefaultNodeInfo<Group>(groupsDataProvider, groupCell, groupSelectionModel, null);
}
- final Group group = (Group) value;
- if(userDataProviderMap.get(group) == null) {
- userDataProviderMap.put(group, new ListDataProvider<User>());
- }
- final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
- dataProvider.getList().clear();
- final List<User> users = group.getUsers();
- for(User user : users) {
- app.LOG("GroupTreeViewModel::getNodeInfo(), Add ", user);
- dataProvider.getList().add(user);
- }
-
-
- return new DefaultNodeInfo<User>(dataProvider, userCell, userSelectionModel, null);
+ Group g = (Group) value;
+ if (userDataProviderMap.get(g) == null) {
+ userDataProviderMap.put(g, new ListDataProvider<User>());
+ }
+ final ListDataProvider<User> dataProvider = userDataProviderMap.get(g);
+ dataProvider.getList().clear();
+ for (String u : g.getMembers())
+ dataProvider.getList().add(new User(u, g.getName()));
+ return new DefaultNodeInfo<User>(dataProvider, userCell, userSelectionModel, null);
}
- @Override
+ @Override
public boolean isLeaf(Object o) {
- if(o instanceof User) {
- return true;
- }
- else if(o instanceof Group) {
- return ((Group) o).getUsers().isEmpty();
+ if (o instanceof User) {
+ return true;
}
+ else if (o instanceof Group)
+ return ((Group) o).getMembers().isEmpty();
return false;
}
-
- public void updateGroupNode(Group group) {
- if(group == null) {
- groupsDataProvider.getList().clear();
- groupsDataProvider.getList().addAll(app.getAccount().getGroups());
- groupsDataProvider.getList().add(CreateGroupPlaceholder);
- }
- else {
- if(userDataProviderMap.get(group) == null) {
- userDataProviderMap.put(group, new ListDataProvider<User>());
- }
- final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
- dataProvider.getList().clear();
- for(User user : group.getUsers()) {
- app.LOG("GroupTreeViewModel::updateGroupNode(), group = ", group, ". Add ", user);
- dataProvider.getList().add(user);
- }
- }
- }
-
- public Object getSelectedObject() {
- if(groupSelectionModel.getSelectedObject() != null) {
- return groupSelectionModel.getSelectedObject();
- }
- if(userSelectionModel.getSelectedObject() != null) {
- return userSelectionModel.getSelectedObject();
- }
- return null;
- }
+
+ public void updateGroupNode(Group group) {
+ if (group == null) {
+ groupsDataProvider.getList().clear();
+ groupsDataProvider.getList().addAll(app.getAccount().getGroups());
+ groupsDataProvider.getList().add(createGroup);
+ }
+ else {
+ if (userDataProviderMap.get(group) == null) {
+ userDataProviderMap.put(group, new ListDataProvider<User>());
+ }
+ final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
+ dataProvider.getList().clear();
+ for (String u : group.getMembers())
+ dataProvider.getList().add(new User(u, group.getName()));
+ }
+ }
+
+ public Object getSelectedObject() {
+ if (groupSelectionModel.getSelectedObject() != null)
+ return groupSelectionModel.getSelectedObject();
+ if (userSelectionModel.getSelectedObject() != null)
+ return userSelectionModel.getSelectedObject();
+ return null;
+ }
}
package gr.grnet.pithos.web.client.grouptree;
-public final class User {
- private final String userID;
- private final String userDisplayName;
- private final String group;
-
- public User(String userID, String userDisplayName, String group) {
- this.userID = userID;
- this.userDisplayName = userDisplayName;
- this.group = group;
- }
-
- public String getUserID() {
- return userID;
+public class User {
+ private String name;
+
+ private String group;
+
+ public User(String _name, String _group) {
+ name = _name;
+ group = _group;
}
- public String getUserDisplayName() {
- return userDisplayName;
+ public String getName() {
+ return name;
}
- public String getGroup() {
+ public String getGroup() {
return group;
}
-
- @Override
- public boolean equals(Object o) {
- if(this == o) {
- return true;
- }
- if(o == null || getClass() != o.getClass()) {
- return false;
- }
-
- User user = (User) o;
-
- if(group != null ? !group.equals(user.group) : user.group != null) {
- return false;
- }
- if(userID != null ? !userID.equals(user.userID) : user.userID != null) {
- return false;
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = userID != null ? userID.hashCode() : 0;
- result = 31 * result + (group != null ? group.hashCode() : 0);
- return result;
- }
-
- @Override
- public String toString() {
- return "User(" + userID + ", " + userDisplayName + ", " + group + ")";
- }
}
private void fetchSharedContainers(final Command callback) {
String path = "?format=json&shared=&public=";
- GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(app, AccountResource.class, app.getApiPath(), app.getUserID(), path) {
+ GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), app.getUserID(), path) {
@Override
public void onSuccess(final AccountResource _result) {
firstLevelDataProvider.getList().clear();
final Folder f = iter.next();
String path = "/" + f.getContainer() + "?format=json&shared=&public=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
@Override
public void onSuccess(Folder _result) {
fetchFolder(iter, callback);
public void fetchFolder(final Folder f, final boolean showfiles, final Command callback) {
String path = "/" + f.getContainer() + "?format=json&shared=&public=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
@Override
public void onSuccess(final Folder _result) {
for (File file : _result.getFiles()) {
// }-*/;
private void fetchSharingUsers(final Command callback) {
- GetRequest<SharingUsers> getSharingUsers = new GetRequest<SharingUsers>(app, SharingUsers.class, app.getApiPath(), "", "?format=json") {
+ GetRequest<SharingUsers> getSharingUsers = new GetRequest<SharingUsers>(SharingUsers.class, app.getApiPath(), "", "?format=json") {
@Override
public void onSuccess(final SharingUsers _result) {
userLevelDataProviderForIDs.getList().clear();
}
private void fetchSharedContainers(final String userID, final ListDataProvider<Folder> dataProvider, final Command callback) {
- GetRequest<AccountResource> getUserSharedContainers = new GetRequest<AccountResource>(app, AccountResource.class, app.getApiPath(), userID, "?format=json") {
+ GetRequest<AccountResource> getUserSharedContainers = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), userID, "?format=json") {
@Override
public void onSuccess(AccountResource _result) {
final Folder f = folderIterator.next();
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), userID, path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), userID, path, f) {
@Override
public void onSuccess(Folder _result) {
dataProvider.getList().add(_result);
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
@Override
public void onSuccess(final Folder _result) {
if(showfiles) {
package gr.grnet.pithos.web.client.rest;
-import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import java.util.HashMap;
protected static final int MAX_RETRIES = 3;
- private final Pithos app;
-
protected int retries = 0;
private String api;
public abstract void onError(Throwable t);
- public DeleteRequest(Pithos app, String api, String owner, String path) {
- this.app = app;
+ public DeleteRequest(String api, String owner, String path) {
this.api = api;
this.owner = owner;
this.path = path;
@Override
public Resource deserialize(Response response) {
- return Resource.createFromResponse(app, Resource.class, owner, response, null);
+ return Resource.createFromResponse(Resource.class, owner, response, null);
}
@Override
package gr.grnet.pithos.web.client.rest;
-import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import java.util.HashMap;
protected static final int MAX_RETRIES = 3;
- protected int retries = 0;
-
- private final Pithos app;
+ protected int retries = 0;
protected Class<T> resourceClass;
public abstract void onError(Throwable t);
- public GetRequest(Pithos app, Class<T> resourceClass, String api, String owner, String path, int okCode, T result) {
- this.app = app;
+ public GetRequest(Class<T> resourceClass, String api, String owner, String path, int okCode, T result) {
this.resourceClass = resourceClass;
this.api = api;
this.owner = owner;
this.result = result;
}
- public GetRequest(Pithos app, Class<T> resourceClass, String api, String owner, String path) {
- this(app, resourceClass, api, owner, path, -1, null);
+ public GetRequest(Class<T> resourceClass, String api, String owner, String path) {
+ this(resourceClass, api, owner, path, -1, null);
}
- public GetRequest(Pithos app, Class<T> resourceClass, String api, String owner, String path, T result) {
- this(app, resourceClass, api, owner, path, -1, result);
+ public GetRequest(Class<T> resourceClass, String api, String owner, String path, T result) {
+ this(resourceClass, api, owner, path, -1, result);
}
@Override
@Override
public T deserialize(Response response) {
- return Resource.createFromResponse(app, resourceClass, owner, response, result);
+ return Resource.createFromResponse(resourceClass, owner, response, result);
}
@Override
package gr.grnet.pithos.web.client.rest;
-import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import java.util.HashMap;
protected static final int MAX_RETRIES = 3;
- private final Pithos app;
-
protected int retries = 0;
protected Class<T> aClass;
public abstract void onError(Throwable t);
- public HeadRequest(Pithos app, Class<T> aClass, String api, String owner, String path, int okCode, T result) {
- this.app = app;
+ public HeadRequest(Class<T> aClass, String api, String owner, String path, int okCode, T result) {
this.aClass = aClass;
this.api = api;
this.owner = owner;
this.result = result;
}
- public HeadRequest(Pithos app, Class<T> aClass, String api, String owner, String path) {
- this(app, aClass, api, owner, path, Response.SC_NO_CONTENT, null);
+ public HeadRequest(Class<T> aClass, String api, String owner, String path) {
+ this(aClass, api, owner, path, Response.SC_NO_CONTENT, null);
}
- public HeadRequest(Pithos app, Class<T> aClass, String api, String owner, String path, T result) {
- this(app, aClass, api, owner, path, Response.SC_NO_CONTENT, result);
+ public HeadRequest(Class<T> aClass, String api, String owner, String path, T result) {
+ this(aClass, api, owner, path, Response.SC_NO_CONTENT, result);
}
@Override
@Override
public T deserialize(Response response) {
- return Resource.createFromResponse(app, aClass, owner, response, result);
+ return Resource.createFromResponse(aClass, owner, response, result);
}
@Override
package gr.grnet.pithos.web.client.rest;
-import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import java.util.HashMap;
public abstract class PostRequest implements ScheduledCommand {
- private final Pithos app;
-
private String api;
protected String owner;
public abstract void onError(Throwable t);
- public PostRequest(Pithos app, String api, String owner, String path) {
- this.app = app;
+ public PostRequest(String api, String owner, String path) {
this.api = api;
this.owner = owner;
this.path = path;
}
- public PostRequest(Pithos app, String api, String owner, String path, String data) {
- this.app = app;
+ public PostRequest(String api, String owner, String path, String data) {
this.api = api;
this.owner = owner;
this.path = path;
@Override
public Resource deserialize(Response response) {
- return Resource.createFromResponse(app, Resource.class, owner, response, null);
+ return Resource.createFromResponse(Resource.class, owner, response, null);
}
@Override
package gr.grnet.pithos.web.client.rest;
-import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.Resource;
import java.util.HashMap;
public abstract class PutRequest implements ScheduledCommand {
- private final Pithos app;
-
private String api;
protected String owner;
public abstract void onError(Throwable t);
- public PutRequest(Pithos app, String api, String owner, String path) {
- this.app = app;
+ public PutRequest(String api, String owner, String path) {
this.api = api;
this.owner = owner;
this.path = path;
@Override
public Resource deserialize(Response response) {
- return Resource.createFromResponse(app, Resource.class, owner, response, null);
+ return Resource.createFromResponse(Resource.class, owner, response, null);
}
@Override
if (iter.hasNext()) {
Folder f = iter.next();
String path = f.getUri() + "?format=json&meta=" + t.getName();
- GetRequest<Folder> getFolder = new GetRequest<Folder>(app, Folder.class, app.getApiPath(), app.getUserID(), path) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), app.getUserID(), path) {
@Override
public void onSuccess(Folder _result) {
files.addAll(_result.getFiles());