Created
November 18, 2019 15:02
-
-
Save vegegoku/78b64fc4a226c0c5a1b00d5d4defde93 to your computer and use it in GitHub Desktop.
a sample domino-ui remote data store
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.progressoft.alpha.commons.client.store; | |
import com.progressoft.alpha.commons.client.Formats; | |
import com.progressoft.alpha.commons.shared.store.CanLoadItems; | |
import com.progressoft.alpha.commons.shared.store.LoadContext; | |
import org.dominokit.domino.ui.datatable.events.SearchEvent; | |
import org.dominokit.domino.ui.datatable.events.SortEvent; | |
import org.dominokit.domino.ui.datatable.events.TableEvent; | |
import org.dominokit.domino.ui.datatable.events.TablePageChangeEvent; | |
import org.dominokit.domino.ui.datatable.model.Filter; | |
import org.dominokit.domino.ui.datatable.model.FilterTypes; | |
import org.dominokit.domino.ui.datatable.store.DataChangedEvent; | |
import org.dominokit.domino.ui.datatable.store.DataStore; | |
import org.dominokit.domino.ui.datatable.store.StoreDataChangeListener; | |
import org.dominokit.domino.ui.pagination.HasPagination; | |
import org.gwtproject.i18n.client.DateTimeFormat; | |
import java.util.*; | |
import static java.util.Objects.nonNull; | |
import static org.dominokit.domino.ui.datatable.events.SearchEvent.SEARCH_EVENT; | |
import static org.dominokit.domino.ui.datatable.events.SortEvent.SORT_EVENT; | |
public class RemoteDataStore<T> implements DataStore<T> { | |
private List<StoreDataChangeListener<T>> listeners = new ArrayList<>(); | |
private HasPagination pagination; | |
private CanLoadItems<T> uiHandlers; | |
private String propertyName; | |
private String sortDirection; | |
private int activePage = 0; | |
private Map<String, String> searchProperties = new HashMap<>(); | |
private List<T> items; | |
public RemoteDataStore(CanLoadItems<T> uiHandlers) { | |
this.uiHandlers = uiHandlers; | |
} | |
@Override | |
public void onDataChanged(StoreDataChangeListener<T> dataChangeListener) { | |
listeners.add(dataChangeListener); | |
} | |
@Override | |
public void removeDataChangeListener(StoreDataChangeListener<T> dataChangeListener) { | |
listeners.remove(dataChangeListener); | |
} | |
@Override | |
public void load() { | |
uiHandlers.load(getLoadContext(), loadResult -> { | |
this.items = loadResult.getResourceList(); | |
if (nonNull(loadResult.getPage())) { | |
pagination.updatePagesByTotalCount(loadResult.getPage().getTotalElements(), loadResult.getPage().getSize()); | |
pagination.gotoPage(loadResult.getPage().getNumber() + 1, true); | |
} | |
fireUpdate(); | |
}); | |
} | |
private LoadContext getLoadContext() { | |
return new LoadContext(propertyName, sortDirection, activePage, searchProperties); | |
} | |
@Override | |
public void handleEvent(TableEvent event) { | |
switch (event.getType()) { | |
case TablePageChangeEvent.PAGINATION_EVENT: | |
activePage = pagination.activePage() - 1; | |
load(); | |
break; | |
case SORT_EVENT: | |
propertyName = ((SortEvent<?>) event).getColumnConfig().getName(); | |
sortDirection = ((SortEvent<?>) event).getSortDirection().toString(); | |
load(); | |
break; | |
case SEARCH_EVENT: | |
searchProperties = new HashMap<>(); | |
List<Filter> filters = ((SearchEvent) event).getFilters(); | |
this.activePage = 0; | |
for (Filter filter : filters) { | |
if (!filter.getValues().isEmpty()) { | |
if (filter.getType().equals(FilterTypes.DATE)) { | |
String longDate = filter.getValues().get(0); | |
String formattedDate = DateTimeFormat.getFormat(Formats.DEFAULT_DATE_PATTERN) | |
.format(new Date(Long.parseLong(longDate))); | |
searchProperties.put(filter.getFieldName(), formattedDate); | |
} else { | |
searchProperties.put(filter.getFieldName(), filter.getValues().get(0)); | |
} | |
} | |
} | |
load(); | |
break; | |
} | |
} | |
private void fireUpdate() { | |
listeners.forEach(dataChangeListener -> dataChangeListener.onDataChanged(new DataChangedEvent<>(items, items.size()))); | |
} | |
public HasPagination getPagination() { | |
return pagination; | |
} | |
public void setPagination(HasPagination pagination) { | |
this.pagination = pagination; | |
} | |
public int getActivePage() { | |
return activePage; | |
} | |
public void load(int pageNumber) { | |
this.activePage = pageNumber; | |
load(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment