Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Mollik2019-05-29 08:21:52 +0000
committerRalf Mollik2019-05-29 08:21:52 +0000
commite7d4a8ae17e3c56c7dad8844133d3d470eee7bbf (patch)
tree639d95154291864f8dc24e532eb24ec481ded558
parent965ee98f71a0f15d37ef773baf4413e55bd472dd (diff)
downloadorg.eclipse.osbp.vaaclipse.addons.softwarefactory-e7d4a8ae17e3c56c7dad8844133d3d470eee7bbf.tar.gz
org.eclipse.osbp.vaaclipse.addons.softwarefactory-e7d4a8ae17e3c56c7dad8844133d3d470eee7bbf.tar.xz
org.eclipse.osbp.vaaclipse.addons.softwarefactory-e7d4a8ae17e3c56c7dad8844133d3d470eee7bbf.zip
catch up with branch daily
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
-rw-r--r--org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java133
1 files changed, 100 insertions, 33 deletions
diff --git a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
index 339584f..f0ef321 100644
--- a/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
+++ b/org.eclipse.osbp.vaaclipse.addons.softwarefactory/src/org/eclipse/osbp/vaaclipse/addons/softwarefactory/perspective/DialogProvider.java
@@ -85,6 +85,7 @@ import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
import org.eclipse.osbp.runtime.common.event.SelectionStore;
+import org.eclipse.osbp.runtime.common.filter.IDTOHistorizedService;
import org.eclipse.osbp.runtime.common.filter.IDTOService;
import org.eclipse.osbp.runtime.common.filter.IDTOService;
import org.eclipse.osbp.runtime.common.validation.IStatus;
@@ -605,11 +606,17 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
createNew(dto);
}
+ /**
+ * Check other dialogs whether we could use their selection to prefill owners.
+ * Check eclipse context for information to prefill owners
+ *
+ * @param newDto the new dto
+ */
private void prefillOwners(Object newDto) {
if(mPart != null) {
MPerspective mPersp = mPart.getContext().get(MPerspective.class);
- for (Field field : DtoUtils.getOwnerDomainReferences(newDto.getClass())) {
- if (mPersp != null) {
+ if (mPersp != null) {
+ for (Field field : DtoUtils.getOwnerDomainReferences(newDto.getClass())) {
// look in dialog's contexts
List<IViewContext> contexts = ecviewContainer.getECViews(mPersp);
for (IViewContext context : contexts) {
@@ -644,6 +651,28 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
}
}
+ /**
+ * If there comes a selections event with a potential owner we use it to prefill owners.
+ *
+ * @param event the event
+ */
+ private void reflectOwners(final EventDispatcherEvent event) {
+ List<Field> owners = DtoUtils.getOwnerDomainReferences(dto);
+ for(Field field:owners) {
+ String key = EntityUtils.getQualifiedEntityNameForQualifiedDtoName(field.getType().getName())+"."+DtoUtils.getIdField(field.getType()).getName();
+ if(key.equals(event.getTopic())) {
+ Object currentDto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
+ if(currentDto != null) {
+ Object bean = getDtoFromEvent(event, field.getType().getName());
+ if(bean != null) {
+ DtoUtils.setValue(currentDto, field.getName(), bean);
+ DtoUtils.getAdapter(DirtyStateAdapter.class, currentDto).resetDirty();
+ }
+ }
+ }
+ }
+ }
+
/*
* (non-Javadoc)
*
@@ -890,15 +919,15 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
}
}
- protected void showSaveDialog(Object newDto) {
- final Object dto = newDto;
- AcceptSaveDialog.showDialog(dslMetadataService, themeResourceService, new Runnable() {
- @Override
- public void run() {
- viewContext = ecviewComponent.setValue(viewId, dto, renderingParams);
- }
- }, null);
- }
+// protected void showSaveDialog(Object newDto) {
+// final Object dto = newDto;
+// AcceptSaveDialog.showDialog(dslMetadataService, themeResourceService, new Runnable() {
+// @Override
+// public void run() {
+// viewContext = ecviewComponent.setValue(viewId, dto, renderingParams);
+// }
+// }, null);
+// }
protected void showDeleteDialog(Object currentDto) {
if(isDirtyDto(currentDto)) {
@@ -978,29 +1007,47 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
allowedSenderParts = (ArrayList<String>) eclipseContext.getActive(MPart.class).getTransientData().get(IPerspectiveProvider.EventDispatcherConstants.ACCEPTED_SENDERS);
}
if((event.getPerspective() == null || (perspective != null && event.getPerspective().equals(perspective))) && ((allowedSenderParts != null && allowedSenderParts.contains(event.getSender())) || allowedSenderParts == null)){
- if (dtoService != null && viewContext != null && !event.getSender().equals(viewId) && (event.getTopic().equals(dtoName) || event.getTopic().equals(primaryKey))) {
- handleSelectEvent(event);
+ if (dtoService != null && viewContext != null && !event.getSender().equals(viewId)) {
+ if(event.getTopic().equals(dtoName) || event.getTopic().equals(primaryKey)) {
+ handleSelectEvent(event);
+ } else if(newCreatedDto){ // while in mode "new" then reflect all external selections to the owner fields
+ reflectOwners(event);
+ }
}
}
break;
case REFRESH:
if (!event.getSender().equals(viewId) && event.getTopic().equals(entityName)) {
if (!newCreatedDto) {
+ final UI currentUi = eclipseContext.get(UI.class);
DTO currentDto = (DTO) viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
IDto newDto = (IDto) dtoService.get(DtoUtils.getIdValue(currentDto));
- showLoosingDataDialog(newDto, currentDto);
+ currentUi.accessSynchronously(new Runnable() {
+ @Override
+ public void run() {
+ VaadinObservables.activateRealm(currentUi);
+ showLoosingDataDialog(newDto, currentDto);
+ }
+ });
}
}
break;
case SAVE:
if (!event.getSender().equals(viewId) && event.getTopic().equals(entityName)) {
if (event.getData().containsKey(EventDispatcherDataTag.ID)) {
+ final UI currentUi = eclipseContext.get(UI.class);
Object eventDataId = event.getData().get(EventDispatcherDataTag.ID);
DTO currentDto = (DTO) viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
Object currentDtoId = DtoUtils.getIdValue(currentDto);
IDto newDto = (IDto) dtoService.get(eventDataId);
if (eventDataId != null && idEquals(eventDataId, currentDtoId)) {
- showLoosingDataDialog(newDto, currentDto);
+ currentUi.accessSynchronously(new Runnable() {
+ @Override
+ public void run() {
+ VaadinObservables.activateRealm(currentUi);
+ showLoosingDataDialog(newDto, currentDto);
+ }
+ });
}
}
}
@@ -1008,11 +1055,18 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
case DELETE:
if (!event.getSender().equals(viewId) && event.getTopic().equals(entityName)) {
if (event.getData().containsKey(EventDispatcherDataTag.ID)) {
+ final UI currentUi = eclipseContext.get(UI.class);
Object eventDataId = event.getData().get(EventDispatcherDataTag.ID);
DTO currentDto = (DTO) viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
Object currentDtoId = DtoUtils.getIdValue(currentDto);
if (eventDataId != null && idEquals(eventDataId, currentDtoId)) {
- showDeleteDialog(currentDto);
+ currentUi.accessSynchronously(new Runnable() {
+ @Override
+ public void run() {
+ VaadinObservables.activateRealm(currentUi);
+ showDeleteDialog(currentDto);
+ }
+ });
}
}
}
@@ -1132,7 +1186,6 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
private void handleSelectEvent(EventDispatcherEvent event) {
log.debug("buffer select. Class:{} ObjectID:{}", getClass().getName(), System.identityHashCode(this));
- final UI currentUi = eclipseContext.get(UI.class);
if(timer != null && timer.isRunning()) {
log.debug("{}", "buffered select restarted.");
timer.restart();
@@ -1140,12 +1193,13 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
timer = new Timer(50, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
+ final UI currentUi = eclipseContext.get(UI.class);
+ Object newDto = getDtoFromEvent(event);
+ Object currentDto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
currentUi.accessSynchronously(new Runnable() {
@Override
public void run() {
VaadinObservables.activateRealm(currentUi);
- Object newDto = getDtoFromEvent(event);
- Object currentDto = viewContext.getBean(IViewContext.MAIN_BEAN_SLOT);
showLoosingDataDialog(newDto, currentDto);
}
});
@@ -1157,11 +1211,23 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
}
private Object getDtoFromEvent(EventDispatcherEvent event) {
+ return getDtoFromEvent(event, null);
+ }
+
+ private Object getDtoFromEvent(EventDispatcherEvent event, String refDtoName) {
Object dto = null;
if (event.getData().containsKey(EventDispatcherDataTag.ID)) {
Object id = event.getData().get(EventDispatcherDataTag.ID);
if (id != null) {
- dto = dtoService.get(id);
+ if(refDtoName == null) {
+ if(dtoService instanceof IDTOHistorizedService) {
+ dto = ((IDTOHistorizedService<DTO>)dtoService).get(id, true);
+ } else {
+ dto = dtoService.get(id);
+ }
+ } else {
+ dto = DtoServiceAccess.getService(refDtoName).get(id);
+ }
}
} else if (event.getData().containsKey(EventDispatcherDataTag.DTO)) {
dto = event.getData().get(EventDispatcherDataTag.DTO);
@@ -1189,22 +1255,23 @@ public class DialogProvider<DTO> extends AbstractHybridVaaclipseView implements
log.debug("create new");
Object newDto = null;
try {
- newDto = type.newInstance();
+ if(type != null){
+ newDto = type.newInstance();
+ setNewCreatedDto(true);
+ prefillOwners(newDto);
+ initializeDto(newDto);
+ if(DtoUtils.getAdapter(DirtyStateAdapter.class, newDto) == null) {
+ log.debug("register dirty adapter {}", newDto.getClass().getName());
+ DtoUtils.registerAdapter(dirtyStateAdapter, newDto);
+ }
+ DtoUtils.getAdapter(DirtyStateAdapter.class, newDto).resetDirty();
+ DtoUtils.getAdapter(DirtyStateAdapter.class, newDto).setActive(true);
+ updateBindings(newDto);
+ viewContext.setBean(BEAN_SLOT__VALIDATION_ERROR, Boolean.FALSE);
+ }
} catch (InstantiationException | IllegalAccessException e) {
log.error("{}", e);
- return newDto;
}
- setNewCreatedDto(true);
- prefillOwners(newDto);
- initializeDto(newDto);
- if(DtoUtils.getAdapter(DirtyStateAdapter.class, newDto) == null) {
- log.debug("register dirty adapter {}", newDto.getClass().getName());
- DtoUtils.registerAdapter(dirtyStateAdapter, newDto);
- }
- DtoUtils.getAdapter(DirtyStateAdapter.class, newDto).resetDirty();
- DtoUtils.getAdapter(DirtyStateAdapter.class, newDto).setActive(true);
- updateBindings(newDto);
- viewContext.setBean(BEAN_SLOT__VALIDATION_ERROR, Boolean.FALSE);
return newDto;
}

Back to the top