Tuesday, October 25, 2011

Editor not flush values of subeditors

/**
*
*/
package com.logikas.erp.client.ui;

import com.google.gwt.user.client.ui.HasConstrainedValue;

import com.logikas.erp.client.activity.presenter.MutablePresenter;
import com.logikas.erp.shared.proxy.CityProxy;

/**
* Package: com.logikas.erp.client.ui
* File: AddressView.java
* Date: 11/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public interface AddressView extends View{

public interface Presenter extends MutablePresenter<AddressView>{

}

HasConstrainedValue<CityProxy> getCitys();

}
/**
*
*/
package com.logikas.erp.client.ui;

import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.IsEditor;
import com.google.gwt.user.client.ui.HasConstrainedValue;

import com.logikas.erp.client.activity.presenter.NavigationPresenter;
import com.logikas.erp.shared.proxy.CityProxy;

/**
* Package: com.logikas.erp.client.ui
* File: SelectorCityView.java
* Date: 11/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public interface SelectorCityView extends IsEditor<Editor<CityProxy>>, View{

public interface Presenter extends NavigationPresenter<SelectorCityView>{}

HasConstrainedValue<CityProxy> getListCity();

}
/**
*
*/
package com.logikas.erp.client.ui;

import com.google.gwt.editor.client.Editor;
import com.google.web.bindery.requestfactory.gwt.client.RequestFactoryEditorDriver;
import com.google.web.bindery.requestfactory.shared.RequestFactory;

import com.logikas.erp.client.activity.presenter.MutablePresenter;
import com.logikas.erp.shared.proxy.TercerosProxy;

/**
* Package: com.logikas.erp.client.ui File: TerceroView.java Date: 11/10/2011
*
* Representa el formulario de carga de la informacion asociada a un tercero
*
* @autor cristian - Logikas Conectando Ideas
*/
public interface TerceroNewView extends View {

public interface Presenter extends MutablePresenter<TerceroNewView>{

}

AddressView getAddressView();

RequestFactoryEditorDriver<TercerosProxy, ? extends Editor<TercerosProxy>> createEditorDriver(
RequestFactory rf);

}
/**
*
*/
package com.logikas.erp.client.ui;

import com.google.gwt.user.client.ui.IsWidget;

/**
* Package: com.logikas.erp.client.ui File: View.java Date: 03/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public interface View extends IsWidget {




}
/**
*
*/
package com.logikas.erp.client.ui.impl;

import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.ui.client.ValueBoxEditorDecorator;
import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasConstrainedValue;
import com.google.gwt.user.client.ui.Widget;

import com.logikas.erp.client.Constans;
import com.logikas.erp.client.ui.AddressView;
import com.logikas.erp.client.ui.SelectorCityView;
import com.logikas.erp.shared.proxy.AddressProxy;
import com.logikas.erp.shared.proxy.CityProxy;

import javax.inject.Inject;
import javax.inject.Named;

/**
* Package: com.logikas.erp.client.ui.impl File: AddressWidget.java Date: 11/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class AddressEditor implements AddressView, Editor<AddressProxy> {

private static AddressWidgetUiBinder uiBinder = GWT.create(AddressWidgetUiBinder.class);

private HTMLPanel root;

private AddressView.Presenter presenter;

@UiField
ValueBoxEditorDecorator<String> address;

@UiField
ValueBoxEditorDecorator<Integer> number;

@UiField
ValueBoxEditorDecorator<String> code;

@UiField(provided = true)
SelectorCityView city;

interface AddressWidgetUiBinder extends UiBinder<HTMLPanel, AddressEditor> {
}

@Inject
public AddressEditor(
AsyncProvider<SelectorCityView> selectorCity,
@Named(Constans.AddressNewPresenter) AddressView.Presenter presenter) {

this.presenter = presenter;

// TODO ver si hay otra forma de inicializar las vistas
selectorCity.get(new AsyncCallback<SelectorCityView>() {
@Override
public void onSuccess(SelectorCityView result) {
city = result;
init();
}

@Override
public void onFailure(Throwable caught) {
}
});
}

private void init(){
root = uiBinder.createAndBindUi(this);
presenter.onCreate(this);
}

@Override
public Widget asWidget() {
return root;
}

@Override
public HasConstrainedValue<CityProxy> getCitys() {
return city.getListCity();
}

}
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:l="urn:import:com.logikas.erp.client.ui"
xmlns:e="urn:import:com.google.gwt.editor.ui.client">

<g:HTMLPanel>

<label for="name">Name:</label>
<e:ValueBoxEditorDecorator ui:field="address">
<e:valuebox>
<g:TextBox />
</e:valuebox>
</e:ValueBoxEditorDecorator>

<label for="number">Number:</label>
<e:ValueBoxEditorDecorator ui:field="number">
<e:valuebox>
<g:IntegerBox />
</e:valuebox>
</e:ValueBoxEditorDecorator>

<label for="code">Code:</label>
<e:ValueBoxEditorDecorator ui:field="code">
<e:valuebox>
<g:TextBox />
</e:valuebox>
</e:ValueBoxEditorDecorator>

<!-- l:CityListBox ui:field="city"></l:CityListBox-->

<l:SelectorCityView ui:field="city"></l:SelectorCityView>

</g:HTMLPanel>
</ui:UiBinder> /**
*
*/
package com.logikas.erp.client.ui.impl;

import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasConstrainedValue;
import com.google.gwt.user.client.ui.Widget;

import com.logikas.erp.client.Constans;
import com.logikas.erp.client.place.SearchCityPlace;
import com.logikas.erp.client.resources.ClientResource;
import com.logikas.erp.client.ui.SelectorCityView;
import com.logikas.erp.client.ui.widget.CityListBox;
import com.logikas.erp.shared.proxy.CityProxy;

import javax.inject.Inject;
import javax.inject.Named;

/**
* Package: com.logikas.erp.client.ui.impl File: SelectorCityWidget.java Date: 11/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class SelectorCityWidget implements SelectorCityView {

private static SelectorCityWidgetUiBinder uiBinder = GWT.create(SelectorCityWidgetUiBinder.class);

interface SelectorCityWidgetUiBinder extends UiBinder<HTMLPanel, SelectorCityWidget> {
}

private HTMLPanel root;

@UiField
ClientResource res;

@UiField
CityListBox cityListBox;

@UiField
Button searchCity;

@UiField
Button newCity;

private final SelectorCityView.Presenter presenter;

@Inject
public SelectorCityWidget(
final @Named(Constans.SelectorCityPresenter) SelectorCityView.Presenter presenter ) {

root = uiBinder.createAndBindUi(this);

res.erpLgkStyle().ensureInjected();

this.presenter = presenter;

this.presenter.onCreate(this);

}

@Override
public HasConstrainedValue<CityProxy> getListCity() {
return cityListBox;
}

@Override
public Widget asWidget() {
return root;
}

@Override
public Editor<CityProxy> asEditor() {
return cityListBox.asEditor();
}

@UiHandler("searchCity")
void onSearchCityClick(ClickEvent event) {
presenter.goTo(new SearchCityPlace(true));
}
}
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:l="urn:import:com.logikas.erp.client.ui.widget">

<ui:with field='res'
type='com.logikas.erp.client.resources.ClientResource' />

<g:HTMLPanel>
<div class="{res.erpLgkStyle.borders}">
<l:CityListBox ui:field="cityListBox"></l:CityListBox>
<g:Button stylePrimaryName="{res.erpLgkStyle.button}" addStyleNames="{res.erpLgkStyle.gray}"
ui:field="searchCity">Search</g:Button>
<g:Button stylePrimaryName="{res.erpLgkStyle.button}" addStyleNames="{res.erpLgkStyle.gray}"
ui:field="newCity">New</g:Button>
</div>
</g:HTMLPanel>
</ui:UiBinder> /**
*
*/
package com.logikas.erp.client.ui.impl;

import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.ui.client.ValueBoxEditorDecorator;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.name.Named;
import com.google.web.bindery.requestfactory.gwt.client.RequestFactoryEditorDriver;
import com.google.web.bindery.requestfactory.shared.RequestFactory;

import com.logikas.erp.client.Constans;
import com.logikas.erp.client.resources.ClientResource;
import com.logikas.erp.client.ui.AddressView;
import com.logikas.erp.client.ui.TerceroNewView;
import com.logikas.erp.shared.proxy.TercerosProxy;

import javax.inject.Inject;


/**
* Package: com.logikas.erp.client.ui.impl File: TerceroEditor.java Date: 09/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class TerceroEditor implements TerceroNewView, Editor<TercerosProxy> {

private static TerceroEditorUiBinder uiBinder = GWT.create(TerceroEditorUiBinder.class);

interface TerceroEditorUiBinder extends UiBinder<SimplePanel, TerceroEditor> {
}

interface Driver extends RequestFactoryEditorDriver<TercerosProxy, TerceroEditor> {
}

private SimplePanel root;

@UiField
ClientResource res;

@UiField
ValueBoxEditorDecorator<String> name;

@UiField
ValueBoxEditorDecorator<String> lastName;

@UiField(provided = true)
AddressView address;

private final TerceroNewView.Presenter presenter;

@Inject
public TerceroEditor(
AsyncProvider<AddressView> addressView,
@Named(Constans.TerceroNewPresenter) TerceroNewView.Presenter presenter) {

this.presenter = presenter;

//TODO ver si existe otra forma de inicializar las vistas
addressView.get(new AsyncCallback<AddressView>() {
@Override
public void onSuccess(AddressView result) {
address = result;
ini();
}
@Override
public void onFailure(Throwable caught) {
}
});

//Inyeccion del presenter

//Creacion de la interface por parte del Editor,

}

private void ini(){
//Inicializacion de la interface grafica
root = uiBinder.createAndBindUi(this);
res.erpLgkStyle().ensureInjected();
presenter.onCreate(this);
}

@Override
public RequestFactoryEditorDriver<TercerosProxy, ? extends Editor<TercerosProxy>> createEditorDriver(
RequestFactory rf) {

Driver driver = GWT.create(Driver.class);
driver.initialize(rf, this);
return driver;
}

@Override
public Widget asWidget() {
return root;
}

@Override
public AddressView getAddressView() {
return address;
}

@UiHandler("save")
void onSaveClick(ClickEvent event) {
this.presenter.save();
}

@UiHandler("cancel")
void onCancelClick(ClickEvent event) {
}
}
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:e="urn:import:com.google.gwt.editor.ui.client"
xmlns:l="urn:import:com.logikas.erp.client.ui">

<ui:with field='res'
type='com.logikas.erp.client.resources.ClientResource' />

<g:SimplePanel>

<g:HTMLPanel>
<label for="name">Nombre:</label>
<e:ValueBoxEditorDecorator ui:field="name">
<e:valuebox>
<g:TextBox />
</e:valuebox>
</e:ValueBoxEditorDecorator>

<label for="lastname">Apellido:</label>
<e:ValueBoxEditorDecorator ui:field="lastName">
<e:valuebox>
<g:TextBox />
</e:valuebox>
</e:ValueBoxEditorDecorator>


<fieldset class="{res.erpLgkStyle.borders}">
<legend>Address:</legend>
<l:AddressView ui:field="address"></l:AddressView>
</fieldset>

<div class="{res.erpLgkStyle.buttons}">
<g:Button stylePrimaryName="{res.erpLgkStyle.button}" addStyleNames="{res.erpLgkStyle.blue}" ui:field="save">Save</g:Button>
<g:Button stylePrimaryName="{res.erpLgkStyle.button}" addStyleNames="{res.erpLgkStyle.blue}" ui:field="cancel">Cancel</g:Button>
</div>
</g:HTMLPanel>
</g:SimplePanel>
</ui:UiBinder> /**
*
*/
package com.logikas.erp.client.activity.presenter;

import com.google.gwt.editor.client.Editor;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.web.bindery.requestfactory.gwt.client.RequestFactoryEditorDriver;
import com.google.web.bindery.requestfactory.shared.Receiver;
import com.google.web.bindery.requestfactory.shared.RequestContext;
import com.google.web.bindery.requestfactory.shared.Violation;

import com.logikas.erp.client.place.DefaultPlace;
import com.logikas.erp.client.ui.TerceroNewView;
import com.logikas.erp.shared.proxy.AddressProxy;
import com.logikas.erp.shared.proxy.CityProxy;
import com.logikas.erp.shared.proxy.TercerosProxy;
import com.logikas.erp.shared.request.ErpRequestFactory;
import com.logikas.erp.shared.request.TercerosRequest;

import org.apache.jasper.compiler.ErrorHandler;

import java.util.List;
import java.util.Set;

import javax.inject.Inject;
import javax.validation.ConstraintViolation;

/**
* Package: com.logikas.erp.client.presenter File: TerceroEditorPresenter.java Date: 12/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class TerceroNewEditorPresenter implements TerceroNewView.Presenter {

private final PlaceController placeController;
private final ErpRequestFactory requestFactory;

private RequestFactoryEditorDriver<TercerosProxy, ? extends Editor<TercerosProxy>> terceroDriver;

@Inject
public TerceroNewEditorPresenter(final AddressNewPresenter addressPresenter,
final ErpRequestFactory requestFactory, final PlaceController placeController) {

this.placeController = placeController;
this.requestFactory = requestFactory;
}

@Override
public void goTo(Place place) {
placeController.goTo(place);
}

@Override
public void save() {

RequestContext context = terceroDriver.flush();

boolean hasClientErrors = terceroDriver.hasErrors();

if (!hasClientErrors) {

context.fire(new Receiver<Void>() {

@Override
public void onSuccess(Void response) {
placeController.goTo(new DefaultPlace());
}

/* (non-Javadoc)
* @see com.google.web.bindery.requestfactory.shared.Receiver#onViolation(java.util.Set)
*/
@Override
public void onViolation(Set<Violation> errors) {
terceroDriver.setViolations(errors);
}

@Override
public void onConstraintViolation(Set<ConstraintViolation<?>> violations) {

terceroDriver.setConstraintViolations(violations);
}

});
}
}

@Override
public void onCreate(final TerceroNewView view) {

terceroDriver = view.createEditorDriver(requestFactory);

requestFactory.getCityRequest().findAll().fire(new Receiver<List<CityProxy>>() {

@Override
public void onSuccess(List<CityProxy> citys) {
view.getAddressView().getCitys().setAcceptableValues(citys);

TercerosRequest context = requestFactory.getTercerosRequest();

TercerosProxy tercero = context.create(TercerosProxy.class);

AddressProxy address = context.create(AddressProxy.class);

// address.setVersion(new Long(0));

tercero.setAddress(address);

// tercero.setVersion(new Long(0));

context.persist(tercero).with(terceroDriver.getPaths());

terceroDriver.edit(tercero, context);
}
});
}

@Override
public void delete() {
// TODO Auto-generated method stub
}

@Override
public void onPause() {
}

@Override
public void onStop() {
}

@Override
public void setContentView(final AcceptsOneWidget container) {
//
}

}
/**
*
*/
package com.logikas.erp.client.activity.presenter;

import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

import com.logikas.erp.client.ui.AddressView;

import javax.inject.Inject;

/**
* Package: com.logikas.erp.client.presenter File: AddressPresenter.java Date: 18/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class AddressNewPresenter implements AddressView.Presenter {

private final PlaceController placeController;

@Inject
public AddressNewPresenter(
final PlaceController placeController) {

this.placeController = placeController;
}

@Override
public void goTo(Place place) {
placeController.goTo(place);

}

@Override
public void save() {
}

@Override
public void delete() {
}

@Override
public void onCreate(AddressView view) {
}

@Override
public void onPause() {
}

@Override
public void onStop() {
}

@Override
public void setContentView(AcceptsOneWidget container) {
}
}/**
*
*/
package com.logikas.erp.client.activity.presenter;

import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.inject.Provider;
import com.google.web.bindery.requestfactory.shared.Receiver;

import com.logikas.erp.client.ui.SelectorCityView;
import com.logikas.erp.shared.proxy.CityProxy;
import com.logikas.erp.shared.request.ErpRequestFactory;

import java.util.List;

import javax.inject.Inject;

/**
* Package: com.logikas.erp.client.presenter File: SelectorCityPresenter.java Date: 13/10/2011
*
* @autor cristian - Logikas Conectando Ideas
*/
public class SelectorCityPresenter implements SelectorCityView.Presenter {

private final PlaceController placeController;
private final ErpRequestFactory requestFactory;

@Inject
public SelectorCityPresenter(final PlaceController placeController, final ErpRequestFactory requestFactory) {
this.placeController = placeController;
this.requestFactory = requestFactory;
}

@Override
public void goTo(Place place) {
placeController.goTo(place);
}

@Override
public void onCreate(final SelectorCityView view) {
requestFactory.getCityRequest().findAll().fire(new Receiver<List<CityProxy>>() {
@Override
public void onSuccess(List<CityProxy> response) {
view.getListCity().setAcceptableValues(response);
}
});
}

@Override
public void onPause() {
// TODO Auto-generated method stub

}

@Override
public void onStop() {
// TODO Auto-generated method stub

}

@Override
public void setContentView(AcceptsOneWidget container) {
// TODO Auto-generated method stub

}
}

Hello:
  I am working in a project with GWT (RF, Editors, MVP).
  I have an error with bind of Editor

 The error itself, is that address property is not sent, not sent values with flush is called in method save of TerceroNewEditorPresenter. The unique values that are sent, are those that correspond to Tercero (name and lastName). 

 Attached files to see and guide me in the error.

 Thank you very much and sorry for my English.



A.U.S Cristian Rinaldi

Teléfono Móvil: (0342) 155 238 083

www.logikas.com

Lisandro de la Torre 2643 Of 5 - 3000 - Santa Fe

Teléfono Fijo: (0342) 483 5138





--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment