Skip to content

Instantly share code, notes, and snippets.

@dardison
Created July 17, 2013 21:35
Show Gist options
  • Save dardison/6024746 to your computer and use it in GitHub Desktop.
Save dardison/6024746 to your computer and use it in GitHub Desktop.
HierarchyConfigurationViewImpl
package com.arballon.web.framework.client.configuration.view;
import java.util.ArrayList;
import java.util.List;
import com.arballon.web.framework.client.mvp.view.ActionContainer;
import com.arballon.web.framework.shared.model.GenericRecordDTO;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.widget.core.client.TabItemConfig;
import com.sencha.gxt.widget.core.client.TabPanel;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData;
/**
* Implementacion Vista de Edicion Jerarquica de un Registro de una Entidad y sus Grillas
* correspondientes a Entidades Hijas Relacionadas
*
* @author Daniel H. Ardison - (c)2012 Ardison Software & Consulting
*
* @param <H> DTO Modelo de Datos de la Entidad Padre
*/
public class HierarchyConfigurationViewImpl<H extends GenericRecordDTO>
implements HierarchyConfigurationView<H> {
private TabPanel tabItems;
private BorderLayoutContainer container;
private RecordConfigurationView<H> headerView;
private List<ListConfigurationView<?>> detailViews;
private ActionContainer actionContainer;
public HierarchyConfigurationViewImpl(String title, RecordConfigurationView<H> header){
this.headerView=header;
this.detailViews=new ArrayList<ListConfigurationView<?>>();
this.buildUI();
}
protected void buildUI(){
this.container=new BorderLayoutContainer();
BorderLayoutData southData=new BorderLayoutData();
southData.setCollapsible(true);
southData.setSplit(true);
southData.setCollapseMini(true);
southData.setSize(260);
southData.setMinSize(100);
southData.setMaxSize(800);
// Cabecera
this.container.setCenterWidget(this.headerView);
// Items
this.tabItems=new TabPanel();
this.container.setSouthWidget(tabItems, southData);
}
@Override
public Widget asWidget() {
return this.container;
}
@Override
public <T extends GenericRecordDTO> void addDetailRecordConfig(
ListConfigurationView<T> detailConfig) {
TabItemConfig itemConfig=new TabItemConfig(detailConfig.getEntity(), false);
this.tabItems.add(detailConfig, itemConfig);
this.tabItems.forceLayout();
this.detailViews.add(detailConfig);
}
@Override
public void setHeaderRecordConfig(RecordConfigurationView<H> headerConfig) {
this.container.setCenterWidget(headerConfig);
}
@Override
public void disableChilds() {
for(ListConfigurationView<?> view : this.detailViews){
view.disable();
}
}
@Override
public void enableChilds() {
for(ListConfigurationView<?> view : this.detailViews){
view.enable();
}
}
@Override
public ActionContainer getZoomContainer() {
return this.actionContainer;
}
@Override
public void setZoomContainer(ActionContainer zoomContainer) {
this.actionContainer=zoomContainer;
}
}
public interface ListConfigurationView<T extends GenericRecordDTO> extends ListTransactionView<T> {
public interface Presenter<T> extends ListTransactionView.Presenter<T> {
/**
* Graba los Registros
* @param toSave
*/
void saveRows(List<T> toSave);
/**
* Filtra grillas hijas con los valores de los filtros del modelo informado
* @param model
*/
void filterChilds(T model);
/**
* Solicita edicion en formato Formulario del modelo informado
* @param model
*/
void recordEdit(T model);
void disableView();
void enableView();
void search();
void reject();
}
void enable();
void disable();
void hideColumnsForAttributes(List<String> attributeIds);
void addRelatedColumnId(String columnId, String relatedId);
void showConfirmMessage(String title, String messages, MessageBoxCallback callback);
void showErrorMessage(String title, String messages);
void addCloseButton();
void removeCloseButton();
CloseWaitHandler showWaitMessage(String title, String messages, String waitText);
public static interface MessageBoxCallback {
void onOk();
void onCancel();
}
public static interface CloseWaitHandler {
void onClose();
}
}
package com.arballon.web.framework.client.configuration.view;
import java.util.List;
import com.arballon.web.framework.client.event.grid.RejectEvent;
import com.arballon.web.framework.client.event.grid.RejectEvent.RejectHandler;
import com.arballon.web.framework.client.event.grid.SaveRowsEvent;
import com.arballon.web.framework.client.event.grid.SaveRowsEvent.SaveRowsHandler;
import com.arballon.web.framework.client.event.grid.SearchEvent;
import com.arballon.web.framework.client.event.grid.SearchEvent.SearchHandler;
import com.arballon.web.framework.client.event.transaction.EditRecordEvent;
import com.arballon.web.framework.client.event.transaction.EditRecordEvent.EditRecordHandler;
import com.arballon.web.framework.client.transaction.view.ListTransactionViewImpl;
import com.arballon.web.framework.client.ui.widget.grid.BaseEditorGridPanel;
import com.arballon.web.framework.client.ui.widget.grid.UpdateEditorGridPanel;
import com.arballon.web.framework.shared.model.GenericRecordDTO;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.loader.PagingLoadConfig;
import com.sencha.gxt.data.shared.loader.PagingLoadResult;
import com.sencha.gxt.data.shared.loader.PagingLoader;
import com.sencha.gxt.widget.core.client.Dialog.PredefinedButton;
import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
import com.sencha.gxt.widget.core.client.box.AutoProgressMessageBox;
import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox;
import com.sencha.gxt.widget.core.client.event.HideEvent;
import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
/**
* Grilla de Configuracion Entidades
*
* @author Daniel H. Ardison - (c)2012 Ardison Software & Consulting
*
* @param <T>
*/
public abstract class ListConfigurationViewImpl<T extends GenericRecordDTO> extends ListTransactionViewImpl<T>
implements ListConfigurationView<T> {
public ListConfigurationViewImpl(String entity,
ListStore<T> store,
List<ColumnConfig<T, ?>> columns,
PagingLoader<PagingLoadConfig, PagingLoadResult<T>> loader,
boolean hidden) {
super(entity, store, columns, loader, hidden);
}
protected abstract boolean allowFormEdit();
@Override
protected BaseEditorGridPanel<T> buildGrid() {
UpdateEditorGridPanel<T> result;
result=new UpdateEditorGridPanel<T>(getStore(), getEntity(), getColumns(), getLoader(), isHidden(), this.allowFormEdit());
result.setHeadingText(getEntity());
result.addSaveRowsHandler(new SaveRowsHandler<T>() {
@Override
public void onSaveRows(SaveRowsEvent<T> event) {
((ListConfigurationView.Presenter<T>)presenter).saveRows(event.getModels());
}
});
result.addEditRecordHandler(new EditRecordHandler<T>() {
@Override
public void onEditRecord(EditRecordEvent<T> event) {
((ListConfigurationView.Presenter<T>)presenter).recordEdit(event.getRecord());
}
});
result.addSearchHandler(new SearchHandler() {
@Override
public void onSearch(SearchEvent event) {
((ListConfigurationView.Presenter<T>)presenter).search();
}
});
result.addRejectHandler(new RejectHandler() {
@Override
public void onReject(RejectEvent event) {
((ListConfigurationView.Presenter<T>)presenter).reject();
}
});
return result;
}
@Override
public void enable() {
ListConfigurationView.Presenter<T> presenter=(ListConfigurationView.Presenter<T>)this.getPresenter();
presenter.enableView();
}
@Override
public void disable() {
ListConfigurationView.Presenter<T> presenter=(ListConfigurationView.Presenter<T>)this.getPresenter();
presenter.disableView();
}
@Override
public void hideColumnsForAttributes(List<String> attributeIds) {
UpdateEditorGridPanel<T> grid=(UpdateEditorGridPanel<T>)this.getGrid();
grid.hideColumnsWithIds(attributeIds);
}
@Override
public void addRelatedColumnId(String columnId, String relatedId) {
this.getGrid().addHiddenRelatedColumnId(columnId, relatedId);
}
@Override
public void showConfirmMessage(String title, String messages,
MessageBoxCallback callback) {
this.askConfirm(title, messages, callback);
}
@Override
public void showErrorMessage(String title, String messages) {
this.showError(title, messages);
}
@Override
public void addCloseButton() {
this.getGrid().addCloseButton();
}
@Override
public void removeCloseButton() {
this.getGrid().removeCloseButton();
}
@Override
public CloseWaitHandler showWaitMessage(String title, String messages,
String waitText) {
return this.showWait(title, messages, waitText);
}
protected void askConfirm(String title, String message, MessageBoxCallback callback){
final MessageBoxCallback mbc=callback;
final ConfirmMessageBox box=new ConfirmMessageBox(title, message);
box.setHideOnButtonClick(true);
box.addHideHandler(new HideHandler() {
@Override
public void onHide(HideEvent event) {
if (box.getHideButton() == box.getButtonById(PredefinedButton.YES.name())) {
mbc.onOk();
} else if (box.getHideButton() == box.getButtonById(PredefinedButton.NO.name())){
mbc.onCancel();
}
}
});
box.setWidth(300);
box.show();
}
protected void showError(String title, String message){
final AlertMessageBox box=new AlertMessageBox(title, message);
box.show();
}
protected CloseWaitHandler showWait(String title, String message, String waitText){
final AutoProgressMessageBox box=new AutoProgressMessageBox(title, message);
CloseWaitHandler result=new CloseWaitHandler() {
@Override
public void onClose() {
box.hide();
}
};
box.setProgressText(waitText);
box.auto();
box.show();
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment