diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinService.java b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinService.java index 7440e96..bcec9a5 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinService.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinService.java @@ -28,7 +28,7 @@ public interface JoinService extends RemoteService { LinkedHashMap> getVREsByCategory(String categoryName); - ArrayList getAllOrganisations(); + List getAllOrganisations(); ArrayList getAllCategories(); diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinServiceAsync.java b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinServiceAsync.java index 4147d85..cb1ab63 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinServiceAsync.java @@ -40,7 +40,7 @@ public interface JoinServiceAsync { void getVREsByOrganisation(String organisationName, AsyncCallback>> callback); - void getAllOrganisations(AsyncCallback> callback); + void getAllOrganisations(AsyncCallback> callback); void getAllCategories(AsyncCallback> callback); diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinVRE.java b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinVRE.java index db29b76..aca785d 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/JoinVRE.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/JoinVRE.java @@ -39,10 +39,6 @@ public class JoinVRE implements EntryPoint { private TabPanel mainTabPanel = new TabPanel(Tabs.ABOVE); - - private boolean portfolioLoaded = false; - - public void onModuleLoad() { checkIsReferral(); } @@ -121,7 +117,11 @@ public class JoinVRE implements EntryPoint { return toReturn; } - + /** + * + * @param rp + * @param tabNames + */ private void showTabs(ResponsivePanel rp, List tabNames) { int i = 0; for (final String theTabName : tabNames) { @@ -136,7 +136,7 @@ public class JoinVRE implements EntryPoint { tab2Add.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - final ResponsivePanel rpPort = new ResponsivePanel(theTabName); + final ResponsivePanel rpPort = new ResponsivePanel(tab2Add); tab2Add.clear(); tab2Add.add(rpPort); } @@ -151,8 +151,45 @@ public class JoinVRE implements EntryPoint { mainPanel.add(mainTabPanel); addCategoriesTab(mainTabPanel); + addOrganisationsTab(mainTabPanel); } + /** + * add the Organisation Tab to the page, lazy load + * @param mainTabPanel + */ + private void addOrganisationsTab(final TabPanel mainTabPanel) { + joinService.getAllOrganisations(new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + } + @Override + public void onSuccess(List result) { + if (result.size() > 0) { + final DropdownTab dropdownCategoriesTab = new DropdownTab(ORGANISATIONS_LABEL); + for (String orgName : result) { + final String organizationName = orgName; + final Tab tab2Add = new Tab(); + tab2Add.setHeading(organizationName); + dropdownCategoriesTab.add(tab2Add); + + tab2Add.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + tab2Add.clear(); + tab2Add.add(new ResponsivePanel(organizationName)); + } + }); + } + mainTabPanel.add(dropdownCategoriesTab); + } + } + }); + } + /** + * add the Categories Tab to the page, lazy load + * @param mainTabPanel + */ private void addCategoriesTab(final TabPanel mainTabPanel) { joinService.getAllCategories(new AsyncCallback>() { @Override diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/responsive/ResponsivePanel.java b/src/main/java/org/gcube/portlets/user/joinvre/client/responsive/ResponsivePanel.java index 2b89b78..257d3fd 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/responsive/ResponsivePanel.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/responsive/ResponsivePanel.java @@ -14,6 +14,7 @@ import org.gcube.portlets.user.joinvre.shared.VRECategory; import com.github.gwtbootstrap.client.ui.PageHeader; import com.github.gwtbootstrap.client.ui.Row; +import com.github.gwtbootstrap.client.ui.Tab; import com.github.gwtbootstrap.client.ui.Thumbnails; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -26,6 +27,10 @@ public class ResponsivePanel extends Composite { public static final String loading = GWT.getModuleBaseURL() + "../images/vre-loader.gif"; private Row mainPanel = new Row(); private ArrayList myThumbnails = new ArrayList(); + + /** + * default constructor (No tabs) + */ public ResponsivePanel() { GWT.log("ResponsivePanel()"); joinService.getVREs(new AsyncCallback>>() { @@ -40,9 +45,12 @@ public class ResponsivePanel extends Composite { }); initWidget(mainPanel); } - - public ResponsivePanel(String tabName) { - GWT.log("ResponsivePanel()"); + /** + * constructor used when one tab is clicked + * @param selectedTab + */ + public ResponsivePanel(Tab selectedTab) { + final String tabName = selectedTab.getHeading(); joinService.getPortalSitesMappedToVRE(tabName, new AsyncCallback>>() { @Override public void onSuccess(LinkedHashMap> categories) { @@ -55,7 +63,10 @@ public class ResponsivePanel extends Composite { }); initWidget(mainPanel); } - + /** + * constructor used when one category is selected + * @param category + */ public ResponsivePanel(VRECategory category) { GWT.log("ResponsivePanel()"); joinService.getVREsByCategory(category.getName(), new AsyncCallback>>() { @@ -70,6 +81,23 @@ public class ResponsivePanel extends Composite { }); initWidget(mainPanel); } + /** + * constructor used when one organisation is selected + * @param category + */ + public ResponsivePanel(String organisation) { + joinService.getVREsByOrganisation(organisation, new AsyncCallback>>() { + @Override + public void onSuccess(LinkedHashMap> categories) { + populatePanel(categories); + } + @Override + public void onFailure(Throwable caught) { + showError("Sorry, looks like something is broken with the server connection"); + } + }); + initWidget(mainPanel); + } private void populatePanel(LinkedHashMap> categories) { mainPanel.clear(); diff --git a/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java b/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java index a1da11f..19cdf74 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java @@ -64,6 +64,7 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService //tell whether the public static final String TABBED_LAYOUT_ATTRIBUTE = "TabbedLayout"; public static final String TAB_NAMES_ATTRIBUTE = "TabName"; + public static final String ORGANIZATION_NAMES_ATTRIBUTE = "OrganisationName"; public static final String ALLVRES_SESSION_ATTRIBUTE = "ALLVRES_SESSION"; @@ -185,7 +186,6 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService if (isWithinPortal()) { if (isTabbedPanel() != null) { String firstTabName = getTabNames().get(0); - _log.debug("\n\n ****isTabbedLayout isTabbedLayout, first TabName= "+firstTabName); return getPortalSitesMappedToVRE(firstTabName); } else { toReturn = getPortalSitesMappedToVRE(); @@ -207,6 +207,8 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService */ @Override public LinkedHashMap> getPortalSitesMappedToVRE(String tabName) { + tabName = tabName.trim(); + _log.debug("Asked for vres of Tab " + tabName); LinkedHashMap> tabVREs = new LinkedHashMap>(); try { LinkedHashMap> allVREs = getPortalSitesMappedToVRE(); @@ -226,7 +228,7 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService } } catch (Exception e) { - _log.error("Error getting VREs", e); + _log.error("Error getting VREs by Category", e); } return tabVREs; } @@ -236,10 +238,27 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService */ @Override public LinkedHashMap> getVREsByOrganisation(String organisationName) { + LinkedHashMap> organizationVREs = new LinkedHashMap>(); + try { + LinkedHashMap> allVREs = getPortalSitesMappedToVRE(); - //TODO: - LinkedHashMap> toReturn = new LinkedHashMap>(); - return toReturn; + for (VRECategory cat : allVREs.keySet()) { + ArrayList toAdd = new ArrayList(); + organizationVREs.put(cat, toAdd); + for (VRE vre : allVREs.get(cat)) { + String[] vreOrgNames = (String[]) groupsManager.readCustomAttr(vre.getId(), ORGANIZATION_NAMES_ATTRIBUTE); + String vreOrgName = vreOrgNames[0]; + if (organisationName.equals(vreOrgName)) { + toAdd.add(vre); + _log.debug("Added " + vre.getName() + " as it belongs to organisation " + organisationName); + } + } + } + } + catch (Exception e) { + _log.error("Error getting VREs by Organization", e); + } + return organizationVREs; } /** @@ -275,9 +294,24 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService } @Override - public ArrayList getAllOrganisations() { - // TODO Auto-generated method stub - return null; + public List getAllOrganisations() { + List toReturn = new ArrayList(); + if (isWithinPortal()) { + try { + long currentSiteGroupId = getSiteFromServletRequest(getThreadLocalRequest()).getGroupId(); + Group site = GroupLocalServiceUtil.getGroup(currentSiteGroupId); + String[] values = (String[]) site.getExpandoBridge().getAttributeDefault(ORGANIZATION_NAMES_ATTRIBUTE); + for (int i = 0; i < values.length; i++) { + toReturn.add(values[i]); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + else { + return Arrays.asList(new String[]{"BlueBRIDGE", "iMarine"}); + } + return toReturn; } @Override diff --git a/src/main/webapp/explore.css b/src/main/webapp/explore.css index c0bdbd9..a8b496b 100644 --- a/src/main/webapp/explore.css +++ b/src/main/webapp/explore.css @@ -2,6 +2,13 @@ body { border: 5px solid white; } +.nav-tabs .dropdown-toggle .caret { + border-top: 8px solid black !important; + border-right: 8px solid transparent !important;; + border-left: 8px solid transparent !important;; + border-top-color: #08c !important;; +} + ul.dropdown-menu > li { font-size: 1.1em !important; }