I have been working on this for awhile and I can’t seem to figure it out.
I have routes working correctly but the issue is when I try to pass the UUID in the URL. There seems to be an issue when I try to convert the UUID (id pk) to a serialized value in the URL.
Here is my my document edit class -
import com.company.janice.entity.ExtUser;
import com.company.janice.entity.YesNoEnum;
import com.google.common.collect.ImmutableMap;
import com.haulmont.cuba.core.global.DataManager;
import com.haulmont.cuba.gui.Notifications;
import com.haulmont.cuba.gui.Route;
import com.haulmont.cuba.gui.UrlRouting;
import com.haulmont.cuba.gui.components.DateField;
import com.haulmont.cuba.gui.components.HasValue;
import com.haulmont.cuba.gui.components.LookupField;
import com.haulmont.cuba.gui.components.TextField;
import com.haulmont.cuba.gui.model.InstanceContainer;
import com.haulmont.cuba.gui.navigation.UrlParamsChangedEvent;
import com.haulmont.cuba.gui.screen.*;
import com.company.janice.entity.Document;
import com.haulmont.cuba.security.global.UserSession;
import com.haulmont.cuba.web.sys.navigation.UrlIdSerializer;
import javax.inject.Inject;
import java.util.Date;
import java.util.UUID;
@Route(value = "doc/edit", parentPrefix = "doc")
@UiController("janice_Document.edit")
@UiDescriptor("document-edit.xml")
@EditedEntityContainer("documentDc")
@LoadDataBeforeShow
public class DocumentEdit extends StandardEditor<Document> {
@Inject
private UserSession userSession;
@Inject
private InstanceContainer<Document> documentDc;
@Inject
private LookupField<YesNoEnum> additionalReviewRequiredField;
@Inject
private DateField<Date> draftSentToCustomerField;
@Inject
private TextField<String> customerReviewCompletedField;
@Inject
private DateField<Date> customerReviewDueField;
@Inject
private DateField<Date> customerReviewCompletedDateField;
@Inject
private LookupField<YesNoEnum> secondAdditionalReviewRequiredField;
@Inject
private DateField<Date> relevantTeamMembersNotifiedField;
@Inject
private DateField<Date> finalizedDocumentFiledInCollaborativeWorkspaceField;
@Inject
private TextField<String> customerApprovalReceivedField;
@Inject
private DateField<Date> customerApprovalReceivedDateField;
@Inject
private DateField<Date> dateFinalizedField;
@Inject
private DateField<Date> signauresOfAllReviewersField;
@Inject
private DateField<Date> finalSentForInternalApprovalField;
@Inject
private DateField<Date> annualReviewField;
@Inject
private UrlRouting urlRouting;
@Inject
private DataManager dataManager;
@Inject
private Notifications notifications;
@Subscribe
private void onInitEntity(InitEntityEvent<Document> event) {
Document document = event.getEntity();
if (document == null) {
urlRouting.replaceState(this);
return;
}
String serializedDocumentId = UrlIdSerializer.serializeId(document.getId());
urlRouting.replaceState(this, ImmutableMap.of("id", serializedDocumentId));
//Get currently signed in user and assign to approrpiate field.
event.getEntity().setAuthorName((ExtUser) userSession.getCurrentOrSubstitutedUser());
//Hide Elements
draftSentToCustomerField.setVisible(false);
customerReviewCompletedField.setVisible(false);
customerReviewDueField.setVisible(false);
customerReviewCompletedDateField.setVisible(false);
secondAdditionalReviewRequiredField.setVisible(false);
finalizedDocumentFiledInCollaborativeWorkspaceField.setVisible(false);
customerApprovalReceivedField.setVisible(false);
customerApprovalReceivedDateField.setVisible(false);
dateFinalizedField.setVisible(false);
signauresOfAllReviewersField.setVisible(false);
finalSentForInternalApprovalField.setVisible(false);
relevantTeamMembersNotifiedField.setVisible(false);
annualReviewField.setVisible(false);
}
@Subscribe("additionalReviewRequiredField")
private void onAdditionalReviewRequiredFieldValueChangeListener(HasValue.ValueChangeEvent<YesNoEnum> event){
Enum<YesNoEnum> reviewRequired = documentDc.getItem().getAdditionalReviewRequired();
if (reviewRequired == YesNoEnum.NO) {
assembleCustomerReview();
}
if (reviewRequired == YesNoEnum.YES) {
hide();
}
}
@Subscribe("secondAdditionalReviewRequiredField")
private void onSecondAdditionalReviewRequiredFieldValueChangeListener(HasValue.ValueChangeEvent<YesNoEnum> event){
Enum<YesNoEnum> reviewRequired = documentDc.getItem().getSecondAdditionalReviewRequired();
if (reviewRequired == YesNoEnum.NO) {
assembleDocumentFinalization();
}
if (reviewRequired == YesNoEnum.YES) {
}
}
private void assembleCustomerReview() {
draftSentToCustomerField.setVisible(true);
customerReviewCompletedField.setVisible(true);
customerReviewDueField.setVisible(true);
customerReviewCompletedDateField.setVisible(true);
secondAdditionalReviewRequiredField.setVisible(true);
}
private void assembleDocumentFinalization() {
finalizedDocumentFiledInCollaborativeWorkspaceField.setVisible(true);
customerApprovalReceivedField.setVisible(true);
customerApprovalReceivedDateField.setVisible(true);
dateFinalizedField.setVisible(true);
signauresOfAllReviewersField.setVisible(true);
finalSentForInternalApprovalField.setVisible(true);
relevantTeamMembersNotifiedField.setVisible(true);
annualReviewField.setVisible(false);
}
private void hide() {
draftSentToCustomerField.setVisible(false);
customerReviewCompletedField.setVisible(false);
customerReviewDueField.setVisible(false);
customerReviewCompletedDateField.setVisible(false);
secondAdditionalReviewRequiredField.setVisible(false);
finalizedDocumentFiledInCollaborativeWorkspaceField.setVisible(false);
customerApprovalReceivedField.setVisible(false);
customerApprovalReceivedDateField.setVisible(false);
dateFinalizedField.setVisible(false);
signauresOfAllReviewersField.setVisible(false);
finalSentForInternalApprovalField.setVisible(false);
relevantTeamMembersNotifiedField.setVisible(false);
annualReviewField.setVisible(false);
}
@Subscribe
public void onUrlParamsChanged(UrlParamsChangedEvent event) {
String serializedDocumentId = event.getParams().get("id");
UUID documentId = (UUID) UrlIdSerializer.deserializeId(UUID.class, serializedDocumentId);
Document editDocument = dataManager.load(Document.class).id(documentId).one();
setEntityToEdit(editDocument);
}
}
Any help or suggestions as to what I am doing wrong would be appreciated.