r18 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config tutti-persistence-dev/src/main/resources/META-INF/services tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content
Author: tchemit Date: 2012-11-25 19:23:49 +0100 (Sun, 25 Nov 2012) New Revision: 18 Url: http://forge.codelutin.com/repositories/revision/tutti/18 Log: add new entities begin of catch fishes screen add casino import button Added: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config/TopiaPersistenceDevConfigProvider.java trunk/tutti-persistence-dev/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CatchBean.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SexBean.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SpeciesBean.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTableModel.java trunk/tutti-ui-swing/src/main/resources/icons/action-casino-import.png trunk/tutti-ui-swing/src/main/resources/icons/action-local-export.png Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/CatchesUI.jaxx trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2012-11-25 18:23:49 UTC (rev 18) @@ -26,9 +26,12 @@ import fr.ifremer.tutti.persistence.entities.BeaufortScaleBean; import fr.ifremer.tutti.persistence.entities.CampaignBean; +import fr.ifremer.tutti.persistence.entities.CatchBean; import fr.ifremer.tutti.persistence.entities.CountryBean; import fr.ifremer.tutti.persistence.entities.GearBean; import fr.ifremer.tutti.persistence.entities.SeaStateBean; +import fr.ifremer.tutti.persistence.entities.SexBean; +import fr.ifremer.tutti.persistence.entities.SpeciesBean; import fr.ifremer.tutti.persistence.entities.StrataBean; import fr.ifremer.tutti.persistence.entities.SurveyBean; import fr.ifremer.tutti.persistence.entities.TraitBean; @@ -55,6 +58,10 @@ void close() throws IOException; + List<SexBean> getAllSex(); + + List<SpeciesBean> getAllSpecies(); + List<SeaStateBean> getAllSeaStates(); List<StrataBean> getAllStratas(); @@ -94,4 +101,6 @@ TraitBean createTrait(TraitBean bean); TraitBean saveTrait(TraitBean bean); + + List<CatchBean> getAllCatches(String traitId); } Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CatchBean.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CatchBean.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CatchBean.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,46 @@ +package fr.ifremer.tutti.persistence.entities; + +/* + * #%L + * Tutti :: Persistence API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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% + */ + +/** + * Represents a catch. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class CatchBean extends AbstractTuttiBean { + + private static final long serialVersionUID = 1L; + + protected TraitBean trait; + + public TraitBean getTrait() { + return trait; + } + + public void setTrait(TraitBean trait) { + this.trait = trait; + } +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CatchBean.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SexBean.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SexBean.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SexBean.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,46 @@ +package fr.ifremer.tutti.persistence.entities; + +/* + * #%L + * Tutti :: Persistence API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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% + */ + +/** + * Represents a sex. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class SexBean extends AbstractTuttiBean { + + private static final long serialVersionUID = 1L; + + protected String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SexBean.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SpeciesBean.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SpeciesBean.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SpeciesBean.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,56 @@ +package fr.ifremer.tutti.persistence.entities; + +/* + * #%L + * Tutti :: Persistence API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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% + */ + +/** + * Represents a fishes species. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class SpeciesBean extends AbstractTuttiBean { + + private static final long serialVersionUID = 1L; + + protected String codeMemo; + + protected String genusSpecies; + + public String getCodeMemo() { + return codeMemo; + } + + public void setCodeMemo(String codeMemo) { + this.codeMemo = codeMemo; + } + + public String getGenusSpecies() { + return genusSpecies; + } + + public void setGenusSpecies(String genusSpecies) { + this.genusSpecies = genusSpecies; + } +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/SpeciesBean.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2012-11-25 18:23:49 UTC (rev 18) @@ -27,9 +27,12 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.BeaufortScaleBean; import fr.ifremer.tutti.persistence.entities.CampaignBean; +import fr.ifremer.tutti.persistence.entities.CatchBean; import fr.ifremer.tutti.persistence.entities.CountryBean; import fr.ifremer.tutti.persistence.entities.GearBean; import fr.ifremer.tutti.persistence.entities.SeaStateBean; +import fr.ifremer.tutti.persistence.entities.SexBean; +import fr.ifremer.tutti.persistence.entities.SpeciesBean; import fr.ifremer.tutti.persistence.entities.StrataBean; import fr.ifremer.tutti.persistence.entities.SurveyBean; import fr.ifremer.tutti.persistence.entities.TraitBean; @@ -70,7 +73,14 @@ protected final List<BeaufortScaleBean> beaufortScale = Lists.newArrayList(); + protected final List<SpeciesBean> species = Lists.newArrayList(); + + protected final List<CatchBean> catches = Lists.newArrayList(); + + protected final List<SexBean> sex = Lists.newArrayList(); + public TuttiPersistenceDevFixtures() { + // inject default datas ZoneBean b; @@ -85,15 +95,14 @@ zone.add(b); CountryBean c; - c = new CountryBean(); c.setId(UUID.randomUUID().toString()); - c.setName("france"); + c.setName("France"); country.add(c); c = new CountryBean(); c.setId(UUID.randomUUID().toString()); - c.setName("espagne"); + c.setName("Espagne"); country.add(c); VesselBean v; @@ -234,6 +243,53 @@ st.setId(UUID.randomUUID().toString()); st.setName("Mer agitée"); seaState.add(st); + + SpeciesBean sp; + + sp = new SpeciesBean(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("BAR"); + sp.setGenusSpecies("Bar"); + species.add(sp); + + sp = new SpeciesBean(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("CHIN"); + sp.setGenusSpecies("Chinchard"); + species.add(sp); + + sp = new SpeciesBean(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("FLE"); + sp.setGenusSpecies("Flet"); + species.add(sp); + + sp = new SpeciesBean(); + sp.setId(UUID.randomUUID().toString()); + sp.setCodeMemo("LIM"); + sp.setGenusSpecies("Limande"); + species.add(sp); + + SexBean se; + se = new SexBean(); + se.setId(UUID.randomUUID().toString()); + se.setName("Male"); + sex.add(se); + + se = new SexBean(); + se.setId(UUID.randomUUID().toString()); + se.setName("Male"); + sex.add(se); + + se = new SexBean(); + se.setId(UUID.randomUUID().toString()); + se.setName("Femelle"); + sex.add(se); + + se = new SexBean(); + se.setId(UUID.randomUUID().toString()); + se.setName("Indéterminé"); + sex.add(se); } public List<CampaignBean> campaign() { @@ -279,4 +335,16 @@ public List<BeaufortScaleBean> beaufortScale() { return beaufortScale; } + + public List<SpeciesBean> species() { + return species; + } + + public List<CatchBean> catches() { + return catches; + } + + public List<SexBean> sex() { + return sex; + } } Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevImpl.java 2012-11-25 18:23:49 UTC (rev 18) @@ -32,9 +32,12 @@ import fr.ifremer.tutti.persistence.entities.AbstractTuttiBean; import fr.ifremer.tutti.persistence.entities.BeaufortScaleBean; import fr.ifremer.tutti.persistence.entities.CampaignBean; +import fr.ifremer.tutti.persistence.entities.CatchBean; import fr.ifremer.tutti.persistence.entities.CountryBean; import fr.ifremer.tutti.persistence.entities.GearBean; import fr.ifremer.tutti.persistence.entities.SeaStateBean; +import fr.ifremer.tutti.persistence.entities.SexBean; +import fr.ifremer.tutti.persistence.entities.SpeciesBean; import fr.ifremer.tutti.persistence.entities.StrataBean; import fr.ifremer.tutti.persistence.entities.SurveyBean; import fr.ifremer.tutti.persistence.entities.TraitBean; @@ -92,6 +95,11 @@ protected final List<BeaufortScaleBean> beaufortScale = Lists.newArrayList(); + protected final List<SpeciesBean> species = Lists.newArrayList(); + + protected final List<CatchBean> catches = Lists.newArrayList(); + protected final List<SexBean> sex= Lists.newArrayList(); + @Override public String getImplementationName() { return "Persistence Dev implementation"; @@ -120,6 +128,9 @@ strata.clear(); seaState.clear(); beaufortScale.clear(); + species.clear(); + catches.clear(); + sex.clear(); TuttiPersistenceDevFixtures fixtures = new TuttiPersistenceDevFixtures(); @@ -135,6 +146,9 @@ strata.addAll(loadEntities(StrataBean.class, fixtures.strata())); seaState.addAll(loadEntities(SeaStateBean.class, fixtures.seaState())); beaufortScale.addAll(loadEntities(BeaufortScaleBean.class, fixtures.beaufortScale())); + species.addAll(loadEntities(SpeciesBean.class, fixtures.species())); + catches.addAll(loadEntities(CatchBean.class, fixtures.catches())); + sex.addAll(loadEntities(SexBean.class, fixtures.sex())); } @Override @@ -151,9 +165,24 @@ persistToFile(StrataBean.class, strata); persistToFile(SeaStateBean.class, seaState); persistToFile(BeaufortScaleBean.class, beaufortScale); + persistToFile(SpeciesBean.class, species); + persistToFile(CatchBean.class, catches); + persistToFile(SexBean.class, sex); } @Override + public List<SexBean> getAllSex() { + List<SexBean> result = Lists.newArrayList(sex); + return result; + } + + @Override + public List<SpeciesBean> getAllSpecies() { + List<SpeciesBean> result = Lists.newArrayList(species); + return result; + } + + @Override public List<SurveyBean> getAllSurveys() { List<SurveyBean> result = Lists.newArrayList(survey); return result; @@ -231,6 +260,17 @@ } @Override + public List<CatchBean> getAllCatches(final String traitId) { + List<CatchBean> result = Lists.newArrayList(Iterables.filter(catches, new Predicate<CatchBean>() { + @Override + public boolean apply(CatchBean input) { + return traitId.equals(input.getTrait().getId()); + } + })); + return result; + } + + @Override public SurveyBean getSurvey(String surveyId) { SurveyBean result = TuttiBeans.findById(survey, surveyId); return result; Added: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config/TopiaPersistenceDevConfigProvider.java =================================================================== --- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config/TopiaPersistenceDevConfigProvider.java (rev 0) +++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config/TopiaPersistenceDevConfigProvider.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.persistence.config; + +/* + * #%L + * Tutti :: Persistence Dev (impl) + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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 org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ApplicationConfigProvider; + +import java.util.Locale; + +/** + * Persistence config provider (for site generation). + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class TopiaPersistenceDevConfigProvider implements ApplicationConfigProvider { + + @Override + public String getName() { + return "tutti-persistence"; + } + + @Override + public String getDescription(Locale locale) { + return "Configuration de la persistence de Tutti"; + } + + @Override + public ApplicationConfig.OptionDef[] getOptions() { + return TuttiPersistenceDevConfigOption.values(); + } + + @Override + public ApplicationConfig.ActionDef[] getActions() { + return new ApplicationConfig.ActionDef[0]; + } +} Property changes on: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/config/TopiaPersistenceDevConfigProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-persistence-dev/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider =================================================================== --- trunk/tutti-persistence-dev/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider (rev 0) +++ trunk/tutti-persistence-dev/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1 @@ +fr.ifremer.tutti.persistence.config.TopiaPersistenceDevConfigProvider \ No newline at end of file Property changes on: trunk/tutti-persistence-dev/src/main/resources/META-INF/services/org.nuiton.util.ApplicationConfigProvider ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2012-11-25 18:23:49 UTC (rev 18) @@ -29,6 +29,8 @@ import fr.ifremer.tutti.persistence.entities.CountryBean; import fr.ifremer.tutti.persistence.entities.GearBean; import fr.ifremer.tutti.persistence.entities.SeaStateBean; +import fr.ifremer.tutti.persistence.entities.SexBean; +import fr.ifremer.tutti.persistence.entities.SpeciesBean; import fr.ifremer.tutti.persistence.entities.StrataBean; import fr.ifremer.tutti.persistence.entities.SurveyBean; import fr.ifremer.tutti.persistence.entities.TraitBean; @@ -86,6 +88,8 @@ registerMultiJXPathDecorator(BeaufortScaleBean.class, "${name}$s", "#", " - "); registerMultiJXPathDecorator(SeaStateBean.class, "${name}$s", "#", " - "); registerMultiJXPathDecorator(StrataBean.class, "${name}$s", "#", " - "); + registerMultiJXPathDecorator(SexBean.class, "${name}$s", "#", " - "); + registerMultiJXPathDecorator(SpeciesBean.class, "${codeMemo}#${genusSpecies}$s", "#", " - "); } }; @@ -106,6 +110,8 @@ n_("tutti.property.beaufortScaleBean"); n_("tutti.property.seaStateBean"); n_("tutti.property.strataBean"); + n_("tutti.property.codeMemo"); + n_("tutti.property.genusSpecies"); } } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2012-11-25 18:23:49 UTC (rev 18) @@ -28,9 +28,12 @@ import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.entities.BeaufortScaleBean; import fr.ifremer.tutti.persistence.entities.CampaignBean; +import fr.ifremer.tutti.persistence.entities.CatchBean; import fr.ifremer.tutti.persistence.entities.CountryBean; import fr.ifremer.tutti.persistence.entities.GearBean; import fr.ifremer.tutti.persistence.entities.SeaStateBean; +import fr.ifremer.tutti.persistence.entities.SexBean; +import fr.ifremer.tutti.persistence.entities.SpeciesBean; import fr.ifremer.tutti.persistence.entities.StrataBean; import fr.ifremer.tutti.persistence.entities.SurveyBean; import fr.ifremer.tutti.persistence.entities.TraitBean; @@ -110,6 +113,18 @@ } @Override + public List<SexBean> getAllSex() { + checkDriverExists(); + return driver.getAllSex(); + } + + @Override + public List<SpeciesBean> getAllSpecies() { + checkDriverExists(); + return driver.getAllSpecies(); + } + + @Override public String getImplementationName() { checkDriverExists(); return driver.getImplementationName(); @@ -182,6 +197,12 @@ } @Override + public List<CatchBean> getAllCatches(String traitId) { + checkDriverExists(); + return driver.getAllCatches(traitId); + } + + @Override public SurveyBean getSurvey(String surveyId) { checkDriverExists(); return driver.getSurvey(surveyId); Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2012-11-25 18:23:49 UTC (rev 18) @@ -8,9 +8,11 @@ tutti.config.ui.config=Chemin du fichier de configuration des interfaces graphiques tutti.property.beaufortScaleBean=Vent beaufort tutti.property.campaignBean=Campagne +tutti.property.codeMemo=Code Memo tutti.property.countryBean=Pays tutti.property.date=Date tutti.property.gearBean=Engin +tutti.property.genusSpecies=Nom scientifique tutti.property.name=Nom tutti.property.seaStateBean=État de la mer tutti.property.stationNumber=Numéro de station Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.css 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.css 2012-11-25 18:23:49 UTC (rev 18) @@ -151,6 +151,11 @@ text:"tutti.action.cancel"; } +#importCasinoButton { + actionIcon:"casion-import"; + text:"tutti.action.casino-import"; +} + #messagePanel { border:{BorderFactory.createTitledBorder("Messages")}; height:200; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.jaxx 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUI.jaxx 2012-11-25 18:23:49 UTC (rev 18) @@ -184,9 +184,17 @@ </cell> </row> - <!-- Actions --> + <!-- Import Actions --> <row> <cell columns='2'> + <JButton id='importCasinoButton' + onActionPerformed='handler.importCasino()'/> + </cell> + </row> + + <!-- Form Actions --> + <row> + <cell columns='2'> <JPanel layout='{new GridLayout(1, 0)}'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> <JButton id='saveButton' onActionPerformed='handler.save()'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUIHandler.java 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/campaign/EditCampaignUIHandler.java 2012-11-25 18:23:49 UTC (rev 18) @@ -150,4 +150,8 @@ context.setScreen(TuttiScreen.SELECT_CAMPAIGN); } + public void importCasino() { + + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/CatchesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/CatchesUI.jaxx 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/CatchesUI.jaxx 2012-11-25 18:23:49 UTC (rev 18) @@ -68,10 +68,10 @@ <JTabbedPane id='tabPane' constraints='BorderLayout.CENTER'> <tab id='traitTab' title='tutti.label.tab.trait'> - <TraitTabUI id='traitTabContent' constructorParams='this'/> + <TraitTabUI id='traitTabContent' constructorParams='this'/> </tab> <tab id='fishesTab' title='tutti.label.tab.fishes'> - <JLabel text='tutti.to.be.done' horizontalAlignment='{JLabel.CENTER}'/> + <FishesTabUI id='fishesTabContent' constructorParams='this'/> </tab> <tab id='benthosTab' title='tutti.label.tab.benthos'> <JLabel text='tutti.to.be.done' horizontalAlignment='{JLabel.CENTER}'/> Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.css 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,70 @@ +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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% + */ + +NumberEditor { + autoPopup:{handler.getConfig().isAutoPopupNumberEditor()}; + showPopupButton:{handler.getConfig().isShowNumberEditorButton()}; + bean:{model}; + showReset:true; +} + +#totalWeightTotalVracWeightLabel { + text:"tutti.label.totalWeightTotalVracWeight"; +} + +#sampleVracWeightTotalHorsVracWeightLabel { + text:"tutti.label.sampleVracWeightTotalHorsVracWeight"; +} + +#totalWeightField { + property:"totalWeight"; + model:{model.getTotalWeight()}; + useFloat:false; + numberPattern:{INT_6_DIGITS_PATTERN}; +} + +#totalVracWeightField { + property:"totalVracWeight"; + model:{model.getTotalVracWeight()}; + useFloat:false; + numberPattern:{INT_6_DIGITS_PATTERN}; +} + +#sampleVracWeightField { + property:"sampleVracWeight"; + model:{model.getSampleVracWeight()}; + useFloat:false; + numberPattern:{INT_6_DIGITS_PATTERN}; +} + +#totalHorsVracWeightField { + property:"totalHorsVracWeight"; + model:{model.getTotalHorsVracWeight()}; + useFloat:false; + numberPattern:{INT_6_DIGITS_PATTERN}; +} + +#fishesTable { + model:{new FishesTableModel()}; +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.jaxx 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,102 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 Ifremer + %% + 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% + --> +<JPanel id='homePanel' layout='{new BorderLayout()}' + implements='fr.ifremer.tutti.ui.swing.TuttiUI<FishesTabUIModel, FishesTabUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.BeaufortScaleBean + fr.ifremer.tutti.persistence.entities.SeaStateBean + fr.ifremer.tutti.persistence.entities.StrataBean + fr.ifremer.tutti.persistence.entities.TraitBean + fr.ifremer.tutti.persistence.entities.UserBean + fr.ifremer.tutti.ui.swing.TuttiUIContext + + jaxx.runtime.swing.editor.NumberEditor + + jaxx.runtime.validator.swing.SwingValidatorUtil + jaxx.runtime.validator.swing.SwingValidatorMessageTableModel + + static org.nuiton.i18n.I18n._ + </import> + + <script><![CDATA[ + +public FishesTabUI(CatchesUI parentUI) { + FishesTabUIHandler handler = new FishesTabUIHandler(parentUI, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +public void selectTrait(TraitBean trait) { handler.selectTrait(trait); } + +protected void $afterCompleteSetup() { handler.afterInitUI(); } + ]]></script> + + <FishesTabUIHandler id='handler' + initializer='getContextValue(FishesTabUIHandler.class)'/> + + <FishesTabUIModel id='model' + initializer='getContextValue(FishesTabUIModel.class)'/> + + <SwingValidatorMessageTableModel id='errorTableModel'/> + + <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <!--field name='comment' component='commentField'/--> + </BeanValidator> + + <Table id='form' fill='both' constraints='BorderLayout.NORTH'> + + <!-- Poids total / Poids total vrac --> + <row> + <cell anchor='west'> + <JLabel id='totalWeightTotalVracWeightLabel'/> + </cell> + <cell weightx='1.0'> + <JPanel layout='{new GridLayout(1,0)}'> + <NumberEditor id='totalWeightField' constructorParams='this'/> + <NumberEditor id='totalVracWeightField' constructorParams='this'/> + </JPanel> + </cell> + </row> + + <!-- Poids échantillonné vrac / Poids total hors vrac --> + <row> + <cell> + <JLabel id='sampleVracWeightTotalHorsVracWeightLabel'/> + </cell> + <cell> + <JPanel layout='{new GridLayout(1,0)}'> + <NumberEditor id='sampleVracWeightField' constructorParams='this'/> + <NumberEditor id='totalHorsVracWeightField' constructorParams='this'/> + </JPanel> + </cell> + </row> + </Table> + + <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER'> + <JTable id='fishesTable'/> + </JScrollPane> + +</JPanel> Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUI.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIHandler.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,113 @@ +package fr.ifremer.tutti.ui.swing.content.catches; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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.ifremer.tutti.persistence.entities.CatchBean; +import fr.ifremer.tutti.persistence.entities.TraitBean; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class FishesTabUIHandler extends AbstractTuttiUIHandler<FishesTabUIModel> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(FishesTabUIHandler.class); + + private final FishesTabUI ui; + + private final CatchesUI parentUi; + + private final PersistenceService persistenceService; + + public FishesTabUIHandler(CatchesUI parentUi, FishesTabUI ui) { + super(parentUi.getHandler().getContext()); + this.ui = ui; + this.parentUi = parentUi; + this.persistenceService = context.getService(PersistenceService.class); + } + + @Override + public void beforeInitUI() { + FishesTabUIModel model = new FishesTabUIModel(); + + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + FishesTabUIModel model = ui.getModel(); + + initUI(ui); + } + + @Override + public void onCloseUI() { + } + + @Override + protected FishesTabUIModel getModel() { + return ui.getModel(); + } + + public void selectTrait(TraitBean bean) { + + boolean empty = bean == null; + + FishesTabUIModel model = ui.getModel(); + + List<CatchBean> catches; + + if (empty) { + catches = null; + bean = new TraitBean(); + } else { + catches = persistenceService.getAllCatches(bean.getId()); + } + + model.fromBean(bean); + model.setCatches(catches); + + } + + public void cancel() { + + if (log.isInfoEnabled()) { + log.info("Cancel edition"); + } + } + + public void save() { + if (log.isInfoEnabled()) { + log.info("Will save"); + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIModel.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,123 @@ +package fr.ifremer.tutti.ui.swing.content.catches; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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.ifremer.tutti.persistence.entities.CatchBean; +import fr.ifremer.tutti.persistence.entities.TraitBean; +import org.jdesktop.beans.AbstractSerializableBean; +import org.nuiton.util.beans.BinderFactory; + +import java.util.List; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class FishesTabUIModel extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_TOTAL_WEIGHT = "totalWeight"; + + public static final String PROPERTY_TOTAL_VRAC_WEIGHT = "totalVracWeight"; + + public static final String PROPERTY_SAMPLE_VRAC_WEIGHT = "sampleVracWeight"; + + public static final String PROPERTY_TOTAL_HORS_VRAC_WEIGHT = "totalHorsVracWeight"; + + public static final String PROPERTY_CATCHES = "catches"; + + protected Float totalWeight; + + protected Float totalVracWeight; + + protected Float sampleVracWeight; + + protected Float totalHorsVracWeight; + + protected List<CatchBean> catches; + + public Float getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(Float totalWeight) { + Object oldValue = getTotalWeight(); + this.totalWeight = totalWeight; + firePropertyChange(PROPERTY_TOTAL_WEIGHT, oldValue, totalWeight); + } + + public Float getTotalVracWeight() { + return totalVracWeight; + } + + public void setTotalVracWeight(Float totalVracWeight) { + Object oldValue = getTotalVracWeight(); + this.totalVracWeight = totalVracWeight; + firePropertyChange(PROPERTY_TOTAL_VRAC_WEIGHT, oldValue, totalVracWeight); + } + + public Float getSampleVracWeight() { + return sampleVracWeight; + } + + public void setSampleVracWeight(Float sampleVracWeight) { + Object oldValue = getSampleVracWeight(); + this.sampleVracWeight = sampleVracWeight; + firePropertyChange(PROPERTY_SAMPLE_VRAC_WEIGHT, oldValue, sampleVracWeight); + } + + public Float getTotalHorsVracWeight() { + return totalHorsVracWeight; + } + + public void setTotalHorsVracWeight(Float totalHorsVracWeight) { + Object oldValue = getTotalHorsVracWeight(); + this.totalHorsVracWeight = totalHorsVracWeight; + firePropertyChange(PROPERTY_TOTAL_HORS_VRAC_WEIGHT, oldValue, totalHorsVracWeight); + } + + public List<CatchBean> getCatches() { + return catches; + } + + public void setCatches(List<CatchBean> catches) { + Object oldValue = getCatches(); + this.catches = catches; + firePropertyChange(PROPERTY_CATCHES, oldValue, catches); + } + + public void fromBean(TraitBean bean) { + BinderFactory.newBinder(TraitBean.class, + FishesTabUIModel.class).copy(bean, this); + } + + public TraitBean toBean() { + TraitBean result = new TraitBean(); + BinderFactory.newBinder(FishesTabUIModel.class, + TraitBean.class).copy(this, result); + return result; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTabUIModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTableModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTableModel.java 2012-11-25 18:23:49 UTC (rev 18) @@ -0,0 +1,53 @@ +package fr.ifremer.tutti.ui.swing.content.catches; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * 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 javax.swing.table.AbstractTableModel; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class FishesTableModel extends AbstractTableModel { + + private static final long serialVersionUID = 1L; + + @Override + public int getRowCount() { + return 0; + } + + @Override + public int getColumnCount() { + return 0; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return null; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/FishesTableModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-11-24 13:39:59 UTC (rev 17) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-11-25 18:23:49 UTC (rev 18) @@ -3,6 +3,7 @@ tutti.action.about=A propos tutti.action.about.tip=A Propos tutti.action.cancel=Annuler +tutti.action.casino-import=Import Casino tutti.action.catches=Captures tutti.action.configuration=Configuration tutti.action.configuration.tip=Configurer Tutti @@ -52,6 +53,7 @@ tutti.label.list.saisisseur=Nom des saisisseurs tutti.label.list.vessel=Navire(s) tutti.label.no.trait.selected=< Aucun trait sélectionné > +tutti.label.sampleVracWeightTotalHorsVracWeight=Poids total vrac échant. / total hors vrac tutti.label.survey=Série de campagne tutti.label.survey.name=Nom tutti.label.survey.zone=Zone @@ -65,6 +67,7 @@ tutti.label.tab.trait.gearShooting=Données de traine tutti.label.tab.trait.general=Caractéristiques tutti.label.tab.trait.hydrology=Paramètres hydrologiques +tutti.label.totalWeightTotalVracWeight=Poids total / total vrac tutti.label.trait.averageBottomSalinity=Salinité de fond moyenne tutti.label.trait.averageBottomTemperature=Température de fond moyenne tutti.label.trait.beaufortScale=Force du vent Added: trunk/tutti-ui-swing/src/main/resources/icons/action-casino-import.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-casino-import.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/tutti-ui-swing/src/main/resources/icons/action-local-export.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-local-export.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL
participants (1)
-
tchemit@users.forge.codelutin.com