Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 6eaa38ad by tchemit at 2019-08-07T12:39:36Z Use DecoratorServiceSupport from toolkit - - - - - 6dd29060 by tchemit at 2019-08-07T12:39:37Z Use Decorators from toolkit - - - - - 24 changed files: - client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java - client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java - client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java - client-core/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/UIActionSupport.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/content/tree/NavigationConfigUIActionSupport.java - client-core/src/main/java/fr/ird/observe/client/ui/content/api/ContentUIHandler.java - client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client-core/src/main/java/fr/ird/observe/client/ui/tree/ObserveTreeNodeSupport.java - client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java - client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java - client-core/src/main/java/fr/ird/observe/client/validation/ClientValidationContext.java - dto/src/main/i18n/getters/java.getter - dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java - − dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ObserveDecorator.java - − dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ReferentialReferenceDecorator.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties - services-validation/src/main/java/fr/ird/observe/services/ObserveServicesProviderImpl.java - dto/src/main/java/fr/ird/observe/dto/decoration/decorators/DataReferenceDecorator.java → services-validation/src/main/java/fr/ird/observe/services/ObserveServicesProviderSupport.java - services-validation/src/main/java/fr/ird/observe/validation/validators/TripVesselDtoValidator.java - validation/src/main/resources/fr/ird/observe/dto/data/ll/common/TripDto-create-error-validation.xml - validation/src/main/resources/fr/ird/observe/dto/data/ll/common/TripDto-update-error-validation.xml Changes: ===================================== client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java ===================================== @@ -42,6 +42,7 @@ import fr.ird.observe.navigation.model.edit.ObserveEditModelManager; import fr.ird.observe.navigation.model.select.ObserveSelectModel; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.ObserveServiceMainFactory; +import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.spi.DtoModelHelper; import fr.ird.observe.validation.ValidatorDto; import fr.ird.observe.validation.ValidatorsManager; @@ -216,6 +217,10 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return ((ValidatorsManager) VALIDATORS_MANAGER.get()).getValidators(); } + public ObserveServicesProvider getServicesProvider() { + return getDataSourcesManager().getMainDataSource(); + } + public ObserveMainUI getMainUI() { return MAIN_UI.get(); } @@ -357,23 +362,23 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im super.finalize(); } - public void sanitizeIds(ProgressModel progressModel, DtoModelNavigationAggregateModel navigationSelectModel) { - try { - for (DtoModelNavigationModel<?> navigationModel : navigationSelectModel.getModels()) { - for (DtoModelNavigationNode node : navigationModel.getNodesWithIds()) { - if (node.isEnabled()) { - ImmutableSet<String> safeIds = ObserveSwingDataSource.MAIN.getNavigationService().retainExistingIds(ImmutableSet.of(node.getId())); - if (safeIds.isEmpty()) { - node.setId(null); - } - } - progressModel.incrementsCurrentStep(); - } - } - } catch (Exception e) { - log.error("Could not sanitizeIds", e); - } - } +// public void sanitizeIds(ProgressModel progressModel, DtoModelNavigationAggregateModel navigationSelectModel) { +// try { +// for (DtoModelNavigationModel<?> navigationModel : navigationSelectModel.getModels()) { +// for (DtoModelNavigationNode node : navigationModel.getNodesWithIds()) { +// if (node.isEnabled()) { +// ImmutableSet<String> safeIds = ObserveSwingDataSource.MAIN.getNavigationService().retainExistingIds(ImmutableSet.of(node.getId())); +// if (safeIds.isEmpty()) { +// node.setId(null); +// } +// } +// progressModel.incrementsCurrentStep(); +// } +// } +// } catch (Exception e) { +// log.error("Could not sanitizeIds", e); +// } +// } public void saveNavigationToConfig(boolean clearModels) { ===================================== client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java ===================================== @@ -568,10 +568,10 @@ public class ObserveDataSourcesManager implements Closeable { boolean withSelectModel = navigationSelectModel != null; boolean withEditModel = navigationEditModel != null; if (source.canReadData() && withSelectModel) { - applicationContext.sanitizeIds(progressModel, navigationSelectModel); + dataSource.sanitizeIds(progressModel, navigationSelectModel); } if (source.canWriteData() && withEditModel) { - applicationContext.sanitizeIds(progressModel, navigationEditModel); + dataSource.sanitizeIds(progressModel, navigationEditModel); } if (source.canWriteData()) { applicationContext.getFloatingObjectPresetsManager().sanitize(progressModel, source); @@ -583,7 +583,7 @@ public class ObserveDataSourcesManager implements Closeable { applicationContext.getNavigationEdit().load(navigationEditModel); } - mainUI.getInitializer().loadNavigationUI(progressModel); + mainUI.getInitializer().loadNavigationUI(dataSource,progressModel); mainUI.getModel().setMode(ObserveUIMode.DB); progressModel.incrementsCurrentStep(); ===================================== client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java ===================================== @@ -37,9 +37,13 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; +import fr.ird.observe.navigation.model.DtoModelNavigationAggregateModel; +import fr.ird.observe.navigation.model.DtoModelNavigationModel; +import fr.ird.observe.navigation.model.DtoModelNavigationNode; import fr.ird.observe.services.ObserveServiceInitializer; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.ObserveServicesProvider; +import fr.ird.observe.services.ObserveServicesProviderSupport; import fr.ird.observe.services.configuration.DataSourceCreateConfigurationDto; import fr.ird.observe.services.configuration.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.configuration.IncompatibleDataSourceCreateConfigurationException; @@ -65,14 +69,14 @@ import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.spi.map.ImmutableSetDtoMap; import fr.ird.observe.spi.map.ImmutableSetStringMap; import fr.ird.observe.spi.map.ImmutableTypedMap; +import io.ultreia.java4all.bean.JavaBean; +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.jdesktop.beans.AbstractSerializableBean; import org.nuiton.version.Version; import javax.swing.JOptionPane; import javax.swing.event.EventListenerList; -import java.io.Closeable; import java.io.File; import java.io.IOException; import java.util.Locale; @@ -84,49 +88,23 @@ import static io.ultreia.java4all.i18n.I18n.t; /** * @author Tony Chemit - dev@tchemit.fr */ -public class ObserveSwingDataSource extends AbstractSerializableBean implements Closeable, ObserveServicesProvider { +@GenerateJavaBeanDefinition +public class ObserveSwingDataSource extends ObserveServicesProviderSupport implements JavaBean { - public static final ObserveServicesProvider MAIN = new ObserveServicesProvider(){ - @Override - public void close() { - } - - //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( - @Override - public fr.ird.observe.services.service.data.ll.common.TripService getLlCommonTripService() { - return getService(fr.ird.observe.services.service.data.ll.common.TripService.class); - } - - //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( - @Override - public fr.ird.observe.services.service.data.ps.common.TripService getPsCommonTripService() { - return getService(fr.ird.observe.services.service.data.ps.common.TripService.class); - } - - @Override - public <S extends ObserveService> S getService(Class<S> serviceType) { - return ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource().getService(serviceType); - } - }; - private static final long serialVersionUID = 1L; private static final Logger log = LogManager.getLogger(ObserveSwingDataSource.class); - private final EventListenerList listenerList; + private final EventListenerList listenerList; private final ObserveDataSourceConfiguration configuration; - private final ObserveReferentialCache referentialCache; - private final ObserveServicesProvider servicesProvider; - private ObserveDataSourceConnection connection; - private ProgressModel progressModel; // indique que la connexion a expiré mais que la source n'est pas complétement fermer private boolean expired; - // indique si une modification a été effectuéé sur la base depuis son ouverture private boolean modified; + // indique si l'utilisateur connecté est le propriétaire de la base private boolean owner; public ObserveSwingDataSource(ObserveDataSourceConfiguration configuration) { @@ -582,4 +560,23 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements public boolean getOwner() { return owner; } + + public void sanitizeIds(ProgressModel progressModel, DtoModelNavigationAggregateModel navigationSelectModel) { + try { + for (DtoModelNavigationModel<?> navigationModel : navigationSelectModel.getModels()) { + for (DtoModelNavigationNode node : navigationModel.getNodesWithIds()) { + if (node.isEnabled()) { + ImmutableSet<String> safeIds = getNavigationService().retainExistingIds(ImmutableSet.of(node.getId())); + if (safeIds.isEmpty()) { + node.setId(null); + } + } + progressModel.incrementsCurrentStep(); + } + } + } catch (Exception e) { + log.error("Could not sanitizeIds", e); + } + } + } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java ===================================== @@ -46,6 +46,7 @@ import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.navigation.model.edit.longline.ObserveLonglineEditModel; import fr.ird.observe.navigation.model.edit.seine.ObserveSeineEditModel; import fr.ird.observe.navigation.model.select.ObserveSelectModel; +import fr.ird.observe.services.ObserveServicesProvider; import io.ultreia.java4all.i18n.I18n; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -356,7 +357,7 @@ public class ObserveMainUIInitializer { // on met à jour le modèle de navigation NavigationTreeModel treeModel = ui.getNavigationUI().getTree().getTreeModel(); treeModel.load(config); - treeModel.populate(); + treeModel.populate(mainStorage); // selection du noeud d'ouverture ui.getNavigationUI().getTree().selectInitialNode(); @@ -563,14 +564,15 @@ public class ObserveMainUIInitializer { * * <b>Note:</b> cette méthode doit être appelée après tout rechargement de modèle de naivgation. * + * @param servicesProvider * @param progressModel the progress model to interact with ui */ - public void loadNavigationUI(ProgressModel progressModel) { + public void loadNavigationUI(ObserveServicesProvider servicesProvider, ProgressModel progressModel) { NavigationTree tree = ui.getNavigationUI().getTree(); NavigationTreeModel treeModel = tree.getTreeModel(); - treeModel.populate(); + treeModel.populate(servicesProvider); progressModel.incrementsCurrentStep(); // select initial node ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/UIActionSupport.java ===================================== @@ -22,12 +22,12 @@ package fr.ird.observe.client.ui.actions; import fr.ird.observe.client.ObserveSwingApplicationContext; -import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.ObserveKeyStrokes; import fr.ird.observe.client.ui.ObserveMainUI; import fr.ird.observe.client.ui.content.api.ContentUI; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.services.ObserveServicesProvider; +import io.ultreia.java4all.util.SingletonSupplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jdesktop.jxlayer.JXLayer; @@ -61,6 +61,7 @@ public abstract class UIActionSupport extends AbstractAction { private static final long serialVersionUID = 1L; public static final String DELEGATE_CONTENT_UI = "delegateContentUI"; private final ObserveMainUI mainUI; + private final SingletonSupplier<ObserveServicesProvider> servicesProviderSupplier = SingletonSupplier.of(ObserveSwingApplicationContext.get()::getServicesProvider); public UIActionSupport(ObserveMainUI mainUI, String actionCommandKey, String label, String shortDescription, String actionIcon, KeyStroke acceleratorKey) { this(mainUI, actionCommandKey, label, shortDescription, actionIcon, acceleratorKey, true); @@ -228,7 +229,7 @@ public abstract class UIActionSupport extends AbstractAction { } protected ObserveServicesProvider getServicesProvider() { - return ObserveSwingDataSource.MAIN; + return servicesProviderSupplier.get(); } protected ContentUI getContentUI(ContentUI contentUI) { ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/content/tree/NavigationConfigUIActionSupport.java ===================================== @@ -43,6 +43,6 @@ public abstract class NavigationConfigUIActionSupport extends MenuActionSupport @Override protected void doActionPerformed(ActionEvent e) { - getMainUI().getNavigationUI().getHandler().tryToUpdateNavigationTree(); + getMainUI().getNavigationUI().getHandler().tryToUpdateNavigationTree(getServicesProvider()); } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/api/ContentUIHandler.java ===================================== @@ -50,6 +50,7 @@ import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.service.ObserveService; import fr.ird.observe.spi.DtoModelHelper; import io.ultreia.java4all.bean.JavaBean; +import io.ultreia.java4all.util.SingletonSupplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.JAXXObject; @@ -83,7 +84,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import static fr.ird.observe.client.db.ObserveSwingDataSource.MAIN; import static io.ultreia.java4all.i18n.I18n.t; /** @@ -109,6 +109,8 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe private ImmutableList<TemperatureEditor> temperatureEditors; private boolean toggleTimeEditorSliderIsChanging; private boolean coordinateFormatChangedIsChanging; + protected boolean resetEdit; + private final SingletonSupplier<ObserveServicesProvider> servicesProviderSupplier; protected ContentUIHandler() { this.focusTraversalPolicy = createFocusTraversalPolicy(); @@ -120,6 +122,7 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe CoordinateFormat newValue = (CoordinateFormat) evt.getNewValue(); onCoordinateFormatChanged(newValue); }; + this.servicesProviderSupplier = SingletonSupplier.of(ObserveSwingApplicationContext.get()::getServicesProvider); } public static NavigationTree getNavigationTree() { @@ -510,7 +513,6 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe protected void uninstallValidators() { SwingValidatorUtil.setValidatorBean(ui, null); } - protected boolean resetEdit; public boolean isResetEdit() { return resetEdit; @@ -804,7 +806,7 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe @Override public <S extends ObserveService> S getService(Class<S> serviceType) { - return MAIN.getService(serviceType); + return servicesProviderSupplier.get().getService(serviceType); } // ===================================== client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java ===================================== @@ -618,7 +618,7 @@ public class StorageUIHandler implements UIHandler<StorageUI> { log.info(">>> create initial dump with " + currentDataSource + " in " + f); } try { - SqlScriptProducerService dumpProducerService = ObserveSwingDataSource.MAIN.getSqlScriptProducerService(); + SqlScriptProducerService dumpProducerService = currentDataSource.getSqlScriptProducerService(); backupLocalDatabase(dumpProducerService, f); config.setInitialDumpExist(true); } catch (Exception e) { ===================================== client-core/src/main/java/fr/ird/observe/client/ui/tree/ObserveTreeNodeSupport.java ===================================== @@ -22,8 +22,10 @@ package fr.ird.observe.client.ui.tree; * #L% */ +import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.services.ObserveServicesProvider; +import io.ultreia.java4all.util.SingletonSupplier; import javax.swing.Icon; import javax.swing.tree.DefaultMutableTreeNode; @@ -37,8 +39,11 @@ import java.awt.Color; */ public abstract class ObserveTreeNodeSupport<O> extends DefaultMutableTreeNode { + private final SingletonSupplier<ObserveServicesProvider> servicesProviderSupplier; + public ObserveTreeNodeSupport(O userObject, boolean allowsChildren) { super(userObject, allowsChildren); + this.servicesProviderSupplier = SingletonSupplier.of(ObserveSwingApplicationContext.get()::getServicesProvider); } public abstract boolean isOpen(); @@ -60,7 +65,7 @@ public abstract class ObserveTreeNodeSupport<O> extends DefaultMutableTreeNode { } protected ObserveServicesProvider getServicesProvider() { - return ObserveSwingDataSource.MAIN; + return servicesProviderSupplier.get(); } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java ===================================== @@ -42,6 +42,7 @@ import fr.ird.observe.dto.referential.common.ProgramHelper; import fr.ird.observe.dto.referential.common.ProgramReference; import fr.ird.observe.navigation.model.DtoModelNavigationModel; import fr.ird.observe.navigation.model.ObserveNavigationNode; +import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.service.data.NavigationRequest; import fr.ird.observe.services.service.data.NavigationResult; import fr.ird.observe.services.service.data.NavigationService; @@ -103,9 +104,9 @@ public class NavigationTreeModel extends DefaultTreeModel { this.config.load(config); } - public void populate() { + public void populate(ObserveServicesProvider servicesProvider) { - NavigationService navigationService = ObserveSwingDataSource.MAIN.getNavigationService(); + NavigationService navigationService = servicesProvider.getNavigationService(); NavigationRequest navigationRequest = config.toRequest(); NavigationResult navigationResult = navigationService.getNavigation(navigationRequest); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java ===================================== @@ -28,6 +28,7 @@ import fr.ird.observe.client.configuration.NavigationTreeConfig; import fr.ird.observe.client.ui.actions.UIActionSupport; import fr.ird.observe.client.ui.content.api.spi.ObserveActionMap; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.services.ObserveServicesProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jdesktop.swingx.decorator.ColorHighlighter; @@ -152,7 +153,7 @@ public class NavigationUIHandler implements UIHandler<NavigationUI> { } - public void tryToUpdateNavigationTree() { + public void tryToUpdateNavigationTree(ObserveServicesProvider servicesProvider) { boolean canContinue = ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI(); @@ -180,7 +181,7 @@ public class NavigationUIHandler implements UIHandler<NavigationUI> { navigationTreeConfig.setShowReferential(showReferential); navigationTreeConfig.setShowEmptyProgram(showEmptyProgram); treeModel.save(ObserveSwingApplicationContext.get().getConfig()); - treeModel.populate(); + treeModel.populate(servicesProvider); //FIXME repositionner le nœud sélectionné if (!treeModel.getRoot().isLeaf()) { tree.setSelectionRow(0); ===================================== client-core/src/main/java/fr/ird/observe/client/validation/ClientValidationContext.java ===================================== @@ -56,7 +56,7 @@ public class ClientValidationContext extends ValidationContext { } public ObserveServicesProvider getServicesProvider() { - return ObserveSwingDataSource.MAIN; + return ObserveSwingApplicationContext.get().getServicesProvider(); } @Override ===================================== dto/src/main/i18n/getters/java.getter ===================================== @@ -17,8 +17,6 @@ observe.common.gps.activity observe.common.gps.gpsPoint observe.common.inconnu observe.common.no.unit -observe.common.nocode -observe.common.none observe.data.Data.baitHaulingStatus observe.data.Data.captain observe.data.Data.dataQuality ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java ===================================== @@ -22,16 +22,8 @@ package fr.ird.observe.dto.decoration; * #L% */ -import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator; -import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator; -import fr.ird.observe.dto.reference.DataDtoReference; -import fr.ird.observe.dto.reference.DtoReference; -import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialLocale; -import org.nuiton.decorator.Decorator; -import org.nuiton.decorator.DecoratorProvider; - -import java.util.Objects; +import fr.ird.observe.spi.model.initializer.ObserveGlobalModelInitializer; /** @@ -40,60 +32,23 @@ import java.util.Objects; * @author Tony Chemit - dev@tchemit.fr * @since 1.3 */ -public class DecoratorService extends DecoratorProvider { +public class DecoratorService extends DecoratorServiceSupport<DecoratorServiceInitializer> { public static final String HAULING_IDENTIFIER = "haulingIdentifier"; public static final String TRIP_CONTEXT = "Trip"; public static final String WITH_URL = "WithUrl"; - private final DecoratorServiceInitializer initializer; - private ReferentialLocale referentialLocale; - public DecoratorService(ReferentialLocale referentialLocale) { - this.referentialLocale = Objects.requireNonNull(referentialLocale); - this.initializer = new DecoratorServiceInitializer(this); - loadDecorators(); - } - - public ReferentialLocale getReferentialLocale() { - return referentialLocale; - } - - public void setReferentialLocale(ReferentialLocale referentialLocale) { - this.referentialLocale = referentialLocale; + super(referentialLocale); } @Override - protected void loadDecorators() { - if (referentialLocale == null) { - // on n'enregistre pas les décorateur tant que la locale n'est pas - // positionnée - return; - } - DecoratorServiceInitializer.run(initializer); - } - - public <T extends ReferentialDtoReference> ReferentialReferenceDecorator<T> getReferentialReferenceDecorator(Class<T> referenceType) { - return (ReferentialReferenceDecorator) getDecoratorByType(referenceType); + protected DecoratorServiceInitializer createDecoratorServiceInitializer() { + return new DecoratorServiceInitializer(this); } - public <R extends DataDtoReference> DataReferenceDecorator<R> getDataReferenceDecorator(Class<R> referenceType) { - return (DataReferenceDecorator) getDecoratorByType(referenceType); - } - - public <R extends DataDtoReference> DataReferenceDecorator<R> getDataReferenceDecorator(Class<R> referenceType, String context) { - return (DataReferenceDecorator) getDecoratorByType(referenceType, context); - } - - public <R extends DtoReference> Decorator<R> getReferenceDecorator(Class<R> referenceType) { - Decorator<R> decorator; - - if (DataDtoReference.class.isAssignableFrom(referenceType)) { - decorator = getDataReferenceDecorator((Class) referenceType); - } else { - decorator = getReferentialReferenceDecorator((Class) referenceType); - } - - return decorator; + @Override + protected void init(DecoratorServiceInitializer initializer) { + ObserveGlobalModelInitializer.run(initializer); } } ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ObserveDecorator.java deleted ===================================== @@ -1,140 +0,0 @@ -/* - * #%L - * ObServe :: Dto - * %% - * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io - * %% - * 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.dto.decoration.decorators; - -import fr.ird.observe.dto.reference.DtoReference; -import org.apache.commons.jxpath.JXPathContext; -import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.nuiton.decorator.MultiJXPathDecorator; - -import java.io.Serializable; - -import static io.ultreia.java4all.i18n.I18n.t; - -/** - * Abstract decorator for any complex decorator. - * - * @author Tony Chemit - dev@tchemit.fr - * @since 2.4 - */ -public class ObserveDecorator<E> extends MultiJXPathDecorator<E> implements Cloneable { - - private static final long serialVersionUID = 1L; - - /** Logger. */ - private static final Logger log = LogManager.getLogger(ObserveDecorator.class); - - public static final String DEFAULT_SEPARATOR = "##"; - - public static final String DEFAULT_SEPARATOR_REPLACEMENT = " - "; - - public ObserveDecorator(Class<E> internalClass, String expression) { - super(internalClass, expression, DEFAULT_SEPARATOR, DEFAULT_SEPARATOR_REPLACEMENT); - } - - public ObserveDecorator(Class<E> internalClass, String expression, String separator) { - super(internalClass, expression, DEFAULT_SEPARATOR, separator); - } - - @Override - public final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - protected Comparable<Comparable<?>> getTokenValue(JXPathContext jxcontext, String token) { - // assume all values are comparable - Comparable<Comparable<?>> value; - - try { - - String[] tokens = token.split("/"); - - Object value0 = jxcontext.getValue(tokens[0]); - - if (value0 instanceof DtoReference) { - - value = getValueFromReference(tokens, (DtoReference<?, ?>) value0, 1); - - } else { - - value = (Comparable<Comparable<?>>) jxcontext.getValue(token); - } - - if (value == null) { - value = (Comparable<Comparable<?>>) getDefaultNullValue(token); - } - - } catch (Exception e) { - value = (Comparable<Comparable<?>>) getDefaultUndefinedValue(token); - } - - return value; - } - - protected Comparable<Comparable<?>> getValueFromReference(String[] tokens, DtoReference<?, ?> referenceBean, int startIndex) { - - for (int i = startIndex, max = tokens.length - 1; i < max; i++) { - - if (referenceBean.getPropertyNames().contains(tokens[i])) { - - Serializable propertyValue = referenceBean.getPropertyValue(tokens[i]); - - if (!(propertyValue instanceof DtoReference)) { - - return (Comparable<Comparable<?>>) getDefaultUndefinedValue(StringUtils.join(tokens, "/")); - - } - - referenceBean = (DtoReference<?, ?>) propertyValue; - } - } - - Comparable<Comparable<?>> value = null; - - String lastToken = tokens[tokens.length - 1]; - if (referenceBean.getPropertyNames().contains(lastToken)) { - value = referenceBean.getPropertyValue(lastToken); - } else { - value = referenceBean.get(lastToken); - } - - return value; - } - - protected Comparable<?> getDefaultUndefinedValue(String token) { - if (log.isDebugEnabled()) { - log.debug("No defined value for token [" + token + "]"); - } - return t("observe.common.none"); - } - - protected Comparable<?> getDefaultNullValue(String token) { - if (log.isDebugEnabled()) { - log.debug("Null value for token [" + token + "]"); - } - return t("observe.common.none"); - } - - -} ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ReferentialReferenceDecorator.java deleted ===================================== @@ -1,102 +0,0 @@ -package fr.ird.observe.dto.decoration.decorators; - -/*- - * #%L - * ObServe :: Dto - * %% - * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io - * %% - * 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% - */ - -import fr.ird.observe.dto.reference.ReferentialDtoReference; -import fr.ird.observe.dto.referential.ReferentialDto; -import org.apache.commons.jxpath.JXPathContext; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.decorator.JXPathDecorator; - -import java.util.List; - -import static io.ultreia.java4all.i18n.I18n.t; - -/** - * @author Kevin Morin (Code Lutin) - */ -public class ReferentialReferenceDecorator<R extends ReferentialDtoReference> extends ObserveDecorator<R> implements Cloneable { - - private static final long serialVersionUID = 1L; - - public ReferentialReferenceDecorator(Class<R> type, String expression) { - super(type, expression); - for (int i = 0; i < nbToken; i++) { - String property = getProperty(i); - if (ReferentialDto.PROPERTY_CODE.equals(property)) { - - // On change le comparateur pour simuler le tri numérique si possible. - contexts[i].setComparator(new JXPathComparator<R>(property) { - - @Override - public void init(JXPathDecorator<R> decorator, List<R> datas) { - clear(); - for (R data : datas) { - JXPathContext jxcontext = JXPathContext.newContext(data); - Comparable<Comparable<?>> key = getTokenValue(jxcontext, ReferentialDto.PROPERTY_CODE); - // on passe en 000000x comme ça si on a des nombres, ils seront bien triés - String value = key == null ? "" : StringUtils.leftPad(key.toString(), 6, "0"); - valueCache.put(data, (Comparable) value); - } - } - }); - break; - } - } - } - - @Override - protected Comparable<Comparable<?>> getTokenValue(JXPathContext jxcontext, String token) { - - - // assume all values are comparable - Comparable<Comparable<?>> value; - - Object contextBean = jxcontext.getContextBean(); - - if (contextBean instanceof ReferentialDtoReference) { - - String[] tokens = token.split("/"); - - value = getValueFromReference(tokens, (ReferentialDtoReference) contextBean, 0); - - if (value == null) { - value = (Comparable<Comparable<?>>) getDefaultNullValue(tokens[0]); - } - - } else { - value = super.getTokenValue(jxcontext, token); - } - - return value; - - } - - @Override - protected Comparable<?> getDefaultNullValue(String token) { - if (token.equals("startDate") || token.equals("endDate")) { - return null; - } - return ReferentialDto.PROPERTY_CODE.equals(token) ? t("observe.common.nocode") : super.getDefaultNullValue(token); - } -} ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -426,8 +426,6 @@ observe.common.inconnu=Unknown observe.common.label=Label observe.common.lengthWeightFormula=Length weight formula observe.common.no.unit=No unit -observe.common.nocode=Nocode -observe.common.none=None observe.common.operation.resume=Summary of operations observe.common.resume=Summary observe.common.saveFile.overwrite=file alreayd exists, would you like to overwrite it? ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -426,8 +426,6 @@ observe.common.inconnu=desconocido observe.common.label=Texto observe.common.lengthWeightFormula=Relación de peso observe.common.no.unit=No unit \#TODO -observe.common.nocode=codigo ausente -observe.common.none=Ninguno observe.common.operation.resume=Resumen de operaciones observe.common.resume=Resumen de la configuración observe.common.saveFile.overwrite=El archivo ya existe. Quiere reemplazar lo ? ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -426,8 +426,6 @@ observe.common.inconnu=inconnu observe.common.label=Libellé observe.common.lengthWeightFormula=Relation Poids observe.common.no.unit=Pas d'unité -observe.common.nocode=code absent -observe.common.none=Aucun observe.common.operation.resume=Résumé des opérations observe.common.resume=Résumé de la configuration observe.common.saveFile.overwrite=Le fichier existe déjà. Voulez-vous le remplacer ? ===================================== services-validation/src/main/java/fr/ird/observe/services/ObserveServicesProviderImpl.java ===================================== @@ -23,7 +23,6 @@ package fr.ird.observe.services; */ import fr.ird.observe.services.service.ObserveService; -import fr.ird.observe.services.service.data.ll.common.TripService; import java.util.Objects; @@ -32,7 +31,7 @@ import java.util.Objects; * * @author Tony Chemit - dev@tchemit.fr */ -public class ObserveServicesProviderImpl implements ObserveServicesProvider { +public class ObserveServicesProviderImpl extends ObserveServicesProviderSupport { private final ObserveServiceFactory serviceFactory; private final ObserveServiceInitializer serviceInitializer; @@ -42,22 +41,6 @@ public class ObserveServicesProviderImpl implements ObserveServicesProvider { this.serviceInitializer = Objects.requireNonNull(serviceInitializer); } - @Override - public void close() { - } - - //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( - @Override - public TripService getLlCommonTripService() { - return getService(TripService.class); - } - - //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( - @Override - public fr.ird.observe.services.service.data.ps.common.TripService getPsCommonTripService() { - return getService(fr.ird.observe.services.service.data.ps.common.TripService.class); - } - @Override public <S extends ObserveService> S getService(Class<S> serviceType) { return serviceFactory.newService(serviceInitializer, serviceType); ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/decorators/DataReferenceDecorator.java → services-validation/src/main/java/fr/ird/observe/services/ObserveServicesProviderSupport.java ===================================== @@ -1,8 +1,8 @@ -package fr.ird.observe.dto.decoration.decorators; +package fr.ird.observe.services; /*- * #%L - * ObServe :: Dto + * ObServe :: Services Validation API * %% * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io * %% @@ -22,50 +22,24 @@ package fr.ird.observe.dto.decoration.decorators; * #L% */ -import fr.ird.observe.dto.reference.DataDtoReference; -import fr.ird.observe.dto.reference.DtoReference; -import org.apache.commons.jxpath.JXPathContext; +import io.ultreia.java4all.bean.AbstractJavaBean; -/** - * @author Kevin Morin (Code Lutin) - */ -public class DataReferenceDecorator<R extends DataDtoReference> extends ObserveDecorator<R> implements Cloneable { - - private static final long serialVersionUID = 1L; +public abstract class ObserveServicesProviderSupport extends AbstractJavaBean implements ObserveServicesProvider { - public DataReferenceDecorator(Class<R> type, String expression) { - super(type, expression); + @Override + public void close() { + // by default nothing to do on close } + //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( @Override - protected Comparable<Comparable<?>> getTokenValue(JXPathContext jxcontext, String token) { - - // assume all values are comparable - Comparable<Comparable<?>> value; - - Object contextBean = jxcontext.getContextBean(); - - if (contextBean instanceof DtoReference) { - - String[] tokens = token.split("/"); - - value = getValueFromReference(tokens, (DtoReference) contextBean, 0); - - if (value == null) { - value = (Comparable<Comparable<?>>) getDefaultNullValue(tokens[0]); - } - - } else { - value = super.getTokenValue(jxcontext, token); - } - - return value; - + public fr.ird.observe.services.service.data.ll.common.TripService getLlCommonTripService() { + return getService(fr.ird.observe.services.service.data.ll.common.TripService.class); } + //FIXME If we do not set this, OGNL can't find it on default implementation on interface :( @Override - public String toString(Object bean) { - String result = super.toString(bean); - return result == null ? null : result.trim(); + public fr.ird.observe.services.service.data.ps.common.TripService getPsCommonTripService() { + return getService(fr.ird.observe.services.service.data.ps.common.TripService.class); } } ===================================== services-validation/src/main/java/fr/ird/observe/validation/validators/TripVesselDtoValidator.java ===================================== @@ -75,7 +75,7 @@ public class TripVesselDtoValidator extends FieldValidatorSupport { private void validate(Object object, String id, VesselReference vessel, Date startDate, Date endDate) throws ValidationException { - TripService tripService = (TripService) getFieldValue(serviceName, object); + TripService tripService = (TripService) Objects.requireNonNull(getFieldValue(serviceName, object),"Can't find "+serviceName); Set<? extends TripReference> matchingTrips = tripService.getMatchingTripsVesselWithinDateRange(id, vessel.getId(), startDate, ===================================== validation/src/main/resources/fr/ird/observe/dto/data/ll/common/TripDto-create-error-validation.xml ===================================== @@ -39,7 +39,7 @@ <message/> </field-validator> <field-validator type="tripVessel" short-circuit="true"> - <param name="serviceName">servicesProvider.llCommonTripLonglineService</param> + <param name="serviceName">servicesProvider.llCommonTripService</param> <message/> </field-validator> </field> ===================================== validation/src/main/resources/fr/ird/observe/dto/data/ll/common/TripDto-update-error-validation.xml ===================================== @@ -41,7 +41,7 @@ <message/> </field-validator> <field-validator type="tripVessel" short-circuit="true"> - <param name="serviceName">servicesProvider.llCommonTripLonglineService</param> + <param name="serviceName">servicesProvider.llCommonTripService</param> <message/> </field-validator> </field> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/57b501c2a3dde82446521e5962e... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/57b501c2a3dde82446521e5962e... You're receiving this email because of your account on gitlab.com.