Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V2.3 atol #108

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/main/java/org/sigmah/client/page/RequestParameter.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,10 @@ public enum RequestParameter {
CLOSE_CURRENT_TAB,
CONTACT_ID,
ELEMENTS,
PROJECT_ID;
PROJECT_ID,
CONTACT_LIST_ID,
LAYOUT_GROUP_ID,
ITERATION_ID;

// If the parameter is part of the tab uniqueness logic.
private final boolean unique;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
import org.sigmah.shared.command.result.VoidResult;
import org.sigmah.shared.dto.ContactDTO;
import org.sigmah.shared.dto.country.CountryDTO;
import org.sigmah.shared.dto.element.ContactListElementDTO;
import org.sigmah.shared.dto.element.DefaultContactFlexibleElementDTO;
import org.sigmah.shared.dto.element.FlexibleElementContainer;
import org.sigmah.shared.dto.element.FlexibleElementDTO;
Expand Down Expand Up @@ -426,7 +427,7 @@ public void addIterationTabItem(int iterationId, IterableGroupItem tab) {
}

@Override
public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, LayoutGroupDTO groupLayout, DispatchQueue queue, final Integer iterationId, final IterableGroupPanel tabPanel, final IterableGroupItem tabItem) {
public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, final LayoutGroupDTO groupLayout, DispatchQueue queue, final Integer iterationId, final IterableGroupPanel tabPanel, final IterableGroupItem tabItem) {
final ContactDTO contact = (ContactDTO)container;

// Creates the fieldset and positions it.
Expand Down Expand Up @@ -461,93 +462,7 @@ public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, La
// --

// Remote call to ask for this element value.
queue.add(new GetValue(contact.getId(), elementDTO.getId(), elementDTO.getEntityName(), null, iterationId), new CommandResultHandler<ValueResult>() {

@Override
public void onCommandFailure(final Throwable throwable) {
if (Log.isErrorEnabled()) {
Log.error("Error, element value not loaded.", throwable);
}
throw new RuntimeException(throwable);
}

@Override
public void onCommandSuccess(final ValueResult valueResult) {

if (Log.isDebugEnabled()) {
Log.debug("Element value(s) object : " + valueResult);
}

// --
// -- ELEMENT COMPONENT
// --

// Configures the flexible element for the current application state before generating its component.
elementDTO.setService(dispatch);
elementDTO.setAuthenticationProvider(injector.getAuthenticationProvider());
elementDTO.setEventBus(eventBus);
elementDTO.setCache(injector.getClientCache());
elementDTO.setCurrentContainerDTO(contact);
elementDTO.setTransfertManager(injector.getTransfertManager());
elementDTO.assignValue(valueResult);
elementDTO.setImageProvider(imageProvider);
if (elementDTO instanceof DefaultContactFlexibleElementDTO) {
((DefaultContactFlexibleElementDTO) elementDTO).setFormPanel(formPanel);
}
elementDTO.setTabPanel(tabPanel);

// Generates element component (with the value).
elementDTO.init();
final Component elementComponent = elementDTO.getElementComponent(valueResult);

// Component width.
final FormData formData;
if (elementDTO.getPreferredWidth() == 0) {
formData = new FormData("100%");
} else {
formData = new FormData(elementDTO.getPreferredWidth(), -1);
}

if (elementComponent != null) {
fieldSet.add(elementComponent, formData);
}
fieldSet.layout();

// --
// -- ELEMENT HANDLERS
// --

// Adds a value change handler if this element is a dependency of a ComputationElementDTO.
Integer iterationId = tabItem == null ? null : tabItem.getIterationId();
computationTriggerManager.listenToValueChangesOfElement(elementDTO, elementComponent, valueChanges, iterationId);

// Adds a value change handler to this element.
elementDTO.addValueHandler(new ValueHandler() {

@Override
public void onValueChange(final ValueEvent event) {

if(tabPanel != null) {
event.setIterationId(tabPanel.getCurrentIterationId());
}

// TODO: Find linked computation fields if any and recompute the value.

// Stores the change to be saved later.
valueChanges.add(event);

// Enables the save action.
view.getSaveButton().enable();
}
});

if(elementDTO.getValidates() && tabItem != null) {
tabItem.setElementValidity(elementDTO, elementDTO.isCorrectRequiredValue(valueResult));
tabItem.refreshTitle();
elementDTO.addRequiredValueHandler(new RequiredValueHandlerImpl(elementDTO));
}
}
}, new LoadingMask(view.getDetailsContainer()));
queue.add(new GetValue(contact.getId(), elementDTO.getId(), elementDTO.getEntityName(), null, iterationId), new GetValueResultCommandResultHandler(elementDTO, contact, tabPanel, groupLayout, iterationId, fieldSet, tabItem), new LoadingMask(view.getDetailsContainer()));
}

fieldSet.setCollapsible(false);
Expand Down Expand Up @@ -868,4 +783,119 @@ public void onExportContact(final boolean characteristicsField, final boolean al
public boolean hasValueChanged() {
return !valueChanges.isEmpty() || !iterationChanges.isEmpty();
}

private class GetValueResultCommandResultHandler extends CommandResultHandler<ValueResult> {

private final FlexibleElementDTO elementDTO;
private final ContactDTO contact;
private final IterableGroupPanel tabPanel;
private final LayoutGroupDTO groupLayout;
private final Integer iterationId;
private final FieldSet fieldSet;
private final IterableGroupItem tabItem;

public GetValueResultCommandResultHandler(FlexibleElementDTO elementDTO, ContactDTO contact, IterableGroupPanel tabPanel, LayoutGroupDTO groupLayout, Integer iterationId, FieldSet fieldSet, IterableGroupItem tabItem) {
this.elementDTO = elementDTO;
this.contact = contact;
this.tabPanel = tabPanel;
this.groupLayout = groupLayout;
this.iterationId = iterationId;
this.fieldSet = fieldSet;
this.tabItem = tabItem;
}

@Override
public void onCommandFailure(final Throwable throwable) {
if (Log.isErrorEnabled()) {
Log.error("Error, element value not loaded.", throwable);
}
throw new RuntimeException(throwable);
}

@Override
public void onCommandSuccess(final ValueResult valueResult) {

if (Log.isDebugEnabled()) {
Log.debug("Element value(s) object : " + valueResult);
}

// --
// -- ELEMENT COMPONENT
// --

// Configures the flexible element for the current application state before generating its component.
elementDTO.setService(dispatch);
elementDTO.setAuthenticationProvider(injector.getAuthenticationProvider());
elementDTO.setEventBus(eventBus);
elementDTO.setCache(injector.getClientCache());
elementDTO.setCurrentContainerDTO(contact);
elementDTO.setTransfertManager(injector.getTransfertManager());
elementDTO.assignValue(valueResult);
elementDTO.setImageProvider(imageProvider);
if (elementDTO instanceof DefaultContactFlexibleElementDTO) {
((DefaultContactFlexibleElementDTO) elementDTO).setFormPanel(formPanel);
}
elementDTO.setTabPanel(tabPanel);

if (elementDTO instanceof ContactListElementDTO) {
ContactListElementDTO contactListElement = (ContactListElementDTO) elementDTO;
contactListElement.setPageManager(injector.getPageManager());
contactListElement.setLayoutGroupId(groupLayout.getId());
contactListElement.setIterationId(iterationId);
}

// Generates element component (with the value).
elementDTO.init();
final Component elementComponent = elementDTO.getElementComponent(valueResult);

// Component width.
final FormData formData;
if (elementDTO.getPreferredWidth() == 0) {
formData = new FormData("100%");
} else {
formData = new FormData(elementDTO.getPreferredWidth(), -1);
}

if (elementComponent != null) {
fieldSet.add(elementComponent, formData);
}
fieldSet.layout();

// --
// -- ELEMENT HANDLERS
// --

// Adds a value change handler if this element is a dependency of a ComputationElementDTO.
Integer iterationId = tabItem == null ? null : tabItem.getIterationId();
computationTriggerManager.listenToValueChangesOfElement(elementDTO, elementComponent, valueChanges, iterationId);

// Adds a value change handler to this element.
elementDTO.addValueHandler(new ValueChangeHandler());

if(elementDTO.getValidates() && tabItem != null) {
tabItem.setElementValidity(elementDTO, elementDTO.isCorrectRequiredValue(valueResult));
tabItem.refreshTitle();
elementDTO.addRequiredValueHandler(new RequiredValueHandlerImpl(elementDTO));
}
}

private class ValueChangeHandler implements ValueHandler {

@Override
public void onValueChange(final ValueEvent event) {

if(tabPanel != null) {
event.setIterationId(tabPanel.getCurrentIterationId());
}

// TODO: Find linked computation fields if any and recompute the value.

// Stores the change to be saved later.
valueChanges.add(event);

// Enables the save action.
view.getSaveButton().enable();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,26 @@
import java.util.List;
import java.util.Map;

import com.allen_sauer.gwt.log.client.Log;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.Layout;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.sigmah.client.computation.ComputationTriggerManager;
import org.sigmah.client.dispatch.CommandResultHandler;
import org.sigmah.client.dispatch.DispatchQueue;
import org.sigmah.client.dispatch.monitor.LoadingMask;
import org.sigmah.client.event.UpdateEvent;
import org.sigmah.client.i18n.I18N;
import org.sigmah.client.inject.Injector;
import org.sigmah.client.page.Page;
Expand All @@ -46,7 +62,6 @@
import org.sigmah.client.ui.widget.layout.Layouts;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.client.util.profiler.Profiler;
import org.sigmah.offline.status.ApplicationState;
import org.sigmah.shared.command.GetLayoutGroupIterations;
import org.sigmah.shared.command.GetValue;
import org.sigmah.shared.command.UpdateLayoutGroupIterations;
Expand All @@ -58,6 +73,7 @@
import org.sigmah.shared.dto.OrgUnitDetailsDTO;
import org.sigmah.shared.dto.element.BudgetElementDTO;
import org.sigmah.shared.dto.element.BudgetSubFieldDTO;
import org.sigmah.shared.dto.element.ContactListElementDTO;
import org.sigmah.shared.dto.element.DefaultFlexibleElementDTO;
import org.sigmah.shared.dto.element.FlexibleElementContainer;
import org.sigmah.shared.dto.element.FlexibleElementDTO;
Expand All @@ -77,23 +93,6 @@
import org.sigmah.shared.util.ProfileUtils;
import org.sigmah.shared.util.ValueResultUtils;

import com.allen_sauer.gwt.log.client.Log;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.sigmah.client.computation.ComputationTriggerManager;
import org.sigmah.client.event.UpdateEvent;

/**
* OrgUnit Details Presenter.
*/
Expand Down Expand Up @@ -340,7 +339,7 @@ public void addIterationTabItem(int iterationId, IterableGroupItem tab) {
}

@Override
public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, LayoutGroupDTO groupLayout,
public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, final LayoutGroupDTO groupLayout,
DispatchQueue queue, final Integer iterationId, final IterableGroupPanel tabPanel,
final IterableGroupItem tabItem) {
final OrgUnitDTO orgUnit = (OrgUnitDTO) container;
Expand Down Expand Up @@ -375,7 +374,7 @@ public FieldSet createGroupLayoutFieldSet(FlexibleElementContainer container, La

getValue = new GetValue(orgUnit.getId(), elementDTO.getId(), elementDTO.getEntityName(), null, iterationId);

queue.add(getValue, new ElementCommandResultHandler(elementDTO, fieldSet, orgUnit, tabPanel, tabItem),
queue.add(getValue, new ElementCommandResultHandler(elementDTO, fieldSet, orgUnit, tabPanel, tabItem, groupLayout, iterationId),
new LoadingMask(view.getContentOrgUnitDetailsPanel()));
}

Expand All @@ -394,14 +393,19 @@ private class ElementCommandResultHandler extends CommandResultHandler<ValueResu
private OrgUnitDTO orgUnit;
private IterableGroupPanel tabPanel;
private IterableGroupItem tabItem;
private LayoutGroupDTO layoutGroup;
private Integer iterationId;

public ElementCommandResultHandler(FlexibleElementDTO elementDTO, FieldSet fieldSet, OrgUnitDTO orgUnit,
IterableGroupPanel tabPanel, IterableGroupItem tabItem) {
IterableGroupPanel tabPanel, IterableGroupItem tabItem,
LayoutGroupDTO layoutGroup, Integer iterationId) {
this.elementDTO = elementDTO;
this.fieldSet = fieldSet;
this.orgUnit = orgUnit;
this.tabPanel = tabPanel;
this.tabItem = tabItem;
this.layoutGroup = layoutGroup;
this.iterationId = iterationId;
}

@Override
Expand Down Expand Up @@ -434,6 +438,13 @@ public void onCommandSuccess(final ValueResult valueResult) {
elementDTO.assignValue(valueResult);
elementDTO.setTabPanel(tabPanel);

if (elementDTO instanceof ContactListElementDTO) {
ContactListElementDTO contactListElement = (ContactListElementDTO)elementDTO;
contactListElement.setPageManager(injector.getPageManager());
contactListElement.setLayoutGroupId(layoutGroup.getId());
contactListElement.setIterationId(iterationId);
}

// Generates element component (with the value).
elementDTO.init();
final Component elementComponent = elementDTO.getElementComponent(valueResult);
Expand Down
Loading