package org.gcube.portlets.user.speciesdiscovery.client.windowdetail; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.client.SearchController; import org.gcube.portlets.user.speciesdiscovery.client.SpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.client.advancedsearch.AdvancedSearchPanelManager; import org.gcube.portlets.user.speciesdiscovery.client.cluster.TablesForTaxonomyRow; import org.gcube.portlets.user.speciesdiscovery.client.event.SearchEvent; import org.gcube.portlets.user.speciesdiscovery.client.resources.Resources; import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceModel; import org.gcube.portlets.user.speciesdiscovery.shared.LightTaxonomyRow; import org.gcube.portlets.user.speciesdiscovery.shared.SpeciesCapability; import org.gcube.portlets.user.speciesdiscovery.shared.cluster.ClusterCommonNameDataSourceForTaxonomyRow; import org.gcube.portlets.user.speciesdiscovery.shared.cluster.ClusterStructuresForTaxonomyRow; import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.Html; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.TabItem; import com.extjs.gxt.ui.client.widget.TabPanel; import com.extjs.gxt.ui.client.widget.VerticalPanel; import com.extjs.gxt.ui.client.widget.layout.ColumnData; import com.extjs.gxt.ui.client.widget.layout.ColumnLayout; import com.extjs.gxt.ui.client.widget.layout.FormLayout; import com.extjs.gxt.ui.client.widget.layout.TableData; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Image; public class TaxonomyRowDetailsFiller implements DetailsFiller { private TabItem tabItemDetails; private ToolBar toolbarTaxonomy; private AbstractImagePrototype imgAttention = AbstractImagePrototype.create(Resources.INSTANCE.getAttention()); private AbstractImagePrototype imageLoading = AbstractImagePrototype.create(Resources.INSTANCE.loadingBalls()); private ContentPanel panelDetails; private int width = 900; private List lastlistDataSourceFound; private CommonDetailComponents common; private String lastScientificName; private TabPanel tabPanel; public TaxonomyRowDetailsFiller(TabItem tabItemDetails, ToolBar toolbarTaxonomy, TabPanel tabPanel, ContentPanel panelDetails, SearchEvent lastSearchEvent){ this.tabItemDetails = tabItemDetails; this.toolbarTaxonomy = toolbarTaxonomy; this.panelDetails = panelDetails; this.tabPanel = tabPanel; this.common = new CommonDetailComponents(lastSearchEvent); } private void enableToolbarTaxonomy(boolean bool){ toolbarTaxonomy.setEnabled(bool); } public void loadStructuresAndFillingPage(){ final long startTime = System.currentTimeMillis(); SpeciesDiscovery.taxonomySearchService.loadStructuresForTaxonomyClustering(new AsyncCallback() { @Override public void onFailure(Throwable caught) { Info.display("Sorry", "Error retriving selected results"); tabItemDetails.unmask(); enableToolbarTaxonomy(true); } @Override public void onSuccess(ClusterStructuresForTaxonomyRow result) { int size = result.getResult().size(); long returnedTime = System.currentTimeMillis(); long loadTime = returnedTime-startTime; Log.trace("fillPageDetailsForTaxonomy: " +size +" cluster taxonomy row was loaded in "+ loadTime +" msc"); // TablesForTaxonomyRow tableClassification = new TablesForTaxonomyRow(result, DEFAULTLANGUAGE, tabPanel, isSearchByCommonName, searchController.getEventBus()); String items = size>0?"items":"item"; String msg = ""; if(result.getTotalRow()>size){ msg = ConstantsSpeciesDiscovery.ROW_LIMIT_REACHED + " - "; tabItemDetails.setIcon(imgAttention); tabItemDetails.setToolTip(ConstantsSpeciesDiscovery.THE_MAX_NUMBER_OF_ITEMS_DISPLAYABLE_IS+ConstantsSpeciesDiscovery.TAXONOMY_LIMIT_ITEMS_DETAILS); } msg+= tabItemDetails.getText() + " ("+size +" "+ items+")"; tabItemDetails.setText(msg); createCommonNameDetailsPageForTaxonomyRow(result); enableToolbarTaxonomy(true); tabItemDetails.unmask(); long avilableTime = returnedTime-loadTime; Log.trace("fillPageDetailsForTaxonomy: " +size +" view details taxonomy row are available in "+ avilableTime +" msc"); } }); } private void createCommonNameDetailsPageForTaxonomyRow(ClusterStructuresForTaxonomyRow result) { HashMap> hashTaxonomyRowServiceID = result.getHashClusterScientificNameTaxonomyRowServiceID(); // ArrayList listDataSourceFound = tableClassification.getListFoundDataSources(); // HashMap> hashClusterCommonNamesDataSources = result.getHashClusterCommonNamesDataSources(); // HashMap> hashHTMLTables = result.getHashClassificationTables(); String title = common.getSearchTitle(); panelDetails.add(new Html(title)); // for (String dataSource : listDataSourceFound) { // System.out.println("############# Data Source found " + dataSource); // } List listKey = new ArrayList(hashTaxonomyRowServiceID.keySet()); Collections.sort(listKey); final Anchor anchorIndex = new Anchor(); anchorIndex.setName("indexOfContents"); panelDetails.add(new Html("

Index of Contents"+anchorIndex+"


")); panelDetails.add(common.createIndexOfContents(listKey)); //update last list data source found lastlistDataSourceFound = result.getListFoundDataSources(); //Create panels about panelDetails.add(new Html("

")); VerticalPanel verticaPanelAbouts = common.createPanelAbout(SpeciesCapability.TAXONOMYITEM, result.getListFoundDataSources()); panelDetails.add(verticaPanelAbouts); panelDetails.add(new Html("
")); for (final String scientificName : listKey) { Anchor anchor = new Anchor("[top index]"); anchor.setName(scientificName); anchor.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { com.google.gwt.user.client.Window.Location.assign("#indexOfContents"); } }); LayoutContainer titleContainer = new LayoutContainer(); titleContainer.setLayout(new ColumnLayout()); titleContainer.setWidth(width-80); LayoutContainer left = new LayoutContainer(); FormLayout layout = new FormLayout(); left.setLayout(layout); LayoutContainer right = new LayoutContainer(); layout = new FormLayout(); right.setLayout(layout); HorizontalPanel hp = new HorizontalPanel(); hp.setTableWidth("100%"); TableData td = new TableData(); td.setHorizontalAlign(HorizontalAlignment.RIGHT); hp.add(anchor, td); titleContainer.add(left, new ColumnData(.8)); titleContainer.add(right, new ColumnData(.2)); // HorizontalPanel hp = new HorizontalPanel(); // hp.setHorizontalAlign(HorizontalAlignment.CENTER); // hp.setStyleAttribute("margin", FIVEPX); this.lastScientificName = scientificName; left.add(new Html("

" + ConstantsSpeciesDiscovery.SCIENTIFICNAME + ": " + scientificName + "

")); right.add(hp); panelDetails.add(titleContainer); panelDetails.add(new Html("

")); panelDetails.add(common.createExternalLinks(scientificName)); String commonNamesTitle = "

Common Names (Data Source/s)

"; panelDetails.add(new Html(commonNamesTitle)); final LayoutContainer lcCommonName = new LayoutContainer(); lcCommonName.setStyleAttribute("width", "99%"); lcCommonName.setStyleAttribute("margin", "5px"); lcCommonName.setStyleAttribute("padding", "5px"); lcCommonName.setStyleAttribute("font-size", "12px"); // lcCommonName.setLayout(new FitLayout()); final Anchor anchorCommon = new Anchor("Compare Common Names for "+scientificName); anchorCommon.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { lcCommonName.remove(anchorCommon); final Image loading = imageLoading.createImage(); lcCommonName.add(loading); lcCommonName.layout(); SpeciesDiscovery.taxonomySearchService.loadClusterCommonNameForTaxonomyRowByScientificName(scientificName, new AsyncCallback() { @Override public void onFailure(Throwable caught) { Html htmlTableResult = new Html(); htmlTableResult.setHtml("
Error on retrieving data

"); } @Override public void onSuccess(ClusterCommonNameDataSourceForTaxonomyRow result) { Html htmlTableResult = new Html(); htmlTableResult.setHtml("
Not Found

"); if(result !=null){ if(result.getCluster()!=null){ String tableCommonName = common.createTableWithCheckCommonNameDataSource(result.getCluster().getHashMapCommonNameDataSources(), result.getCluster().getListDataSourcesFound()); htmlTableResult.setHtml("
"+tableCommonName+"

"); } else htmlTableResult.setHtml("
Error on retrieving data

"); }else htmlTableResult.setHtml("
Error on retrieving data

"); lcCommonName.remove(loading); lcCommonName.add(htmlTableResult); panelDetails.layout(); } }); } }); lcCommonName.add(anchorCommon); panelDetails.add(lcCommonName); ArrayList arrayTaxonomyID = hashTaxonomyRowServiceID.get(scientificName); for(int i=0; i

Scientific Classification of "+ scientificName + " on " +dataSource+ " Data Source

")); horizontalPanel.setVerticalAlign(VerticalAlignment.BOTTOM); DataSourceModel ds = AdvancedSearchPanelManager.getInstance().findDataSourceByCapabilityAndName(SpeciesCapability.TAXONOMYITEM, dataSource); Anchor createAbout = common.createAbout(ds,true); if(createAbout!=null){ createAbout.getElement().getStyle().setMarginLeft(25, Unit.PX); horizontalPanel.add(createAbout); } panelDetails.add(horizontalPanel); panelDetails.add(tables.getPanelClassificationForTaxonomy(lightTaxonomy, dataSource, false)); panelDetails.add(new Html("

Status and Synonyms

")); panelDetails.add(tables.getStatusAndSynonyms(lightTaxonomy, dataSource)); tables.setParents(lightTaxonomy.getParents()); panelDetails.add(new Html("

Metadata

")); final LayoutContainer lcRRTables = new LayoutContainer(); lcRRTables.setStyleAttribute("width", "99%"); // lcRRTables.setLayout(new FitLayout()); lcRRTables.setStyleAttribute("margin", "5px"); lcRRTables.setStyleAttribute("padding", "5px"); lcRRTables.setStyleAttribute("font-size", "12px"); panelDetails.add(lcRRTables); final Image loading = imageLoading.createImage(); lcRRTables.add(loading); String urlRequest = GWT.getModuleBaseURL() + ConstantsSpeciesDiscovery.TAXONOMY_ROW_TABLE + "?" +"oid=" + arrayTaxonomyID.get(i); RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, urlRequest); try { requestBuilder.sendRequest("", new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { lcRRTables.remove(loading); Html respHtml = new Html(response.getText()); lcRRTables.add(respHtml); lcRRTables.layout(); } @Override public void onError(Request request, Throwable exception) { lcRRTables.remove(loading); lcRRTables.add(new Html("Sorry, an error occurred while contacting server, try again")); } }); } catch (RequestException e) { lcRRTables.remove(loading); lcRRTables.add(new Html("Sorry, an error occurred while contacting server, try again")); } } } panelDetails.layout(true); } @Override public String getLastScientificName() { return lastScientificName; } @Override public List getLastlistDataSourceFound() { return lastlistDataSourceFound; } }