Skip to content

Commit

Permalink
Merge 5afa1a5 into c7afbad
Browse files Browse the repository at this point in the history
  • Loading branch information
childers committed Oct 11, 2018
2 parents c7afbad + 5afa1a5 commit 8410635
Show file tree
Hide file tree
Showing 5 changed files with 279 additions and 30 deletions.
177 changes: 147 additions & 30 deletions src/gwt/org/bbop/apollo/gwt/client/GroupPanel.java
Expand Up @@ -46,6 +46,25 @@
import java.util.Comparator;
import java.util.List;

//Adding
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.NoSelectionModel;
import com.google.gwt.view.client.Range;
import org.gwtbootstrap3.client.ui.Input;
import org.gwtbootstrap3.client.ui.Row;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.AbstractSafeHtmlRenderer;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import org.bbop.apollo.gwt.client.dto.GroupInfoConverter;
import com.google.gwt.user.cellview.client.ColumnSortList;


/**
* Created by ndunn on 12/17/14.
*/
Expand Down Expand Up @@ -92,19 +111,24 @@ interface UserGroupBrowserPanelUiBinder extends UiBinder<Widget, GroupPanel> {
MultipleSelect availableGroupAdmin;
@UiField
Button updateGroupAdmin;
@UiField
org.gwtbootstrap3.client.ui.TextBox nameSearchBox;

private ListDataProvider<GroupInfo> dataProvider = new ListDataProvider<>();
private List<GroupInfo> groupInfoList = dataProvider.getList();
// private ListDataProvider<GroupInfo> dataProvider = new ListDataProvider<>();
// private List<GroupInfo> groupInfoList = dataProvider.getList();
private SingleSelectionModel<GroupInfo> selectionModel = new SingleSelectionModel<>();
private GroupInfo selectedGroupInfo;
private ColumnSortEvent.ListHandler<GroupInfo> groupSortHandler = new ColumnSortEvent.ListHandler<>(groupInfoList);
// private ColumnSortEvent.ListHandler<GroupInfo> groupSortHandler = new ColumnSortEvent.ListHandler<>(groupInfoList);
private List<UserInfo> allUsersList = new ArrayList<>();


private ListDataProvider<GroupOrganismPermissionInfo> permissionProvider = new ListDataProvider<>();
private List<GroupOrganismPermissionInfo> permissionProviderList = permissionProvider.getList();
private ColumnSortEvent.ListHandler<GroupOrganismPermissionInfo> sortHandler = new ColumnSortEvent.ListHandler<GroupOrganismPermissionInfo>(permissionProviderList);

private AsyncDataProvider<GroupInfo> dataProvider2;


public GroupPanel() {
initWidget(ourUiBinder.createAndBindUi(this));
availableUsers.getElement().setAttribute("data-dropup-auto", Boolean.toString(false));
Expand All @@ -130,10 +154,10 @@ public Integer getValue(GroupInfo object) {
dataGrid.addColumn(firstNameColumn, "Name");
dataGrid.addColumn(secondNameColumn, "Users");

dataProvider.addDataDisplay(dataGrid);
dataGrid.setSelectionModel(selectionModel);
organismPager.setDisplay(organismPermissionsGrid);
pager.setDisplay(dataGrid);
// dataProvider.addDataDisplay(dataGrid);
// dataGrid.setSelectionModel(selectionModel);
// organismPager.setDisplay(organismPermissionsGrid);
// pager.setDisplay(dataGrid);


selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
Expand All @@ -143,20 +167,68 @@ public void onSelectionChange(SelectionChangeEvent event) {
}
});

dataGrid.addColumnSortHandler(groupSortHandler);
groupSortHandler.setComparator(firstNameColumn, new Comparator<GroupInfo>() {
@Override
public int compare(GroupInfo o1, GroupInfo o2) {
return o1.getName().compareTo(o2.getName());
}
});
groupSortHandler.setComparator(secondNameColumn, new Comparator<GroupInfo>() {

//ADDING
dataProvider2 = new AsyncDataProvider<GroupInfo>() {
@Override
public int compare(GroupInfo o1, GroupInfo o2) {
return o1.getNumberOfUsers() - o2.getNumberOfUsers();
protected void onRangeChanged(HasData<GroupInfo> display) {
final Range range = display.getVisibleRange();
final ColumnSortList sortList = dataGrid.getColumnSortList();
final int start = range.getStart();
final int length = range.getLength();

RequestCallback requestCallback = new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
JSONArray jsonArray = JSONParser.parseLenient(response.getText()).isArray();
Integer groupCount = 0;
if (jsonArray != null && jsonArray.size() > 0) {
JSONObject jsonObject = jsonArray.get(0).isObject();
groupCount = (int) jsonObject.get("groupCount").isNumber().doubleValue();

if (jsonObject.containsKey("searchName") && jsonObject.get("searchName").isString() != null) {
String searchName = jsonObject.get("searchName").isString().stringValue();
if (searchName.trim().length() > 0 && !searchName.trim().equals(nameSearchBox.getText().trim())) {
return;
}
}
}
dataGrid.setRowCount(groupCount, true);
//adding
dataGrid.setRowData(start, GroupInfoConverter.convertFromJsonArray(jsonArray));
//end
}

@Override
public void onError(Request request, Throwable exception) {
Bootbox.alert("error getting sequence info: " + exception);
}
};


ColumnSortList.ColumnSortInfo nameSortInfo = sortList.get(0);
if (nameSortInfo.getColumn().isSortable()) {
Column<GroupInfo, ?> sortColumn = (Column<GroupInfo, ?>) sortList.get(0).getColumn();
Integer columnIndex = dataGrid.getColumnIndex(sortColumn);
String searchColumnString = columnIndex == 0 ? "name" : columnIndex == 1 ? "users" : "";
Boolean sortNameAscending = nameSortInfo.isAscending();
GroupRestService.loadGroups(requestCallback, start, length, nameSearchBox.getText(), searchColumnString, sortNameAscending);
//ending
}
}
};

});

ColumnSortEvent.AsyncHandler columnSortHandler = new ColumnSortEvent.AsyncHandler(dataGrid);
dataGrid.addColumnSortHandler(columnSortHandler);
dataGrid.getColumnSortList().push(firstNameColumn);
dataGrid.getColumnSortList().push(secondNameColumn);

dataGrid.setSelectionModel(selectionModel);
organismPager.setDisplay(organismPermissionsGrid);
dataProvider2.addDataDisplay(dataGrid);
pager.setDisplay(dataGrid);
//end


createOrganismPermissionsTable();
Expand Down Expand Up @@ -194,9 +266,10 @@ public void onGroupChanged(GroupChangeEvent userChangeEvent) {
@Override
public boolean execute() {
if (MainPanel.getInstance().getCurrentUser() != null) {
if(MainPanel.getInstance().isCurrentUserInstructorOrBetter()) {
GroupRestService.loadGroups(groupInfoList);
UserRestService.loadUsers(allUsersList);
if (MainPanel.getInstance().isCurrentUserInstructorOrBetter()) {
reload();
// GroupRestService.loadGroups(groupInfoList);
// UserRestService.loadUsers(allUsersList);
}
return false;
}
Expand Down Expand Up @@ -320,6 +393,39 @@ void setAddState() {
createGroupField.setText("");
}


//*****problem******
@UiHandler(value = {"nameSearchBox"})
public void handleNameSearch(KeyUpEvent keyUpEvent) {
pager.setPageStart(0);
dataGrid.setVisibleRangeAndClearData(dataGrid.getVisibleRange(), true);
}
//*******************


//String SearchName = nameSearchBox.getText().trim();

//if (SearchName.trim().length() > 0)
//{
//setSelectedGroup();
//selectedGroupInfo = null;
//selectionModel.clear();

//pager.setPageStart(0);
//dataGrid.setVisibleRangeAndClearData(dataGrid.getVisibleRange(), true);

//reload();
//}

//for (GroupInfo groupInfo : groupInfoList)
//if (GroupName.trim().length() > 0 && GroupName.equals(groupInfo.getName()))
//{
//System.out.print("YESYESYES");
//}

//}


@UiHandler("createButton")
public void createGroup(ClickEvent clickEvent) {
setAddState();
Expand All @@ -330,12 +436,12 @@ private Boolean validateName(String groupName) {
Bootbox.alert("Group must be at least 3 characters long");
return false;
}
for (GroupInfo groupInfo : groupInfoList) {
if (groupName.equals(groupInfo.getName())) {
Bootbox.alert("Group name must be unique");
return false;
}
}
// for (GroupInfo groupInfo : groupInfoList) {
// if (groupName.equals(groupInfo.getName())) {
// Bootbox.alert("Group name must be unique");
// return false;
// }
// }

return true;
}
Expand All @@ -356,6 +462,7 @@ public void updateGroupName(ClickEvent clickEvent) {
public void cancelUpdateGroupName(ClickEvent clickEvent) {
name.setText(selectedGroupInfo.getName());
handleNameChange(null);

}

@UiHandler("name")
Expand Down Expand Up @@ -435,12 +542,22 @@ private void setSelectedGroup() {
}


public void reload() {
if (MainPanel.getInstance().getCurrentUser() != null) {
GroupRestService.loadGroups(groupInfoList);
public void reload(Boolean forceReload) {
if (MainPanel.getInstance().getGroupPanel().isVisible() || forceReload) {
// updateAvailableRoles();
pager.setPageStart(0);
dataGrid.setVisibleRangeAndClearData(dataGrid.getVisibleRange(), true);
dataGrid.redraw();
}
}

public void reload() {
reload(false);
// if (MainPanel.getInstance().getCurrentUser() != null) {
// GroupRestService.loadGroups(groupInfoList);
// }
}


private void createOrganismPermissionsTable() {
TextColumn<GroupOrganismPermissionInfo> organismNameColumn = new TextColumn<GroupOrganismPermissionInfo>() {
Expand Down
5 changes: 5 additions & 0 deletions src/gwt/org/bbop/apollo/gwt/client/GroupPanel.ui.xml
Expand Up @@ -52,6 +52,11 @@
<gwt:north size="40">
<b:Container fluid="true" width="100%">
<b:Row styleName="{style.northPanel}">

<b:Column size="MD_6">
<b:TextBox placeholder="Search" ui:field="nameSearchBox"/>
</b:Column>

<b:Column size="MD_4">
<b:Button ui:field="createButton" icon="PLUS">Add Group</b:Button>
<b:Button ui:field="saveButton" icon="SAVE" visible="false" type="PRIMARY">Save</b:Button>
Expand Down
5 changes: 5 additions & 0 deletions src/gwt/org/bbop/apollo/gwt/client/MainPanel.java
Expand Up @@ -1163,6 +1163,11 @@ public static UserPanel getUserPanel() {
return userPanel;
}

public static GroupPanel getGroupPanel() {
return userGroupPanel ;
}


public static TrackPanel getTrackPanel() {
return trackPanel;
}
Expand Down
111 changes: 111 additions & 0 deletions src/gwt/org/bbop/apollo/gwt/client/dto/GroupInfoConverter.java
@@ -0,0 +1,111 @@
package org.bbop.apollo.gwt.client.dto;

import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
import org.bbop.apollo.gwt.shared.FeatureStringEnum;
import org.gwtbootstrap3.extras.bootbox.client.Bootbox;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
* Created by ndunn on 9/30/18.
*/

//Adding
public class GroupInfoConverter {

public static List<GroupInfo> convertFromJsonArray(JSONArray jsonArray) {

List<GroupInfo> groupInfoList = new ArrayList<>();
for(int i = 0 ; i < jsonArray.size() ; i++){
groupInfoList.add(convertToGroupInfoFromJSON(jsonArray.get(i).isObject()));
}

return groupInfoList;
}

public static GroupInfo convertToGroupInfoFromJSON(JSONObject object){
GroupInfo groupInfo = new GroupInfo();
groupInfo.setId((long) object.get("id").isNumber().doubleValue());
groupInfo.setName(object.get("name").isString().stringValue());
groupInfo.setNumberOfUsers((int) object.get("numberOfUsers").isNumber().doubleValue());
groupInfo.setNumberOfAdmin((int) object.get("numberOfAdmin").isNumber().doubleValue());
groupInfo.setNumberOrganisms((int) object.get("numberOrganisms").isNumber().doubleValue());
groupInfo.setNumberSequences((int) object.get("numberSequences").isNumber().doubleValue());

// if(object.get("users")!=null){
// JSONArray userInfoArray = object.get("users").isArray();
// List<UserInfo> userInfoList = new ArrayList<>();
// for (int j = 0; j < userInfoArray.size(); j++) {
// UserInfo userValue = userInfoArray.get(j).isObject().objectValue();
// userInfoList.add(userValue);
// }
// groupInfo.setUserInfoList(userInfoList);
// }

// if(object.get("admin")!=null) {
// JSONArray adminInfoArray = object.get("admin").isArray();
// List<UserInfo> adminInfoList = new ArrayList<>();
// for (int j = 0; j < adminInfoArray.size(); j++) {
// UserInfo adminValue = adminInfoArray.get(j).isObject().objectValue();
// adminInfoList.add(adminValue);
// }
// groupInfo.setAdminInfoList(adminInfoList);
// }


// TODO: use shared permission enums
if(object.get("organismPermissions")!=null) {
JSONArray organismArray = object.get("organismPermissions").isArray();
Map<String, GroupOrganismPermissionInfo> organismPermissionMap = new TreeMap<>();
for (int j = 0; j < organismArray.size(); j++) {
JSONObject organismPermissionJsonObject = organismArray.get(j).isObject();
GroupOrganismPermissionInfo groupOrganismPermissionInfo = new GroupOrganismPermissionInfo();
if (organismPermissionJsonObject.get("id") != null) {
groupOrganismPermissionInfo.setId((long) organismPermissionJsonObject.get("id").isNumber().doubleValue());
}
if (organismPermissionJsonObject.get("groupid") != null) {
groupOrganismPermissionInfo.setGroupId((long) organismPermissionJsonObject.get("groupid").isNumber().doubleValue());
}
// if (organismPermissionJsonObject.get("groupId") != null) {
// userOrganismPermissionInfo.setUserId((long) organismPermissionJsonObject.get("userId").isNumber().doubleValue());
// }
//userOrganismPermissionInfo.setOrganismName(organismPermissionJsonObject.get("organism").isString().stringValue());
if (organismPermissionJsonObject.get("permissions") != null) {
JSONArray permissionsArray = JSONParser.parseStrict(organismPermissionJsonObject.get("permissions").isString().stringValue()).isArray();
for (int permissionIndex = 0; permissionIndex < permissionsArray.size(); ++permissionIndex) {
String permission = permissionsArray.get(permissionIndex).isString().stringValue();
switch (permission) {
case "ADMINISTRATE":
groupOrganismPermissionInfo.setAdmin(true);
break;
case "WRITE":
groupOrganismPermissionInfo.setWrite(true);
break;
case "EXPORT":
groupOrganismPermissionInfo.setExport(true);
break;
case "READ":
groupOrganismPermissionInfo.setRead(true);
break;

default:
Bootbox.alert("Unrecognized permission '" + permission+"'");
}
}
}


organismPermissionMap.put(groupOrganismPermissionInfo.getOrganismName(), groupOrganismPermissionInfo);
}
groupInfo.setOrganismPermissionMap(organismPermissionMap);
}
return groupInfo ;
}

}

0 comments on commit 8410635

Please sign in to comment.