package org.aplikator.client.local.command;
import org.aplikator.client.local.Aplikator;
import org.aplikator.client.local.widgets.FormWidget;
import org.aplikator.client.local.widgets.LayoutUtils;
import org.aplikator.client.local.widgets.LoadingLabel;
import org.aplikator.client.shared.data.PrimaryKey;
import org.aplikator.client.shared.data.RecordContainerDTO;
import org.aplikator.client.shared.descriptor.ViewDTO;
import org.aplikator.client.shared.rpc.AplikatorErrorCallback;
import org.aplikator.client.shared.rpc.AplikatorService;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.Container;
import org.gwtbootstrap3.client.ui.Navbar;
import org.gwtbootstrap3.client.ui.NavbarForm;
import org.gwtbootstrap3.client.ui.NavbarText;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.constants.Pull;
import org.gwtbootstrap3.client.ui.html.Div;
import org.gwtbootstrap3.client.ui.html.Strong;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.jboss.errai.enterprise.client.jaxrs.api.RestClient;
import org.jboss.errai.ui.nav.client.local.Page;
import org.jboss.errai.ui.nav.client.local.PageShown;
import org.jboss.errai.ui.nav.client.local.PageState;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
@Page(path = "display/{viewID}/{primaryKey}")
public class DisplayRecord extends Composite {
protected ViewDTO view;
protected String searchArgument;
protected HandlerRegistration submitHandlerRegistration;
FormWidget form;
SimplePanel holder;
@PageState
private String viewID;
@PageState
private int primaryKey;
private Widget widget = null;
public DisplayRecord() {
holder = new SimplePanel();
initWidget(holder);
}
@PageShown
public void start() {
holder.setWidget(new LoadingLabel(Aplikator.application.getConfigString("aplikator.menu.loading")));
//Window.alert("ViewID:"+viewID+"-primaryKey:"+ primaryKey);
if (view == null) {
RestClient.create(AplikatorService.class, new RemoteCallback<ViewDTO>() {
@Override
public void callback(ViewDTO response) {
DisplayRecord.this.view = response;
drawPanel(holder);
}
},
new AplikatorErrorCallback()
).getView(viewID);
} else {
drawPanel(holder);
}
}
private void drawPanel(AcceptsOneWidget panel) {
if (widget == null) {
widget = createForm();
}
panel.setWidget(widget);
}
private Widget createForm() {
/*
<b:Navbar ui:field="navbar" addStyleNames="app-clean-border-top app-clean-mg-bottom">
<b:Container fluid="true">
<b:NavbarText addStyleNames="app-clean-mg-left app-color-black">
<h:Strong ui:field="title"/>
</b:NavbarText>
<b:NavbarForm pull="LEFT" addStyleNames="app-clean-pd-left">
<b:Button ui:field="buttonCancel" icon="BAN"/>
<b:Button ui:field="buttonSave" icon="SAVE"/>
</b:NavbarForm>
<b:Container fluid="true">
<b:Row ui:field="listContainer">
<b:Column ui:field="listColumn" size="1" addStyleNames="app-list-panel"/>
<b:Column ui:field="formColumn" size="11" addStyleNames="app-form-panel"/>
</b:Row>
<b:Row ui:field="gridContainer">
<b:Column ui:field="gridColumn" size="12" addStyleNames="app-grid-panel"/>
</b:Row>
</b:Container>
*/
Div div = new Div();
Navbar navbar = new Navbar();
navbar.addStyleName("app-clean-border-top");
navbar.addStyleName("app-clean-mg-bottom");
Container navContainer = new Container();
navContainer.setFluid(true);
navbar.add(navContainer);
NavbarText navText = new NavbarText();
navText.addStyleName("app-clean-mg-left");
navText.addStyleName("app-color-black");
navText.add(new Strong(view.getLocalizedName()));
navContainer.add(navText);
NavbarForm navForm = new NavbarForm();
navForm.setPull(Pull.LEFT);
navForm.addStyleName("app-clean-pd-left");
navContainer.add(navForm);
Button buttonCancel = new Button();
buttonCancel.setIcon(IconType.BAN);
navForm.add(buttonCancel);
Button buttonSave = new Button();
buttonSave.setIcon(IconType.SAVE);
navForm.add(buttonSave);
LayoutUtils.addTooltip(buttonCancel, Aplikator.application.getConfigString("aplikator.table.cancel"));
LayoutUtils.addTooltip(buttonSave, Aplikator.application.getConfigString("aplikator.table.save"));
buttonCancel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
form.cancel();
}
});
buttonSave.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
form.save(true);
}
});
Container formContainer = new Container();
formContainer.setFluid(true);
form = new FormWidget(view, null, null);
formContainer.add(form);
div.add(navbar);
div.add(formContainer);
form.displayRecord(new PrimaryKey(view.getEntity().getId(), primaryKey), new RecordContainerDTO(), null, null, null);
return div.asWidget();
}
}