This is an automated email from the git hooks/post-receive script. New commit to branch feature/7610 in repository observe. See http://git.codelutin.com/observe.git commit 849801dc3dad5f2f5c441fc6907e4f9578e39c19 Author: Kevin Morin <morin@codelutin.com> Date: Wed Oct 14 18:03:45 2015 +0200 ouverture des écrans de référentiel commun (refs #7610) --- .../observe/ui/content/ContentUIInitializer.java | 2 +- .../ird/observe/ui/content/ContentUIManager.java | 1 - .../fr/ird/observe/ui/content/ContentUIModel.java | 12 - .../observe/ui/content/ref/ContentReferenceUI.jaxx | 2 +- .../ui/content/ref/ContentReferenceUIHandler.java | 332 +++++++++++---------- .../observe/ui/content/ref/impl/GearUIHandler.java | 3 +- .../ref/impl/LengthWeightParameterUIHandler.java | 3 +- .../ui/content/ref/impl/ProgramUIHandler.java | 3 +- .../ui/content/ref/impl/SpeciesListUIHandler.java | 3 +- .../ui/content/ref/impl/SpeciesUIHandler.java | 3 +- .../ui/content/ref/impl/VesselUIHandler.java | 3 +- .../fr/ird/observe/ui/tree/DtoNodeSupport.java | 14 +- .../java/fr/ird/observe/ui/usage/UsagesUI.jaxx | 4 +- .../fr/ird/observe/ui/usage/UsagesUIHandler.java | 13 +- .../observe-application-swing_fr_FR.properties | 52 ++-- .../v1/ReferentialServiceController.java | 5 + .../services/service/ReferentialService.java | 6 + .../java/fr/ird/observe/services/dto/DtoMap.java | 43 +++ .../services/dto/referential/ReferentialDtos.java | 1 - .../services/service/ReferentialServiceTopia.java | 40 +++ 20 files changed, 328 insertions(+), 217 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java index 978aaab..44d811d 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java @@ -26,7 +26,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import fr.ird.observe.ObserveSwingApplicationContext; -import fr.ird.observe.validation.ObserveSwingValidator; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; @@ -37,6 +36,7 @@ import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.actions.shared.AbstractUIAction; import fr.ird.observe.ui.util.BooleanEditor; import fr.ird.observe.ui.util.tripMap.ObserveMapPane; +import fr.ird.observe.validation.ObserveSwingValidator; import jaxx.runtime.JAXXValidator; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.JAXXWidgetUtil; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java index fdb03c5..9a31f11 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java @@ -175,7 +175,6 @@ public class ContentUIManager { // --- Referential --- // - //FIXME for (Class<? extends ReferentialDto> editType : ReferentialDtos.REFERENCE_COMMON_DTOS) { String simpleName = StringUtils.removeEnd(editType.getSimpleName(), "Dto"); String fqn = ContentReferenceUI.class.getPackage().getName() + ".impl." + simpleName + "UI"; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java index 4d9f4ea..c78578c 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java @@ -100,18 +100,6 @@ public abstract class ContentUIModel<E extends IdDto> extends AbstractSerializab log.error(e); } } - //FIXME -// ObserveEntityEnum constant = ObserveEntityEnum.valueOf(beanType); -// if (constant != null) { -// try { -// setBean((E) constant.getImplementation().newInstance()); -// } catch (Exception e) { -// // ne devrait jamain arrive -// if (log.isErrorEnabled()) { -// log.error(e); -// } -// } -// } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx index a8b65ea..cd9bbfd 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUI.jaxx @@ -84,7 +84,7 @@ viewLayout.addLayoutComponent(editView, DETAIL_VIEW); <JScrollPane id='listPane' constraints='BorderLayout.CENTER' columnHeaderView='{listHeader}'> <JList id='list' - onValueChanged='getHandler().selectBean((E)getSelectedBean(list))' + onValueChanged='getHandler().selectBean((ReferenceDto<E>)getSelectedBean(list))' onMouseClicked='if (event.getClickCount() == 2) { getHandler().modifyUI(); }'/> <BeanListHeader id='listHeader' genericType='ReferenceDto' _entityClass="getModel().getBeanType()"/> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java index 1adb75e..51ffcab 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java @@ -21,14 +21,15 @@ */ package fr.ird.observe.ui.content.ref; -import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.ObserveServiceHelper; +import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.business.db.DataContext; -import fr.ird.observe.validation.ValidationContext; -import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.db.ObserveSwingDataSource; +import fr.ird.observe.services.dto.DtoMap; +import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.I18nReferentialDto; @@ -36,6 +37,7 @@ import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialDtos; import fr.ird.observe.services.dto.referential.VesselSizeCategoryDto; +import fr.ird.observe.services.service.DataNotFoundException; import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.ui.UIHelper; @@ -44,22 +46,46 @@ import fr.ird.observe.ui.content.ContentUIHandler; import fr.ird.observe.ui.tree.ObserveTreeHelper; import fr.ird.observe.ui.usage.UsagesUI; import fr.ird.observe.ui.util.SpringUtilities; +import fr.ird.observe.validation.ValidationContext; import jaxx.runtime.JAXXContext; import jaxx.runtime.swing.CardLayout2Ext; +import jaxx.runtime.swing.ErrorDialogUI; import jaxx.runtime.swing.editor.bean.BeanListHeader; import jaxx.runtime.validator.swing.SwingValidatorUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; - -import javax.swing.*; +import org.nuiton.decorator.DecoratorUtil; +import org.nuiton.decorator.JXPathDecorator; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JToolBar; +import javax.swing.ListModel; +import javax.swing.RowSorter; +import javax.swing.SortOrder; +import javax.swing.SpringLayout; +import javax.swing.SwingUtilities; import javax.swing.border.TitledBorder; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; -import java.awt.*; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; import java.beans.Introspector; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; @@ -119,8 +145,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content String message2 = t("observe.message.show.usage.for.delete2"); UsagesUI usagesUI = new UsagesUI(tx); - //FIXME - usagesUI.init(message, message2, null, null); + usagesUI.init(message, message2, null, usages); UIHelper.askUser(null, t("observe.title.can.not.delete.referentiel"), @@ -145,9 +170,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content String message3 = t("observe.message.show.usage.for.desactivated3"); UsagesUI usagesUI = new UsagesUI(tx); - - //FIXME - usagesUI.init(message, message2, message3, null); + usagesUI.init(message, message2, message3, usages); int reponse = UIHelper.askUser(null, t("observe.title.need.confirm.to.desactivate.referentiel"), @@ -171,7 +194,17 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content return false; } - public void selectBean(E selectedBean) { + public void selectBean(ReferenceDto<E> selectedReference) { + + FormDto<E> formDto; + if (getDataSource().canWriteReferential()) { + formDto = getReferentialService().loadToEdit(getBeanType(), selectedReference.getId()); + } else { + formDto = getReferentialService().loadToRead(getBeanType(), selectedReference.getId()); + } + + E selectedBean = formDto.getForm(); + getModel().setSelectedBean(selectedBean); // copy right now the selected bean to the model bean to respect contract @@ -179,7 +212,8 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content //FIXME // getLoadBinder().load(selectedBean, getBean(), true); - ReferentialDtos.copyReferentialDto(selectedBean, getBean()); + Binder<E, E> binder = BinderFactory.newBinder(getBeanType()); + binder.copy(selectedBean, getBean()); //TODO update data cache @@ -214,21 +248,10 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content * @param button le boutton qui a declanche l'action */ public void showUniqueKeys(JButton button) { - List<E> entities; - Class<E> beanType = getBeanType(); - //FIXME -// try { -// entities = getDataService().loadDecoratedEntities(getDataSource(), -// beanType); -// -// } catch (DataSourceException e) { -// ErrorDialogUI.showError(e); -// return; -// } -// -// List<Object[]> datas = new ArrayList<Object[]>(entities.size()); + ReferenceSetDto<E> entities = getReferentialService().getReferentialReferenceSet(beanType); + List<Object[]> datas = new ArrayList<>(entities.sizeReference()); String[] naturalIds = getModel().getNaturalIds(); int nbColumns = naturalIds.length + 1; @@ -238,75 +261,74 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content columns[0] = Introspector.decapitalize(beanType.getSimpleName()); DecoratorService dService = getDecoratorService(); - //FIXME -// Loador<E> binder = getLoadBinder(); -// -// Decorator<E> decorator = dService.getDecoratorByType(beanType); -// for (E e : entities) { -// Map<String, Object> values = binder.obtainProperties(e, naturalIds); -// Object[] data = new Object[nbColumns]; -// int index = 0; -// data[0] = decorator.toString(e); -// for (String property : naturalIds) { -// Object o = values.get(property); -// if (ContentReferenceUIModel.DEFAULT_PROPERTIES[0].equals(property) && o == null) { -// // cas special du code à 0, le loador ne retourne pas -// // de valeur car c'est la valeur par defaut d'un type -// // primitif, on force donc l'utilisation du zero. -// o = 0; -// } -// if ("code".equals(property) && o == null) { -// // cas special du code à 0, le loador ne retourne pas -// // de valeur car c'est la valeur par defaut d'un type -// // primitif, on force donc l'utilisation du zero. -// o = 0; -// } -// if ("gender".equals(property) && o == null) { -// // cas special du code à 0, le loador ne retourne pas -// // de valeur car c'est la valeur par defaut d'un type -// // primitif, on force donc l'utilisation du zero. -// o = 0; -// } -// Object value; -// if (o instanceof ReferenceEntity) { -// // on doit decoree la valeur -// Decorator<?> d = dService.getDecoratorByType(o.getClass()); -// value = d.toString(o); -// } else { -// value = o; -// } -// data[++index] = value; -// } -// datas.add(data); -// } -// -// JTable table = new JTable(new UniqueKeyTableModel(columns, datas)); -// -// table.setAutoCreateRowSorter(true); -// table.getRowSorter().setSortKeys(Arrays.asList( -// new RowSorter.SortKey(0, SortOrder.ASCENDING))); -// table.setFillsViewportHeight(true); -// JScrollPane pane = new JScrollPane(); -// -// getUi().decorateUniqueKeyTable(table, new DefaultTableCellRenderer(), pane); -// -// pane.setViewportView(table); -// pane.setVerticalScrollBarPolicy( -// JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); -// -// String title = t("observe.title.unique.key", -// t(DecoratorService.getEntityLabel(beanType))); -// -// pane.setBorder(new TitledBorder(title)); -// -// JPopupMenu popup = new JPopupMenu(); -// popup.setBorder(null); -// popup.add(pane); -// popup.pack(); -// Dimension dim = popup.getPreferredSize(); -// int x = (int) (button.getPreferredSize().getWidth() - dim.getWidth()); -// int y = button.getHeight(); -// popup.show(button, x, y); + Decorator<E> decorator = dService.getDecoratorByType(beanType); + + for (ReferenceDto<E> e : entities.getReference()) { + + Object[] data = new Object[nbColumns]; + int index = 0; + data[0] = decorator.toString(e); + + for (String property : naturalIds) { + Object o = e.getPropertyValue(property); + if (ContentReferenceUIModel.DEFAULT_PROPERTIES[0].equals(property) && o == null) { + // cas special du code à 0, le loador ne retourne pas + // de valeur car c'est la valeur par defaut d'un type + // primitif, on force donc l'utilisation du zero. + o = 0; + } + if ("code".equals(property) && o == null) { + // cas special du code à 0, le loador ne retourne pas + // de valeur car c'est la valeur par defaut d'un type + // primitif, on force donc l'utilisation du zero. + o = 0; + } + if ("gender".equals(property) && o == null) { + // cas special du code à 0, le loador ne retourne pas + // de valeur car c'est la valeur par defaut d'un type + // primitif, on force donc l'utilisation du zero. + o = 0; + } + Object value; + if (o instanceof ReferentialDto) { + // on doit decorer la valeur + Decorator<?> d = dService.getDecoratorByType(o.getClass()); + value = d.toString(o); + } else { + value = o; + } + data[++index] = value; + } + datas.add(data); + } + + JTable table = new JTable(new UniqueKeyTableModel(columns, datas)); + + table.setAutoCreateRowSorter(true); + table.getRowSorter().setSortKeys(Arrays.asList( + new RowSorter.SortKey(0, SortOrder.ASCENDING))); + table.setFillsViewportHeight(true); + JScrollPane pane = new JScrollPane(); + + getUi().decorateUniqueKeyTable(table, new DefaultTableCellRenderer(), pane); + + pane.setViewportView(table); + pane.setVerticalScrollBarPolicy( + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + + String title = t("observe.title.unique.key", + t(DecoratorService.getEntityLabel(beanType))); + + pane.setBorder(new TitledBorder(title)); + + JPopupMenu popup = new JPopupMenu(); + popup.setBorder(null); + popup.add(pane); + popup.pack(); + Dimension dim = popup.getPreferredSize(); + int x = (int) (button.getPreferredSize().getWidth() - dim.getWidth()); + int y = button.getHeight(); + popup.show(button, x, y); } public void showUsages() { @@ -320,17 +342,18 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content } // recherche des utilisation du bean dans la base - //FIXME -// EntityMap usages; -// try { -// usages = getDataService().findAllUsages(getDataSource(), bean); -// } catch (DataSourceException e) { -// ErrorDialogUI.showError(e); -// if (log.isErrorEnabled()) { -// log.error(e); -// } -// return; -// } + DtoMap usages; + try { + usages = getReferentialService().findAllUsages(bean); + + } catch (DataNotFoundException e) { + ErrorDialogUI.showError(e); + if (log.isErrorEnabled()) { + log.error(e); + } + return; + } + DecoratorService dService = getDecoratorService(); Decorator<?> decorator = dService.getDecoratorByType(bean.getClass()); String type = DecoratorService.getEntityLabel(bean.getClass()); @@ -341,8 +364,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content ContentReferenceUI<E> ui = getUi(); UsagesUI usagesUI = new UsagesUI(ui); - //FIXME - usagesUI.init(message, null, null, null); + usagesUI.init(message, null, null, usages); UIHelper.askUser(ui, t("observe.title.show.usage"), @@ -412,6 +434,8 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content } }); + fillListWithReferentials(); + // UIHelper.getLayer(ui.getEditKeyTable()).setUI(ui.getEditKeyTableLayerUI()); } @@ -659,24 +683,25 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content log.debug("entity status was desactivated, looking " + "for usage"); } -// EntityMap usages = dataService.findAllUsages(dataSource, bean); -// -// if (usages.isEmpty()) { -// if (log.isInfoEnabled()) { -// log.info("No usage found, no warning to display"); -// } -// } else { -// // some usages were found -// boolean willsave = showUsagesForDesactivated(getUi(), bean, -// usages); -// if (!willsave) { -// if (log.isDebugEnabled()) { -// log.debug("User refuses to continue, skip " + -// "saving..."); -// } -// return false; -// } -// } + + DtoMap usages = getReferentialService().findAllUsages(bean); + + if (usages.isEmpty()) { + if (log.isInfoEnabled()) { + log.info("No usage found, no warning to display"); + } + } else { + // some usages were found + boolean willsave = showUsagesForDesactivated(getUi(), bean, + usages); + if (!willsave) { + if (log.isDebugEnabled()) { + log.debug("User refuses to continue, skip " + + "saving..."); + } + return false; + } + } } @@ -716,21 +741,21 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content } // recherche des utilisation du bean dans la base -// EntityMap usages = dataService.findAllUsages(getDataSource(), bean); -// -// if (usages.isEmpty()) { -// if (log.isDebugEnabled()) { -// log.debug("No usage found, no warning to display"); -// } -// } else { -// -// // some usages were found -// if (log.isDebugEnabled()) { -// log.debug("can not delete referentiel entity (found usages)"); -// } -// showUsagesForDelete(ui, bean, usages); -// return false; -// } + DtoMap usages = getReferentialService().findAllUsages(bean); + + if (usages.isEmpty()) { + if (log.isDebugEnabled()) { + log.debug("No usage found, no warning to display"); + } + } else { + + // some usages were found + if (log.isDebugEnabled()) { + log.debug("can not delete referentiel entity (found usages)"); + } + showUsagesForDelete(ui, bean, usages); + return false; + } if (!UIHelper.confirmForEntityDelete(ui, model.getBeanType(), bean)) { return false; @@ -842,19 +867,18 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content ContentReferenceUI.LIST_VIEW; } -// @Override -// protected FormDto<E> loadToEdit(String id) { -// ReferentialService referentialService = getReferentialService(); -// FormDto<E> formDto = referentialService.loadToEdit(getBeanType(), id); -// return formDto; -// } -// -// @Override -// protected FormDto<E> loadToReadDto(String id) { -// ReferentialService referentialService = getReferentialService(); -// FormDto<E> formDto = referentialService.loadToRead(getBeanType(), id); -// return formDto; -// } + protected void fillListWithReferentials() { + ReferenceSetDto referentialReferenceSet = getReferentialService().getReferentialReferenceSet(getBeanType()); + List<ReferenceDto> data = new ArrayList<>(referentialReferenceSet.getReference()); + + Decorator<ReferenceDto> decorator = ObserveSwingApplicationContext.get().getDecorator(ReferenceDto.class, + getBeanType().getSimpleName()); + DecoratorUtil.sort((JXPathDecorator<ReferenceDto>) decorator, data, 0); + + BeanListHeader list = getUi().getListHeader(); + list.setData(data); + list.putClientProperty("data", data); + } protected ReferentialService getReferentialService() { return ObserveSwingApplicationContext.get().newService(ReferentialService.class); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/GearUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/GearUIHandler.java index 1f3c332..f69b03b 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/GearUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/GearUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class GearUIHandler extends ContentReferenceUIHandler<GearDto> { } @Override - public void selectBean(GearDto selectedBean) { + public void selectBean(ReferenceDto<GearDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/LengthWeightParameterUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/LengthWeightParameterUIHandler.java index 0e3a1d9..caac165 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/LengthWeightParameterUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/LengthWeightParameterUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.LengthWeightParameterDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class LengthWeightParameterUIHandler extends ContentReferenceUIHandler<Le } @Override - public void selectBean(LengthWeightParameterDto selectedBean) { + public void selectBean(ReferenceDto<LengthWeightParameterDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/ProgramUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/ProgramUIHandler.java index 84aac6b..e20b5d4 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/ProgramUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/ProgramUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class ProgramUIHandler extends ContentReferenceUIHandler<ProgramDto> { } @Override - public void selectBean(ProgramDto selectedBean) { + public void selectBean(ReferenceDto<ProgramDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesListUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesListUIHandler.java index 7969a5f..e94f308 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesListUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesListUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.SpeciesListDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class SpeciesListUIHandler extends ContentReferenceUIHandler<SpeciesListD } @Override - public void selectBean(SpeciesListDto selectedBean) { + public void selectBean(ReferenceDto<SpeciesListDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesUIHandler.java index f85adb8..ce33651 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/SpeciesUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class SpeciesUIHandler extends ContentReferenceUIHandler<SpeciesDto> { } @Override - public void selectBean(SpeciesDto selectedBean) { + public void selectBean(ReferenceDto<SpeciesDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/VesselUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/VesselUIHandler.java index 90dec36..ec88a5a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/VesselUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/impl/VesselUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.ref.impl; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.VesselDto; import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ContentReferenceUIHandler; @@ -70,7 +71,7 @@ public class VesselUIHandler extends ContentReferenceUIHandler<VesselDto> { } @Override - public void selectBean(VesselDto selectedBean) { + public void selectBean(ReferenceDto<VesselDto> selectedBean) { super.selectBean(selectedBean); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/DtoNodeSupport.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/DtoNodeSupport.java index ea710e6..a67ab87 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/DtoNodeSupport.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/DtoNodeSupport.java @@ -126,13 +126,13 @@ public abstract class DtoNodeSupport<E extends IdDto> extends ObserveNode { protected void loadEntity(ObserveDataProvider oProvider) { //FIXME - if (oProvider.getSelectionModel() != null) { - - if (log.isDebugEnabled()) { - log.debug("try to get entity from selectionModel " + internalClass + " : " + id); - } - entity = (ReferenceDto<E>) oProvider.getSelectionModel().getEntityCache(id); - } +// if (oProvider.getSelectionModel() != null) { +// +// if (log.isDebugEnabled()) { +// log.debug("try to get entity from selectionModel " + internalClass + " : " + id); +// } +// entity = (ReferenceDto<E>) oProvider.getSelectionModel().getEntityCache(id); +// } if (entity == null) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUI.jaxx index a2e144b..cf668af 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUI.jaxx @@ -29,7 +29,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. fr.ird.observe.ObserveSwingApplicationContext fr.ird.observe.ui.UIHelper - fr.ird.observe.services.dto.AbstractObserveDto + fr.ird.observe.services.dto.IdDto java.awt.Dimension java.util.List @@ -43,7 +43,7 @@ private UsagesUIHandler handler = new UsagesUIHandler(); public void init(String message, String message2, String message3, - Map<Class<? extends AbstractObserveDto>, List<? extends AbstractObserveDto>> usages) { + Map<Class<? extends IdDto>, List<? extends IdDto>> usages) { getHandler().initUI(this, message,message2, message3, usages); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUIHandler.java index a890a8d..8538cb2 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/usage/UsagesUIHandler.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.usage; import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.services.dto.AbstractObserveDto; import fr.ird.observe.services.dto.referential.ReferentialDto; @@ -61,8 +62,8 @@ public class UsagesUIHandler { public void initUI(UsagesUI ui, String message, String message2, String message3, - Map<Class<? extends AbstractObserveDto>, - List<? extends AbstractObserveDto>> usages) { + Map<Class<? extends IdDto>, + List<? extends IdDto>> usages) { // toujours nettoyer l'ui avant tout cleanUI(ui); @@ -80,10 +81,10 @@ public class UsagesUIHandler { t("observe.message.no.usage.for.entity"))); } else { - for (Map.Entry<Class<? extends AbstractObserveDto>, - List<? extends AbstractObserveDto>> entry : usages.entrySet()) { - Class<? extends AbstractObserveDto> type = entry.getKey(); - List<? extends AbstractObserveDto> entitites = entry.getValue(); + for (Map.Entry<Class<? extends IdDto>, + List<? extends IdDto>> entry : usages.entrySet()) { + Class<? extends IdDto> type = entry.getKey(); + List<? extends IdDto> entitites = entry.getValue(); String typeTitle = DecoratorService.getEntityLabel(type); typeTitle = t(typeTitle); addUsages(ui, type, entitites, typeTitle); diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 8e3b5c9..bd4de97 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -893,16 +893,16 @@ observe.common.observer=Observateur observe.common.observerLabel= observe.common.obsolete.entity=Le référentiel %1$s est désactivé. observe.common.ocean=Océan -observe.common.ocean/label1= -observe.common.ocean/label2= -observe.common.ocean/label3= -observe.common.ocean/label4= -observe.common.ocean/label5= -observe.common.ocean/label6= -observe.common.ocean/label7= -observe.common.ocean/label8= +observe.common.ocean/label1=Océan +observe.common.ocean/label2=Océan +observe.common.ocean/label3=Océan +observe.common.ocean/label4=Océan +observe.common.ocean/label5=Océan +observe.common.ocean/label6=Océan +observe.common.ocean/label7=Océan +observe.common.ocean/label8=Océan observe.common.oceanForSpecies=Liste des océans -observe.common.oldCode3L= +observe.common.oldCode3L=ancien code \: observe.common.operation.resume=Résumé des opérations observe.common.organism=Organisme observe.common.ownership=Appartenance @@ -1012,25 +1012,25 @@ observe.common.undefined=< non défini > observe.common.undefined.tip=< non défini > observe.common.uri=URI observe.common.vessel=Bateau -observe.common.vessel/label1= -observe.common.vessel/label2= -observe.common.vessel/label3= -observe.common.vessel/label4= -observe.common.vessel/label5= -observe.common.vessel/label6= -observe.common.vessel/label7= -observe.common.vessel/label8= -observe.common.vesselActivityLongline= +observe.common.vessel/label1=Bateau +observe.common.vessel/label2=Bateau +observe.common.vessel/label3=Bateau +observe.common.vessel/label4=Bateau +observe.common.vessel/label5=Bateau +observe.common.vessel/label6=Bateau +observe.common.vessel/label7=Bateau +observe.common.vessel/label8=Bateau +observe.common.vesselActivityLongline=Activité bateau observe.common.vesselActivitySeine=Activité bateau observe.common.vesselActivitySeine.comment=Seule l'activité %1$s permet de saisir une calée. -observe.common.vesselActivitySeine/label1= -observe.common.vesselActivitySeine/label2= -observe.common.vesselActivitySeine/label3= -observe.common.vesselActivitySeine/label4= -observe.common.vesselActivitySeine/label5= -observe.common.vesselActivitySeine/label6= -observe.common.vesselActivitySeine/label7= -observe.common.vesselActivitySeine/label8= +observe.common.vesselActivitySeine/label1=Activité bateau +observe.common.vesselActivitySeine/label2=Activité bateau +observe.common.vesselActivitySeine/label3=Activité bateau +observe.common.vesselActivitySeine/label4=Activité bateau +observe.common.vesselActivitySeine/label5=Activité bateau +observe.common.vesselActivitySeine/label6=Activité bateau +observe.common.vesselActivitySeine/label7=Activité bateau +observe.common.vesselActivitySeine/label8=Activité bateau observe.common.vesselSizeCategory=Catégorie de bateau observe.common.vesselSpeed=Vitesse bateau (nd) observe.common.vesselType=Type de pêcherie diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java index cf32161..758ceb9 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java @@ -22,6 +22,7 @@ package fr.ird.observe.application.web.controller.v1; * #L% */ +import fr.ird.observe.services.dto.DtoMap; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; @@ -88,4 +89,8 @@ public class ReferentialServiceController extends ObserveAuthenticatedServiceCon service.delete(type, ids); } + @Override + public <R extends ReferentialDto> DtoMap findAllUsages(R bean) throws DataNotFoundException { + return service.findAllUsages(bean); + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java index d673eeb..4e2bd25 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -23,12 +23,14 @@ package fr.ird.observe.services.service; */ import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.dto.DtoMap; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; +import fr.ird.observe.services.spi.ReadDataPermission; import fr.ird.observe.services.spi.ReadReferentialPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteReferentialPermission; @@ -76,4 +78,8 @@ public interface ReferentialService extends ObserveService { @DeleteRequest <R extends ReferentialDto> void delete(Class<R> type, Collection<String> ids) throws DataNotFoundException; + @ReadReferentialPermission + @ReadDataPermission + <R extends ReferentialDto> DtoMap findAllUsages(R bean) throws DataNotFoundException; + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/DtoMap.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DtoMap.java new file mode 100644 index 0000000..3dd3487 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DtoMap.java @@ -0,0 +1,43 @@ +/* + * #%L + * ObServe :: Entities + * %% + * Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ird.observe.services.dto; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A Dictionary of dtos + * + * @author Kevin Morin (Code Lutin) + */ +public class DtoMap extends HashMap<Class<? extends IdDto>, List<? extends IdDto>> { + + private static final long serialVersionUID = 1L; + + public DtoMap() { + } + + public DtoMap(Map<? extends Class<? extends IdDto>, ? extends List<? extends IdDto>> m) { + super(m); + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialDtos.java index cc9b4b1..30ded33 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialDtos.java @@ -2,7 +2,6 @@ package fr.ird.observe.services.dto.referential; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.referential.longline.BaitHaulingStatusDto; import fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java index ca4c003..e036e86 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java @@ -23,16 +23,22 @@ package fr.ird.observe.services.service; */ import com.google.common.base.Optional; +import fr.ird.observe.entities.EntityMap; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.DtoMap; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.referential.ReferentialDto; +import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.List; /** * Created on 16/08/15. @@ -115,4 +121,38 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe deleteEntity(dtoType, entityType, ids); } + @Override + public <R extends ReferentialDto> DtoMap findAllUsages(R bean) throws DataNotFoundException { + + Class<? extends IdDto> referentialDtoType = bean.getClass(); + Class<TopiaEntity> entityType = getEntityType(referentialDtoType); + TopiaEntity entity = loadEntity(referentialDtoType, entityType, bean.getId()); + + TopiaDao<TopiaEntity> dao = getTopiaPersistenceContext().getDao(entityType); + EntityMap allUsages = new EntityMap(dao.findAllUsages(entity)); + + DtoMap result = new DtoMap(); + + for (Class<? extends TopiaEntity> type : allUsages.keySet()) { + + Class<? extends IdDto> dtoType = getDtoType(type); + List<? extends IdDto> dtos = test(dtoType, type, allUsages); + result.put(dtoType, dtos); + + } + + return result; + } + + protected <E extends TopiaEntity, I extends IdDto> List<I> test(Class<I> dtoType, + Class<E> type, + EntityMap allUsages) { + List<I> dtos = new ArrayList<>(); + List<E> entities = (List<E>) allUsages.get(type); + for (E entity : entities) { + I idDto = entityToDto(dtoType, type, entity); + dtos.add(idDto); + } + return dtos; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.