From 6f0417e86e3ea1e61f16c6a33dd3b20d9e22eb54 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Fri, 10 Feb 2017 14:18:57 +0000 Subject: [PATCH] Working on Task #7001 git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/speciesdiscovery@142456 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/ConstantsSpeciesDiscovery.java | 30 +- .../client/SearchController.java | 85 ++- .../client/SpeciesSearchFormPanel.java | 7 +- .../client/event/CreateGisLayerJobEvent.java | 15 +- .../client/event/ReSubmitJobEvent.java | 16 +- .../client/event/SaveJobErrorEvent.java | 128 +++- .../client/event/SaveJobEvent.java | 44 +- .../client/event/ShowOccurrencesMapEvent.java | 45 -- .../event/ShowOccurrencesMapEventHandler.java | 16 - .../gridview/GisLayerJobGridManager.java | 101 ++- .../client/job/SpeciesJobPanel.java | 153 ++-- .../client/job/gislayer/GisLayerGridJob.java | 667 ++++++++++++++++++ .../job/gislayer/GisLayerJobInfoFields.java | 32 + .../job/gislayer/GisLayerJobSpeciesPanel.java | 335 +++++++++ .../GisLayerJobSpeciesProgressBar.java | 47 ++ .../client/job/gislayer/GisLayerJobTable.java | 108 +++ .../gislayer/GisLayerJobsInfoContainer.java | 51 ++ .../GisLayerWindowInfoJobsSpecies.java | 43 ++ .../job/occurrence/OccurrenceGridJob.java | 412 +++++------ .../client/job/taxonomy/TaxonomyGridJob.java | 396 +++++------ .../client/resources/Resources.java | 111 +-- .../client/resources/gislayer/globe.png | Bin 0 -> 1773 bytes .../client/resources/globe.png | Bin 0 -> 1773 bytes .../client/rpc/TaxonomySearchService.java | 9 +- .../rpc/TaxonomySearchServiceAsync.java | 4 +- .../windowdetail/ViewDetailsWindow.java | 422 +++++------ .../server/TaxonomySearchServiceImpl.java | 60 +- .../server/job/GisLayerJobUtil.java | 212 ++++++ .../server/job/GisLinkJobUtil.java | 57 -- .../server/service/SpeciesService.java | 76 +- .../server/util/DateUtil.java | 183 +++-- .../speciesdiscovery/shared/DefaultJob.java | 109 ++- .../speciesdiscovery/shared/GisLayerJob.java | 52 +- .../shared/JobGisLayerModel.java | 337 ++++++++- .../shared/SearchResultType.java | 32 +- 35 files changed, 3265 insertions(+), 1130 deletions(-) delete mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEvent.java delete mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEventHandler.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerGridJob.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobInfoFields.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesProgressBar.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobTable.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobsInfoContainer.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerWindowInfoJobsSpecies.java create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/gislayer/globe.png create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/globe.png create mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLayerJobUtil.java delete mode 100644 src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLinkJobUtil.java diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/ConstantsSpeciesDiscovery.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/ConstantsSpeciesDiscovery.java index 53cead1..d667a72 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/ConstantsSpeciesDiscovery.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/ConstantsSpeciesDiscovery.java @@ -1,7 +1,7 @@ package org.gcube.portlets.user.speciesdiscovery.client; public final class ConstantsSpeciesDiscovery { - + //USED IN MODEL CLASS public static final String ID = "id"; public static final String NAME = "name"; @@ -11,7 +11,7 @@ public final class ConstantsSpeciesDiscovery { public static final String COUNTOF = "CountOf"; public static final String RANK = "Rank"; // public static final String GROUPEDIDLIST = "GroupedIDList"; - + //USED IN CLASSIFICATION FILTER public static final String BIOTACLASSID = "BiotaID"; public static final String BIOTACLASS = "Biota"; @@ -30,30 +30,30 @@ public final class ConstantsSpeciesDiscovery { public static final String VIEWDETAILS = "View Details (Only selected)"; public static final String SELECTALL = "Check All Rows"; public static final String DESELECTALL = "Uncheck All Rows"; - + //USED IN CLASSIFICATION FILTER // public static final String[] MAIN_TAXONOMIC_RANK = new String[]{"kingdom", "phylum", "class", "order", "family", "genus", "species"}; public static final String GROUPBYRANK = "Group results by"; - - + + public static final String LOADINGSTYLE = "x-mask-loading"; public static final String SORTMESSAGE = "Sort filter in alphabetical order (from A to Z)"; public static final String REQUEST_DATA = "request data..."; - + //USED IN SEARCH BORDER LAYPUT PANEL public final static int JOBPOLLINGMILLISECONDS = 20000; - + //USED IN SEARCH FORM PANEL protected static final String OCCURENCES = "Occurences"; protected static final String CLASSIFICATION = "Classification"; protected static final String COMMON_NAME = "Common name"; protected static final String SCIENTIFIC_NAME = "Scientific name"; - + //USED IN ADAVANCED FILTERT public static final String AVAILABLEFILTERBOUND = "Bounds filters (lower-upper) are available with following plug-in"; public static final String AVAILABLEFILTERDATE = "Date filter (from-to) is available with following plug-in"; public static final String AVAILABLEDATASOURCES = "Occurence points and classification search are available with following plug-in"; - + //USED IN GISVIEWER public static final String LME = "lme"; public static final String FAOAREA = "faoarea"; @@ -64,18 +64,18 @@ public final class ConstantsSpeciesDiscovery { public static final String ENVIRONMENTS = "environments"; public static final String DEPTH_MEAN_ANNUAL = "DepthMeanAnnual"; public static final String WORLD_BORDERS = "worldborders"; - + //ELAPSED TIME FORMATTER public static final String TIME_ZONE_UTC = "UTC"; public static final String TIMEFORMAT_HH_MM_SS = "HH:mm:ss"; - + //USED IN SERVER/SHARED PACKAGE public static final String NULL = "null"; public static final String UNDEFINED = "Undefined"; public static final String NOT_FOUND = "not found"; public static int RESULT_ROW_LIMIT_ITEM_DETAILS = 250; public static int TAXONOMY_LIMIT_ITEMS_DETAILS = 100; - + //USED IN VIEW DETAILSWINDOW public static final String THE_MAX_NUMBER_OF_ITEMS_DISPLAYABLE_IS = "The max number of items displayable is "; public static final String ROW_LIMIT_REACHED = "Row limit reached"; @@ -89,7 +89,7 @@ public final class ConstantsSpeciesDiscovery { public static final String PLAIN_CSV_BY_DATA_SOURCE = "plain CSV (by Data Source)"; public static final String PLAIN_CSV = "plain CSV"; public static final String SAVE_OCCURRENCES = "Save Occurrences"; - public static final String SHOW_IN_GIS_VIEWER = "Show in Gis Viewer"; + public static final String CREATE_GIS_LAYER = "Create Gis Layer"; // public static final String SAVES_IN_DARWIN_CORE_ARCHIVE_FORMAT = "Saves in Darwin Core Archive format"; // public static final String DARWIN_CORE_ARCHIVE = "Darwin Core Archive"; public static final String SAVE_TAXONOMY_ITEMS = "Save Taxonomy Items"; @@ -106,13 +106,13 @@ public final class ConstantsSpeciesDiscovery { public static final String CONFIRM_DELETE = "Confirm delete"; public static final String ALERT = "Alert"; public static final String IS_NOT_COMPLETED = "can not be saved until it has completed!"; - + //USED IN TABLE FOR TAXONOMY ROW public static final String SAVES_IN_DARWIN_CORE_ARCHIVE_FORMAT = "Saves in Darwin Core Archive format"; public static final String DARWIN_CORE_ARCHIVE = "Darwin Core Archive"; public static final String SAVES_TAXONOMY_CHILDREN_FROM_RESULT = "Saves taxonomy children from result."; public static final String SAVE_TAXONOMY_CHILDREN = "Save Taxonomy Children"; - + //SERVLETS public static final String RESULT_ROW_TABLE = "ResultRowTable"; public static final String TAXONOMY_ROW_TABLE = "TaxonomyRowTable"; diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SearchController.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SearchController.java index 1c2f09a..ed912ec 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SearchController.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SearchController.java @@ -51,8 +51,6 @@ import org.gcube.portlets.user.speciesdiscovery.client.event.SetCommonNamesEvent import org.gcube.portlets.user.speciesdiscovery.client.event.SetCommonNamesEventHandler; import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOccurrencesEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOccurrencesEventHandler; -import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOccurrencesMapEvent; -import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOccurrencesMapEventHandler; import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOnlySelectedRowEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOnlySelectedRowEventHandler; import org.gcube.portlets.user.speciesdiscovery.client.event.UpdateAllRowSelectionEvent; @@ -64,6 +62,7 @@ import org.gcube.portlets.user.speciesdiscovery.client.event.UpdateRowSelectionE import org.gcube.portlets.user.speciesdiscovery.client.event.ViewDetailsOfSelectedEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.ViewDetailsOfSelectedEventHandler; import org.gcube.portlets.user.speciesdiscovery.client.filterresult.ResultFilterPanelManager; +import org.gcube.portlets.user.speciesdiscovery.client.job.gislayer.GisLayerJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.job.occurrence.OccurrenceJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.job.taxonomy.TaxonomyJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.util.SpeciesGridFields; @@ -276,7 +275,7 @@ public class SearchController { // TODO Auto-generated method stub - SpeciesDiscovery.taxonomySearchService.createGisLayerJobFromSelectedOccurrenceKeys(createGisLayerJobEvent.getJobName(), createGisLayerJobEvent.getJobDescription(), new AsyncCallback() { + SpeciesDiscovery.taxonomySearchService.createGisLayerJobFromSelectedOccurrenceKeys(createGisLayerJobEvent.getJobName(), createGisLayerJobEvent.getJobDescription(), createGisLayerJobEvent.getTotalPoints(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -289,7 +288,11 @@ public class SearchController { @Override public void onSuccess(JobGisLayerModel jobId) { - //Info.display("Gis Layer Occurrence Job", result.size() + " occurrence job "+msg+" submitted"); + Info.display("Gis Layer Occurrence Job", "Generating Gis layer: "+jobId.getJobName()+" submitted"); + excecuteGetJobs(SearchResultType.GIS_LAYER_POINT, false); + searchBorderLayoutPanel.getSpeciesSouthPanel().setIconGisLayerByCounter(1); + + // progress.close(); // showMap(layerName); } @@ -649,46 +652,6 @@ public class SearchController { } }); - eventBus.addHandler(ShowOccurrencesMapEvent.TYPE, new ShowOccurrencesMapEventHandler() { - - @Override - public void onShowOccurrencesMap(final ShowOccurrencesMapEvent event) { - - /* - * Moved INTO GisLayerJob - * SpeciesDiscovery.taxonomySearchService.getCountOfOccurrencesBatch(new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - Log.error("Error on loading", "An error occurred on count of occurrence point, retry." +caught.getMessage()); - - } - - @Override - public void onSuccess(OccurrencesStatus result) { - MessageDialog dialog; - if(event.getExpectedPoints()>result.getSize()){ - - dialog = new MessageDialog("Info", "Loading in progress", "On server are available only "+result.getSize()+" of "+event.getExpectedPoints()+" occurrences points. Do you want continue?"); - dialog.getMessageBoxConfirm().addCallback(new Listener() { - - public void handleEvent(MessageBoxEvent be) { - //IF NOT CANCELLED - String clickedButton = be.getButtonClicked().getItemId(); - if(clickedButton.equals(Dialog.YES)) - showOccurrencesMap(); - } - }); - } - - else - showOccurrencesMap(); - } - - }); - */ - } - }); eventBus.addHandler(ShowOnlySelectedRowEvent.TYPE, new ShowOnlySelectedRowEventHandler() { @@ -1750,7 +1713,39 @@ public class SearchController { } - }); + }); + }else if(type.equals(SearchResultType.GIS_LAYER_POINT)){ + + if(resetStructures) + GisLayerJobSpeciesPanel.getInstance(eventBus).getGridJob().mask("Loading", ConstantsSpeciesDiscovery.LOADINGSTYLE); + + + SpeciesDiscovery.taxonomySearchService.getListGisLayerJob(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + + // TODO Auto-generated method stub + + } + + @Override + public void onSuccess(List result) { + + if(resetStructures) + GisLayerJobSpeciesPanel.getInstance(eventBus).getGridJob().unmask(); + + if(result.size()>0){ + + if(resetStructures) + GisLayerJobSpeciesPanel.getInstance(eventBus).resetStructures(); + + GisLayerJobSpeciesPanel.getInstance(eventBus).addListJob(result); + } + + } + }); + } } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SpeciesSearchFormPanel.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SpeciesSearchFormPanel.java index 49e7e54..6db947f 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SpeciesSearchFormPanel.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/SpeciesSearchFormPanel.java @@ -215,10 +215,8 @@ public class SpeciesSearchFormPanel extends ContentPanel { initSimpleSearchPanel(); initQuerySearchPanel(); - createAdvancedSeachLinks(); - horizontalQueryPanel.add(simpleSearchPanel); horizontalQueryPanel.add(querySeachPanel); @@ -237,18 +235,15 @@ public class SpeciesSearchFormPanel extends ContentPanel { horizontalQueryPanel.add(buttSearchBy); - add(horizontalQueryPanel); add(hpAdvancedSearchLinks); } private void initQuerySearchPanel() { - querySeachPanel.setSpacing(5); + querySeachPanel.setSpacing(5); buttQuerySearch = new Button("Search"); buttQuerySearch.setStyleName("wizardButton"); - - buttQuerySearch.addClickHandler(new ClickHandler() { @Override diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/CreateGisLayerJobEvent.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/CreateGisLayerJobEvent.java index 651a5f6..9b4a247 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/CreateGisLayerJobEvent.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/CreateGisLayerJobEvent.java @@ -35,17 +35,30 @@ public class CreateGisLayerJobEvent extends GwtEvent { - + public static final GwtEvent.Type TYPE = new Type(); private SearchResultType loadType; @@ -23,16 +24,19 @@ public class ReSubmitJobEvent extends GwtEvent { private JobOccurrencesModel jobOccurrenceModel; private JobTaxonomyModel jobTaxonomyModel; - + + private JobGisLayerModel jobGisModel; + @Override public Type getAssociatedType() { return TYPE; } - public ReSubmitJobEvent(SearchResultType loadType, JobOccurrencesModel jobOccurrenceModel, JobTaxonomyModel jobTaxonomyModel){ + public ReSubmitJobEvent(SearchResultType loadType, JobOccurrencesModel jobOccurrenceModel, JobTaxonomyModel jobTaxonomyModel, JobGisLayerModel jobGisModel){ this.loadType = loadType; this.jobOccurrenceModel = jobOccurrenceModel; this.jobTaxonomyModel = jobTaxonomyModel; + this.jobGisModel = jobGisModel; } public SearchResultType getLoadType() { @@ -42,7 +46,7 @@ public class ReSubmitJobEvent extends GwtEvent { @Override protected void dispatch(ReSubmitJobEventHandler handler) { handler.onResubmitJob(this); - + } public JobOccurrencesModel getJobOccurrenceModel() { @@ -52,5 +56,5 @@ public class ReSubmitJobEvent extends GwtEvent { public JobTaxonomyModel getJobTaxonomyModel() { return jobTaxonomyModel; } - + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobErrorEvent.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobErrorEvent.java index 148c2d5..3bc6175 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobErrorEvent.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobErrorEvent.java @@ -1,11 +1,12 @@ /** - * + * */ package org.gcube.portlets.user.speciesdiscovery.client.event; import java.util.List; import org.gcube.portlets.user.speciesdiscovery.shared.DataSource; +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; import org.gcube.portlets.user.speciesdiscovery.shared.JobOccurrencesModel; import org.gcube.portlets.user.speciesdiscovery.shared.JobTaxonomyModel; import org.gcube.portlets.user.speciesdiscovery.shared.SearchResultType; @@ -13,12 +14,12 @@ import org.gcube.portlets.user.speciesdiscovery.shared.SearchResultType; import com.google.gwt.event.shared.GwtEvent; /** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * The Class SaveJobErrorEvent. * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it */ public class SaveJobErrorEvent extends GwtEvent { - + public static final GwtEvent.Type TYPE = new Type(); private String jobIdentifier; private String scientificName; @@ -27,26 +28,35 @@ public class SaveJobErrorEvent extends GwtEvent { private List listDataSources; private JobTaxonomyModel jobTaxonomyModel; private JobOccurrencesModel jobOccurrenceModel; + private String layerTitle; + private JobGisLayerModel jobGisLayer; + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ @Override public Type getAssociatedType() { return TYPE; } + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ @Override protected void dispatch(SaveJobErrorEventHandler handler) { - handler.onSaveJobError(this); + handler.onSaveJobError(this); } - + /** - * - * @param jobIdentifier - * @param scientificName - * @param listDataSource - * @param rank - * @param type - * @param jobTaxonomyModel + * Instantiates a new save job error event. + * + * @param jobIdentifier the job identifier + * @param scientificName the scientific name + * @param dataSourceList the data source list + * @param rank the rank + * @param type the type + * @param jobTaxonomyModel the job taxonomy model */ public SaveJobErrorEvent(String jobIdentifier, String scientificName, List dataSourceList, String rank, SearchResultType type, JobTaxonomyModel jobTaxonomyModel) { this.jobIdentifier = jobIdentifier; @@ -55,16 +65,33 @@ public class SaveJobErrorEvent extends GwtEvent { this.rank = rank; this.itemType = type; this.jobTaxonomyModel = jobTaxonomyModel; - + } - + + /** - * - * @param jobIdentifier - * @param scientificName - * @param dataSourceList - * @param type - * @param jobOccurrenceModel + * Instantiates a new save job error event. + * + * @param jobIdentifier the job identifier + * @param layerTitle the layer title + * @param jobGisLayer the job gis layer + * @param type the type + */ + public SaveJobErrorEvent(String jobIdentifier, String layerTitle, JobGisLayerModel jobGisLayer, SearchResultType type) { + this.jobIdentifier = jobIdentifier; + this.layerTitle = layerTitle; + this.jobGisLayer = jobGisLayer; + this.itemType = type; + } + + /** + * Instantiates a new save job error event. + * + * @param jobIdentifier the job identifier + * @param scientificName the scientific name + * @param dataSourceList the data source list + * @param type the type + * @param jobOccurrenceModel the job occurrence model */ public SaveJobErrorEvent(String jobIdentifier, String scientificName, List dataSourceList, SearchResultType type, JobOccurrencesModel jobOccurrenceModel) { this.jobIdentifier = jobIdentifier; @@ -73,48 +100,103 @@ public class SaveJobErrorEvent extends GwtEvent { this.itemType = type; this.jobOccurrenceModel = jobOccurrenceModel; } - + + /** + * Gets the job identifier. + * + * @return the job identifier + */ public String getJobIdentifier() { return jobIdentifier; } + /** + * Sets the job identifier. + * + * @param jobIdentifier the new job identifier + */ public void setJobIdentifier(String jobIdentifier) { this.jobIdentifier = jobIdentifier; } + /** + * Gets the scientific name. + * + * @return the scientific name + */ public String getScientificName() { return scientificName; } + /** + * Gets the rank. + * + * @return the rank + */ public String getRank() { return rank; } + /** + * Gets the item type. + * + * @return the item type + */ public SearchResultType getItemType() { return itemType; } - + + /** + * Gets the job taxonomy model. + * + * @return the job taxonomy model + */ public JobTaxonomyModel getJobTaxonomyModel() { return jobTaxonomyModel; } + /** + * Gets the job occurrence model. + * + * @return the job occurrence model + */ public JobOccurrencesModel getJobOccurrenceModel() { return jobOccurrenceModel; } + /** + * Sets the job taxonomy model. + * + * @param jobTaxonomyModel the new job taxonomy model + */ public void setJobTaxonomyModel(JobTaxonomyModel jobTaxonomyModel) { this.jobTaxonomyModel = jobTaxonomyModel; } + /** + * Sets the job occurrence model. + * + * @param jobOccurrenceModel the new job occurrence model + */ public void setJobOccurrenceModel(JobOccurrencesModel jobOccurrenceModel) { this.jobOccurrenceModel = jobOccurrenceModel; } + /** + * Gets the list data sources. + * + * @return the list data sources + */ public List getListDataSources() { return listDataSources; } + /** + * Sets the list data sources. + * + * @param listDataSources the new list data sources + */ public void setListDataSources(List listDataSources) { this.listDataSources = listDataSources; } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobEvent.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobEvent.java index 9c967ab..e511026 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobEvent.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/SaveJobEvent.java @@ -1,11 +1,12 @@ /** - * + * */ package org.gcube.portlets.user.speciesdiscovery.client.event; import java.util.List; import org.gcube.portlets.user.speciesdiscovery.shared.DataSource; +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; import org.gcube.portlets.user.speciesdiscovery.shared.JobOccurrencesModel; import org.gcube.portlets.user.speciesdiscovery.shared.JobTaxonomyModel; import org.gcube.portlets.user.speciesdiscovery.shared.SearchResultType; @@ -13,12 +14,12 @@ import org.gcube.portlets.user.speciesdiscovery.shared.SearchResultType; import com.google.gwt.event.shared.GwtEvent; /** - * + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class SaveJobEvent extends GwtEvent { - + public static final GwtEvent.Type TYPE = new Type(); private String jobIdentifier; private String scientificName; @@ -27,6 +28,8 @@ public class SaveJobEvent extends GwtEvent { private List listDataSources; private JobTaxonomyModel jobTaxonomyModel; private JobOccurrencesModel jobOccurrenceModel; + private String layerTitle; + private JobGisLayerModel jobGisLayer; @Override public Type getAssociatedType() { @@ -35,12 +38,12 @@ public class SaveJobEvent extends GwtEvent { @Override protected void dispatch(SaveJobEventHandler handler) { - handler.onSaveJob(this); + handler.onSaveJob(this); } - + /** - * + * * @param jobIdentifier * @param scientificName * @param listDataSource @@ -55,11 +58,11 @@ public class SaveJobEvent extends GwtEvent { this.rank = rank; this.itemType = type; this.jobTaxonomyModel = jobTaxonomyModel; - + } - + /** - * + * * @param jobIdentifier * @param scientificName * @param dataSourceList @@ -73,7 +76,26 @@ public class SaveJobEvent extends GwtEvent { this.itemType = type; this.jobOccurrenceModel = jobOccurrenceModel; } - + + + + /** + * + * @param jobIdentifier + * @param scientificName + * @param dataSourceList + * @param type + * @param jobOccurrenceModel + */ + public SaveJobEvent(String jobIdentifier, String layerTitle, SearchResultType type, JobGisLayerModel jobGisLayer) { + this.jobIdentifier = jobIdentifier; + this.itemType = type; + this.layerTitle = layerTitle; + this.itemType = type; + this.jobGisLayer = jobGisLayer; + } + + public String getJobIdentifier() { return jobIdentifier; @@ -94,7 +116,7 @@ public class SaveJobEvent extends GwtEvent { public SearchResultType getItemType() { return itemType; } - + public JobTaxonomyModel getJobTaxonomyModel() { return jobTaxonomyModel; } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEvent.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEvent.java deleted file mode 100644 index 8e048c7..0000000 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.speciesdiscovery.client.event; - -import com.google.gwt.event.shared.GwtEvent; - -/** - * @author "Federico De Faveri defaveri@isti.cnr.it" - * - */ -public class ShowOccurrencesMapEvent extends GwtEvent { - - public static final GwtEvent.Type TYPE = new Type(); - private int expectedPoints; - - public ShowOccurrencesMapEvent(int expectedPoints) { - this.expectedPoints = expectedPoints; - } - - @Override - public Type getAssociatedType() { - return TYPE; - } - - @Override - protected void dispatch(ShowOccurrencesMapEventHandler handler) { - handler.onShowOccurrencesMap(this); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("ShowOccurrencesMapEvent []"); - return builder.toString(); - } - - public int getExpectedPoints() { - return expectedPoints; - } - -} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEventHandler.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEventHandler.java deleted file mode 100644 index e9dd32b..0000000 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/event/ShowOccurrencesMapEventHandler.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.speciesdiscovery.client.event; - -import com.google.gwt.event.shared.EventHandler; - -/** - * @author "Federico De Faveri defaveri@isti.cnr.it" - * - */ -public interface ShowOccurrencesMapEventHandler extends EventHandler { - - public void onShowOccurrencesMap(ShowOccurrencesMapEvent event); - -} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/gridview/GisLayerJobGridManager.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/gridview/GisLayerJobGridManager.java index de90c7b..85506c5 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/gridview/GisLayerJobGridManager.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/gridview/GisLayerJobGridManager.java @@ -1,17 +1,6 @@ package org.gcube.portlets.user.speciesdiscovery.client.gridview; -import org.gcube.portlets.user.speciesdiscovery.client.SpeciesDiscovery; -import org.gcube.portlets.user.speciesdiscovery.client.event.CreateGisLayerJobEvent; -import org.gcube.portlets.user.speciesdiscovery.client.window.MessageDialog; -import org.gcube.portlets.user.speciesdiscovery.shared.OccurrencesStatus; -import org.gcube.portlets.user.speciesdiscovery.shared.util.NormalizeString; - -import com.allen_sauer.gwt.log.client.Log; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.event.MessageBoxEvent; -import com.extjs.gxt.ui.client.widget.Dialog; import com.google.gwt.event.shared.EventBus; -import com.google.gwt.user.client.rpc.AsyncCallback; public class GisLayerJobGridManager { @@ -29,53 +18,53 @@ public class GisLayerJobGridManager { this.isSearchByCommonName = isSearchByCommonName; } - public void saveOccurrence(){ +// public void saveOccurrence(){ +// +// SpeciesDiscovery.taxonomySearchService.getCountOfOccurrencesBatch(new AsyncCallback() { +// +// @Override +// public void onFailure(Throwable caught) { +// Log.error("Error on loading", "An error occurred on count of occurrence point, retry." +caught.getMessage()); +// +// } +// +// @Override +// public void onSuccess(final OccurrencesStatus result) { +// MessageDialog dialog; +// if(expectedOccurrences>result.getSize()){ +// +// dialog = new MessageDialog("Info", "Loading in progress", "On server are available only "+result.getSize()+" of "+expectedOccurrences+" occurrences points. Do you want continue?"); +// dialog.getMessageBoxConfirm().addCallback(new Listener() { +// +// public void handleEvent(MessageBoxEvent be) { +// //IF NOT CANCELLED +// String clickedButton = be.getButtonClicked().getItemId(); +// if(clickedButton.equals(Dialog.YES)) +// createGisLayerJobEventCallback(result.getSize()); +// } +// }); +// } +// +// else +// createGisLayerJobEventCallback(result.getSize()); +// } +// }); +// +// } - SpeciesDiscovery.taxonomySearchService.getCountOfOccurrencesBatch(new AsyncCallback() { +// private void createGisLayerJobEventCallback(int totalPoints) { +// +// String jobName = getSearchTermBySearchType(isSearchByCommonName, searchTerm); +// eventBus.fireEvent(new CreateGisLayerJobEvent(jobName, "Gis Layer generated from SPD Portlet by gCube Framework", totalPoints)); +// } - @Override - public void onFailure(Throwable caught) { - Log.error("Error on loading", "An error occurred on count of occurrence point, retry." +caught.getMessage()); - - } - - @Override - public void onSuccess(OccurrencesStatus result) { - MessageDialog dialog; - if(expectedOccurrences>result.getSize()){ - - dialog = new MessageDialog("Info", "Loading in progress", "On server are available only "+result.getSize()+" of "+expectedOccurrences+" occurrences points. Do you want continue?"); - dialog.getMessageBoxConfirm().addCallback(new Listener() { - - public void handleEvent(MessageBoxEvent be) { - //IF NOT CANCELLED - String clickedButton = be.getButtonClicked().getItemId(); - if(clickedButton.equals(Dialog.YES)) - createGisLayerJobEventCallback(); - } - }); - } - - else - createGisLayerJobEventCallback(); - } - }); - - } - - private void createGisLayerJobEventCallback() { - - String jobName = getSearchTermBySearchType(isSearchByCommonName, searchTerm); - eventBus.fireEvent(new CreateGisLayerJobEvent(jobName, "Gis Layer generated from SPD Portlet by gCube Framework")); - } - - public static String getSearchTermBySearchType(boolean isSearchByCommonName, String searchTerm){ - - if(isSearchByCommonName) - return NormalizeString.lowerCaseUpFirstChar(searchTerm) + " " + COMMON_NAME; - else - return NormalizeString.lowerCaseUpFirstChar(searchTerm) + " " + SCIENTIFIC_NAME; - } +// public static String getSearchTermBySearchType(boolean isSearchByCommonName, String searchTerm){ +// +// if(isSearchByCommonName) +// return NormalizeString.lowerCaseUpFirstChar(searchTerm) + " " + COMMON_NAME; +// else +// return NormalizeString.lowerCaseUpFirstChar(searchTerm) + " " + SCIENTIFIC_NAME; +// } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/SpeciesJobPanel.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/SpeciesJobPanel.java index 4a4f4ec..c77e10b 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/SpeciesJobPanel.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/SpeciesJobPanel.java @@ -1,5 +1,6 @@ package org.gcube.portlets.user.speciesdiscovery.client.job; +import org.gcube.portlets.user.speciesdiscovery.client.job.gislayer.GisLayerJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.job.occurrence.OccurrenceJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.job.taxonomy.TaxonomyJobSpeciesPanel; import org.gcube.portlets.user.speciesdiscovery.client.resources.Resources; @@ -23,56 +24,57 @@ public class SpeciesJobPanel extends ContentPanel{ protected static final String EMPTY = "Empty"; protected static final String CURRENT_QUERY = "Current query: "; - - + + private ToolBar toolbar = new ToolBar(); private TaxonomyJobSpeciesPanel taxonomyJobPanelInstance; private OccurrenceJobSpeciesPanel occurrenceJobPanelInstance; + private GisLayerJobSpeciesPanel gisLayerJobPanelInstance; private Button btnTaxonomyJobs; private Button btnOccurrenceJobs; + private Button btnGisLayerJobs; private int jobOccurrenceCount = 0; private int jobTaxonomyCount = 0; - + private int jobGisLayerCount = 0; + private TextField currentQuery; - + public SpeciesJobPanel(EventBus eventBus) { this.setTopComponent(toolbar); setLayout(new FitLayout()); setHeaderVisible(false); - + taxonomyJobPanelInstance = TaxonomyJobSpeciesPanel.getInstance(eventBus); occurrenceJobPanelInstance = OccurrenceJobSpeciesPanel.getInstance(eventBus); - + gisLayerJobPanelInstance = GisLayerJobSpeciesPanel.getInstance(eventBus); + createOccurrencesToolBar(); - toolbar.add(new SeparatorToolItem()); - createTaxonomyToolBar(); - - + toolbar.add(new SeparatorToolItem()); + createGisLayerToolBar(); + Text txtLastQuery = new Text(CURRENT_QUERY); txtLastQuery.setStyleAttribute("padding-right", "2px"); txtLastQuery.setStyleAttribute("color", "gray"); - + currentQuery = new TextField(); - currentQuery.setReadOnly(true); currentQuery.setWidth(400); currentQuery.setValue(EMPTY); toolbar.add(new FillToolItem()); toolbar.add(txtLastQuery); toolbar.add(currentQuery); - RenderTextFieldUtil.setTextFieldAttr(currentQuery, "background", "none"); // RenderTextFieldUtil.setTextFieldAttr(lastQuery, "text-align", "right"); } - + private void createOccurrencesToolBar(){ - + btnTaxonomyJobs = new Button("Species Taxonomy Jobs"); btnTaxonomyJobs.setScale(ButtonScale.MEDIUM); setIconTaxonomyByCounter(0); - + btnTaxonomyJobs.addSelectionListener(new SelectionListener() { @Override @@ -81,117 +83,156 @@ public class SpeciesJobPanel extends ContentPanel{ resetTaxonoyCouter(); taxonomyJobPanelInstance.getSpeciesJobWindow().show(); } - + }); toolbar.add(btnTaxonomyJobs); - + } - + private void resetTaxonoyCouter(){ jobTaxonomyCount = 0; setIconTaxonomyByCounter(0); } - + private void createTaxonomyToolBar(){ btnOccurrenceJobs = new Button("Species Occurrence Jobs"); btnOccurrenceJobs.setScale(ButtonScale.MEDIUM); setIconOccurrenceByCounter(0); - + btnOccurrenceJobs.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { - + resetOccurrenceCounter(); occurrenceJobPanelInstance.getSpeciesJobWindow().show(); } - + }); toolbar.add(btnOccurrenceJobs); } - + + + private void createGisLayerToolBar(){ + + btnGisLayerJobs = new Button("Gis Layer Jobs"); + btnGisLayerJobs.setScale(ButtonScale.MEDIUM); + setIconGisLayerByCounter(0); + + btnGisLayerJobs.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + resetOccurrenceCounter(); + gisLayerJobPanelInstance.getGisLayerJobWindow().show(); + } + + }); + toolbar.add(btnGisLayerJobs); + } + public void setLastQuery(String query){ this.currentQuery.setValue(query); } - + public void setLastQueryAsEmpty(){ this.currentQuery.setValue(EMPTY); } - + private void resetOccurrenceCounter(){ jobOccurrenceCount = 0; setIconOccurrenceByCounter(0); } - + public void setIconOccurrenceByCounter(int count){ this.jobOccurrenceCount += count; - + switch (jobOccurrenceCount) { - + case 0: - btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace())); - break; case 1: - btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace1())); - break; case 2: - btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace2())); break; case 3: - btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace3())); break; case 4: - btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace4())); break; default: btnOccurrenceJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace4More())); } - - + toolbar.layout(); } - - - public void setIconTaxonomyByCounter(int count){ - this.jobTaxonomyCount += count; - - switch (jobTaxonomyCount) { - + + public void setIconGisLayerByCounter(int count){ + this.jobGisLayerCount += count; + + switch (jobGisLayerCount) { + case 0: - - btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy())); - + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getGlobe())); break; case 1: - - btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy1())); - + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace1())); break; case 2: - + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace2())); + break; + case 3: + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace3())); + break; + case 4: + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace4())); + break; + default: + btnGisLayerJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace4More())); + } + + toolbar.layout(); + } + + + public void setIconTaxonomyByCounter(int count){ + this.jobTaxonomyCount += count; + + switch (jobTaxonomyCount) { + + case 0: + + btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy())); + + break; + case 1: + + btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy1())); + + break; + case 2: + btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy2())); break; case 3: - + btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy3())); break; case 4: - + btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy4())); break; default: btnTaxonomyJobs.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getTaxonomy4More())); } - - + + toolbar.layout(); } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerGridJob.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerGridJob.java new file mode 100644 index 0000000..116a57d --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerGridJob.java @@ -0,0 +1,667 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import java.util.Arrays; +import java.util.HashMap; + +import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; +import org.gcube.portlets.user.speciesdiscovery.client.SpeciesDiscovery; +import org.gcube.portlets.user.speciesdiscovery.client.event.ReLoadListJobEvent; +import org.gcube.portlets.user.speciesdiscovery.client.event.ReSubmitJobEvent; +import org.gcube.portlets.user.speciesdiscovery.client.event.SaveJobErrorEvent; +import org.gcube.portlets.user.speciesdiscovery.client.event.SaveJobEvent; +import org.gcube.portlets.user.speciesdiscovery.client.resources.Resources; +import org.gcube.portlets.user.speciesdiscovery.client.window.MessageBoxConfirm; +import org.gcube.portlets.user.speciesdiscovery.shared.DownloadState; +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; +//import org.gcube.portlets.user.speciesdiscovery.shared.JobOccurrencesModel; +//import org.gcube.portlets.user.speciesdiscovery.shared.JobOccurrencesModel; +import org.gcube.portlets.user.speciesdiscovery.shared.JobTaxonomyModel; +import org.gcube.portlets.user.speciesdiscovery.shared.SearchResultType; + +import com.allen_sauer.gwt.log.client.Log; +import com.extjs.gxt.ui.client.Style.ButtonScale; +import com.extjs.gxt.ui.client.Style.SelectionMode; +import com.extjs.gxt.ui.client.data.BaseModelData; +import com.extjs.gxt.ui.client.data.ModelData; +import com.extjs.gxt.ui.client.event.BaseEvent; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.GridEvent; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MenuEvent; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; +import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.Info; +import com.extjs.gxt.ui.client.widget.MessageBox; +import com.extjs.gxt.ui.client.widget.button.Button; +import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; +import com.extjs.gxt.ui.client.widget.grid.ColumnData; +import com.extjs.gxt.ui.client.widget.grid.ColumnModel; +import com.extjs.gxt.ui.client.widget.grid.Grid; +import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; +import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter; +import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.extjs.gxt.ui.client.widget.menu.Menu; +import com.extjs.gxt.ui.client.widget.menu.MenuItem; +import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.AbstractImagePrototype; + + +/** + * The Class GisLayerGridJob. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 10, 2017 + */ +public class GisLayerGridJob extends ContentPanel{ + + + private static final String REFRESH_LIST = "Refresh List"; + private static final String RE_SUBMIT = "Re-submit"; + private static final String SAVE = "Save"; + private static final String SAVEERROR = "Save Errors"; + private static final String CANCEL = "Cancel"; + private static final String INFO = "Info"; + // public static final String DATE_TIME_FORMAT = "yyyy.MM.dd 'at' HH:mm:ss"; + // private ListStore store = ListStoreModel.getInstance().getStore(); + private ListStore store; + private ToolBar toolBar = new ToolBar(); + private Grid grid; + private HashMap listWindowInfo = new HashMap(); + private EventBus eventBus; + + private Button buttonInfo; + private Button buttonCancel; + private Button buttonSave; + private Button buttonSaveError; + private Button buttonReSubmit; + private Button buttonRefreshList; + private Menu menu = new Menu(); + + /** + * Instantiates a new gis layer grid job. + * + * @param eventBus the event bus + */ + public GisLayerGridJob(EventBus eventBus) { + + this.eventBus = eventBus; + + ColumnConfig name = new ColumnConfig(JobGisLayerModel.JOBNAME, JobGisLayerModel.JOBNAME, 220); + ColumnConfig progress = new ColumnConfig(JobGisLayerModel.PROGRESS, JobGisLayerModel.PROGRESS, 150); + ColumnConfig startDate = new ColumnConfig(JobGisLayerModel.STARTTIME, JobGisLayerModel.STARTTIME, 140); + + ColumnConfig submitDate = new ColumnConfig(JobGisLayerModel.SUBMITTIME, JobGisLayerModel.SUBMITTIME, 140); +// creationDate.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); + + ColumnConfig endTime = new ColumnConfig(JobGisLayerModel.ENDTIME, JobGisLayerModel.ENDTIME, 140); +// endTime.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); + + ColumnConfig elapsedTime = new ColumnConfig(JobGisLayerModel.ELAPSEDTIME, JobGisLayerModel.ELAPSEDTIME + " Days, " + ConstantsSpeciesDiscovery.TIMEFORMAT_HH_MM_SS, 100); +// elapsedTime.setHidden(true); + + ColumnConfig status = new ColumnConfig(JobGisLayerModel.STATUS, JobGisLayerModel.STATUS, 80); + + final ColumnModel cm = new ColumnModel(Arrays.asList(name, progress, submitDate, startDate, endTime, elapsedTime, status)); + + setBodyBorder(false); + setHeaderVisible(false); + setLayout(new FitLayout()); + + GridFilters filters = new GridFilters(); + filters.setLocal(true); + + DateFilter dateFilterStartDate = new DateFilter(JobGisLayerModel.STARTTIME); + DateFilter dateFilterSubmitDate = new DateFilter(JobGisLayerModel.SUBMITTIME); + DateFilter dateFilterEnd = new DateFilter(JobGisLayerModel.ENDTIME); + + filters.addFilter(dateFilterStartDate); + filters.addFilter(dateFilterSubmitDate); + filters.addFilter(dateFilterEnd); + + store = new ListStore(); + + grid = new Grid(store, cm); + grid.setLoadMask(true); + + GridCellRenderer downloadStateRenderer = new GridCellRenderer() { + @Override + public String render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, Grid grid) { + String val = model.get(property).toString(); + String color="black"; + +// ONGOING, ONGOINGWITHFAILURES, FAILED, COMPLETED, COMPLETEDWITHFAILURES + + if(val!=null){ + if(val.compareTo(DownloadState.SAVING.toString())==0){ + color = "#7093DB"; + }else if(val.compareTo(DownloadState.FAILED.toString())==0){ + color = "#f00"; + } + } + else + val = ""; + + return "" + val + ""; + + } + }; + + GridCellRenderer jobSpeciesRenderer = new GridCellRenderer() { + + public Object render(final BaseModelData model, String property, ColumnData config, final int rowIndex, + final int colIndex, ListStore store, Grid grid) { + + grid.addListener(Events.ColumnResize, new Listener>() { + + public void handleEvent(GridEvent be) { + + for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { + if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null + && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof GisLayerJobSpeciesProgressBar) { + ((GisLayerJobSpeciesProgressBar) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); + } + } + } + }); + + return model.get(property); + } + }; + + progress.setRenderer(jobSpeciesRenderer); + status.setRenderer(downloadStateRenderer); + + grid.getView().setEmptyText("Empty"); + grid.getView().setShowDirtyCells(false); + grid.getView().setShowInvalidCells(false); + grid.setBorders(false); + grid.setColumnLines(true); + grid.addPlugin(filters); + + grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + + grid.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener() { + + @Override + public void selectionChanged(SelectionChangedEvent se) { +// System.out.println("selection grid change"); + + ModelData target = se.getSelectedItem(); + + if(target!=null) + enableButtonOnClick(true); + else + enableButtonOnClick(false); + + } + }); + + add(grid); + + createGridToolBar(); + createMenuItemsOnGrid(); + } + + + /** + * Adds the job into grid. + * + * @param jobModel the job model + * @param jobProgressBar the job progress bar + */ + public void addJobIntoGrid(JobGisLayerModel jobModel, GisLayerJobSpeciesProgressBar jobProgressBar) { + + BaseModelData baseModelData = new BaseModelData(); + + baseModelData.set(JobGisLayerModel.JOBINDENTIFIER, jobModel.getJobIdentifier()); + baseModelData.set(JobGisLayerModel.JOBNAME, jobModel.getJobName()); + baseModelData.set(JobGisLayerModel.PROGRESS, jobProgressBar); + baseModelData.set(JobGisLayerModel.STATUS, jobModel.getDownloadState().toString()); + baseModelData.set(JobGisLayerModel.SUBMITTIME, jobModel.getSubmitTime()); + baseModelData.set(JobGisLayerModel.ENDTIME, jobModel.getEndTime()); + baseModelData.set(JobGisLayerModel.STARTTIME, jobModel.getStartTime()); + baseModelData.set(JobGisLayerModel.ELAPSEDTIME, jobModel.getElapsedTime()); + baseModelData.set(jobModel.getJobIdentifier(), jobModel); //store object JobOccurrencesModel + + store.add(baseModelData); + updateJobInfo(jobModel); + } + + /** + * Update job info. + * + * @param jobModel the job model + */ + private void updateJobInfo(JobGisLayerModel jobModel){ + + GisLayerWindowInfoJobsSpecies win=listWindowInfo.get(jobModel.getJobIdentifier()); + + if(win==null){ + win = new GisLayerWindowInfoJobsSpecies(); + win.setWindowTitle("Job " + jobModel.getJobName() + " description:"); + } + + win.updateDescription(jobModel); + + listWindowInfo.put(jobModel.getJobIdentifier(), win); + } + + /** + * Update status. + * + * @param jobModel the job model + * @param jobProgressBar the job progress bar + */ + public void updateStatus(JobGisLayerModel jobModel, GisLayerJobSpeciesProgressBar jobProgressBar){ + + BaseModelData job = store.findModel(JobGisLayerModel.JOBINDENTIFIER, jobModel.getJobIdentifier()); + + if(job!=null){ + + job.set(JobGisLayerModel.PROGRESS, jobProgressBar); + job.set(JobGisLayerModel.SUBMITTIME, jobModel.getSubmitTime()); + job.set(JobGisLayerModel.STATUS, jobModel.getDownloadState().toString()); + job.set(JobGisLayerModel.ENDTIME, jobModel.getEndTime()); + job.set(JobGisLayerModel.ELAPSEDTIME, jobModel.getElapsedTime()); + job.set(JobGisLayerModel.STARTTIME, jobModel.getStartTime()); + + updateJobInfo(jobModel); + + store.update(job); + } + + } + + + /** + * Removes the species job by identifier. + * + * @param jobIdentifier the job identifier + */ + public void removeSpeciesJobByIdentifier(String jobIdentifier) { + BaseModelData job = store.findModel(JobGisLayerModel.JOBINDENTIFIER, jobIdentifier); + if(job!=null){ + store.remove(job); + } + } + + /** + * View info job. + */ + private void viewInfoJob() { + + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); + + if(baseModelData!=null){ + + GisLayerWindowInfoJobsSpecies win = listWindowInfo.get(baseModelData.get(JobGisLayerModel.JOBINDENTIFIER)); + win.show(); + } + } + + /** + * Cancel job. + */ + private void cancelJob() { + + final BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); + + if(baseModelData!=null){ + + String name = baseModelData.get(JobGisLayerModel.JOBNAME); + + MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsSpeciesDiscovery.CONFIRM_DELETE, ConstantsSpeciesDiscovery.MESSAGE_CONFIRM_DELETE_JOB + " "+ name+"?"); + mbc.getMessageBoxConfirm().addCallback(new Listener() { + + public void handleEvent(MessageBoxEvent be) { + + //IF CANCELLED + String clickedButton = be.getButtonClicked().getItemId(); + if(clickedButton.equals(Dialog.YES)){ + + final String jobIdentifier = baseModelData.get(JobGisLayerModel.JOBINDENTIFIER); + + SpeciesDiscovery.taxonomySearchService.cancelOccurrenceJob(jobIdentifier, new AsyncCallback() { + + @Override + public void onSuccess(Boolean result) { + + if(result) + removeSpeciesJobByIdentifier(jobIdentifier); + + } + + @Override + public void onFailure(Throwable caught) { + Info.display("Error", "An error occurred during the cancel"); + Log.error("Error during the cancel", caught.getMessage()); + + } + }); + + } + } + }); + + } + + } + + /** + * Save job. + */ + private void saveJob() { + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); + + if(baseModelData!=null){ + + String load = baseModelData.get(JobGisLayerModel.STATUS).toString(); + + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 ){ + + String jobIdentifier = baseModelData.get(JobGisLayerModel.JOBINDENTIFIER); + JobGisLayerModel jobModel = baseModelData.get(jobIdentifier); + eventBus.fireEvent(new SaveJobEvent(jobIdentifier, jobModel.getJobName(), SearchResultType.GIS_LAYER_POINT, jobModel)); + } + + else{ + String name = baseModelData.get(JobGisLayerModel.JOBNAME); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The job "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + } + } + + } + + /** + * Save error job. + */ + private void saveErrorJob() { + + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); + + if(baseModelData!=null){ + + String load = baseModelData.get(JobGisLayerModel.STATUS).toString(); + + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 || load.compareTo(DownloadState.FAILED.toString())==0){ + + String jobIdentifier = baseModelData.get(JobGisLayerModel.JOBINDENTIFIER); + JobGisLayerModel jobModel = baseModelData.get(jobIdentifier); + eventBus.fireEvent(new SaveJobErrorEvent(jobIdentifier, jobModel.getJobName(), jobModel, SearchResultType.GIS_LAYER_POINT)); + } + + else{ + String name = baseModelData.get(JobGisLayerModel.JOBNAME); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The error file "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + } + } + + } + + + /** + * Resubmit job. + */ + private void resubmitJob() { + + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); + + if(baseModelData!=null){ + + String load = baseModelData.get(JobTaxonomyModel.STATUS).toString(); + + if(load.compareTo(DownloadState.FAILED.toString())==0 || load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 ){ + + String jobIdentifier = baseModelData.get(JobGisLayerModel.JOBINDENTIFIER); + + JobGisLayerModel jobModel = (JobGisLayerModel) baseModelData.get(jobIdentifier); //get object JobOccurrencesModel + + eventBus.fireEvent(new ReSubmitJobEvent(SearchResultType.GIS_LAYER_POINT, null, null, jobModel)); + } + + else{ + String name = baseModelData.get(JobTaxonomyModel.JOBNAME); + MessageBox.alert(INFO, "The job "+ name+ " " + ConstantsSpeciesDiscovery.CAN_NOT_BE_RE_SUBMITTED_UNTIL_IT_HAS_COMPLETED, null); + } + } + + } + + /** + * Creates the grid tool bar. + */ + private void createGridToolBar(){ + + buttonInfo = new Button(INFO); + buttonInfo.setScale(ButtonScale.MEDIUM); + buttonInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); + buttonInfo.setStyleAttribute("margin-left", "5px"); + buttonInfo.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + viewInfoJob(); + } + }); + + buttonCancel = new Button(CANCEL); + buttonCancel.setScale(ButtonScale.MEDIUM); + buttonCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); + + buttonCancel.addListener(Events.OnClick, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + + cancelJob(); + } + + }); + + buttonSave = new Button(SAVE); + buttonSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); + buttonSave.setScale(ButtonScale.MEDIUM); + buttonSave.addListener(Events.OnClick, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + + saveJob(); + } + }); + + + buttonSaveError = new Button(SAVEERROR); + buttonSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); + buttonSaveError.setScale(ButtonScale.MEDIUM); + buttonSaveError.addListener(Events.OnClick, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + + saveErrorJob(); + } + + }); + + buttonReSubmit = new Button(RE_SUBMIT); + buttonReSubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); + buttonReSubmit.setScale(ButtonScale.MEDIUM); + buttonReSubmit.addListener(Events.OnClick, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + + resubmitJob(); + } + + }); + + + buttonRefreshList = new Button(REFRESH_LIST); + buttonRefreshList.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getRefresh())); + buttonRefreshList.setScale(ButtonScale.MEDIUM); + buttonRefreshList.addListener(Events.OnClick, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + +// resetStore(); + eventBus.fireEvent(new ReLoadListJobEvent(SearchResultType.OCCURRENCE_POINT)); + + } + }); + + + + toolBar.add(buttonInfo); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(buttonSave); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(buttonSaveError); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(buttonCancel); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(buttonReSubmit); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(new FillToolItem()); + toolBar.add(new SeparatorToolItem()); + toolBar.add(buttonRefreshList); + + setTopComponent(toolBar); + + enableButtonOnClick(false); + } + + /** + * Enable tool bar. + * + * @param bool the bool + */ + public void enableToolBar(boolean bool){ + this.toolBar.setEnabled(bool); + } + + /** + * Reset store. + */ + public void resetStore(){ + store.removeAll(); + } + + /** + * Enable button on click. + * + * @param bool the bool + */ + public void enableButtonOnClick(boolean bool){ + this.buttonCancel.setEnabled(bool); + this.buttonInfo.setEnabled(bool); + this.buttonSave.setEnabled(bool); + this.buttonReSubmit.setEnabled(bool); + this.buttonSaveError.setEnabled(bool); + } + + /** + * Creates the menu items on grid. + */ + public void createMenuItemsOnGrid(){ + + MenuItem menuInfo = new MenuItem(); + menuInfo.setText(INFO); + menuInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); + + menuInfo.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(MenuEvent ce) { + viewInfoJob(); + } + + }); + + menu.add(menuInfo); + + MenuItem menuSave= new MenuItem(); + menuSave.setText(SAVE); + menuSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); + + menuSave.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(MenuEvent ce) { + saveJob(); + } + + }); + + menu.add(menuSave); + + MenuItem menuSaveError = new MenuItem(); + menuSaveError.setText(SAVEERROR); + menuSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); + + menuSaveError.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(MenuEvent ce) { + saveErrorJob(); + } + + }); + + menu.add(menuSaveError); + + + MenuItem menuCancel= new MenuItem(); + menuCancel.setText(CANCEL); + menuCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); + + menuCancel.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(MenuEvent ce) { + + cancelJob(); + } + + }); + + menu.add(menuCancel); + + MenuItem menuResubmit= new MenuItem(); + menuResubmit.setText(RE_SUBMIT); + menuResubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); + + menuResubmit.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(MenuEvent ce) { + resubmitJob(); + } + + }); + + menu.add(menuResubmit); + + grid.setContextMenu(menu); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobInfoFields.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobInfoFields.java new file mode 100644 index 0000000..fa816ba --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobInfoFields.java @@ -0,0 +1,32 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import org.gcube.portlets.user.speciesdiscovery.client.util.GridField; + +public enum GisLayerJobInfoFields implements GridField{ + NAME("name","Name"), + LOADING("loading","Loading"); + + private String id; + private String name; + + private GisLayerJobInfoFields(String id, String name) { + this.id=id; + this.name=name; + } + + @Override + public String getId() { + return this.id; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public boolean isSortable() { + return false; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesPanel.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesPanel.java new file mode 100644 index 0000000..92e3c3c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesPanel.java @@ -0,0 +1,335 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.gcube.portlets.user.speciesdiscovery.client.resources.Resources; +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; + +import com.extjs.gxt.ui.client.Style.Scroll; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Html; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.Window; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.ui.AbstractImagePrototype; + +/** + * The Class OccurrenceJobSpeciesPanel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + */ +public class GisLayerJobSpeciesPanel extends ContentPanel { + + + /** + * This is a singleton + */ + private static GisLayerJobSpeciesPanel instance; + private static ContentPanel cp; + private ContentPanel vp; + private static HashMap hashProgressBars; + private static HashMap hashLoadCompletedNotify; + private static HashMap hashTableContentPanels; + private static String LASTOPERATION = "Last Operation: "; + private Html lastOperation = new Html(LASTOPERATION); + private LayoutContainer lc; + private static String WINDOWTITLE = "Species Occurrence Jobs"; + private static final String FAILED = "failed"; + private static final String COMPLETED = "completed"; + private static final String LOADING = "loading"; + private static final String PENDING = "pending"; + private static final String OPERATIONONE = "none"; + private static final String SAVING = "saving"; + + private GisLayerGridJob gridJob; + private EventBus eventBus; + + protected Window gisLayerJobWindow = new Window(); + + /** + * Gets the single instance of OccurrenceJobSpeciesPanel. + * + * @param eventBus the event bus + * @return single instance of OccurrenceJobSpeciesPanel + */ + public static synchronized GisLayerJobSpeciesPanel getInstance(EventBus eventBus) { + if (instance == null) + instance = new GisLayerJobSpeciesPanel(eventBus); + return instance; + } + + /** + * Instantiates a new occurrence job species panel. + * + * @param eventBus the event bus + */ + private GisLayerJobSpeciesPanel(EventBus eventBus) { + this.eventBus = eventBus; + this.gridJob = new GisLayerGridJob(eventBus); + + this.setHeaderVisible(false); + this.setLayout(new FitLayout()); + createSpeciesJobWindow(); +// createToolBar(); + } + + /** + * Creates the species job window. + */ + private void createSpeciesJobWindow(){ + + lc = new LayoutContainer(); + lc.setStyleAttribute("margin", "5px"); + cp = new ContentPanel(); + cp.setBodyBorder(true); + cp.setStyleAttribute("padding", "5px"); + cp.setLayout(new FitLayout()); + + cp.add(gridJob); + + cp.setHeight(550); + cp.setHeaderVisible(false); + hashProgressBars = new HashMap(); + hashTableContentPanels = new HashMap(); + hashLoadCompletedNotify = new HashMap(); + cp.setScrollMode(Scroll.AUTO); + + lastOperation.setHtml(LASTOPERATION + OPERATIONONE); + + lc.add(lastOperation); + lc.add(cp); + + gisLayerJobWindow.setHeading(WINDOWTITLE); + gisLayerJobWindow.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getBluePlace16px())); + gisLayerJobWindow.setSize(1020, 600); + gisLayerJobWindow.setResizable(true); + gisLayerJobWindow.setScrollMode(Scroll.AUTOX); + gisLayerJobWindow.add(lc); + } + + + /** + * Adds the list job. + * + * @param jobsModel the jobs model + */ + public void addListJob(List jobsModel){ + + for(final JobGisLayerModel jobModel : jobsModel) + addJob(jobModel); + } + + + + /** + * Adds the job. + * + * @param jobModel the job model + * @return true, if successful + */ + public boolean addJob(final JobGisLayerModel jobModel){ + + boolean isLoading = false; + + GisLayerJobSpeciesProgressBar jobsBar = hashProgressBars.get(jobModel.getJobIdentifier()); + + if(jobsBar!=null){ //is update + + GisLayerWindowInfoJobsSpecies win = (GisLayerWindowInfoJobsSpecies) jobsBar.getData("win"); + + if(win!=null){ + win.updateDescription(jobModel); + win.layout(); + jobsBar.setData("win", win); + } + + //IF job is COMPLETED OR FAILED OR COMPLETED WITH ERROR, IS NOT UPDATE + if(jobsBar.isCompleted()){ + //FOR DEBUG +// Log.trace("jobsBar " +jobModel.getName() + " completed, return" ); + return true; + } + + updateProgressBarView(jobsBar, jobModel); + gridJob.updateStatus(jobModel, jobsBar); + } + else{ //create new grid item that contains new progress bar + + GisLayerJobSpeciesProgressBar jobProgressBar = new GisLayerJobSpeciesProgressBar(jobModel.getJobIdentifier(), jobModel.getDownloadState().toString()); + gridJob.addJobIntoGrid(jobModel, jobProgressBar); + updateProgressBarView(jobProgressBar, jobModel); + hashProgressBars.put(jobModel.getJobIdentifier(), jobProgressBar); //add progressBar into hashProgressBars + hashLoadCompletedNotify.put(jobModel.getJobIdentifier(), false); //add false (at load completed event) into hashLoadCompletedNotify + } + + gridJob.layout(); + cp.layout(); + + return isLoading; + } + + + /** + * Update progress bar view. + * + * @param jobsBar the jobs bar + * @param jobModel the job model + * @return true, if successful + */ + private boolean updateProgressBarView(GisLayerJobSpeciesProgressBar jobsBar, JobGisLayerModel jobModel){ + + switch (jobModel.getDownloadState()) { + + case PENDING:{ + jobsBar.setProgressText(PENDING); + break; + } + + case SAVING:{ + lastOperation.setHtml(LASTOPERATION + jobModel.getJobName() + " saving"); + jobsBar.getElement().getStyle().setBorderColor("#7093DB"); + jobsBar.setProgressText(SAVING); + break; + } + + case COMPLETED:{ + + lastOperation.setHtml(LASTOPERATION + jobModel.getJobName() + " completed"); + jobsBar.getElement().getStyle().setBorderColor("#000000"); + jobsBar.updateProgressWithoutPercentage(100); + jobsBar.setCompleted(true); + jobsBar.updateText(COMPLETED); + break; + } + + case ONGOING:{ + + if(jobModel.getPercentage()<100) + jobsBar.setProgressText(LOADING); + else + jobsBar.setProgressText(SAVING); + + jobsBar.updateProgressWithPercentage(jobModel.getPercentage()); + return true; + } + + case SAVED:{ + + lastOperation.setHtml(LASTOPERATION + jobModel.getJobName() + " saved"); + jobsBar.getElement().getStyle().setBorderColor("#000000"); + jobsBar.updateProgressWithoutPercentage(100); + jobsBar.setCompleted(true); + jobsBar.updateText(COMPLETED); + break; + } + + case ONGOINGWITHFAILURES: { + + jobsBar.getElement().getStyle().setBorderColor("#f00"); + jobsBar.updateText("loading " + jobModel.getJobName() + " with failures"); + break; + } + + case FAILED:{ + + jobsBar.getElement().getStyle().setBorderColor("#f00"); + jobsBar.setProgressText(FAILED); + jobsBar.updateProgressWithPercentage(jobModel.getPercentage()); + jobsBar.setCompleted(true); + jobsBar.updateText(FAILED); + break; + } + + case COMPLETEDWITHFAILURES:{ + + jobsBar.getElement().getStyle().setBorderColor("#f00"); + jobsBar.updateText("loading " + jobModel.getJobName() + " with failures"); + jobsBar.updateProgressWithoutPercentage(100); + jobsBar.setCompleted(true); + break; + } + } + + return false; + } + + /** + * Removes the species job. + * + * @param hashHPKey the hash hp key + */ + public void removeSpeciesJob(String hashHPKey) { + + ContentPanel cp = hashTableContentPanels.get(hashHPKey); + vp.remove(cp); + lastOperation.setHtml(LASTOPERATION + cp.getId() + " deleted"); + hashProgressBars.remove(hashHPKey); //remove progress bar from hash + hashTableContentPanels.remove(hashHPKey); //remove hp from hash + hashLoadCompletedNotify.remove(hashHPKey); //remove notify event + vp.layout(); + } + + /** + * Delete progress completed. + * + * @param progressIdFound the progress id found + */ + @SuppressWarnings("unused") + private void deleteProgressCompleted(List progressIdFound){ + + List progressIdNotFound = new ArrayList(); + + for(String key : hashTableContentPanels.keySet()){ + if(!progressIdFound.contains(key)){ //if key isn't not found - progress is completed so is removed + GisLayerJobSpeciesProgressBar bulkPB = hashProgressBars.get(key); + lastOperation.setHtml(LASTOPERATION + bulkPB.getProgressText() + " uploading completed"); + progressIdNotFound.add(key); + } + } + + for(String key : progressIdNotFound){ + GisLayerJobSpeciesProgressBar bulkPB = hashProgressBars.get(key); + lastOperation.setHtml(LASTOPERATION + bulkPB.getProgressText() + " uploading completed"); + hashProgressBars.remove(key); //remove progress bar from hash + hashTableContentPanels.remove(key); //remove hp from hash + } + + vp.layout(); + cp.layout(); + } + + /** + * Gets the species job window. + * + * @return the species job window + */ + public Window getGisLayerJobWindow() { + return gisLayerJobWindow; + } + + /** + * Reset structures. + */ + public void resetStructures(){ + + this.gridJob.resetStore(); + + hashProgressBars.clear(); + lastOperation.setHtml(LASTOPERATION); + hashTableContentPanels.clear(); + hashLoadCompletedNotify.clear(); + } + + /** + * Gets the grid job. + * + * @return the grid job + */ + public GisLayerGridJob getGridJob() { + return gridJob; + } +} + diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesProgressBar.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesProgressBar.java new file mode 100644 index 0000000..73b8b41 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobSpeciesProgressBar.java @@ -0,0 +1,47 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import com.extjs.gxt.ui.client.widget.ProgressBar; + +public class GisLayerJobSpeciesProgressBar extends ProgressBar { + + private String progressText; + private float progress; + private boolean isCompleted = false; + + public GisLayerJobSpeciesProgressBar(String idJob, final String text) { + + this.progressText = text; + setSize(140, 20); + updateProgress(progress, text); + } + public void updateProgressWithoutPercentage(float counter) { + progress = counter / 100; + updateProgress(progress, progressText); + } + + + public void updateProgressWithPercentage(float counter) { + progress = counter / 100; + updateProgress(progress, counter +"% " + progressText); + } + + public String getProgressText() { + return progressText; + } + + public void setProgressText(String progressText) { + this.progressText = progressText; + } + + public float getProgress() { + return progress; + } + + public boolean isCompleted() { + return isCompleted; + } + + public void setCompleted(boolean isCompleted) { + this.isCompleted = isCompleted; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobTable.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobTable.java new file mode 100644 index 0000000..b807fb8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobTable.java @@ -0,0 +1,108 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import com.extjs.gxt.ui.client.Style.HorizontalAlignment; +import com.extjs.gxt.ui.client.Style.Scroll; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.button.Button; +import com.extjs.gxt.ui.client.widget.layout.TableData; +import com.extjs.gxt.ui.client.widget.layout.TableLayout; +import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; + +/** + * Entry point classes define onModuleLoad(). + */ + +public class GisLayerJobTable { + + public static ContentPanel getJobTableWithoutHeading(String name, String startTime, String endTime, GisLayerJobSpeciesProgressBar status, String elapsedTime, Button btnInfo, Button btnCancel, Button btnSave){ + + ContentPanel cpTableLayout = new ContentPanel(); + cpTableLayout.setHeaderVisible(false); + cpTableLayout.setStyleAttribute("margin-top", "10px"); + cpTableLayout.setAutoHeight(true); + cpTableLayout.setWidth(964); + cpTableLayout.setScrollMode(Scroll.AUTO); + + TableLayout tablelayout = new TableLayout(5); + tablelayout.setCellHorizontalAlign(HorizontalAlignment.CENTER); + cpTableLayout.setLayout(tablelayout); + + ContentPanel panel; + + //NAME + TableData layoutData = new TableData(); + layoutData.setWidth("300px"); + panel = new ContentPanel(); + panel.setScrollMode(Scroll.AUTO); + panel.setHeading("Name"); + panel.setHeight(55); + panel.add(new Label(name)); + panel.setWidth(300); + cpTableLayout.add(panel, layoutData); + + //Status + layoutData = new TableData(); + layoutData.setWidth("302px"); + panel = new ContentPanel(); + panel.setHeight(55); + panel.setHeading("Status"); + panel.setScrollMode(Scroll.AUTO); + panel.add(status); + panel.setWidth(302); + cpTableLayout.add(panel, layoutData); + + //Start Time + layoutData = new TableData(); + layoutData.setWidth("120px"); + panel = new ContentPanel(); + panel.setScrollMode(Scroll.AUTO); + panel.setHeight(55); + panel.setHeading("Start Time"); + panel.addText(startTime); + panel.setWidth(120); + cpTableLayout.add(panel, layoutData); + + //End Time + layoutData = new TableData(); + layoutData.setWidth("120px"); + panel = new ContentPanel(); + panel.setHeading("End Time"); + panel.setScrollMode(Scroll.AUTO); + panel.setHeight(55); + if(endTime!=null) + panel.addText(endTime); + panel.setWidth(120); + cpTableLayout.add(panel, layoutData); + + //Elapsed Time + layoutData = new TableData(); + layoutData.setWidth("120px"); + panel = new ContentPanel(); + panel.setHeading("Elapsed Time"); + panel.setScrollMode(Scroll.AUTO); + panel.setHeight(55); + if(elapsedTime!=null) + panel.addText(elapsedTime); + panel.setWidth(120); + cpTableLayout.add(panel, layoutData); + + + ToolBar toolBar = new ToolBar(); + + toolBar.add(btnInfo); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(btnSave); + toolBar.add(new SeparatorToolItem()); + + toolBar.add(btnCancel); + toolBar.add(new SeparatorToolItem()); + + cpTableLayout.setBottomComponent(toolBar); + + return cpTableLayout; + + } +} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobsInfoContainer.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobsInfoContainer.java new file mode 100644 index 0000000..f07a528 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerJobsInfoContainer.java @@ -0,0 +1,51 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + +import com.extjs.gxt.ui.client.Style.HorizontalAlignment; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.form.TextArea; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; + +public class GisLayerJobsInfoContainer extends LayoutContainer { + + private ContentPanel cp; + private TextArea textArea = new TextArea(); + private String description; + + + public GisLayerJobsInfoContainer(String description) { + textArea.setReadOnly(true); + initContentPanel(); + updateDescription(description); + } + + private void initContentPanel() { + setLayout(new FitLayout()); + getAriaSupport().setPresentation(true); + cp = new ContentPanel(); + cp.setHeaderVisible(false); + cp.setBodyBorder(true); + cp.setLayout(new FitLayout()); + cp.setButtonAlign(HorizontalAlignment.CENTER); + cp.setLayout(new FitLayout()); +// cp.getHeader().setIconAltText("Grid Icon"); + cp.setSize(400, 250); + + cp.add(textArea); + + add(cp); + } + + public void updateDescription(String description){ + this.description = description; + textArea.reset(); + textArea.setValue(this.description); + cp.layout(); + } + + public void setHeaderTitle(String title) { + cp.setHeading(title); + cp.layout(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerWindowInfoJobsSpecies.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerWindowInfoJobsSpecies.java new file mode 100644 index 0000000..87d59e5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/gislayer/GisLayerWindowInfoJobsSpecies.java @@ -0,0 +1,43 @@ +package org.gcube.portlets.user.speciesdiscovery.client.job.gislayer; + + +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; + +import com.extjs.gxt.ui.client.widget.Window; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; + +public class GisLayerWindowInfoJobsSpecies extends Window{ + + private GisLayerJobsInfoContainer jobInfo = new GisLayerJobsInfoContainer(""); + + public GisLayerWindowInfoJobsSpecies(GisLayerJobsInfoContainer jobInfoContainer) { + setModal(true); + setSize(450, 300); + this.jobInfo = jobInfoContainer; + add(jobInfo); + } + + public GisLayerWindowInfoJobsSpecies() { + setModal(true); + setSize(450, 300); + setLayout(new FitLayout()); + add(jobInfo); + } + + + public void setWindowTitle(String title) { + this.setHeading(title); + + } + + public void updateDescription(JobGisLayerModel jobModel) { + + String description = "\nName: \n" + jobModel.getJobName() + "\n"; + + description += "\n\nStart Time: \n" + jobModel.getSubmitTime(); + description += "\n\nEnd Time: \n" + jobModel.getEndTime(); + + this.jobInfo.updateDescription(description); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/occurrence/OccurrenceGridJob.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/occurrence/OccurrenceGridJob.java index ea8ba6c..0c36f4a 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/occurrence/OccurrenceGridJob.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/occurrence/OccurrenceGridJob.java @@ -57,12 +57,12 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; /** - * + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class OccurrenceGridJob extends ContentPanel{ - + private static final String REFRESH_LIST = "Refresh List"; private static final String RE_SUBMIT = "Re-submit"; @@ -85,64 +85,64 @@ public class OccurrenceGridJob extends ContentPanel{ private Button buttonReSubmit; private Button buttonRefreshList; private Menu menu = new Menu(); - + public OccurrenceGridJob(EventBus eventBus) { - + this.eventBus = eventBus; - + ColumnConfig name = new ColumnConfig(JobOccurrencesModel.JOBNAME, JobOccurrencesModel.JOBNAME, 220); ColumnConfig dataSources = new ColumnConfig(JobOccurrencesModel.DATASOURCESASSTRING, JobOccurrencesModel.DATASOURCESASSTRING, 140); ColumnConfig progress = new ColumnConfig(JobOccurrencesModel.PROGRESS, JobOccurrencesModel.PROGRESS, 150); - + ColumnConfig startDate = new ColumnConfig(JobOccurrencesModel.STARTTIME, JobOccurrencesModel.STARTTIME, 140); - + ColumnConfig submitDate = new ColumnConfig(JobOccurrencesModel.SUBMITTIME, JobOccurrencesModel.SUBMITTIME, 140); // creationDate.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); - + ColumnConfig endTime = new ColumnConfig(JobOccurrencesModel.ENDTIME, JobOccurrencesModel.ENDTIME, 140); // endTime.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); - + ColumnConfig elapsedTime = new ColumnConfig(JobOccurrencesModel.ELAPSEDTIME, JobOccurrencesModel.ELAPSEDTIME + " Days, " + ConstantsSpeciesDiscovery.TIMEFORMAT_HH_MM_SS, 100); // elapsedTime.setHidden(true); - + ColumnConfig fileFormat = new ColumnConfig(JobOccurrencesModel.FILEFORMAT, JobOccurrencesModel.FILEFORMAT, 100); - + ColumnConfig csvType = new ColumnConfig(JobOccurrencesModel.CSVTYPE, JobOccurrencesModel.CSVTYPE, 100); - + ColumnConfig status = new ColumnConfig(JobOccurrencesModel.STATUS, JobOccurrencesModel.STATUS, 80); - + ColumnConfig itemsCount = new ColumnConfig(JobOccurrencesModel.ITEMSNUMBER, JobOccurrencesModel.ITEMSNUMBER, 95); - + final ColumnModel cm = new ColumnModel(Arrays.asList(name, dataSources, itemsCount, progress, submitDate, startDate, endTime, elapsedTime, fileFormat, csvType, status)); - + setBodyBorder(false); setHeaderVisible(false); setLayout(new FitLayout()); - + GridFilters filters = new GridFilters(); filters.setLocal(true); - + DateFilter dateFilterStartDate = new DateFilter(JobOccurrencesModel.STARTTIME); DateFilter dateFilterSubmitDate = new DateFilter(JobOccurrencesModel.SUBMITTIME); DateFilter dateFilterEnd = new DateFilter(JobOccurrencesModel.ENDTIME); - + filters.addFilter(dateFilterStartDate); filters.addFilter(dateFilterSubmitDate); filters.addFilter(dateFilterEnd); store = new ListStore(); - + grid = new Grid(store, cm); - grid.setLoadMask(true); - - GridCellRenderer downloadStateRenderer = new GridCellRenderer() { + grid.setLoadMask(true); + + GridCellRenderer downloadStateRenderer = new GridCellRenderer() { @Override public String render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, Grid grid) { - String val = model.get(property).toString(); + String val = model.get(property).toString(); String color="black"; - + // ONGOING, ONGOINGWITHFAILURES, FAILED, COMPLETED, COMPLETEDWITHFAILURES - + if(val!=null){ if(val.compareTo(DownloadState.SAVING.toString())==0){ color = "#7093DB"; @@ -152,301 +152,301 @@ public class OccurrenceGridJob extends ContentPanel{ } else val = ""; - + return "" + val + ""; - - } + + } }; - - GridCellRenderer jobSpeciesRenderer = new GridCellRenderer() { - - public Object render(final BaseModelData model, String property, ColumnData config, final int rowIndex, - final int colIndex, ListStore store, Grid grid) { - - grid.addListener(Events.ColumnResize, new Listener>() { - - public void handleEvent(GridEvent be) { - - for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { - if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null - && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof OccurrenceJobSpeciesProgressBar) { - ((OccurrenceJobSpeciesProgressBar) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); - } - } - } - }); - - return model.get(property); - } - }; - + + GridCellRenderer jobSpeciesRenderer = new GridCellRenderer() { + + public Object render(final BaseModelData model, String property, ColumnData config, final int rowIndex, + final int colIndex, ListStore store, Grid grid) { + + grid.addListener(Events.ColumnResize, new Listener>() { + + public void handleEvent(GridEvent be) { + + for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { + if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null + && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof OccurrenceJobSpeciesProgressBar) { + ((OccurrenceJobSpeciesProgressBar) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); + } + } + } + }); + + return model.get(property); + } + }; + progress.setRenderer(jobSpeciesRenderer); status.setRenderer(downloadStateRenderer); - - + + // grid.getView().setAutoFill(true); - + grid.getView().setEmptyText("Empty"); - + grid.getView().setShowDirtyCells(false); grid.getView().setShowInvalidCells(false); - + // setAlphanumericStoreSorter(grid); - + // grid.setAutoExpandColumn(JobOccurrencesModel.JOBNAME); grid.setBorders(false); // grid.setStripeRows(true); grid.setColumnLines(true); grid.addPlugin(filters); - + grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - + grid.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener() { - + @Override public void selectionChanged(SelectionChangedEvent se) { // System.out.println("selection grid change"); - + ModelData target = se.getSelectedItem(); - + if(target!=null) enableButtonOnClick(true); else enableButtonOnClick(false); - + } }); - + add(grid); - + createGridToolBar(); createMenuItemsOnGrid(); } public void addJobIntoGrid(JobOccurrencesModel jobModel, OccurrenceJobSpeciesProgressBar jobProgressBar) { - + BaseModelData baseModelData = new BaseModelData(); - + baseModelData.set(JobOccurrencesModel.JOBINDENTIFIER, jobModel.getJobIdentifier()); baseModelData.set(JobOccurrencesModel.JOBNAME, jobModel.getJobName()); baseModelData.set(JobOccurrencesModel.PROGRESS, jobProgressBar); baseModelData.set(JobOccurrencesModel.STATUS, jobModel.getDownloadState().toString()); - + baseModelData.set(JobOccurrencesModel.SUBMITTIME, jobModel.getSubmitTime()); baseModelData.set(JobOccurrencesModel.ENDTIME, jobModel.getEndTime()); - + baseModelData.set(JobOccurrencesModel.FILEFORMAT, jobModel.getFileFormat()); baseModelData.set(JobOccurrencesModel.CSVTYPE, jobModel.getCsvType()); - + baseModelData.set(JobOccurrencesModel.STARTTIME, jobModel.getStartTime()); - + baseModelData.set(JobOccurrencesModel.ELAPSEDTIME, jobModel.getElapsedTime()); - + baseModelData.set(JobOccurrencesModel.COMPLETEDENTRY, jobModel.getNodeCompleted()); - + baseModelData.set(JobOccurrencesModel.ITEMSNUMBER, jobModel.getTotalOccurrences()); - + String dataSources = ""; for (DataSource dataSource : jobModel.getDataSources()) { dataSources+= " "+dataSource.getName() + ","; } - + //Trim dataSources = dataSources.trim(); - + //Remove last char , dataSources = dataSources.substring(0, dataSources.lastIndexOf(",")); - + baseModelData.set(JobOccurrencesModel.DATASOURCESASSTRING, dataSources); baseModelData.set(JobOccurrencesModel.SCIENTIFICNAME, jobModel.getScientificName()); baseModelData.set(JobOccurrencesModel.DESCRIPTION, jobModel.getDescription()); - + baseModelData.set(jobModel.getJobIdentifier(), jobModel); //store object JobOccurrencesModel store.add(baseModelData); updateJobInfo(jobModel); } - + private void updateJobInfo(JobOccurrencesModel jobModel){ - + OccurrenceWindowInfoJobsSpecies win=listWindowInfo.get(jobModel.getJobIdentifier()); if(win==null){ win = new OccurrenceWindowInfoJobsSpecies(); win.setWindowTitle("Job " + jobModel.getJobName() + " description:"); } - + win.updateDescription(jobModel); - + listWindowInfo.put(jobModel.getJobIdentifier(), win); } - + public void updateStatus(JobOccurrencesModel jobModel, OccurrenceJobSpeciesProgressBar jobProgressBar){ - + BaseModelData job = store.findModel(JobOccurrencesModel.JOBINDENTIFIER, jobModel.getJobIdentifier()); - + if(job!=null){ - + job.set(JobOccurrencesModel.PROGRESS, jobProgressBar); job.set(JobOccurrencesModel.SUBMITTIME, jobModel.getSubmitTime()); job.set(JobOccurrencesModel.STATUS, jobModel.getDownloadState().toString()); job.set(JobOccurrencesModel.ENDTIME, jobModel.getEndTime()); job.set(JobOccurrencesModel.ELAPSEDTIME, jobModel.getElapsedTime()); job.set(JobOccurrencesModel.STARTTIME, jobModel.getStartTime()); - + updateJobInfo(jobModel); - + store.update(job); } - + } - + public void removeSpeciesJobByIdentifier(String jobIdentifier) { BaseModelData job = store.findModel(JobOccurrencesModel.JOBINDENTIFIER, jobIdentifier); if(job!=null){ store.remove(job); } } - + private void viewInfoJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + OccurrenceWindowInfoJobsSpecies win = listWindowInfo.get(baseModelData.get(JobOccurrencesModel.JOBINDENTIFIER)); win.show(); } } - + private void cancelJob() { - + final BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String name = baseModelData.get(JobOccurrencesModel.JOBNAME); - + MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsSpeciesDiscovery.CONFIRM_DELETE, ConstantsSpeciesDiscovery.MESSAGE_CONFIRM_DELETE_JOB + " "+ name+"?"); mbc.getMessageBoxConfirm().addCallback(new Listener() { - + public void handleEvent(MessageBoxEvent be) { - + //IF CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ - + final String jobIdentifier = baseModelData.get(JobOccurrencesModel.JOBINDENTIFIER); - + SpeciesDiscovery.taxonomySearchService.cancelOccurrenceJob(jobIdentifier, new AsyncCallback() { - + @Override public void onSuccess(Boolean result) { - + if(result) removeSpeciesJobByIdentifier(jobIdentifier); - + } - + @Override public void onFailure(Throwable caught) { Info.display("Error", "An error occurred during the cancel"); Log.error("Error during the cancel", caught.getMessage()); - + } }); } - } - }); + } + }); } - + } - + private void saveJob() { BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobOccurrencesModel.STATUS).toString(); - + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 ){ - + String jobIdentifier = baseModelData.get(JobOccurrencesModel.JOBINDENTIFIER); String scientificName = baseModelData.get(JobOccurrencesModel.SCIENTIFICNAME); - + JobOccurrencesModel jobModel = baseModelData.get(jobIdentifier); - + List dataSourceList = jobModel.getDataSources(); - + eventBus.fireEvent(new SaveJobEvent(jobIdentifier, scientificName, dataSourceList, SearchResultType.OCCURRENCE_POINT, jobModel)); } - + else{ String name = baseModelData.get(JobOccurrencesModel.JOBNAME); - MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The job "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The job "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); } } - + } - + private void saveErrorJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobOccurrencesModel.STATUS).toString(); - + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 || load.compareTo(DownloadState.FAILED.toString())==0){ - + String jobIdentifier = baseModelData.get(JobOccurrencesModel.JOBINDENTIFIER); String scientificName = baseModelData.get(JobOccurrencesModel.SCIENTIFICNAME); - + JobOccurrencesModel jobModel = baseModelData.get(jobIdentifier); - + List dataSourceList = jobModel.getDataSources(); - + eventBus.fireEvent(new SaveJobErrorEvent(jobIdentifier, scientificName, dataSourceList, SearchResultType.OCCURRENCE_POINT, jobModel)); } - + else{ String name = baseModelData.get(JobOccurrencesModel.JOBNAME); - MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The error file "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The error file "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); } } - + } - - + + private void resubmitJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobTaxonomyModel.STATUS).toString(); - + if(load.compareTo(DownloadState.FAILED.toString())==0 || load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 ){ - + String jobIdentifier = baseModelData.get(JobOccurrencesModel.JOBINDENTIFIER); - + JobOccurrencesModel jobModel = (JobOccurrencesModel) baseModelData.get(jobIdentifier); //get object JobOccurrencesModel - eventBus.fireEvent(new ReSubmitJobEvent(SearchResultType.OCCURRENCE_POINT, jobModel, null)); + eventBus.fireEvent(new ReSubmitJobEvent(SearchResultType.OCCURRENCE_POINT, jobModel, null, null)); } - + else{ String name = baseModelData.get(JobTaxonomyModel.JOBNAME); - MessageBox.alert(INFO, "The job "+ name+ " " + ConstantsSpeciesDiscovery.CAN_NOT_BE_RE_SUBMITTED_UNTIL_IT_HAS_COMPLETED, null); + MessageBox.alert(INFO, "The job "+ name+ " " + ConstantsSpeciesDiscovery.CAN_NOT_BE_RE_SUBMITTED_UNTIL_IT_HAS_COMPLETED, null); } } - + } - + private void createGridToolBar(){ buttonInfo = new Button(INFO); @@ -454,27 +454,27 @@ public class OccurrenceGridJob extends ContentPanel{ buttonInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); buttonInfo.setStyleAttribute("margin-left", "5px"); buttonInfo.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(ButtonEvent ce) { viewInfoJob(); } }); - + buttonCancel = new Button(CANCEL); buttonCancel.setScale(ButtonScale.MEDIUM); buttonCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); - + buttonCancel.addListener(Events.OnClick, new Listener() { @Override public void handleEvent(BaseEvent be) { - + cancelJob(); } }); - + buttonSave = new Button(SAVE); buttonSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); buttonSave.setScale(ButtonScale.MEDIUM); @@ -482,12 +482,12 @@ public class OccurrenceGridJob extends ContentPanel{ @Override public void handleEvent(BaseEvent be) { - + saveJob(); } }); - - + + buttonSaveError = new Button(SAVEERROR); buttonSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); buttonSaveError.setScale(ButtonScale.MEDIUM); @@ -495,12 +495,12 @@ public class OccurrenceGridJob extends ContentPanel{ @Override public void handleEvent(BaseEvent be) { - + saveErrorJob(); } }); - + buttonReSubmit = new Button(RE_SUBMIT); buttonReSubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); buttonReSubmit.setScale(ButtonScale.MEDIUM); @@ -508,61 +508,61 @@ public class OccurrenceGridJob extends ContentPanel{ @Override public void handleEvent(BaseEvent be) { - + resubmitJob(); } }); - - + + buttonRefreshList = new Button(REFRESH_LIST); buttonRefreshList.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getRefresh())); - buttonRefreshList.setScale(ButtonScale.MEDIUM); + buttonRefreshList.setScale(ButtonScale.MEDIUM); buttonRefreshList.addListener(Events.OnClick, new Listener() { @Override public void handleEvent(BaseEvent be) { - + // resetStore(); eventBus.fireEvent(new ReLoadListJobEvent(SearchResultType.OCCURRENCE_POINT)); - + } }); - - + + toolBar.add(buttonInfo); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonSave); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonSaveError); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonCancel); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonReSubmit); toolBar.add(new SeparatorToolItem()); - + toolBar.add(new FillToolItem()); toolBar.add(new SeparatorToolItem()); toolBar.add(buttonRefreshList); - + setTopComponent(toolBar); - + enableButtonOnClick(false); } - + public void enableToolBar(boolean bool){ this.toolBar.setEnabled(bool); } - + public void resetStore(){ store.removeAll(); } - + public void enableButtonOnClick(boolean bool){ this.buttonCancel.setEnabled(bool); this.buttonInfo.setEnabled(bool); @@ -570,13 +570,13 @@ public class OccurrenceGridJob extends ContentPanel{ this.buttonReSubmit.setEnabled(bool); this.buttonSaveError.setEnabled(bool); } - + public void createMenuItemsOnGrid(){ - - MenuItem menuInfo = new MenuItem(); - menuInfo.setText(INFO); + + MenuItem menuInfo = new MenuItem(); + menuInfo.setText(INFO); menuInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); - + menuInfo.addSelectionListener(new SelectionListener() { @Override @@ -587,44 +587,44 @@ public class OccurrenceGridJob extends ContentPanel{ }); menu.add(menuInfo); - - MenuItem menuSave= new MenuItem(); - menuSave.setText(SAVE); + + MenuItem menuSave= new MenuItem(); + menuSave.setText(SAVE); menuSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); - + menuSave.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { saveJob(); } }); - + menu.add(menuSave); - - MenuItem menuSaveError = new MenuItem(); - menuSaveError.setText(SAVEERROR); + + MenuItem menuSaveError = new MenuItem(); + menuSaveError.setText(SAVEERROR); menuSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); - + menuSaveError.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { saveErrorJob(); } }); - + menu.add(menuSaveError); - - - MenuItem menuCancel= new MenuItem(); - menuCancel.setText(CANCEL); + + + MenuItem menuCancel= new MenuItem(); + menuCancel.setText(CANCEL); menuCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); - + menuCancel.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { @@ -632,26 +632,26 @@ public class OccurrenceGridJob extends ContentPanel{ } }); - + menu.add(menuCancel); - MenuItem menuResubmit= new MenuItem(); - menuResubmit.setText(RE_SUBMIT); + MenuItem menuResubmit= new MenuItem(); + menuResubmit.setText(RE_SUBMIT); menuResubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); - + menuResubmit.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { resubmitJob(); } }); - + menu.add(menuResubmit); grid.setContextMenu(menu); - + } - + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/taxonomy/TaxonomyGridJob.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/taxonomy/TaxonomyGridJob.java index e19213c..b9d8fc9 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/taxonomy/TaxonomyGridJob.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/job/taxonomy/TaxonomyGridJob.java @@ -57,15 +57,15 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; /** - * + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class TaxonomyGridJob extends ContentPanel{ - + /** - * + * */ private static final String SAVE_ERROR = "Save Errors"; private static final String REFRESH_LIST = "Refresh List"; @@ -87,64 +87,64 @@ public class TaxonomyGridJob extends ContentPanel{ private Button buttonReSubmit; private Button buttonRefreshList; private Button buttonSaveError; - + private Menu menu = new Menu(); - + public TaxonomyGridJob(EventBus eventBus) { - + this.eventBus = eventBus; - + ColumnConfig name = new ColumnConfig(JobTaxonomyModel.JOBNAME, JobTaxonomyModel.JOBNAME, 220); ColumnConfig dataSources = new ColumnConfig(JobTaxonomyModel.DATASOURCE, JobTaxonomyModel.DATASOURCE, 90); ColumnConfig progress = new ColumnConfig(JobTaxonomyModel.PROGRESS, JobTaxonomyModel.PROGRESS, 250); - + ColumnConfig startDate = new ColumnConfig(JobTaxonomyModel.STARTTIME, JobTaxonomyModel.STARTTIME, 140); - + ColumnConfig submitDate = new ColumnConfig(JobTaxonomyModel.SUBMITTIME, JobTaxonomyModel.SUBMITTIME, 140); // creationDate.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); - + ColumnConfig endTime = new ColumnConfig(JobTaxonomyModel.ENDTIME, JobTaxonomyModel.ENDTIME, 140); // endTime.setDateTimeFormat(DateTimeFormat.getFormat(DATE_TIME_FORMAT)); - + ColumnConfig elapsedTime = new ColumnConfig(JobTaxonomyModel.ELAPSEDTIME, JobTaxonomyModel.ELAPSEDTIME + " Days, " + ConstantsSpeciesDiscovery.TIMEFORMAT_HH_MM_SS, 140); ColumnConfig status = new ColumnConfig(JobTaxonomyModel.STATUS, JobTaxonomyModel.STATUS, 80); - + final ColumnModel cm = new ColumnModel(Arrays.asList(name, dataSources, progress, submitDate, startDate, endTime, elapsedTime, status)); - + setBodyBorder(false); setHeaderVisible(false); setLayout(new FitLayout()); - + GridFilters filters = new GridFilters(); filters.setLocal(true); DateFilter dateFilterStart = new DateFilter(JobTaxonomyModel.STARTTIME); DateFilter dateFilterSubmit = new DateFilter(JobTaxonomyModel.SUBMITTIME); DateFilter dateFilterEnd = new DateFilter(JobTaxonomyModel.ENDTIME); - + filters.addFilter(dateFilterStart); filters.addFilter(dateFilterSubmit); filters.addFilter(dateFilterEnd); store = new ListStore(); - + grid = new Grid(store, cm); - grid.setLoadMask(true); - - GridCellRenderer downloadStateRenderer = new GridCellRenderer() { + grid.setLoadMask(true); + + GridCellRenderer downloadStateRenderer = new GridCellRenderer() { @Override public String render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, Grid grid) { - String val = model.get(property).toString(); + String val = model.get(property).toString(); String color="black"; - + // ONGOING, ONGOINGWITHFAILURES, FAILED, COMPLETED, COMPLETEDWITHFAILURES - + if(val!=null){ - + // if(val.compareTo(DownloadState.COMPLETED.toString())==0){ // color ="#0000EE"; -// }else +// }else if(val.compareTo(DownloadState.SAVING.toString())==0){ color = "#7093DB"; }else if(val.compareTo(DownloadState.FAILED.toString())==0){ @@ -153,81 +153,81 @@ public class TaxonomyGridJob extends ContentPanel{ } else val = ""; - + return "" + val + ""; - - } + + } }; - - GridCellRenderer jobSpeciesRenderer = new GridCellRenderer() { - - public Object render(final BaseModelData model, String property, ColumnData config, final int rowIndex, - final int colIndex, ListStore store, Grid grid) { - - grid.addListener(Events.ColumnResize, new Listener>() { - - public void handleEvent(GridEvent be) { - - for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { - if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null - && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof TaxonomyJobSpeciesProgressBar) { - ((TaxonomyJobSpeciesProgressBar) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); - } - } - } - }); - - return model.get(property); - } - }; - + + GridCellRenderer jobSpeciesRenderer = new GridCellRenderer() { + + public Object render(final BaseModelData model, String property, ColumnData config, final int rowIndex, + final int colIndex, ListStore store, Grid grid) { + + grid.addListener(Events.ColumnResize, new Listener>() { + + public void handleEvent(GridEvent be) { + + for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { + if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null + && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof TaxonomyJobSpeciesProgressBar) { + ((TaxonomyJobSpeciesProgressBar) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); + } + } + } + }); + + return model.get(property); + } + }; + progress.setRenderer(jobSpeciesRenderer); status.setRenderer(downloadStateRenderer); - - + + // grid.getView().setAutoFill(true); - + grid.getView().setEmptyText("Empty"); - + grid.getView().setShowDirtyCells(false); grid.getView().setShowInvalidCells(false); - + // setAlphanumericStoreSorter(grid); - + // grid.setAutoExpandColumn(JobTaxonomyModel.JOBNAME); grid.setBorders(false); // grid.setStripeRows(true); grid.setColumnLines(true); grid.addPlugin(filters); - + grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - + grid.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener() { - + @Override public void selectionChanged(SelectionChangedEvent se) { // System.out.println("selection grid change"); - + ModelData target = se.getSelectedItem(); - + if(target!=null) enableButtonOnClick(true); else enableButtonOnClick(false); - + } }); - + add(grid); - + createGridToolBar(); createMenuItemsOnGrid(); } public void addJobIntoGrid(JobTaxonomyModel jobModel, TaxonomyJobSpeciesProgressBar jobProgressBar) { - + BaseModelData baseModelData = new BaseModelData(); - + baseModelData.set(JobTaxonomyModel.JOBINDENTIFIER, jobModel.getIdentifier()); baseModelData.set(JobTaxonomyModel.JOBNAME, jobModel.getName()); baseModelData.set(JobTaxonomyModel.PROGRESS, jobProgressBar); @@ -235,81 +235,81 @@ public class TaxonomyGridJob extends ContentPanel{ baseModelData.set(JobTaxonomyModel.SUBMITTIME, jobModel.getSubmitTime()); baseModelData.set(JobTaxonomyModel.ENDTIME, jobModel.getEndTime()); - + baseModelData.set(JobTaxonomyModel.STARTTIME, jobModel.getStartTime()); baseModelData.set(JobTaxonomyModel.ELAPSEDTIME, jobModel.getElapsedTime()); - + baseModelData.set(JobTaxonomyModel.DATASOURCE, jobModel.getDataSource()); baseModelData.set(JobTaxonomyModel.SCIENTIFICNAME, jobModel.getScientificName()); baseModelData.set(JobTaxonomyModel.RANK, jobModel.getRank()); - + baseModelData.set(jobModel.getIdentifier(), jobModel); - + store.add(baseModelData); - + updateJobInfo(jobModel); - + } - - + + /* private void updateStringToDate(BaseModelData baseModel, String property, String dateValue){ - + Date date = null; try { if(dateValue!=null && !dateValue.isEmpty()) date = DateTimeFormat.getFormat(DATE_TIME_FORMAT).parse(dateValue); - + } catch (Exception e) { Log.trace("error in update date "+dateValue); Log.error(e.getMessage()); } - + baseModel.set(property, date); } */ - + private void updateJobInfo(JobTaxonomyModel jobModel){ - + TaxonomyWindowInfoJobsSpecies win=listWindowInfo.get(jobModel.getIdentifier()); if(win==null) win = new TaxonomyWindowInfoJobsSpecies(); - + win.setWindowTitle("Job " + jobModel.getName() + " Status"); win.updateListStore(jobModel); - + listWindowInfo.put(jobModel.getIdentifier(), win); } - + public void updateStatus(JobTaxonomyModel jobModel, TaxonomyJobSpeciesProgressBar jobProgressBar){ - + BaseModelData job = store.findModel(JobTaxonomyModel.JOBINDENTIFIER, jobModel.getIdentifier()); - + if(job!=null){ - + job.set(JobTaxonomyModel.PROGRESS, jobProgressBar); - + // updateStringToDate(job, JobSpeciesModel.STARTTIME, jobModel.getStartTime()); // updateStringToDate(job, JobSpeciesModel.ENDTIME, jobModel.getEndTime()); - + job.set(JobTaxonomyModel.SUBMITTIME, jobModel.getSubmitTime()); job.set(JobTaxonomyModel.STATUS, jobModel.getDownloadState().toString()); job.set(JobTaxonomyModel.ENDTIME, jobModel.getEndTime()); job.set(JobTaxonomyModel.ELAPSEDTIME, jobModel.getElapsedTime()); job.set(JobTaxonomyModel.STARTTIME, jobModel.getStartTime()); job.set(jobModel.getIdentifier(), jobModel); //Store jobModel - + updateJobInfo(jobModel); - + store.update(job); - + // this.layout(); } - + } - + public void removeSpeciesJobByIdentifier(String jobIdentifier) { BaseModelData job = store.findModel(JobTaxonomyModel.JOBINDENTIFIER, jobIdentifier); if(job!=null){ @@ -317,153 +317,153 @@ public class TaxonomyGridJob extends ContentPanel{ // this.layout(); } } - + private void viewInfoJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + TaxonomyWindowInfoJobsSpecies win = listWindowInfo.get(baseModelData.get(JobTaxonomyModel.JOBINDENTIFIER)); win.show(); } - + } - + private void cancelJob() { - + final BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ String name = baseModelData.get(JobTaxonomyModel.JOBNAME); - + MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsSpeciesDiscovery.CONFIRM_DELETE, ConstantsSpeciesDiscovery.MESSAGE_CONFIRM_DELETE_JOB + " "+ name+"?"); mbc.getMessageBoxConfirm().addCallback(new Listener() { - + public void handleEvent(MessageBoxEvent be) { - + //IF CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ - + final String jobIdentifier = baseModelData.get(JobTaxonomyModel.JOBINDENTIFIER); - + SpeciesDiscovery.taxonomySearchService.cancelTaxonomyJob(jobIdentifier, new AsyncCallback() { - + @Override public void onSuccess(Boolean result) { - + if(result) removeSpeciesJobByIdentifier(jobIdentifier); - + } - + @Override public void onFailure(Throwable caught) { Info.display("Error", "An error occurred during the cancel"); Log.error("Error during the cancel", caught.getMessage()); - + } }); } - } - }); + } + }); } - + } - + private void saveJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobTaxonomyModel.STATUS).toString(); - + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 ){ - + String jobIdentifier = baseModelData.get(JobTaxonomyModel.JOBINDENTIFIER); String scientificName = baseModelData.get(JobTaxonomyModel.SCIENTIFICNAME); String dataSource = baseModelData.get(JobTaxonomyModel.DATASOURCE); String rank = baseModelData.get(JobTaxonomyModel.RANK); - + JobTaxonomyModel jobModel = baseModelData.get(jobIdentifier); - + List dataSourceList = new ArrayList(); - + dataSourceList.add(new DataSource(dataSource,dataSource)); - + eventBus.fireEvent(new SaveJobEvent(jobIdentifier, scientificName, dataSourceList, rank, SearchResultType.TAXONOMY_ITEM, jobModel)); } - + else{ String name = baseModelData.get(JobTaxonomyModel.JOBNAME); - MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The job "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The job "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); } } - + } - + private void saveJobErrors() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobTaxonomyModel.STATUS).toString(); - + if(load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0 || load.compareTo(DownloadState.FAILED.toString())==0){ - + String jobIdentifier = baseModelData.get(JobTaxonomyModel.JOBINDENTIFIER); String scientificName = baseModelData.get(JobTaxonomyModel.SCIENTIFICNAME); String dataSource = baseModelData.get(JobTaxonomyModel.DATASOURCE); String rank = baseModelData.get(JobTaxonomyModel.RANK); - + JobTaxonomyModel jobModel = baseModelData.get(jobIdentifier); - + List dataSourceList = new ArrayList(); - + dataSourceList.add(new DataSource(dataSource,dataSource)); - + eventBus.fireEvent(new SaveJobErrorEvent(jobIdentifier, scientificName, dataSourceList, rank, SearchResultType.TAXONOMY_ITEM, jobModel)); } - + else{ String name = baseModelData.get(JobTaxonomyModel.JOBNAME); - MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The error file "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); + MessageBox.alert(ConstantsSpeciesDiscovery.ALERT, "The error file "+ name+ " " +ConstantsSpeciesDiscovery.IS_NOT_COMPLETED, null); } } - + } - + private void resubmitJob() { - + BaseModelData baseModelData = grid.getSelectionModel().getSelectedItem(); - + if(baseModelData!=null){ - + String load = baseModelData.get(JobTaxonomyModel.STATUS).toString(); - + if(load.compareTo(DownloadState.FAILED.toString())==0 || load.compareTo(DownloadState.COMPLETED.toString())==0 || load.compareTo(DownloadState.SAVED.toString())==0){ String jobIdentifier = baseModelData.get(JobTaxonomyModel.JOBINDENTIFIER); - + JobTaxonomyModel jobModel = (JobTaxonomyModel) baseModelData.get(jobIdentifier); //get object JobOccurrencesModel - - eventBus.fireEvent(new ReSubmitJobEvent(SearchResultType.TAXONOMY_ITEM, null, jobModel)); + + eventBus.fireEvent(new ReSubmitJobEvent(SearchResultType.TAXONOMY_ITEM, null, jobModel, null)); } - + else{ String name = baseModelData.get(JobTaxonomyModel.JOBNAME); - MessageBox.alert(INFO, "The job "+ name+" "+ConstantsSpeciesDiscovery.CAN_NOT_BE_RE_SUBMITTED_UNTIL_IT_HAS_COMPLETED, null); + MessageBox.alert(INFO, "The job "+ name+" "+ConstantsSpeciesDiscovery.CAN_NOT_BE_RE_SUBMITTED_UNTIL_IT_HAS_COMPLETED, null); } } - + } - + private void createGridToolBar(){ buttonInfo = new Button(INFO); buttonInfo.setScale(ButtonScale.MEDIUM); @@ -472,19 +472,19 @@ public class TaxonomyGridJob extends ContentPanel{ buttonInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); buttonInfo.setStyleAttribute("margin-left", "5px"); buttonInfo.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(ButtonEvent ce) { viewInfoJob(); } }); - + buttonCancel = new Button(CANCEL); buttonCancel.setScale(ButtonScale.MEDIUM); // buttonCancel.setIconAlign(IconAlign.TOP); // buttonCancel.setArrowAlign(ButtonArrowAlign.BOTTOM); buttonCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); - + buttonCancel.addListener(Events.OnClick, new Listener() { @Override @@ -492,13 +492,13 @@ public class TaxonomyGridJob extends ContentPanel{ cancelJob(); } }); - + buttonSave = new Button(SAVE); buttonSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); buttonSave.setScale(ButtonScale.MEDIUM); // buttonSave.setIconAlign(IconAlign.TOP); // buttonSave.setArrowAlign(ButtonArrowAlign.BOTTOM); - + buttonSave.addListener(Events.OnClick, new Listener() { @Override @@ -506,13 +506,13 @@ public class TaxonomyGridJob extends ContentPanel{ saveJob(); } }); - + buttonSaveError = new Button(SAVE_ERROR); buttonSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); buttonSaveError.setScale(ButtonScale.MEDIUM); // buttonSave.setIconAlign(IconAlign.TOP); // buttonSave.setArrowAlign(ButtonArrowAlign.BOTTOM); - + buttonSaveError.addListener(Events.OnClick, new Listener() { @Override @@ -520,7 +520,7 @@ public class TaxonomyGridJob extends ContentPanel{ saveJobErrors(); } }); - + buttonReSubmit = new Button(RE_SUBMIT); buttonReSubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); buttonReSubmit.setScale(ButtonScale.MEDIUM); @@ -531,47 +531,47 @@ public class TaxonomyGridJob extends ContentPanel{ resubmitJob(); } }); - + buttonRefreshList = new Button(REFRESH_LIST); buttonRefreshList.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getRefresh())); buttonRefreshList.setScale(ButtonScale.MEDIUM); buttonRefreshList.addListener(Events.OnClick, new Listener() { @Override - public void handleEvent(BaseEvent be) { + public void handleEvent(BaseEvent be) { // resetStore(); eventBus.fireEvent(new ReLoadListJobEvent(SearchResultType.TAXONOMY_ITEM)); - + } }); - + toolBar.add(buttonInfo); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonSave); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonSaveError); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonCancel); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonReSubmit); toolBar.add(new SeparatorToolItem()); - - + + toolBar.add(new FillToolItem()); toolBar.add(new SeparatorToolItem()); - + toolBar.add(buttonRefreshList); - + setTopComponent(toolBar); - + enableButtonOnClick(false); } - + public void enableButtonOnClick(boolean bool){ this.buttonCancel.setEnabled(bool); this.buttonInfo.setEnabled(bool); @@ -583,11 +583,11 @@ public class TaxonomyGridJob extends ContentPanel{ public void resetStore(){ store.removeAll(); } - + public void createMenuItemsOnGrid(){ - - MenuItem menuInfo = new MenuItem(); - menuInfo.setText(INFO); + + MenuItem menuInfo = new MenuItem(); + menuInfo.setText(INFO); menuInfo.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getInfoIcon())); menuInfo.addSelectionListener(new SelectionListener() { @@ -598,38 +598,38 @@ public class TaxonomyGridJob extends ContentPanel{ }); menu.add(menuInfo); - - MenuItem menuSave= new MenuItem(); - menuSave.setText(SAVE); + + MenuItem menuSave= new MenuItem(); + menuSave.setText(SAVE); menuSave.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); menuSave.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { saveJob(); } }); - + menu.add(menuSave); - - MenuItem menuSaveError = new MenuItem(); - menuSaveError.setText(SAVE_ERROR); + + MenuItem menuSaveError = new MenuItem(); + menuSaveError.setText(SAVE_ERROR); menuSaveError.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); menuSaveError.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { saveJobErrors(); } }); - + menu.add(menuSaveError); - - MenuItem menuCancel= new MenuItem(); - menuCancel.setText(CANCEL); + + MenuItem menuCancel= new MenuItem(); + menuCancel.setText(CANCEL); menuCancel.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getDelete())); menuCancel.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { @@ -637,25 +637,25 @@ public class TaxonomyGridJob extends ContentPanel{ } }); - + menu.add(menuCancel); - MenuItem menuResubmit= new MenuItem(); - menuResubmit.setText(RE_SUBMIT); + MenuItem menuResubmit= new MenuItem(); + menuResubmit.setText(RE_SUBMIT); menuResubmit.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getReSubmit())); - + menuResubmit.addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(MenuEvent ce) { resubmitJob(); } }); - + menu.add(menuResubmit); grid.setContextMenu(menu); - + } } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/Resources.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/Resources.java index 18fc4fc..5a6ca84 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/Resources.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/Resources.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.user.speciesdiscovery.client.resources; @@ -13,166 +13,173 @@ import com.google.gwt.resources.client.TextResource; * */ public interface Resources extends ClientBundle { - + public Resources INSTANCE = GWT.create(Resources.class); @Source("loading-balls.gif") ImageResource loadingBalls(); - + @Source("detailsview.png") ImageResource getDescriptiveSpeciesIcon(); - + @Source("gridview.png") ImageResource getGridSpeciesIcon(); - + @Source("imagesGrid.png") ImageResource getGridImagesIcon(); - + @Source("collapse.png") ImageResource getCollapse(); - + @Source("expand.png") ImageResource getExpand(); - + @Source("Toggle.js") TextResource getToggleJavaScript(); - + @Source("nopicavailable.png") ImageResource getNoPictureAvailable(); - + @Source("show_products.png") ImageResource getShowProducts(); - + @Source("save_products.png") ImageResource getSaveProducts(); - + @Source("save_products24.png") ImageResource getSaveProducts24(); - + @Source("gis_products.png") ImageResource getGisProducts(); - + // @Source("arrow-down.png") // ImageResource getArrowDown(); -// +// // @Source("arrow-right.png") // ImageResource getArrowRight(); - + @Source("arrow-down.gif") ImageResource getArrowDown(); - + @Source("arrow-right.gif") ImageResource getArrowRight(); - - + + @Source("arrow-turn.png") ImageResource getArrowTurn(); - + @Source("gbif.gif") ImageResource getGbif(); - + @Source("delete.png") ImageResource getDelete(); - + // @Source("order_alphabetical_asc.gif") @Source("sortascending.gif") ImageResource getSortIcon(); - + @Source("info-icon.png") ImageResource getInfoIcon(); - + // @Source("help.jpeg") // ImageResource getHelpIcon(); - + @Source("question-mark.gif") ImageResource getHelpIcon(); - + @Source("checkyes.png") ImageResource getCheckYes(); - + @Source("checkno.png") ImageResource getCheckNo(); - + @Source("gear.png") ImageResource getReSubmit(); - + @Source("credits.png") ImageResource getCredits(); - + @Source("image-notfound.png") ImageResource getImageNotFound(); - + @Source("getSynonyms.png") ImageResource getSynonyms(); - + @Source("search-icon.png") ImageResource getSearch(); @Source("occurrence/blueplace.png") ImageResource getBluePlace(); - + @Source("occurrence/blueplace16px.png") ImageResource getBluePlace16px(); - + @Source("occurrence/blueplace1.png") ImageResource getBluePlace1(); - + @Source("occurrence/blueplace2.png") ImageResource getBluePlace2(); - + @Source("occurrence/blueplace3.png") ImageResource getBluePlace3(); - + @Source("occurrence/blueplace4.png") ImageResource getBluePlace4(); - + @Source("occurrence/blueplace4+.png") ImageResource getBluePlace4More(); - + @Source("taxonomy/taxonomy.png") ImageResource getTaxonomy(); - + @Source("taxonomy/taxonomy16px.png") ImageResource getTaxonomy16px(); - + @Source("taxonomy/taxonomy1.png") ImageResource getTaxonomy1(); - + @Source("taxonomy/taxonomy2.png") ImageResource getTaxonomy2(); - + @Source("taxonomy/taxonomy3.png") ImageResource getTaxonomy3(); - + @Source("taxonomy/taxonomy4.png") ImageResource getTaxonomy4(); - + @Source("taxonomy/taxonomy4More.png") ImageResource getTaxonomy4More(); @Source("refresh.gif") ImageResource getRefresh(); - + @Source("reload-icon.png") ImageResource getReload(); - + @Source("checkbox-empty.png") ImageResource getCheckBoxEmpty(); - + @Source("checkbox-full.png") ImageResource getCheckBoxFull(); - + @Source("select-icon.png") ImageResource getCheckSelected(); - + @Source("datailsWindow.png") ImageResource getDetailsWindow(); - + @Source("attention.png") ImageResource getAttention(); - + + @Source("help.html") TextResource help(); + /** + * @return + */ + + @Source("gislayer/globe.png") + ImageResource getGlobe(); } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/gislayer/globe.png b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/gislayer/globe.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e7652f0e4b23c1f45a9433794f059a42cf522a GIT binary patch literal 1773 zcmV-hrXdXw2Bb(xZKPBM3GyQ?6^MYM(jSp3 zP%F{~qQV~}B#Nji0YV}L1nD%3N>#E>CTcRCnWWxk^K!l2dwti#XCp;IByBBSUF%-^ zJl}c0_x%pSCw#*F&!O3DPkOwr1H&VcN9=aX00G)0S*sWGl}x!*JEv>vKT3sD%?H)M z2fav59^aHmL{9A5Ju%at2w1YYDm0ri2%vN%-?;ZEr};f`PZAD z3Wz3O;Nr3H^ZWLF?x)ia4?3J42c0{Y!Aebn+-d`?b}M;YR&2K<0wRngdciP=u79|g z$u8v%mGZA$eIOtdf1c}$g@5ww;axw}fFL~{17FY$^B=9jrK@?!uQwsk>w&(QA99%@ zILrtdA($;D2n0Q_a3fp)=*q&^ONEmc?h6>1c=70wBVRnN=mZAG;hsI?AgVeEqK22| z3ZQ5P+|I1g^z;zkoXe777+BtDf`!R7HXcPyQsB}Di>2b-+@qD^spbCxBvQx5pL}xL z<%y}7tGLmk>1~5JmX3fZ>-6^v%XsF!3~ZW=!RiW6iFglwa5+msuMPRC2zDl0IP68g z%M9fLPlcuYEMKYYuM~fw-vey^{L8P~a~Ym*G~f zN~)?OGVAEX{7;Lr!ZT6M;=xXsI5SHBm$FzeptR+g+{Ri^Z%OL z*##uhKRy#m^nIly=@?H2VaFp$+WXiDp1)p%XxKxF0l3a`z#Q3e1--ve#(J|&)agJ` zL2s*MFu5MuJOG;qd~|hw1%>r0%$>jXbQdtaeCh1!|Jo^}O8K15GDg(a>PUNs>tyWSkld zfX!m1^-KYsoB{uyz4o;(AhqeG6X@!BNi>_$#sI#skNgoYsul};VRMwuE>sY$X3&{H zh(LyBFn~t7tRj;JbfHadCSaRyf!t`5O%lpoOR3{fKd{}SEq(~~(t4;XZ#br|Y7HZWN=uMG&NUay|WVi6Er}Os!f#^}Y z+aH>>4#XY>w}VVRCvpJ~q((#Z@K^-5CwqXo71}xxOEv0DqGn6MH~)DX_+pi`N)rvC z4SHQ5sZjhuIrp>I{_iyH8~omAcxZ689SX)xJ#H|0?7;cmuw^^~2Oo+;%xh)6 z>h1I4)7xY4*q{$;ib3U;ipwiCb|#7V$BQ3>#$?gfc&OjL^Ohj9y{g&e#9t$gIW#=2)U9u1w=I)<}>x7y)my_9Z*-#~Q<#&gS`_=gm2ttpP6s=5F P00000NkvXXu0mjf%g|7n literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/globe.png b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/resources/globe.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e7652f0e4b23c1f45a9433794f059a42cf522a GIT binary patch literal 1773 zcmV-hrXdXw2Bb(xZKPBM3GyQ?6^MYM(jSp3 zP%F{~qQV~}B#Nji0YV}L1nD%3N>#E>CTcRCnWWxk^K!l2dwti#XCp;IByBBSUF%-^ zJl}c0_x%pSCw#*F&!O3DPkOwr1H&VcN9=aX00G)0S*sWGl}x!*JEv>vKT3sD%?H)M z2fav59^aHmL{9A5Ju%at2w1YYDm0ri2%vN%-?;ZEr};f`PZAD z3Wz3O;Nr3H^ZWLF?x)ia4?3J42c0{Y!Aebn+-d`?b}M;YR&2K<0wRngdciP=u79|g z$u8v%mGZA$eIOtdf1c}$g@5ww;axw}fFL~{17FY$^B=9jrK@?!uQwsk>w&(QA99%@ zILrtdA($;D2n0Q_a3fp)=*q&^ONEmc?h6>1c=70wBVRnN=mZAG;hsI?AgVeEqK22| z3ZQ5P+|I1g^z;zkoXe777+BtDf`!R7HXcPyQsB}Di>2b-+@qD^spbCxBvQx5pL}xL z<%y}7tGLmk>1~5JmX3fZ>-6^v%XsF!3~ZW=!RiW6iFglwa5+msuMPRC2zDl0IP68g z%M9fLPlcuYEMKYYuM~fw-vey^{L8P~a~Ym*G~f zN~)?OGVAEX{7;Lr!ZT6M;=xXsI5SHBm$FzeptR+g+{Ri^Z%OL z*##uhKRy#m^nIly=@?H2VaFp$+WXiDp1)p%XxKxF0l3a`z#Q3e1--ve#(J|&)agJ` zL2s*MFu5MuJOG;qd~|hw1%>r0%$>jXbQdtaeCh1!|Jo^}O8K15GDg(a>PUNs>tyWSkld zfX!m1^-KYsoB{uyz4o;(AhqeG6X@!BNi>_$#sI#skNgoYsul};VRMwuE>sY$X3&{H zh(LyBFn~t7tRj;JbfHadCSaRyf!t`5O%lpoOR3{fKd{}SEq(~~(t4;XZ#br|Y7HZWN=uMG&NUay|WVi6Er}Os!f#^}Y z+aH>>4#XY>w}VVRCvpJ~q((#Z@K^-5CwqXo71}xxOEv0DqGn6MH~)DX_+pi`N)rvC z4SHQ5sZjhuIrp>I{_iyH8~omAcxZ689SX)xJ#H|0?7;cmuw^^~2Oo+;%xh)6 z>h1I4)7xY4*q{$;ib3U;ipwiCb|#7V$BQ3>#$?gfc&OjL^Ohj9y{g&e#9t$gIW#=2)U9u1w=I)<}>x7y)my_9Z*-#~Q<#&gS`_=gm2ttpP6s=5F P00000NkvXXu0mjf%g|7n literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchService.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchService.java index f490122..dcec947 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchService.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchService.java @@ -67,7 +67,7 @@ public interface TaxonomySearchService extends RemoteService { public void stopRetrievingOccurrences() throws SearchServiceException; JobGisLayerModel createGisLayerJobFromSelectedOccurrenceKeys( - String layerTitle, String layerDescr) throws Exception; + String layerTitle, String layerDescr, long totalPoints) throws Exception; // Added by Francesco M. public void saveSelectedOccurrencePoints(String destinationFolderId, @@ -206,4 +206,11 @@ public interface TaxonomySearchService extends RemoteService { ClusterCommonNameDataSourceForTaxonomyRow loadClusterCommonNameForTaxonomyRowByScientificName( String scientificName); + /** + * @return + * @throws Exception + */ + List getListGisLayerJob() + throws Exception; + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchServiceAsync.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchServiceAsync.java index 1cfcc4e..48b35d6 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/rpc/TaxonomySearchServiceAsync.java @@ -59,7 +59,7 @@ public interface TaxonomySearchServiceAsync { void createGisLayerJobFromSelectedOccurrenceKeys( String layerTitle, String layerDescr, - AsyncCallback callback); + long totalPoints, AsyncCallback callback); void saveSelectedOccurrencePoints(String destinationFolderId, String fileName, SaveFileFormat fileFormat, OccurrencesSaveEnum typeCSV, AsyncCallback callback); @@ -169,4 +169,6 @@ public interface TaxonomySearchServiceAsync { String scientificName, AsyncCallback callback); + void getListGisLayerJob(AsyncCallback> callback); + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/windowdetail/ViewDetailsWindow.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/windowdetail/ViewDetailsWindow.java index 8474b4a..3b5d893 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/windowdetail/ViewDetailsWindow.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/windowdetail/ViewDetailsWindow.java @@ -6,11 +6,11 @@ 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.event.CreateGisLayerJobEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.CreateOccurrenceJobEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.CreateTaxonomyJobEvent; import org.gcube.portlets.user.speciesdiscovery.client.event.CreateTaxonomyJobEvent.TaxonomyJobType; import org.gcube.portlets.user.speciesdiscovery.client.event.SearchEvent; -import org.gcube.portlets.user.speciesdiscovery.client.event.ShowOccurrencesMapEvent; import org.gcube.portlets.user.speciesdiscovery.client.gridview.OccurrenceJobGridManager; import org.gcube.portlets.user.speciesdiscovery.client.resources.Resources; import org.gcube.portlets.user.speciesdiscovery.client.util.GridField; @@ -69,7 +69,7 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype; public class ViewDetailsWindow extends Window { protected final ViewDetailsWindow INSTANCE; - + protected StreamPagingLoader loader; protected int count = 0; // private int numberOfSelectedRow = 0; @@ -79,41 +79,41 @@ public class ViewDetailsWindow extends Window { private TabItem tabItemDetails = new TabItem(ConstantsSpeciesDiscovery.DETAILS); private ContentPanel panelDetails = new ContentPanel(); private ContentPanel panelOccurrences = new ContentPanel(); - + private int width = 900; private int height = 600; private int widthPanelOccurrences = 1200; private int heightPanelOccurrences = height-70; public final static String FIVEPX = "5px"; - + // private SearchController searchController; private ToolBar toolbarOccurrences; private DataSourceManager dataSourceManager; - + private ToolBar toolbarTaxonomy; private boolean isSearchByCommonName = false; private Timer timerGetCountOfOccurrences; - + // private List lastlistDataSourceFound = null; - + private DetailsFiller detailsFiller; private SearchEvent lastSearchEvent; public ViewDetailsWindow(SearchEvent lastSearchEvent) { - + INSTANCE = this; this.setCollapsible(false); this.setMaximizable(true); // this.setHideCollapseTool(true); this.dataSourceManager = DataSourceManager.getInstance(); this.lastSearchEvent = lastSearchEvent; - + if(lastSearchEvent.getType().equals(SearchType.BY_COMMON_NAME)) isSearchByCommonName = true; - + container.setHeaderVisible(false); container.setBodyBorder(false); container.setLayout(new FitLayout()); @@ -131,22 +131,22 @@ public class ViewDetailsWindow extends Window { //loader is null if items are taxonomy if(loader!=null) loader.reset(); - + if(timerGetCountOfOccurrences!=null) stopTimerGetCountOfOccurrences(500); - + } }); - + addListener(Events.Resize, new Listener() { public void handleEvent(BoxComponentEvent event) { windowResize(INSTANCE.getWidth(), INSTANCE.getHeight()); } }); - + tabPanel = new TabPanel(); tabPanel.setBorders(false); - + if(lastSearchEvent.getResultType().getName().compareTo(SpeciesCapability.RESULTITEM.getName())==0){ this.toolbarOccurrences = createToolbarOccurrences(); createTabItemDisplayResultItem(); @@ -158,30 +158,30 @@ public class ViewDetailsWindow extends Window { container.add(tabPanel,new FitData(4)); add(container); - + show(); } - + protected void windowResize(int width,int height){ - + if(width>widthPanelOccurrences) panelOccurrences.setWidth(width-20); else panelOccurrences.setWidth(widthPanelOccurrences); - + if(height>heightPanelOccurrences) panelOccurrences.setHeight(height-70); else panelOccurrences.setHeight(heightPanelOccurrences); - + } - - + + private void cretateTabItemDisplayTaxonomyItem() { tabItemDetails.setScrollMode(Scroll.AUTO); - + ContentPanel cpDetailsTaxonomy = new ContentPanel(); cpDetailsTaxonomy.setHeaderVisible(false); cpDetailsTaxonomy.setBodyBorder(false); @@ -192,42 +192,42 @@ public class ViewDetailsWindow extends Window { panelDetails.setHeaderVisible(false); panelDetails.setBodyBorder(false); // panelDetails.setStyleAttribute("padding", FIVEPX); - + panelDetails.setStyleAttribute("padding-left", FIVEPX); panelDetails.setStyleAttribute("padding-right", FIVEPX); panelDetails.setStyleAttribute("padding-bottom", FIVEPX); - + panelDetails.setStyleAttribute("margin-left", FIVEPX); panelDetails.setStyleAttribute("margin-right", FIVEPX); panelDetails.setStyleAttribute("margin-bottom", FIVEPX); - + // panelDetails.setTopComponent(this.toolbarTaxonomy); - + tabItemDetails.add(panelDetails); - + setFocusWidget(getButtonBar().getItem(0)); tabItemDetails.mask("Loading...", ConstantsSpeciesDiscovery.LOADINGSTYLE); enableToolbarTaxonomy(false); - + loadStructuresAndFillingPage(SpeciesCapability.TAXONOMYITEM); - + tabPanel.add(tabItemDetails); - - + + } private void createTabItemDisplayResultItem() { - + tabItemOccrs.setToolTip(new ToolTipConfig("Show Occurrences", "Shows occurences points from selected results.")); - + tabItemDetails.setScrollMode(Scroll.AUTO); - + panelDetails.setHeaderVisible(false); panelDetails.setBodyBorder(false); panelDetails.setStyleAttribute("padding", FIVEPX); panelDetails.setStyleAttribute("margin", FIVEPX); - + // panelDetails.add(createButtonSaveAsHtml()); panelOccurrences.setHeaderVisible(false); @@ -244,68 +244,68 @@ public class ViewDetailsWindow extends Window { setFocusWidget(getButtonBar().getItem(0)); createOccurrencesWindow(); - + tabItemDetails.mask("Loading...",ConstantsSpeciesDiscovery.LOADINGSTYLE); enableToolbarOccurrence(false); // loadNumberOfSelectedRowAndDetailsFilling(SpeciesCapability.RESULTITEM); - + loadStructuresAndFillingPage(SpeciesCapability.RESULTITEM); - + tabPanel.add(tabItemDetails); tabPanel.add(tabItemOccrs); - + } - + private void enableToolbarOccurrence(boolean bool){ toolbarOccurrences.setEnabled(bool); } - + private void enableToolbarTaxonomy(boolean bool){ toolbarTaxonomy.setEnabled(bool); } - - + + public void loadStructuresAndFillingPage(final SpeciesCapability capability){ if(capability.getName().compareTo(SpeciesCapability.RESULTITEM.getName())==0){ - + ResultRowDetailsFiller resultRowFiller = new ResultRowDetailsFiller(tabItemDetails, toolbarOccurrences, panelDetails, lastSearchEvent); resultRowFiller.loadStructuresAndFillingPage(); - + detailsFiller = resultRowFiller; - + }else if(capability.getName().compareTo(SpeciesCapability.TAXONOMYITEM.getName())==0){ TaxonomyRowDetailsFiller taxonomyFiller = new TaxonomyRowDetailsFiller(tabItemDetails, toolbarTaxonomy, tabPanel, panelDetails, lastSearchEvent); taxonomyFiller.loadStructuresAndFillingPage(); - + detailsFiller = taxonomyFiller; } } - + public ToolBar createToolbarTaxonomy(){ - + ToolBar toolbar = new ToolBar(); - - Button btnTaxonomyMenu = new Button(ConstantsSpeciesDiscovery.SAVE_TAXONOMY_ITEMS); + + Button btnTaxonomyMenu = new Button(ConstantsSpeciesDiscovery.SAVE_TAXONOMY_ITEMS); Menu formatSubMenu = new Menu(); - btnTaxonomyMenu.setMenu(formatSubMenu); - btnTaxonomyMenu.setScale(ButtonScale.SMALL); - btnTaxonomyMenu.setIconAlign(IconAlign.TOP); + btnTaxonomyMenu.setMenu(formatSubMenu); + btnTaxonomyMenu.setScale(ButtonScale.SMALL); + btnTaxonomyMenu.setIconAlign(IconAlign.TOP); btnTaxonomyMenu.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); btnTaxonomyMenu.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.SAVE_TAXONOMY_ITEMS, "Save taxonomy items from selected results.")); - + // btnOccurrencesMenu.addSelectionListener(new SelectionListener() { // // @Override // public void componentSelected(ButtonEvent ce) { // searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.TAXONOMY_ITEM, SaveFileFormat.DARWIN_CORE_ARCHIVE, count, null)); -// +// // } // }); - + MenuItem darwinCoreArchiveItem = new MenuItem(ConstantsSpeciesDiscovery.DARWIN_CORE_ARCHIVE); darwinCoreArchiveItem.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.SAVES_IN_DARWIN_CORE_ARCHIVE_FORMAT)); darwinCoreArchiveItem.addSelectionListener(new SelectionListener() { @@ -314,44 +314,44 @@ public class ViewDetailsWindow extends Window { public void componentSelected(MenuEvent ce) { SearchController.eventBus.fireEvent(new CreateTaxonomyJobEvent(TaxonomyJobType.BYIDS)); - -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.TAXONOMY_ITEM, SaveFileFormat.DARWIN_CORE_ARCHIVE, count, null)); + +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.TAXONOMY_ITEM, SaveFileFormat.DARWIN_CORE_ARCHIVE, count, null)); } }); - + formatSubMenu.add(darwinCoreArchiveItem); toolbar.add(btnTaxonomyMenu); - + return toolbar; - - + + } - + public ToolBar createToolbarOccurrences(){ - + ToolBar toolbar = new ToolBar(); - Button btnShowInGisViewer = new Button(ConstantsSpeciesDiscovery.SHOW_IN_GIS_VIEWER); + Button btnShowInGisViewer = new Button(ConstantsSpeciesDiscovery.CREATE_GIS_LAYER); btnShowInGisViewer.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getGisProducts())); - btnShowInGisViewer.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.SHOW_IN_GIS_VIEWER, "Show occurences points from selected results in a Gis Viewer Map.")); - btnShowInGisViewer.setScale(ButtonScale.SMALL); - btnShowInGisViewer.setIconAlign(IconAlign.TOP); - btnShowInGisViewer.setArrowAlign(ButtonArrowAlign.BOTTOM); + btnShowInGisViewer.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.CREATE_GIS_LAYER, "Create a Gis Layer from selected occurences points in a Gis Viewer Map")); + btnShowInGisViewer.setScale(ButtonScale.SMALL); + btnShowInGisViewer.setIconAlign(IconAlign.TOP); + btnShowInGisViewer.setArrowAlign(ButtonArrowAlign.BOTTOM); btnShowInGisViewer.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { - SearchController.eventBus.fireEvent(new ShowOccurrencesMapEvent(count)); + SearchController.eventBus.fireEvent(new CreateGisLayerJobEvent(lastSearchEvent.getSearchTerm() +" Occurrences layer", "Gis Layer generated from SPD Portlet by gCube Framework", count)); } }); - - - Button btnOccurrencesMenu = new Button(ConstantsSpeciesDiscovery.SAVE_OCCURRENCES); + + + Button btnOccurrencesMenu = new Button(ConstantsSpeciesDiscovery.SAVE_OCCURRENCES); Menu formatSubMenu = new Menu(); - btnOccurrencesMenu.setMenu(formatSubMenu); - btnOccurrencesMenu.setScale(ButtonScale.SMALL); - btnOccurrencesMenu.setIconAlign(IconAlign.TOP); + btnOccurrencesMenu.setMenu(formatSubMenu); + btnOccurrencesMenu.setScale(ButtonScale.SMALL); + btnOccurrencesMenu.setIconAlign(IconAlign.TOP); btnOccurrencesMenu.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); btnOccurrencesMenu.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.SAVE_OCCURRENCES, ConstantsSpeciesDiscovery.SAVE_OCCURENCES_POINTS_FROM_SELECTED_RESULTS)); @@ -361,143 +361,143 @@ public class ViewDetailsWindow extends Window { @Override public void componentSelected(MenuEvent ce) { -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); - +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - - SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD, detailsFiller.getLastlistDataSourceFound(), searchTerm,false)); + + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD, detailsFiller.getLastlistDataSourceFound(), searchTerm,false)); } }); - - + + formatSubMenu.add(csvFormatItem); - - Menu csvTypeMenu = new Menu(); - + + Menu csvTypeMenu = new Menu(); + MenuItem csvStandard = new MenuItem(ConstantsSpeciesDiscovery.PLAIN_CSV); - + csvStandard.addSelectionListener(new SelectionListener() { @Override public void componentSelected(MenuEvent ce) { -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); - +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD, detailsFiller.getLastlistDataSourceFound(), searchTerm,false)); } }); - - + + MenuItem csvStandardByDataSource = new MenuItem(ConstantsSpeciesDiscovery.PLAIN_CSV_BY_DATA_SOURCE); - + csvStandardByDataSource.addSelectionListener(new SelectionListener() { @Override public void componentSelected(MenuEvent ce) { -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); - +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.STANDARD, detailsFiller.getLastlistDataSourceFound(), searchTerm,true)); } }); - - + + MenuItem csvOpenModeller = new MenuItem(ConstantsSpeciesDiscovery.OPEN_MODELLER); - + csvOpenModeller.addSelectionListener(new SelectionListener() { @Override public void componentSelected(MenuEvent ce) { - -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER)); - + +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER, detailsFiller.getLastlistDataSourceFound(), searchTerm,false)); } }); - - + + MenuItem csvOpenModellerByDataSource = new MenuItem(ConstantsSpeciesDiscovery.OPEN_MODELLER_BY_DATA_SOURCE); - + csvOpenModellerByDataSource.addSelectionListener(new SelectionListener() { @Override public void componentSelected(MenuEvent ce) { - -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER)); - + +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.CSV, count, OccurrencesSaveEnum.OPENMODELLER, detailsFiller.getLastlistDataSourceFound(), searchTerm,true)); } }); - - csvTypeMenu.add(csvStandard); - + + csvTypeMenu.add(csvStandard); + csvTypeMenu.add(csvStandardByDataSource); - - csvTypeMenu.add(csvOpenModeller); - + + csvTypeMenu.add(csvOpenModeller); + csvTypeMenu.add(csvOpenModellerByDataSource); - - csvFormatItem.setSubMenu(csvTypeMenu); - + + csvFormatItem.setSubMenu(csvTypeMenu); + MenuItem darwinCoreFormatItem = new MenuItem(ConstantsSpeciesDiscovery.DARWIN_CORE); darwinCoreFormatItem.setToolTip(new ToolTipConfig(ConstantsSpeciesDiscovery.SAVES_IN_DARWIN_CORE_FILE_FORMAT)); darwinCoreFormatItem.addSelectionListener(new SelectionListener() { @Override public void componentSelected(MenuEvent ce) { -// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.DARWIN_CORE, count, null)); - +// searchController.getEventBus().fireEvent(new SaveItemsEvent(SearchResultType.OCCURRENCE_POINT, SaveFileFormat.DARWIN_CORE, count, null)); + String searchTerm = OccurrenceJobGridManager.getSearchTermBySearchType(isSearchByCommonName, lastSearchEvent.getSearchTerm()); - + SearchController.eventBus.fireEvent(new CreateOccurrenceJobEvent(SaveFileFormat.DARWIN_CORE, count, null, detailsFiller.getLastlistDataSourceFound(), searchTerm, false)); } }); formatSubMenu.add(darwinCoreFormatItem); - + toolbar.add(btnOccurrencesMenu); toolbar.add(new SeparatorToolItem()); toolbar.add(btnShowInGisViewer); return toolbar; } - - + + protected void initLoader() { loader = new StreamPagingLoader(ConstantsSpeciesDiscovery.PAGE_SIZE); - + // loader = new StreamPagingLoader(PAGE_SIZE); loader.setDataSource(dataSourceManager.getDataSourceByResultType(SpeciesCapability.OCCURRENCESPOINTS)); } - + public void createOccurrencesWindow() { - + List config = new ArrayList(); - + for (GridField field:OccurencesGridFields.values()) config.add(Util.createColumnConfig(field, 150)); - + final ColumnModel cm = new ColumnModel(config); - + initLoader(); - - Grid grid = new Grid(loader.getStore(), cm); + + Grid grid = new Grid(loader.getStore(), cm); grid.setBorders(true); grid.getView().setEmptyText(ConstantsSpeciesDiscovery.NORESULTS); StreamPagingToolBar toolBar = new StreamPagingToolBar(); toolBar.bind(loader); - + panelOccurrences.setBottomComponent(toolBar); - panelOccurrences.add(grid); + panelOccurrences.add(grid); } public void loadOccurences() @@ -508,95 +508,95 @@ public class ViewDetailsWindow extends Window { dataSourceManager.setExpectedOccurencePoints(count); SpeciesDiscovery.taxonomySearchService.retrieveOccurencesFromSelection(new AsyncCallback() { - + @Override public void onSuccess(Integer expectedPoints) { Log.trace("Expected points: "+expectedPoints); dataSourceManager.setExpectedOccurencePoints(expectedPoints); - + count = expectedPoints.intValue(); - String items = count>0?"items":"item"; + String items = count>0?"items":"item"; tabItemOccrs.setText(tabItemOccrs.getText() + " ("+count +" "+ items+")"); - + dataSourceManager.setExpectedOccurencePoints(count); // count = expectedPoints; loader.startLoading(true); - + pollingGetCountOfOcccurrences(count); - + } - + @Override public void onFailure(Throwable caught) { - Info.display("Error getting occurrences", "Error getting occurrences, retry"); + Info.display("Error getting occurrences", "Error getting occurrences, retry"); Log.trace("Error getting occurrences", caught); } }); } - - + + private void pollingGetCountOfOcccurrences(final int allItems){ - + toolbarOccurrences.add(new SeparatorToolItem()); final Label labelLoading = new Label("loading 0 of "+allItems); labelLoading.setStyleAttribute("paddingLeft", "20px"); labelLoading.setData("count", new Integer(0)); toolbarOccurrences.add(labelLoading); - + timerGetCountOfOccurrences = new Timer() { @Override public void run() { - + SpeciesDiscovery.taxonomySearchService.getCountOfOccurrencesBatch(new AsyncCallback() { @Override public void onFailure(Throwable caught) { Log.error("Error on loading", "An error occurred on count of occurrence point, retry." +caught.getMessage()); - + } @Override public void onSuccess(OccurrencesStatus result) { - + int currentValue = ((Integer) labelLoading.getData("count")).intValue(); - - + + if(result.getSize()>currentValue && result.getSize()() { @@ -644,59 +644,59 @@ public class ViewDetailsWindow extends Window { @Override public void onFailure(Throwable caught) { Log.error("An error occurred in stopRetrievingOccurrences: " + caught); - + } @Override public void onSuccess(Void result) { Log.trace("Stop retrieving Occurrences: OK"); - + } }); } - + } }); } - - - - - //TEST - public Button createButtonSaveAsHtml(){ - - ToolBar toolbar = new ToolBar(); - Button btnExportAsHtml = new Button("Export As Html"); - btnExportAsHtml.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); - btnExportAsHtml.setToolTip(new ToolTipConfig("Show in Gis Viewer", "Show occurences points from selected results in a Gis Viewer Map.")); - btnExportAsHtml.setScale(ButtonScale.SMALL); - btnExportAsHtml.setIconAlign(IconAlign.TOP); - btnExportAsHtml.setArrowAlign(ButtonArrowAlign.BOTTOM); - btnExportAsHtml.addSelectionListener(new SelectionListener() { - @Override - public void componentSelected(ButtonEvent ce) { -// searchController.getEventBus().fireEvent(new ShowOccurrencesMapEvent()); - - String html = " " + - "" + - "" + - ""+lastSearchEvent.getSearchTerm()+"" + - "" + - " "+panelDetails.getElement().getInnerHTML()+"" + - " "; - -// System.out.println(html); - } - }); - return btnExportAsHtml; - } - - +// //TEST +// public Button createButtonSaveAsHtml(){ +// +// ToolBar toolbar = new ToolBar(); +// +// Button btnExportAsHtml = new Button("Export As Html"); +// btnExportAsHtml.setIcon(AbstractImagePrototype.create(Resources.INSTANCE.getSaveProducts())); +// btnExportAsHtml.setToolTip(new ToolTipConfig("Show in Gis Viewer", "Show occurences points from selected results in a Gis Viewer Map.")); +// btnExportAsHtml.setScale(ButtonScale.SMALL); +// btnExportAsHtml.setIconAlign(IconAlign.TOP); +// btnExportAsHtml.setArrowAlign(ButtonArrowAlign.BOTTOM); +// btnExportAsHtml.addSelectionListener(new SelectionListener() { +// +// @Override +// public void componentSelected(ButtonEvent ce) { +//// searchController.getEventBus().fireEvent(new ShowOccurrencesMapEvent()); +// +// String html = " " + +// "" + +// "" + +// ""+lastSearchEvent.getSearchTerm()+"" + +// "" + +// " "+panelDetails.getElement().getInnerHTML()+"" + +// " "; +// +//// System.out.println(html); +// } +// }); +// +// return btnExportAsHtml; +// +// } + + private String getCssStyles(){ return ".button-hyperlink .x-btn-text {" + diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java index 75ffc45..31bfe8c 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java @@ -37,7 +37,7 @@ import org.gcube.portlets.user.speciesdiscovery.client.model.ClassificationModel import org.gcube.portlets.user.speciesdiscovery.client.rpc.TaxonomySearchService; import org.gcube.portlets.user.speciesdiscovery.client.util.GridField; import org.gcube.portlets.user.speciesdiscovery.server.asl.SessionUtil; -import org.gcube.portlets.user.speciesdiscovery.server.job.GisLinkJobUtil; +import org.gcube.portlets.user.speciesdiscovery.server.job.GisLayerJobUtil; import org.gcube.portlets.user.speciesdiscovery.server.job.OccurrenceJobUtil; import org.gcube.portlets.user.speciesdiscovery.server.job.OccurrenceKeys; import org.gcube.portlets.user.speciesdiscovery.server.job.TaxonomyJobUtil; @@ -71,6 +71,7 @@ import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceModel; import org.gcube.portlets.user.speciesdiscovery.shared.DatabaseServiceException; import org.gcube.portlets.user.speciesdiscovery.shared.DownloadState; import org.gcube.portlets.user.speciesdiscovery.shared.FetchingElement; +import org.gcube.portlets.user.speciesdiscovery.shared.GisLayerJob; import org.gcube.portlets.user.speciesdiscovery.shared.ItemParameter; import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; import org.gcube.portlets.user.speciesdiscovery.shared.JobOccurrencesModel; @@ -849,7 +850,7 @@ public class TaxonomySearchServiceImpl extends RemoteServiceServlet implements T * {@inheritDoc} */ @Override - public JobGisLayerModel createGisLayerJobFromSelectedOccurrenceKeys(String layerTitle, String layerDescr) throws Exception { + public JobGisLayerModel createGisLayerJobFromSelectedOccurrenceKeys(String layerTitle, String layerDescr, long totalPoints) throws Exception { try { List occurrenceKeys = getSelectedOccurrenceKeys(); @@ -857,11 +858,7 @@ public class TaxonomySearchServiceImpl extends RemoteServiceServlet implements T String author = getASLSession().getUsername(); String credits = ""; GisLayerJobPersistence gisLayerJob = DaoSession.getGisLayersJobDAO(getASLSession()); - GisLinkJobUtil.createGisLayerJobByOccurrenceKeys(occurrenceKeys, taxonomyService, layerTitle, layerDescr, author, credits, gisLayerJob); - logger.trace("Generating Map form Occurrence Keys selected: "+occurrenceKeys.size()); - String jobId = taxonomyService.generateMapFromOccurrenceKeys(occurrenceKeys,layerTitle,layerDescr,author,credits); - logger.info("generated gis layer jobID: "+jobId); - return new JobGisLayerModel(jobId, layerTitle, 0, Calendar.getInstance().getTimeInMillis(), 0, layerDescr, DownloadState.PENDING.toString()); + return GisLayerJobUtil.createGisLayerJobByOccurrenceKeys(occurrenceKeys, taxonomyService, layerTitle, layerDescr, author, credits, totalPoints, gisLayerJob); } catch (Exception e) { logger.error("An error occurred creating the map", e); throw new Exception(e.getMessage()); @@ -1706,6 +1703,55 @@ public class TaxonomySearchServiceImpl extends RemoteServiceServlet implements T } + + @Override + public List getListGisLayerJob() throws Exception{ + logger.info("getListGisLayerJob... "); + List listJobs = new ArrayList(); + + try { + + GisLayerJobPersistence gisLayerJobDao = DaoSession.getGisLayersJobDAO(getASLSession()); + Iterator iterator = gisLayerJobDao.getList().iterator(); + SpeciesService taxonomyService = getSpeciesService(); + + while (iterator!=null && iterator.hasNext()) { + GisLayerJob job = iterator.next(); + CompleteJobStatus statusResponse = taxonomyService.getOccurrenceJobById(job.getId()); + logger.info("get occurrence job "+job.getId()+ " from service"); + + try{ + + if(statusResponse!=null){ + logger.info("statusResponse of gis layer job is not null..." + job.getId()); + JobGisLayerModel convertJob = GisLayerJobUtil.convertJob(job, statusResponse, gisLayerJobDao); + + if(convertJob!=null){ + logger.info("added list jobOccurrenceId: "+convertJob.getJobIdentifier() + " status "+convertJob.getDownloadState()); + listJobs.add(convertJob); + } + } + else{ + logger.info("statusResponse of occurrence job is null..." + job.getId()); + logger.info("deleting job ..." + job.getId()); + GisLayerJobUtil.deleteGisLayerJobById(job.getId(),gisLayerJobDao); + } + + }catch (Exception e) { + e.printStackTrace(); + logger.error("Error on getListGisLayerJob ", e); + throw new Exception("Error on getListGisLayerJob", e); + } + } + + } catch (Exception e) { + logger.error("Error on get iterator "+e, e); + } + + return listJobs; + + } + @Override public boolean saveOccurrenceJob(JobOccurrencesModel jobModel, String destinationFolderId, String fileName, String scientificName, String dataSourceName) throws Exception { logger.info("saveOccurrenceJob jobId: "+jobModel.getJobIdentifier()+" destinationFolderId: "+destinationFolderId+" fileName: "+fileName + " file format: "+jobModel.getFileFormat()); diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLayerJobUtil.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLayerJobUtil.java new file mode 100644 index 0000000..b97616a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLayerJobUtil.java @@ -0,0 +1,212 @@ +/** + * + */ +package org.gcube.portlets.user.speciesdiscovery.server.job; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; +import org.gcube.data.spd.model.service.types.CompleteJobStatus; +import org.gcube.data.spd.model.service.types.JobStatus; +import org.gcube.portlets.user.speciesdiscovery.server.persistence.dao.GisLayerJobPersistence; +import org.gcube.portlets.user.speciesdiscovery.server.service.SpeciesService; +import org.gcube.portlets.user.speciesdiscovery.server.util.DateUtil; +import org.gcube.portlets.user.speciesdiscovery.shared.DownloadState; +import org.gcube.portlets.user.speciesdiscovery.shared.GisLayerJob; +import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; + + +/** + * The Class GisLinkJobUtil. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 9, 2017 + */ +public class GisLayerJobUtil { + + protected static Logger logger = Logger.getLogger(GisLayerJobUtil.class); + + + /** + * Creates the gis layer job by occurrence keys. + * + * @param occurrenceKeys the occurrence keys + * @param taxonomyService the taxonomy service + * @param layerTitle the layer title + * @param layerDescr the layer descr + * @param author the author + * @param credits the credits + * @param gisLayerJob the gis layer job + * @return the job gis layer model + * @throws Exception the exception + */ + public static JobGisLayerModel createGisLayerJobByOccurrenceKeys(List occurrenceKeys, SpeciesService taxonomyService, String layerTitle, String layerDescr, String author, String credits, long totalPoints, GisLayerJobPersistence gisLayerJob) throws Exception { + + try { + logger.trace("Generating Map form Occurrence Keys selected: "+occurrenceKeys.size()); + String jobId = taxonomyService.generateGisLayerFromOccurrenceKeys(occurrenceKeys,layerTitle,layerDescr,author,credits); + logger.info("generated gis layer jobID: "+jobId); + Date submitTime = DateUtil.getDateFormat(Calendar.getInstance()); + GisLayerJob gisLJ = new GisLayerJob(jobId, layerTitle, 0, submitTime.getTime(), 0, 0, layerDescr, DownloadState.PENDING.toString(), totalPoints); + gisLayerJob.insert(gisLJ); + return new JobGisLayerModel(jobId, layerTitle, DownloadState.PENDING,null, submitTime, null, null, layerDescr, 0, totalPoints); + } catch (Exception e) { + logger.error("An error occurred creating the map", e); + throw new Exception(e.getMessage()); + } + } + + + + /** + * Convert job. + * + * @param job the job + * @param statusResponse the status response + * @param gisLayerJobP the gis layer job p + * @return the job gis layer model + */ + public static JobGisLayerModel convertJob(GisLayerJob job, CompleteJobStatus statusResponse, GisLayerJobPersistence gisLayerJobP){ + + //TODO SET END TIME + JobGisLayerModel jobGisModel; + DownloadState downloadState = null; + long endTime = 0; + + JobStatus status = statusResponse.getStatus(); + downloadState = getDownloadState(status); + logger.trace("gis layer jobId: "+job.getId() +" download state: " + downloadState); + + if(downloadState==null) //Case with exception + return null; + + //SET SUBMIT TIME + long submitTime = job.getSubmitTime(); + Date submit = DateUtil.millisecondsToDate(submitTime); +// int completedEntry = 0; +// if(statusResponse.getCompletedEntries()>0) +// completedEntry = statusResponse.getCompletedEntries(); + + boolean changeStatus = false; + + //if status is completed and job was saved, update status as saved + if(downloadState.equals(DownloadState.COMPLETED)){ + if(job.getState().compareTo(DownloadState.SAVED.toString())==0){ + downloadState = DownloadState.SAVED; + changeStatus = true; + } + } + + int completedEntry = 0; + if(statusResponse.getCompletedEntries()>0) + completedEntry = statusResponse.getCompletedEntries(); + + //TODO + jobGisModel = new JobGisLayerModel(job.getId(), job.getName(), downloadState, completedEntry, job.getTotalPoints()); + jobGisModel.setSubmitTime(submit); + + try{ + + boolean changeEndTime = false; + + //UPDATE END TIME + if(downloadState.equals(DownloadState.FAILED) || downloadState.equals(DownloadState.COMPLETED)){ + if(statusResponse.getEndDate()!=null && job.getEndTime()==0){ //UPDATE end time first time only + logger.trace("UPDATE end time first time only - " + downloadState); + endTime = statusResponse.getEndDate().getTimeInMillis(); + job.setEndTime(endTime); + changeEndTime = true; + } + } + + boolean changeStartTime = false; + //SET START TIME + long startTime = job.getStartTime(); + if(statusResponse.getStartDate()!=null && startTime==0){ //UPDATE start time first time only + Date start = DateUtil.millisecondsToDate(statusResponse.getStartDate().getTimeInMillis()); + jobGisModel.setStartTime(start); + changeStartTime = true; + } + + //UPDATE DAO + if(changeStatus || changeEndTime || changeStartTime){ + job.setState(downloadState.toString()); + gisLayerJobP.update(job); + } + + }catch (Exception e) { + logger.error("An error occurred on update the occurrencesJobDao ", e); + } + + + endTime = job.getEndTime(); + long elapsedTime = 0; + + //SET END TIME, BECAUSE IT IS CHANGED + if(endTime!=0){ + Date end = DateUtil.millisecondsToDate(endTime); + jobGisModel.setEndTime(end); + elapsedTime = endTime; + } + else + elapsedTime = Calendar.getInstance().getTimeInMillis(); + + //SET ELAPSED TIME + jobGisModel.setElapsedTime(DateUtil.getDifference(submitTime, elapsedTime)); + return jobGisModel; + } + + /** + * Gets the download state. + * + * @param status the status + * @return the download state + */ + public static DownloadState getDownloadState(JobStatus status){ + + if(status!=null){ + switch (status) { + case COMPLETED: + return DownloadState.COMPLETED; + case FAILED: + return DownloadState.FAILED; + case PENDING: + return DownloadState.PENDING; + case RUNNING: + return DownloadState.ONGOING; + default: + return null; + } + } + + return null; + } + + + /** + * Delete gis layer job by id. + * + * @param jobIdentifier the job identifier + * @param gisLayerJobDao the gis layer job dao + * @return the int + */ + public static int deleteGisLayerJobById(String jobIdentifier, GisLayerJobPersistence gisLayerJobDao){ + logger.trace("Delete gis layer job id: " + jobIdentifier); + + try{ + int removed = gisLayerJobDao.deleteItemByIdField(jobIdentifier); + return 1; + + }catch (Exception e) { + logger.error("An error occured deleteGisLayerJobById jobId: " + jobIdentifier + " exception: "+e, e); + + } + + logger.trace("job not exists : " +jobIdentifier); + return 0; + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLinkJobUtil.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLinkJobUtil.java deleted file mode 100644 index 00dee69..0000000 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/job/GisLinkJobUtil.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.speciesdiscovery.server.job; - -import java.util.Calendar; -import java.util.List; - -import org.apache.log4j.Logger; -import org.gcube.portlets.user.speciesdiscovery.server.persistence.dao.GisLayerJobPersistence; -import org.gcube.portlets.user.speciesdiscovery.server.service.SpeciesService; -import org.gcube.portlets.user.speciesdiscovery.shared.DownloadState; -import org.gcube.portlets.user.speciesdiscovery.shared.GisLayerJob; -import org.gcube.portlets.user.speciesdiscovery.shared.JobGisLayerModel; - - -/** - * The Class GisLinkJobUtil. - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Feb 9, 2017 - */ -public class GisLinkJobUtil { - - protected static Logger logger = Logger.getLogger(GisLinkJobUtil.class); - - - /** - * Creates the gis layer job by occurrence keys. - * - * @param occurrenceKeys the occurrence keys - * @param taxonomyService the taxonomy service - * @param layerTitle the layer title - * @param layerDescr the layer descr - * @param author the author - * @param credits the credits - * @param gisLayerJob the gis layer job - * @return the job gis layer model - * @throws Exception the exception - */ - public static JobGisLayerModel createGisLayerJobByOccurrenceKeys(List occurrenceKeys, SpeciesService taxonomyService, String layerTitle, String layerDescr, String author, String credits, GisLayerJobPersistence gisLayerJob) throws Exception { - - try { - logger.trace("Generating Map form Occurrence Keys selected: "+occurrenceKeys.size()); - String jobId = taxonomyService.generateMapFromOccurrenceKeys(occurrenceKeys,layerTitle,layerDescr,author,credits); - logger.info("generated gis layer jobID: "+jobId); - GisLayerJob gisLJ = new GisLayerJob(jobId, layerTitle, 0, Calendar.getInstance().getTimeInMillis(), 0, layerDescr, DownloadState.PENDING.toString()); - gisLayerJob.insert(gisLJ); - - return new JobGisLayerModel(jobId, layerTitle, 0, Calendar.getInstance().getTimeInMillis(), 0, layerDescr, DownloadState.PENDING.toString()); - } catch (Exception e) { - logger.error("An error occurred creating the map", e); - throw new Exception(e.getMessage()); - } - } - -} diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java index 8764f93..395e958 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java @@ -469,9 +469,8 @@ public class SpeciesService { } - /** - * Generate map from occurrence keys. + * Generate gis layer from occurrence keys. * * @param occurrenceKeys the occurrence keys * @param layerTitle the layer title @@ -481,7 +480,7 @@ public class SpeciesService { * @return the string * @throws SearchServiceException the search service exception */ - public String generateMapFromOccurrenceKeys(List occurrenceKeys, String layerTitle, String layerDescr, String author, String credits) throws SearchServiceException { + public String generateGisLayerFromOccurrenceKeys(List occurrenceKeys, String layerTitle, String layerDescr, String author, String credits) throws SearchServiceException { try { ExecutorClient creator = AbstractPlugin.executor().build(); @@ -497,6 +496,69 @@ public class SpeciesService { } } + + /** + * Gets the gis layer by job id. + * + * @param serverJobId the server job id + * @return the gis layer by job id + * @throws SearchServiceException the search service exception + */ + public CompleteJobStatus getGisLayerByJobId(String serverJobId) throws SearchServiceException { + + try { + ExecutorClient creator = AbstractPlugin.executor().build(); + return creator.getStatus(serverJobId); + } + catch (InvalidIdentifierException e) { + logger.error( + "Error calling the Species Service: " + e.getMessage(), e); + throw new SearchServiceException( + "Error calling the Species Service: " + e.getMessage()); + } + } + + + /** + * Gets the gis layer result link by job id. + * + * @param serverJobId the server job id + * @return the gis layer result link by job id + * @throws SearchServiceException the search service exception + */ + public String getGisLayerResultLinkByJobId(String serverJobId) throws SearchServiceException { + + try { + ExecutorClient creator = AbstractPlugin.executor().build(); + return creator.getResultLink(serverJobId); + } + catch (InvalidIdentifierException e) { + logger.error( + "Error calling the Species Service: " + e.getMessage(), e); + throw new SearchServiceException( + "Error calling the Species Service: " + e.getMessage()); + } + } + + /** + * Removes the gis layer by job id. + * + * @param serverJobId the server job id + * @return the string + * @throws SearchServiceException the search service exception + */ + public void removeGisLayerByJobId(String serverJobId) { + + try { + ExecutorClient creator = AbstractPlugin.executor().build(); + creator.removeJob(serverJobId); + } + catch (Exception e) { + logger.error( + "Error calling the Species Service: " + e.getMessage(), e); + } + } + /** * Gets the taxon children by parent id. * @@ -711,12 +773,8 @@ public class SpeciesService { public CompleteJobStatus getOccurrenceJobById(String jobId) { try { - return this.executorCall.getStatus(jobId); // CHANGE INTO OCCURRENCE - // JOB - // ************************************************************************************** - // //TODO - } - catch (InvalidIdentifierException e) { + return this.executorCall.getStatus(jobId); + }catch (InvalidIdentifierException e) { logger.error("Error on service for get job by Id - InvalidIdentifierException"); return null; } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/util/DateUtil.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/util/DateUtil.java index c80a55b..1b7a271 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/util/DateUtil.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/util/DateUtil.java @@ -12,77 +12,121 @@ import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery import org.joda.time.DateTime; import org.joda.time.Days; + + +/** + * The Class DateUtil. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 10, 2017 + */ public class DateUtil { - + + /** + * The Enum TIMETYPE. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 10, 2017 + */ public static enum TIMETYPE{DAYS, HOURS, MINUTES, SECONDS}; - + public static Logger logger = Logger.getLogger(DateUtil.class); - + public static final String DATE_TIME_FORMAT = "yyyy.MM.dd 'at' HH:mm:ss"; - + public static final String DATE_TIME_FORMAT_2 = "dd-MM, yyyy HH:mm:ss z"; - - + + + /** + * To date. + * + * @param calendar the calendar + * @return the date + */ public static Date toDate(Calendar calendar) { if (calendar == null) return new Date(0); return calendar.getTime(); } - + + /** + * To date format to string. + * + * @param calendar the calendar + * @return the string + */ public static String toDateFormatToString(Calendar calendar){ - + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT); - + Date resultdate = getDate(calendar); - + return dateFormat.format(resultdate); } - - + + + /** + * To date format. + * + * @param calendar the calendar + * @return the date + */ public static Date toDateFormat(Calendar calendar){ - + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT); - + Date resultdate = getDate(calendar); - + try { - + resultdate = dateFormat.parse(dateFormat.format(resultdate)); - + } catch (ParseException e) { logger.error(e.getMessage()); resultdate = new Date(0); } - + return resultdate; } - - + + + /** + * Gets the date format. + * + * @param calendar the calendar + * @return the date format + */ public static Date getDateFormat(Calendar calendar){ - + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT); Date resultdate = null; - + if (calendar == null) resultdate = new Date(0); else resultdate = getDate(calendar); - + try { - + resultdate = dateFormat.parse(dateFormat.format(resultdate)); - + } catch (ParseException e) { logger.error(e.getMessage()); resultdate = new Date(0); } - + return resultdate; } - - + + + /** + * Gets the date. + * + * @param calendar the calendar + * @return the date + */ public static Date getDate(Calendar calendar) { Date resultdate = null; @@ -95,28 +139,40 @@ public class DateUtil { return resultdate; } - + + /** + * String to date format. + * + * @param date the date + * @return the date + */ public static Date stringToDateFormat(String date){ - + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT); Date resultdate = null; - + try { resultdate = dateFormat.parse(date); } catch (ParseException e) { logger.error(e.getMessage()); resultdate = new Date(0); } - + return resultdate; } - - + + + /** + * Date to date format string. + * + * @param date the date + * @return the string + */ public static String dateToDateFormatString(Date date){ - + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT); String dateString = null; - + if(date!=null) dateString = dateFormat.format(date); else @@ -124,42 +180,57 @@ public class DateUtil { return dateString; } - + + /** + * Milliseconds to date. + * + * @param milliseconds the milliseconds + * @return the date + */ public static Date millisecondsToDate(long milliseconds){ - + Date date = null; - + try { date= new Date(milliseconds); } catch (Exception e) { logger.error(e.getMessage()); date = new Date(0); } - + return date; } - + + /** + * Gets the difference. + * + * @param date1 the date1 + * @param date2 the date2 + * @param timeType the time type + * @return the difference + */ public static long getDifference(long date1, long date2, TIMETYPE timeType){ - + // Calculates the difference in milliseconds. long millisDiff = date2 - date1; switch (timeType) { - case DAYS: return (long) (millisDiff / 86400000); - case HOURS: return (long) (millisDiff / 3600000 % 24); - case MINUTES: return (long) (millisDiff / 60000 % 60); - case SECONDS: return (long) (millisDiff / 1000 % 60); - + case DAYS: return millisDiff / 86400000; + case HOURS: return millisDiff / 3600000 % 24; + case MINUTES: return millisDiff / 60000 % 60; + case SECONDS: return millisDiff / 1000 % 60; + default: - return (long) (millisDiff / 1000 % 60); - } + return millisDiff / 1000 % 60; + } } - - + + /** - * - * @param date1 - * @param date2 + * Gets the difference. + * + * @param date1 the date1 + * @param date2 the date2 * @return difference between two date in this format: N°day/days HH:mm:ss */ public static String getDifference(long date1, long date2){ @@ -169,14 +240,14 @@ public class DateUtil { DateFormat outFormat = new SimpleDateFormat(ConstantsSpeciesDiscovery.TIMEFORMAT_HH_MM_SS); outFormat.setTimeZone(TimeZone.getTimeZone(ConstantsSpeciesDiscovery.TIME_ZONE_UTC)); int days = Days.daysBetween(new DateTime(date1), new DateTime(date2)).getDays(); - + if(days>0){ String hours = outFormat.format(date); return days==1?days + " Day, "+hours:days + " Days, "+hours; } else return outFormat.format(date); - + } } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/DefaultJob.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/DefaultJob.java index 380c04c..02f8f4e 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/DefaultJob.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/DefaultJob.java @@ -25,6 +25,7 @@ public class DefaultJob implements Serializable{ public final static String SUBMITTIME = "submitTime"; public final static String ENDTIME = "endTime"; public static final String STATE = "state"; + public static final String ELAPSEDTIME = "Elapsed Time"; protected String id; protected String name; @@ -33,6 +34,8 @@ public class DefaultJob implements Serializable{ protected long endTime; protected String description; protected String state; + protected long elapsedTime; + /** * @@ -42,21 +45,22 @@ public class DefaultJob implements Serializable{ } + /** - * Instantiates a new default job. - * - * @param id the id - * @param name the name - * @param startTime the start time - * @param submitTime the submit time - * @param endTime the end time - * @param description the description - * @param state the state + * @param id + * @param name + * @param startTime + * @param submitTime + * @param endTime + * @param description + * @param state + * @param elapsedTime */ public DefaultJob( String id, String name, long startTime, long submitTime, long endTime, - String description, String state) { + String description, String state, long elapsedTime) { + super(); this.id = id; this.name = name; this.startTime = startTime; @@ -64,137 +68,187 @@ public class DefaultJob implements Serializable{ this.endTime = endTime; this.description = description; this.state = state; + this.elapsedTime = elapsedTime; } - + /** * @return the id */ public String getId() { - + return id; } + + /** * @return the name */ public String getName() { - + return name; } + + /** * @return the startTime */ public long getStartTime() { - + return startTime; } + + /** * @return the submitTime */ public long getSubmitTime() { - + return submitTime; } + + /** * @return the endTime */ public long getEndTime() { - + return endTime; } + + /** * @return the description */ public String getDescription() { - + return description; } + + /** * @return the state */ public String getState() { - + return state; } + + + /** + * @return the elapsedTime + */ + public long getElapsedTime() { + + return elapsedTime; + } + + + + /** * @param id the id to set */ public void setId(String id) { - + this.id = id; } + + /** * @param name the name to set */ public void setName(String name) { - + this.name = name; } + + /** * @param startTime the startTime to set */ public void setStartTime(long startTime) { - + this.startTime = startTime; } + + /** * @param submitTime the submitTime to set */ public void setSubmitTime(long submitTime) { - + this.submitTime = submitTime; } + + /** * @param endTime the endTime to set */ public void setEndTime(long endTime) { - + this.endTime = endTime; } + + /** * @param description the description to set */ public void setDescription(String description) { - + this.description = description; } + + /** * @param state the state to set */ public void setState(String state) { - + this.state = state; } + + + /** + * @param elapsedTime the elapsedTime to set + */ + public void setElapsedTime(long elapsedTime) { + + this.elapsedTime = elapsedTime; + } + + + /* (non-Javadoc) * @see java.lang.Object#toString() */ @@ -216,8 +270,13 @@ public class DefaultJob implements Serializable{ builder.append(description); builder.append(", state="); builder.append(state); + builder.append(", elapsedTime="); + builder.append(elapsedTime); builder.append("]"); return builder.toString(); } + + + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/GisLayerJob.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/GisLayerJob.java index 6b8a24c..570dd70 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/GisLayerJob.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/GisLayerJob.java @@ -19,6 +19,7 @@ public class GisLayerJob extends DefaultJob{ * */ private static final long serialVersionUID = 2604265579184366453L; + private long totalPoints; /** @@ -42,8 +43,31 @@ public class GisLayerJob extends DefaultJob{ */ public GisLayerJob( String id, String name, long startTime, long submitTime, long endTime, - String description, String state) { - super(id, name, startTime, submitTime, endTime, description, state); + long elapsedTime, String description, String state, long totalPoints) { + super(id, name, startTime, submitTime, endTime, description, state, elapsedTime); + this.totalPoints = totalPoints; + } + + + + + /** + * @return the totalPoints + */ + public long getTotalPoints() { + + return totalPoints; + } + + + + + /** + * @param totalPoints the totalPoints to set + */ + public void setTotalPoints(long totalPoints) { + + this.totalPoints = totalPoints; } @@ -54,7 +78,29 @@ public class GisLayerJob extends DefaultJob{ @Override public String toString() { - return super.toString(); + StringBuilder builder = new StringBuilder(); + builder.append("GisLayerJob [totalPoints="); + builder.append(totalPoints); + builder.append(", id="); + builder.append(id); + builder.append(", name="); + builder.append(name); + builder.append(", startTime="); + builder.append(startTime); + builder.append(", submitTime="); + builder.append(submitTime); + builder.append(", endTime="); + builder.append(endTime); + builder.append(", description="); + builder.append(description); + builder.append(", state="); + builder.append(state); + builder.append(", elapsedTime="); + builder.append(elapsedTime); + builder.append("]"); + return builder.toString(); } + + } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/JobGisLayerModel.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/JobGisLayerModel.java index 3f70401..5c1bf16 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/JobGisLayerModel.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/JobGisLayerModel.java @@ -3,6 +3,9 @@ */ package org.gcube.portlets.user.speciesdiscovery.shared; +import java.io.Serializable; +import java.util.Date; + @@ -12,50 +15,348 @@ package org.gcube.portlets.user.speciesdiscovery.shared; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Feb 9, 2017 */ -public class JobGisLayerModel extends DefaultJob{ - +public class JobGisLayerModel implements Serializable{ /** * */ - private static final long serialVersionUID = 8754068044391917378L; + private static final long serialVersionUID = -8982510983374359781L; + public static final String JOBNAME = "Layer Title"; + public static final String JOBINDENTIFIER = "jobIdentifier"; + public static final String STARTTIME = "Start Time"; + public static final String SUBMITTIME = "Submit Time"; + public static final String PROGRESS = "Progress"; + public static final String ENDTIME = "End Time"; + public static final String ELAPSEDTIME = "Elapsed Time"; + public static final String PERCENTAGE = "Percentage"; + public static final String DESCRIPTION = "Description"; + public static final String STATUS = "Status"; + + private String jobIdentifier; + private String jobName; + private DownloadState downloadState; + protected Date startTime; + protected Date submitTime; + protected Date endTime; + protected String elapsedTime; + private String layerDescription; + private float percentage; + private long totalPoints; + private long completedPoints; /** - * Instantiates a new gis layer job. + * Instantiates a new job gis layer model. */ public JobGisLayerModel() { } - /** - * Instantiates a new gis layer job. + * Instantiates a new job gis layer model. * - * @param id the id - * @param name the name - * @param startTime the start time - * @param submitTime the submit time - * @param endTime the end time - * @param description the description - * @param state the state + * @param jobIdentifier the job identifier + * @param layerTitle the layer title + * @param downloadState the download state + * @param completedPoints the completed points + * @param totalPoints the total points */ - public JobGisLayerModel( - String id, String name, long startTime, long submitTime, long endTime, - String description, String state) { - super(id, name, startTime, submitTime, endTime, description, state); + public JobGisLayerModel(String jobIdentifier, String layerTitle, DownloadState downloadState, long completedPoints, long totalPoints) { + this.jobIdentifier = jobIdentifier; + this.jobName = layerTitle; + this.downloadState = downloadState; + this.completedPoints = completedPoints; + this.totalPoints = totalPoints; } + + /** + * @param jobIdentifier + * @param jobName + * @param downloadState + * @param startTime + * @param submitTime + * @param endTime + * @param elapsedTime + * @param layerDescription + * @param percentage + * @param totalPoints + * @param completedPoints + */ + public JobGisLayerModel( + String jobIdentifier, String jobName, DownloadState downloadState, + Date startTime, Date submitTime, Date endTime, String elapsedTime, + String layerDescription, long completedPoints, + long totalPoints) { + + super(); + this.jobIdentifier = jobIdentifier; + this.jobName = jobName; + this.downloadState = downloadState; + this.startTime = startTime; + this.submitTime = submitTime; + this.endTime = endTime; + this.elapsedTime = elapsedTime; + this.layerDescription = layerDescription; + this.totalPoints = totalPoints; + this.completedPoints = completedPoints; + this.percentage = completedPoints!=0?completedPoints*100/totalPoints:0; + } + + + /** + * @return the jobIdentifier + */ + public String getJobIdentifier() { + + return jobIdentifier; + } + + + + /** + * @return the jobName + */ + public String getJobName() { + + return jobName; + } + + + + /** + * @return the downloadState + */ + public DownloadState getDownloadState() { + + return downloadState; + } + + + + /** + * @return the startTime + */ + public Date getStartTime() { + + return startTime; + } + + + + /** + * @return the submitTime + */ + public Date getSubmitTime() { + + return submitTime; + } + + + + /** + * @return the endTime + */ + public Date getEndTime() { + + return endTime; + } + + + + /** + * @return the elapsedTime + */ + public String getElapsedTime() { + + return elapsedTime; + } + + + + /** + * @return the layerDescription + */ + public String getLayerDescription() { + + return layerDescription; + } + + + + /** + * @return the percentage + */ + public float getPercentage() { + + return percentage; + } + + + + /** + * @return the totalPoints + */ + public long getTotalPoints() { + + return totalPoints; + } + + + + /** + * @return the completedPoints + */ + public long getCompletedPoints() { + + return completedPoints; + } + + + + /** + * @param jobIdentifier the jobIdentifier to set + */ + public void setJobIdentifier(String jobIdentifier) { + + this.jobIdentifier = jobIdentifier; + } + + + + /** + * @param jobName the jobName to set + */ + public void setJobName(String jobName) { + + this.jobName = jobName; + } + + + + /** + * @param downloadState the downloadState to set + */ + public void setDownloadState(DownloadState downloadState) { + + this.downloadState = downloadState; + } + + + + /** + * @param startTime the startTime to set + */ + public void setStartTime(Date startTime) { + + this.startTime = startTime; + } + + + + /** + * @param submitTime the submitTime to set + */ + public void setSubmitTime(Date submitTime) { + + this.submitTime = submitTime; + } + + + + /** + * @param endTime the endTime to set + */ + public void setEndTime(Date endTime) { + + this.endTime = endTime; + } + + + + /** + * @param elapsedTime the elapsedTime to set + */ + public void setElapsedTime(String elapsedTime) { + + this.elapsedTime = elapsedTime; + } + + + + /** + * @param layerDescription the layerDescription to set + */ + public void setLayerDescription(String layerDescription) { + + this.layerDescription = layerDescription; + } + + + + /** + * @param percentage the percentage to set + */ + public void setPercentage(float percentage) { + + this.percentage = percentage; + } + + + + /** + * @param totalPoints the totalPoints to set + */ + public void setTotalPoints(int totalPoints) { + + this.totalPoints = totalPoints; + } + + + + /** + * @param completedPoints the completedPoints to set + */ + public void setCompletedPoints(int completedPoints) { + + this.completedPoints = completedPoints; + } + + /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { - return super.toString(); + StringBuilder builder = new StringBuilder(); + builder.append("JobGisLayerModel [jobIdentifier="); + builder.append(jobIdentifier); + builder.append(", jobName="); + builder.append(jobName); + builder.append(", downloadState="); + builder.append(downloadState); + builder.append(", startTime="); + builder.append(startTime); + builder.append(", submitTime="); + builder.append(submitTime); + builder.append(", endTime="); + builder.append(endTime); + builder.append(", elapsedTime="); + builder.append(elapsedTime); + builder.append(", layerDescription="); + builder.append(layerDescription); + builder.append(", percentage="); + builder.append(percentage); + builder.append(", totalPoints="); + builder.append(totalPoints); + builder.append(", completedPoints="); + builder.append(completedPoints); + builder.append("]"); + return builder.toString(); } } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/SearchResultType.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/SearchResultType.java index 48f22fe..d1d6c5a 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/SearchResultType.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/shared/SearchResultType.java @@ -1,34 +1,54 @@ /** - * + * */ package org.gcube.portlets.user.speciesdiscovery.shared; + /** - * @author "Federico De Faveri defaveri@isti.cnr.it" + * The Enum SearchResultType. * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 10, 2017 */ public enum SearchResultType { - - + + SPECIES_PRODUCT("RESULTITEM", "Occurrences"), TAXONOMY_ITEM("TAXONOMYITEM", "Taxonomy"), - OCCURRENCE_POINT("OCCURRENCESPOINTS", "OccurrencesPoints"); - + OCCURRENCE_POINT("OCCURRENCESPOINTS", "OccurrencesPoints"), + GIS_LAYER_POINT("GIS_LAYER_POINT", "GisLayerPoints"); + private String id; private String name; + /** + * Instantiates a new search result type. + * + * @param id the id + * @param name the name + */ private SearchResultType(String id, String name) { this.id = id; this.name = name; } + /** + * Gets the id. + * + * @return the id + */ public String getId() { return id; } + /** + * Gets the name. + * + * @return the name + */ public String getName() { return name; }