diff options
author | Ralf Mollik | 2019-05-29 08:21:52 +0000 |
---|---|---|
committer | Ralf Mollik | 2019-05-29 08:21:52 +0000 |
commit | e7d4a8ae17e3c56c7dad8844133d3d470eee7bbf (patch) | |
tree | 639d95154291864f8dc24e532eb24ec481ded558 | |
parent | 965ee98f71a0f15d37ef773baf4413e55bd472dd (diff) | |
download | org.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.java | 133 |
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; } |