Tutti-commits
Threads by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
January 2014
- 8 participants
- 108 discussions
r1506 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/action resources/i18n
by tchemit@users.forge.codelutin.com Jan. 18, 2014
by tchemit@users.forge.codelutin.com Jan. 18, 2014
Jan. 18, 2014
Author: tchemit
Date: 2014-01-18 23:41:26 +0100 (Sat, 18 Jan 2014)
New Revision: 1506
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1506
Log:
refs #4145: [PROTOCOLE] erreur apr?\195?\168s import protocole (d'avant 3.0), changement nom, et enregistrement. Urgent car bloque cr?\195?\169ation protocole
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 18:26:45 UTC (rev 1505)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 22:41:26 UTC (rev 1506)
@@ -310,7 +310,7 @@
if (log.isInfoEnabled()) {
log.info("Clean benthos and Import");
}
- TuttiProtocols.removeBadSpecies(badBenthos.keySet(), protocol.getSpecies());
+ TuttiProtocols.removeBadSpecies(badBenthos.keySet(), protocol.getBenthos());
break;
default:
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 2014-01-18 18:26:45 UTC (rev 1505)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-18 22:41:26 UTC (rev 1506)
@@ -64,8 +64,8 @@
tutti.common.askBeforeEditProtocolBenthos.title=Des espèces (benthos) non reconnues dans le protocole
tutti.common.askBeforeEditProtocolSpecies.title=Des espèces non reconnues dans le protocole
tutti.common.askBeforeImportProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Importer</strong> pour importer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
-tutti.common.askBeforeImportProtocolBenthos.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
-tutti.common.askBeforeImportProtocolSpecies.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
+tutti.common.askBeforeImportProtocolBenthos.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les benthos non connues</li></ul>
+tutti.common.askBeforeImportProtocolSpecies.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les espèces non connues</li></ul>
tutti.common.askBeforeUpdate.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas effectuer la mise à jour</li><li><strong>OK</strong> pour lancer la mise à jour</li></ul>
tutti.common.cancel=Annuler
tutti.common.cancel.mnemonic=A
1
0
r1505 - trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches
by tchemit@users.forge.codelutin.com Jan. 18, 2014
by tchemit@users.forge.codelutin.com Jan. 18, 2014
Jan. 18, 2014
Author: tchemit
Date: 2014-01-18 19:26:45 +0100 (Sat, 18 Jan 2014)
New Revision: 1505
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1505
Log:
fixes #4151: [CAPTURE] Mauvais focus suite ?\195?\160 une ?\195?\169l?\195?\169vation de poids
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-01-18 15:14:32 UTC (rev 1504)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-01-18 18:26:45 UTC (rev 1505)
@@ -140,7 +140,16 @@
@Override
protected JComponent getComponentToFocus() {
- return getUI().getCatchTotalWeightField();
+ JComponent result;
+ if (getModel().getCatchTotalComputedWeight() != null) {
+ // if there is a computed value, never focus inside the component
+ // see http://forge.codelutin.com/issues/4151
+ result = null;
+ } else {
+
+ result = getUI().getCatchTotalWeightField();
+ }
+ return result;
}
@Override
1
0
r1504 - in trunk/tutti-persistence/src/main: java/fr/ifremer/adagio/core/service/technical java/fr/ifremer/adagio/core/service/technical/sanity java/fr/ifremer/adagio/core/service/technical/sanity/task java/fr/ifremer/tutti/persistence java/fr/ifremer/tutti/persistence/service resources/META-INF/services
by tchemit@users.forge.codelutin.com Jan. 18, 2014
by tchemit@users.forge.codelutin.com Jan. 18, 2014
Jan. 18, 2014
Author: tchemit
Date: 2014-01-18 16:14:32 +0100 (Sat, 18 Jan 2014)
New Revision: 1504
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1504
Log:
fixes #4149: [TECH] Mise ?\195?\160 jour de r?\195?\169f?\195?\169rentiel - Erreur sur les donn?\195?\169es suite ?\195?\160 la mise ?\195?\160 jour
Added:
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTask.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselFeatures.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselRegistrationPeriod.java
trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTask
Removed:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityService.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityService.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,41 @@
+package fr.ifremer.adagio.core.service.technical.sanity;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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.springframework.transaction.annotation.Transactional;
+
+/**
+ * To check that a base is sane and try to clean it if possible.
+ * <p/>
+ * Created on 1/18/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0.1
+ */
+@Transactional(readOnly = false)
+public interface DatabaseSanityService {
+
+ void sanity();
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityServiceImpl.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityServiceImpl.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,79 @@
+package fr.ifremer.adagio.core.service.technical.sanity;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Sets;
+import fr.ifremer.adagio.core.service.technical.CacheService;
+import fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTask;
+import org.hibernate.SessionFactory;
+import org.hibernate.classic.Session;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ServiceLoader;
+import java.util.Set;
+
+/**
+ * Default implementation of the {@link DatabaseSanityService}.
+ * <p/>
+ * Created on 1/18/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0.1
+ */
+@Service("databaseSanityService")
+public class DatabaseSanityServiceImpl implements DatabaseSanityService {
+
+ /**
+ * Session factory.
+ */
+ @Autowired
+ protected SessionFactory sessionFactory;
+
+ /**
+ * Cache service.
+ */
+ @Resource(name = "cacheService")
+ protected CacheService cacheService;
+
+ @Override
+ public void sanity() {
+
+ Session currentSession = sessionFactory.getCurrentSession();
+
+ Set<String> cacheIds = Sets.newHashSet();
+
+ for (DatabaseSanityTask checker : ServiceLoader.load(DatabaseSanityTask.class)) {
+ Set<String> ids = checker.sanity(currentSession);
+ cacheIds.addAll(ids);
+ }
+
+ // clear caches
+ for (String cacheId : cacheIds) {
+ cacheService.clearCache(cacheId);
+ }
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/DatabaseSanityServiceImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTask.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTask.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTask.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,46 @@
+package fr.ifremer.adagio.core.service.technical.sanity.task;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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.hibernate.classic.Session;
+
+import java.util.Set;
+
+/**
+ * Created on 1/18/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0.1
+ */
+public interface DatabaseSanityTask {
+
+ /**
+ * Sanity the database and return the set of cache id to refresh.
+ *
+ * @param currentSession database session
+ * @return the set of cache ids to clean.
+ */
+ Set<String> sanity(Session currentSession);
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTask.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselFeatures.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselFeatures.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselFeatures.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,99 @@
+package fr.ifremer.adagio.core.service.technical.sanity.task;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.VesselFeaturesImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.FlushMode;
+import org.hibernate.Query;
+import org.hibernate.classic.Session;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Check and clean vessel features.
+ * <p/>
+ * Created on 1/18/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0.1
+ */
+public class DatabaseSanityTaskVesselFeatures implements DatabaseSanityTask {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DatabaseSanityTaskVesselFeatures.class);
+
+ @Override
+ public Set<String> sanity(Session currentSession) {
+
+ Set<String> cacheIds = Sets.newHashSet();
+
+ // get all VESSEL_FEATURES with more than one unclosed period
+
+ Query query = currentSession.createQuery("SELECT vessel.code FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL GROUP BY vessel.code HAVING COUNT(id)>1");
+ List<String> vesselCodes = query.list();
+
+ if (CollectionUtils.isEmpty(vesselCodes)) {
+ if (log.isInfoEnabled()) {
+ log.info("vesselFeatures are sane");
+ }
+ return cacheIds;
+ }
+
+ for (String vesselCode : vesselCodes) {
+
+ // Get all features having a null endDatetime
+ Query query1 = currentSession.createQuery("SELECT id FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL AND vessel.code = :vesselCode ORDER BY startDateTime DESC");
+ query1.setString("vesselCode", vesselCode);
+
+ List<Integer> vesselFeaturesIds = Lists.<Integer>newArrayList(query1.list());
+
+ // remove first id (this one will stay on db)
+ vesselFeaturesIds.remove(0);
+
+ // remove all others ids
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Remove %d bad vesselFeature with vessel: %s",
+ vesselFeaturesIds.size(), vesselCode));
+ }
+ currentSession.createQuery("DELETE FROM " + VesselFeaturesImpl.class.getName() + " WHERE id in :id").
+ setParameterList("id", vesselFeaturesIds).executeUpdate();
+ }
+
+ currentSession.setFlushMode(FlushMode.COMMIT);
+ currentSession.flush();
+
+ // clean vessel caches
+ cacheIds.add("fishingVessels");
+ cacheIds.add("vesselByCode");
+
+ return cacheIds;
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselFeatures.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselRegistrationPeriod.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselRegistrationPeriod.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselRegistrationPeriod.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,105 @@
+package fr.ifremer.adagio.core.service.technical.sanity.task;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import fr.ifremer.adagio.core.dao.data.vessel.VesselRegistrationPeriod;
+import fr.ifremer.adagio.core.dao.data.vessel.VesselRegistrationPeriodImpl;
+import fr.ifremer.adagio.core.service.technical.CacheService;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.FlushMode;
+import org.hibernate.Query;
+import org.hibernate.classic.Session;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Check that vessel registration periods are sane.
+ * <p/>
+ * Created on 1/18/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0.1
+ */
+public class DatabaseSanityTaskVesselRegistrationPeriod implements DatabaseSanityTask {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DatabaseSanityTaskVesselRegistrationPeriod.class);
+
+ @Override
+ public Set<String> sanity(Session currentSession) {
+
+ Set<String> cacheIds = Sets.newHashSet();
+
+ // get all VESSEL_REGISTRATION_PERIOD with more than one unclosed period
+ Query query = currentSession.createQuery(
+ "SELECT vesselRegistrationPeriodPk.vessel.code FROM " +
+ VesselRegistrationPeriodImpl.class.getName() + " WHERE endDateTime IS NULL GROUP BY vesselRegistrationPeriodPk.vessel.code HAVING COUNT(*)>1");
+ List<String> vesselCodes = query.list();
+
+ if (CollectionUtils.isEmpty(vesselCodes)) {
+ if (log.isInfoEnabled()) {
+ log.info("vesselRegistrationPeriods are sane");
+ }
+ return cacheIds ;
+ }
+
+ for (String vesselCode : vesselCodes) {
+
+ // Get all features having a null endDatetime
+ Query query1 = currentSession.createQuery(
+ "SELECT vesselRegistrationPeriodPk FROM " + VesselRegistrationPeriodImpl.class.getName() +
+ " WHERE endDateTime IS NULL AND vesselRegistrationPeriodPk.vessel.code = :vesselCode ORDER BY vesselRegistrationPeriodPk.startDateTime DESC")
+ .setString("vesselCode", vesselCode);
+
+ List<VesselRegistrationPeriod> vesselRegistrationPeriods = Lists.<VesselRegistrationPeriod>newArrayList(query1.list());
+
+ // remove first id (this one will stay on db)
+ vesselRegistrationPeriods.remove(0);
+
+ // remove all others ids
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Remove %d bad VesselRegistrationPeriod for vessel: %s",
+ vesselRegistrationPeriods.size(), vesselCode));
+ }
+ currentSession.createQuery("DELETE FROM " + VesselRegistrationPeriodImpl.class.getName() + " WHERE vesselRegistrationPeriodPk in :vesselRegistrationPeriodPk").
+ setParameterList("vesselRegistrationPeriodPk", vesselRegistrationPeriods).executeUpdate();
+ }
+
+ currentSession.setFlushMode(FlushMode.COMMIT);
+ currentSession.flush();
+
+ // clean vessel caches
+ // clean vessel caches
+ cacheIds.add("fishingVessels");
+ cacheIds.add("vesselByCode");
+
+ return cacheIds;
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/sanity/task/DatabaseSanityTaskVesselRegistrationPeriod.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-18 15:13:52 UTC (rev 1503)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -30,6 +30,7 @@
import fr.ifremer.adagio.core.dao.technical.DatabaseSchemaUpdateException;
import fr.ifremer.adagio.core.dao.technical.VersionNotFoundException;
import fr.ifremer.adagio.core.service.technical.CacheService;
+import fr.ifremer.adagio.core.service.technical.sanity.DatabaseSanityService;
import fr.ifremer.shared.application.ApplicationTechnicalException;
import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
@@ -64,7 +65,6 @@
import fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.CatchBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.CruisePersistenceService;
-import fr.ifremer.tutti.persistence.service.DatabaseCheckPersistenceService;
import fr.ifremer.tutti.persistence.service.FishingOperationPersistenceService;
import fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceService;
@@ -137,7 +137,7 @@
protected AttachmentPersistenceService attachmentService;
@Autowired
- protected DatabaseCheckPersistenceService databaseCheckPersistenceService;
+ protected DatabaseSanityService databaseSanityService;
@Autowired
protected CacheService cacheService;
@@ -228,7 +228,6 @@
individualObservationBatchService.init();
protocolService.init();
attachmentService.init();
- databaseCheckPersistenceService.init();
TuttiEnumerationFile enumerationFile = getEnumerationFile();
@@ -236,8 +235,8 @@
if (CHECK) {
- // check database is sane
- databaseCheckPersistenceService.check();
+ // sanity database
+ databaseSanityService.sanity();
}
}
@@ -265,7 +264,6 @@
individualObservationBatchService.close();
protocolService.close();
attachmentService.close();
- databaseCheckPersistenceService.close();
TuttiPersistenceServiceLocator.close();
}
}
Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java 2014-01-18 15:13:52 UTC (rev 1503)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -1,44 +0,0 @@
-package fr.ifremer.tutti.persistence.service;
-
-/*
- * #%L
- * Tutti :: Persistence
- * $Id$
- * $HeadURL:$
- * %%
- * Copyright (C) 2012 - 2014 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.TuttiPersistenceServiceImplementor;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * To fix some errors in db.
- *
- * Created on 1/15/14.
- *
- * @author Tony Chemit <chemit(a)codelutin.com>
- * @since 3.0
- */
-@Transactional(readOnly = true)
-public interface DatabaseCheckPersistenceService extends TuttiPersistenceServiceImplementor {
-
- @Transactional(readOnly = false)
- public void check();
-
-}
Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java 2014-01-18 15:13:52 UTC (rev 1503)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -1,98 +0,0 @@
-package fr.ifremer.tutti.persistence.service;
-
-/*
- * #%L
- * Tutti :: Persistence
- * $Id$
- * $HeadURL:$
- * %%
- * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
-import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.VesselFeaturesImpl;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.FlushMode;
-import org.hibernate.Query;
-import org.hibernate.classic.Session;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * To fix some errors in db.
- * <p/>
- * Created on 1/15/14.
- *
- * @author Tony Chemit <chemit(a)codelutin.com>
- * @since 3.0
- */
-@Service("databaseCheckPersistenceService")
-public class DatabaseCheckPersistenceServiceImpl extends AbstractPersistenceService
- implements DatabaseCheckPersistenceService {
-
- /** Logger. */
- private static final Log log =
- LogFactory.getLog(DatabaseCheckPersistenceServiceImpl.class);
-
- @Override
- public void check() {
- checkVesselFeatures();
- }
-
- public void checkVesselFeatures() {
-
- // get all VESSEL_FEATURES with more than one unclosed period
- Session currentSession = getCurrentSession();
-
- Query query = currentSession.createQuery("SELECT vessel.code FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL GROUP BY vessel.code HAVING COUNT(id)>1");
- List<String> vesselCodes = query.list();
-
- if (CollectionUtils.isEmpty(vesselCodes)) {
- if (log.isInfoEnabled()) {
- log.info("vesselFeatures are sane");
- }
- return;
- }
-
- for (String vesselCode : vesselCodes) {
-
- // Get all features having a null endDatetime
- Query query1 = currentSession.createQuery("SELECT id FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL AND vessel.code = :vesselCode ORDER BY startDateTime DESC");
- query1.setString("vesselCode", vesselCode);
-
- List<Integer> vesselFeaturesIds = Lists.<Integer>newArrayList(query1.list());
-
- // remove first id (this one will stay on db)
- vesselFeaturesIds.remove(0);
-
- // remove all others ids
- if (log.isInfoEnabled()) {
- log.info("Remove vesselFeature with id: " + vesselFeaturesIds);
- }
- currentSession.createQuery("DELETE FROM " + VesselFeaturesImpl.class.getName() + " WHERE id in :id").
- setParameterList("id", vesselFeaturesIds).executeUpdate();
- }
-
- getCurrentSession().setFlushMode(FlushMode.COMMIT);
- getCurrentSession().flush();
- }
-
-}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2014-01-18 15:13:52 UTC (rev 1503)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2014-01-18 15:14:32 UTC (rev 1504)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.adagio.core.service.ServiceLocator;
+import fr.ifremer.adagio.core.service.technical.sanity.DatabaseSanityService;
import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroService;
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor;
@@ -122,6 +123,13 @@
return service;
}
+ //TODO Move this to adagio
+ public static DatabaseSanityService getDatabaseSanityService() {
+ DatabaseSanityService service = instance().getService(
+ "databaseSanityService", DatabaseSanityService.class);
+ return service;
+ }
+
public static AttachmentPersistenceService getAttachmentPersistenceService() {
return getPersistenceService("attachmentPersistenceService",
AttachmentPersistenceService.class);
Added: trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTask
===================================================================
--- trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTask (rev 0)
+++ trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTask 2014-01-18 15:14:32 UTC (rev 1504)
@@ -0,0 +1,2 @@
+fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTaskVesselFeatures
+fr.ifremer.adagio.core.service.technical.sanity.task.DatabaseSanityTaskVesselRegistrationPeriod
\ No newline at end of file
1
0
r1503 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol tutti-persistence/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol tutti-ui-swing/src/main/resources/i18n
by tchemit@users.forge.codelutin.com Jan. 18, 2014
by tchemit@users.forge.codelutin.com Jan. 18, 2014
Jan. 18, 2014
Author: tchemit
Date: 2014-01-18 16:13:52 +0100 (Sat, 18 Jan 2014)
New Revision: 1503
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1503
Log:
fixes #4145: [PROTOCOLE] erreur apr?\195?\168s import protocole (d'avant 3.0), changement nom, et enregistrement. Urgent car bloque cr?\195?\169ation protocole
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
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/entities/protocol/TuttiProtocols.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2014-01-18 15:13:52 UTC (rev 1503)
@@ -52,7 +52,9 @@
import java.io.BufferedWriter;
import java.io.File;
import java.io.Reader;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static org.nuiton.i18n.I18n._;
@@ -195,6 +197,16 @@
}
}
+ public static void removeBadSpecies(Set<Integer> speciesIds, List<SpeciesProtocol> protocol) {
+ Iterator<SpeciesProtocol> iterator = protocol.iterator();
+ while (iterator.hasNext()) {
+ SpeciesProtocol next = iterator.next();
+ if (speciesIds.contains(next.getSpeciesReferenceTaxonId())) {
+ iterator.remove();
+ }
+ }
+ }
+
public static String getBadCategoriesMessage(Set<Integer> badCategories,
Decorator<Caracteristic> decorator,
TuttiPersistence persistenceService) {
@@ -217,6 +229,26 @@
return message;
}
+ public static String getBadSpeciesMessage(Map<Integer, String> badSpecies) {
+ List<String> badCategoriesStr = Lists.newArrayList();
+
+ for (Map.Entry<Integer, String> id : badSpecies.entrySet()) {
+ badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>");
+ }
+ String message = _("tutti.persistence.error.protocol.species.not.found", Joiner.on("").join(badCategoriesStr));
+ return message;
+ }
+
+ public static String getBadBenthosMessage(Map<Integer, String> badSpecies) {
+ List<String> badCategoriesStr = Lists.newArrayList();
+
+ for (Map.Entry<Integer, String> id : badSpecies.entrySet()) {
+ badCategoriesStr.add("<li>" + id.getKey() + " : " + (id.getValue() == null ? "" : id.getValue()) + "</li>");
+ }
+ String message = _("tutti.persistence.error.protocol.benthos.not.found", Joiner.on("").join(badCategoriesStr));
+ return message;
+ }
+
protected static TuttiProtocol fromTuttiProtocol1(TuttiEnumerationFile enumeration, TuttiProtocol1 tuttiProtocol1) {
TuttiProtocol result = newTuttiProtocol();
Binder<TuttiProtocol1, TuttiProtocol> binder = BinderFactory.newBinder(TuttiProtocol1.class, TuttiProtocol.class);
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2014-01-18 15:13:52 UTC (rev 1503)
@@ -95,7 +95,9 @@
tutti.persistence.dbMetadata.instanciation.error=
tutti.persistence.error.caracteristic.notFound=
tutti.persistence.error.no.convertor=
+tutti.persistence.error.protocol.benthos.not.found=
tutti.persistence.error.protocol.categories.not.compatible=
+tutti.persistence.error.protocol.species.not.found=
tutti.persistence.loader.error=
tutti.persistence.protocol.delete.error=
tutti.persistence.protocol.fromFile.error=
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2014-01-18 15:13:52 UTC (rev 1503)
@@ -95,7 +95,9 @@
tutti.persistence.dbMetadata.instanciation.error=Erreur lors de l'initialisation des metadata de la base de données par la connexion %s
tutti.persistence.error.caracteristic.notFound=Caractéristique inconnue
tutti.persistence.error.no.convertor=Impossible de convertir en modèle de catégorie le type %s avec la valeur %s
+tutti.persistence.error.protocol.benthos.not.found=Le protocole utilise des benthos non connus dans le référentiel \: <ul>%s</ul>
tutti.persistence.error.protocol.categories.not.compatible=Le protocole utilise des catégories non connues par la configuration des catégorisations \: <ul>%s</ul>
+tutti.persistence.error.protocol.species.not.found=Le protocole utilise des espèces non connues dans le référentiel \: <ul>%s</ul>
tutti.persistence.loader.error=Erreur de conversion du dossier %s en URL
tutti.persistence.protocol.delete.error=Erreur lors de la suppression du protocole %1s (fichier %2s)
tutti.persistence.protocol.fromFile.error=Erreur lors de l'import du protocole du fichier %s
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolAction.java 2014-01-18 15:13:52 UTC (rev 1503)
@@ -25,15 +25,20 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
+import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.protocol.ProtocolImportExportService;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
+import jaxx.runtime.JAXXUtil;
import jaxx.runtime.context.JAXXContextEntryDef;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -41,6 +46,7 @@
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import java.io.File;
+import java.util.Map;
import java.util.Set;
import static org.nuiton.i18n.I18n._;
@@ -57,7 +63,8 @@
private static final Log log =
LogFactory.getLog(ImportProtocolAction.class);
- public static final JAXXContextEntryDef<TuttiProtocol> IMPORT_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("importProtocol", TuttiProtocol.class);
+ public static final JAXXContextEntryDef<TuttiProtocol> IMPORT_PROTOCOL_ENTRY =
+ JAXXUtil.newContextEntryDef("importProtocol", TuttiProtocol.class);
protected TuttiProtocol protocol;
@@ -101,66 +108,30 @@
protocol.setId((String) null);
sendMessage(_("tutti.importProtocol.action.success", protocol.getName()));
+ }
+ if (doAction) {
+
// check that protocol is compatible with sample category model
- SampleCategoryModel sampleCategoryModel =
- getDataContext().getSampleCategoryModel();
+ doAction = cleanCategories(protocol);
- Set<Integer> badCategories = Sets.newHashSet();
+ }
- TuttiProtocols.checkSampleCategories(sampleCategoryModel,
- protocol,
- badCategories);
+ if (doAction) {
- if (!badCategories.isEmpty()) {
+ Map<String, Species> allReferentSpeciesByTaxonId = TuttiEntities.splitByTaxonId(
+ getDataContext().getReferentSpecies());
- // detect some bad categories
- if (log.isWarnEnabled()) {
- log.warn("There is some bad categories: " + badCategories);
- }
+ // clean species
+ doAction = cleanSpecies(allReferentSpeciesByTaxonId, protocol);
- String message = TuttiProtocols.getBadCategoriesMessage(
- badCategories,
- getDecorator(Caracteristic.class, null),
- getContext().getPersistenceService());
+ if (doAction) {
- String htmlMessage = String.format(
- AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
- message,
- _("tutti.common.askBeforeImportProtocol.help"));
- int response = JOptionPane.showOptionDialog(
- getContext().getActionUI(),
- htmlMessage,
- _("tutti.common.askBeforeEditProtocol.title"),
- JOptionPane.YES_NO_OPTION,
- JOptionPane.WARNING_MESSAGE,
- UIManager.getIcon("warning"),
- new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.import"), _("tutti.option.cancel")},
- _("tutti.option.cancel")
- );
-
- switch (response) {
- case 0:
- // clean and import
- if (log.isInfoEnabled()) {
- log.info("Clean and Import");
- }
- TuttiProtocols.removeBadCategories(sampleCategoryModel,
- protocol);
- break;
- case 1:
- // import with no clean
- if (log.isInfoEnabled()) {
- log.info("Import with no cleaning");
- }
- break;
- default:
-
- // cancel
- doAction = false;
- }
+ // clean benthos
+ doAction = cleanBenthos(allReferentSpeciesByTaxonId, protocol);
}
}
+
return doAction;
}
@@ -177,4 +148,176 @@
getContext().setProtocolId(null);
super.doAction();
}
+
+ protected boolean cleanCategories(TuttiProtocol protocol) {
+
+ boolean doAction = true;
+ SampleCategoryModel sampleCategoryModel =
+ getDataContext().getSampleCategoryModel();
+
+ Set<Integer> badCategories = Sets.newHashSet();
+
+ TuttiProtocols.checkSampleCategories(sampleCategoryModel,
+ protocol,
+ badCategories);
+
+ if (!badCategories.isEmpty()) {
+
+ if (log.isWarnEnabled()) {
+ log.warn("There is some bad categories: " + badCategories);
+ }
+
+ String message = TuttiProtocols.getBadCategoriesMessage(
+ badCategories,
+ getDecorator(Caracteristic.class, null),
+ getContext().getPersistenceService());
+
+ String htmlMessage = String.format(
+ AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
+ message,
+ _("tutti.common.askBeforeImportProtocol.help"));
+ int response = JOptionPane.showOptionDialog(
+ getContext().getActionUI(),
+ htmlMessage,
+ _("tutti.common.askBeforeEditProtocol.title"),
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.WARNING_MESSAGE,
+ UIManager.getIcon("warning"),
+ new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.import"), _("tutti.option.cancel")},
+ _("tutti.option.cancel")
+ );
+
+ switch (response) {
+ case 0:
+ if (log.isInfoEnabled()) {
+ log.info("Clean and Import");
+ }
+ TuttiProtocols.removeBadCategories(sampleCategoryModel,
+ protocol);
+ break;
+ case 1:
+ if (log.isInfoEnabled()) {
+ log.info("Import with no cleaning");
+ }
+ break;
+ default:
+
+ // cancel
+ doAction = false;
+ }
+ }
+ return doAction;
+ }
+
+
+ protected boolean cleanSpecies(Map<String, Species> allReferentSpeciesByTaxonId, TuttiProtocol protocol) {
+
+ boolean doAction = true;
+
+ Map<Integer, String> badSpecies = Maps.newLinkedHashMap();
+
+ for (SpeciesProtocol speciesProtocol : protocol.getSpecies()) {
+ Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId();
+ if (!allReferentSpeciesByTaxonId.containsKey(String.valueOf(taxonId))) {
+
+ badSpecies.put(taxonId, speciesProtocol.getSpeciesSurveyCode());
+ }
+ }
+
+ if (!badSpecies.isEmpty()) {
+
+ if (log.isWarnEnabled()) {
+ log.warn("There is some bad species: " + badSpecies);
+ }
+
+ String message = TuttiProtocols.getBadSpeciesMessage(badSpecies);
+
+ String htmlMessage = String.format(
+ AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
+ message,
+ _("tutti.common.askBeforeImportProtocolSpecies.help"));
+
+ int response = JOptionPane.showOptionDialog(
+ getContext().getActionUI(),
+ htmlMessage,
+ _("tutti.common.askBeforeEditProtocolSpecies.title"),
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.WARNING_MESSAGE,
+ UIManager.getIcon("warning"),
+ new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.cancel")},
+ _("tutti.option.cancel")
+ );
+
+ switch (response) {
+ case 0:
+
+ if (log.isInfoEnabled()) {
+ log.info("Clean species and Import");
+ }
+ TuttiProtocols.removeBadSpecies(badSpecies.keySet(),
+ protocol.getSpecies());
+ break;
+ default:
+
+ // cancel
+ doAction = false;
+ }
+ }
+ return doAction;
+ }
+
+ protected boolean cleanBenthos(Map<String, Species> allReferentSpeciesByTaxonId, TuttiProtocol protocol) {
+
+ boolean doAction = true;
+
+ Map<Integer, String> badBenthos = Maps.newLinkedHashMap();
+
+ for (SpeciesProtocol speciesProtocol : protocol.getBenthos()) {
+ Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId();
+ if (!allReferentSpeciesByTaxonId.containsKey(String.valueOf(taxonId))) {
+
+ badBenthos.put(taxonId, speciesProtocol.getSpeciesSurveyCode());
+ }
+ }
+
+ if (!badBenthos.isEmpty()) {
+
+ if (log.isWarnEnabled()) {
+ log.warn("There is some bad benthos: " + badBenthos);
+ }
+
+ String message = TuttiProtocols.getBadBenthosMessage(badBenthos);
+
+ String htmlMessage = String.format(
+ AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
+ message,
+ _("tutti.common.askBeforeImportProtocolBenthos.help"));
+
+ int response = JOptionPane.showOptionDialog(
+ getContext().getActionUI(),
+ htmlMessage,
+ _("tutti.common.askBeforeEditProtocolBenthos.title"),
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.WARNING_MESSAGE,
+ UIManager.getIcon("warning"),
+ new Object[]{_("tutti.option.cleanAndImport"), _("tutti.option.cancel")},
+ _("tutti.option.cancel")
+ );
+
+ switch (response) {
+ case 0:
+
+ if (log.isInfoEnabled()) {
+ log.info("Clean benthos and Import");
+ }
+ TuttiProtocols.removeBadSpecies(badBenthos.keySet(), protocol.getSpecies());
+ break;
+ default:
+
+ // cancel
+ doAction = false;
+ }
+ }
+ return doAction;
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2014-01-18 15:13:52 UTC (rev 1503)
@@ -502,6 +502,8 @@
// get species referent taxon
Species species = allReferentSpeciesByTaxonId.get(taxonIdStr);
+ // make sure it exists
+ Preconditions.checkNotNull(species, "Espèce inconnue : "+taxonIdStr);
speciesSet.add(species);
EditProtocolSpeciesRowModel row = EditProtocolSpeciesTableModel.newRow(sampleCategoryModel);
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-18 15:13:52 UTC (rev 1503)
@@ -68,7 +68,11 @@
tutti.common.askBeforeCloneProtocol.help=
tutti.common.askBeforeEditProtocol.help=
tutti.common.askBeforeEditProtocol.title=
+tutti.common.askBeforeEditProtocolBenthos.title=
+tutti.common.askBeforeEditProtocolSpecies.title=
tutti.common.askBeforeImportProtocol.help=
+tutti.common.askBeforeImportProtocolBenthos.help=
+tutti.common.askBeforeImportProtocolSpecies.help=
tutti.common.askBeforeUpdate.help=
tutti.common.cancel=
tutti.common.cancel.mnemonic=
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 2014-01-18 00:01:01 UTC (rev 1502)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-18 15:13:52 UTC (rev 1503)
@@ -61,7 +61,11 @@
tutti.common.askBeforeCloneProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas cloner le protocole</li><li><strong>Cloner</strong> pour cloner le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Cloner</strong> pour supprimer les catégories non compatibles dans le protocole cloné</li></ul>
tutti.common.askBeforeEditProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas éditer le protocole</li><li><strong>Éditer</strong> pour éditer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Éditer</strong> pour supprimer les catégories non compatibles et éditer le protocole</li></ul>
tutti.common.askBeforeEditProtocol.title=Catégories non compatibles détectées dans le protocole
+tutti.common.askBeforeEditProtocolBenthos.title=Des espèces (benthos) non reconnues dans le protocole
+tutti.common.askBeforeEditProtocolSpecies.title=Des espèces non reconnues dans le protocole
tutti.common.askBeforeImportProtocol.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Importer</strong> pour importer le protocole en conservant les catégories non connues (elle ne seront pas affichées)</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
+tutti.common.askBeforeImportProtocolBenthos.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
+tutti.common.askBeforeImportProtocolSpecies.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas importer le protocole</li><li><strong>Nettoyer et Importer</strong> pour supprimer les catégories non compatibles dans le protocole importé</li></ul>
tutti.common.askBeforeUpdate.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas effectuer la mise à jour</li><li><strong>OK</strong> pour lancer la mise à jour</li></ul>
tutti.common.cancel=Annuler
tutti.common.cancel.mnemonic=A
1
0
Author: tchemit
Date: 2014-01-18 01:01:01 +0100 (Sat, 18 Jan 2014)
New Revision: 1502
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1502
Log:
update jre version
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-01-17 16:31:44 UTC (rev 1501)
+++ trunk/pom.xml 2014-01-18 00:01:01 UTC (rev 1502)
@@ -157,7 +157,7 @@
<license.licenseName>gpl_v3</license.licenseName>
<!-- Last JRE version to use -->
- <jreVersion>1.7.45</jreVersion>
+ <jreVersion>1.7.51</jreVersion>
</properties>
1
0
See <http://ci.nuiton.org/jenkins/job/tutti/1152/changes>
Changes:
[Tony Chemit] refs #4135: [EXPORT GENERIQUE] demande d'évolutions
------------------------------------------
[...truncated 127 lines...]
[INFO] Executed tasks
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tutti-persistence ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ tutti-persistence ---
[INFO] Compiling 27 source files to <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/target/te…>
[INFO]
[INFO] --- maven-surefire-plugin:2.16:test (default-test) @ tutti-persistence ---
[INFO] Surefire report directory: <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/target/su…>
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableMetadataTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.054 sec - in fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableMetadataTest
Running fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocolsTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.113 sec - in fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocolsTest
Running fr.ifremer.tutti.persistence.config.TuttiPersistenceConfigTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.092 sec - in fr.ifremer.tutti.persistence.config.TuttiPersistenceConfigTest
Running fr.ifremer.tutti.persistence.service.CruisePersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.CruisePersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,838 0 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,850 12 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,851 13 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.021 sec - in fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceWriteTest
2014-01-17 16:11:33,855 17 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceWriteTest
2014-01-17 16:11:33,863 25 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,864 26 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceReadTest
2014-01-17 16:11:33,866 28 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceReadTest
2014-01-17 16:11:33,885 47 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/src/test/…,> test [class fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceReadTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.01 sec - in fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceServiceWriteTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceServiceWriteTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.AttachmentPersistenceServiceWriteTest
2014-01-17 16:11:33,887 49 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.AttachmentPersistenceServiceWriteTest
2014-01-17 16:11:33,892 54 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,893 55 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.AttachmentPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.AttachmentPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceWriteTest
2014-01-17 16:11:33,902 64 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceWriteTest
2014-01-17 16:11:33,906 68 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,907 69 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.01 sec - in fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceServiceWriteTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.CruisePersistenceServiceWriteTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.CruisePersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.TuttiEnumerationFileTest
2014-01-17 16:11:33,908 70 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.TuttiEnumerationFileTest
2014-01-17 16:11:33,913 75 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/src/test/…,> test [class fr.ifremer.tutti.persistence.service.TuttiEnumerationFileTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.003 sec - in fr.ifremer.tutti.persistence.service.TuttiEnumerationFileTest
Running fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,915 77 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,918 80 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,919 81 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.006 sec - in fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceWriteTest
2014-01-17 16:11:33,921 83 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceWriteTest
2014-01-17 16:11:33,924 86 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,925 87 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.005 sec - in fr.ifremer.tutti.persistence.service.ProtocolPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceReadTest
2014-01-17 16:11:33,933 95 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceReadTest
2014-01-17 16:11:33,937 99 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/src/test/…,> test [class fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceReadTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.012 sec - in fr.ifremer.tutti.persistence.service.ReferentialPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceReadTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.service.AccidentalBatchPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceReadTest
2014-01-17 16:11:33,939 101 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceReadTest
2014-01-17 16:11:33,943 105 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/src/test/…,> test [class fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceReadTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.005 sec - in fr.ifremer.tutti.persistence.service.ProgramPersistenceServiceReadTest
Running fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceWriteTest
2014-01-17 16:11:33,946 108 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceWriteTest
2014-01-17 16:11:33,950 112 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,951 113 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.006 sec - in fr.ifremer.tutti.persistence.service.FishingOperationPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,952 114 [main] INFO fr.ifremer.tutti.persistence.test.DatabaseResource - Prepare test class fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceWriteTest
2014-01-17 16:11:33,956 118 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - No configuration file found in classpath at tutti-test-write.properties
2014-01-17 16:11:33,957 119 [main] WARN fr.ifremer.tutti.persistence.test.DatabaseResource - Could not find db at src/test/db, test [class fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceWriteTest] is skipped.
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.007 sec - in fr.ifremer.tutti.persistence.service.CatchBatchPersistenceServiceWriteTest
Running fr.ifremer.tutti.persistence.TuttiPersistenceWriteTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in fr.ifremer.tutti.persistence.TuttiPersistenceWriteTest
Results :
Tests run: 29, Failures: 0, Errors: 0, Skipped: 24
[JENKINS] Recording test results
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ tutti-persistence ---
[INFO] Building jar: <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/target/tu…>
[INFO]
[INFO] --- maven-site-plugin:3.3:attach-descriptor (attach-descriptor) @ tutti-persistence ---
[INFO]
[INFO] --- maven-install-plugin:2.5.1:install (default-install) @ tutti-persistence ---
[INFO] Installing <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/target/tu…> to /var/local/maven/data/repository/fr/ifremer/tutti/tutti-persistence/3.1-SNAPSHOT/tutti-persistence-3.1-SNAPSHOT.jar
[INFO] Installing <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/pom.xml> to /var/local/maven/data/repository/fr/ifremer/tutti/tutti-persistence/3.1-SNAPSHOT/tutti-persistence-3.1-SNAPSHOT.pom
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Tutti :: Service 3.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ tutti-service ---
[INFO] Deleting <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/target>
[INFO]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (check-project-files) @ tutti-service ---
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:parserJava (scan-sources) @ tutti-service ---
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:parserValidation (scan-sources) @ tutti-service ---
[INFO] Load rules file validation.rules
[INFO]
[INFO] >>> i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service >>>
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:get (get) @ tutti-service ---
[INFO] Copying tutti-service.properties to <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/target/genera…>
[INFO] Copying tutti-service.properties to <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/target/genera…>
[INFO]
[INFO] <<< i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service <<<
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service ---
[WARNING] bundle fr_FR contains 1/234 empty entries! (use -Di18n.showEmpty to see these entries)
[WARNING] bundle en_GB contains 234/234 empty entries! (use -Di18n.showEmpty to see these entries)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ tutti-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 18 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tutti-service ---
[INFO] Compiling 89 source files to <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/target/classes>
[INFO] -------------------------------------------------------------
[WARNING] COMPILATION WARNING :
[INFO] -------------------------------------------------------------
[WARNING] <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>: Some input files use unchecked or unsafe operations.
[WARNING] <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>: Recompile with -Xlint:unchecked for details.
[INFO] 2 warnings
[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>:[798,21] constructor OperationExportModel in class fr.ifremer.tutti.service.export.generic.OperationExportModel cannot be applied to given types;
required: char,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
found: char,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
reason: actual and formal argument lists differ in length
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Tutti ............................................. SUCCESS [2.461s]
[INFO] Tutti :: Persistence .............................. SUCCESS [7.406s]
[INFO] Tutti :: Service .................................. FAILURE [1.602s]
[INFO] Tutti :: UI ....................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.986s
[INFO] Finished at: Fri Jan 17 16:11:36 CET 2014
[INFO] Final Memory: 57M/206M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tutti-service: Compilation failure
[ERROR] <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>:[798,21] constructor OperationExportModel in class fr.ifremer.tutti.service.export.generic.OperationExportModel cannot be applied to given types;
[ERROR] required: char,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
[ERROR] found: char,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
[ERROR] reason: actual and formal argument lists differ in length
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tutti-service: Compilation failure
<http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>:[798,21] constructor OperationExportModel in class fr.ifremer.tutti.service.export.generic.OperationExportModel cannot be applied to given types;
required: char,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
found: char,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
reason: actual and formal argument lists differ in length
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
at org.jvnet.hudson.maven3.launcher.Maven31Launcher.main(Maven31Launcher.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:330)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:238)
at jenkins.maven3.agent.Maven31Main.launch(Maven31Main.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at hudson.maven.Maven3Builder.call(Maven3Builder.java:134)
at hudson.maven.Maven3Builder.call(Maven3Builder.java:69)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:328)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
<http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/src/main/java…>:[798,21] constructor OperationExportModel in class fr.ifremer.tutti.service.export.generic.OperationExportModel cannot be applied to given types;
required: char,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
found: char,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
reason: actual and formal argument lists differ in length
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:858)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 30 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :tutti-service
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-ui-swing/pom.xml> to fr.ifremer.tutti/tutti-ui-swing/3.1-SNAPSHOT/tutti-ui-swing-3.1-SNAPSHOT.pom
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/pom.xml> to fr.ifremer.tutti/tutti-persistence/3.1-SNAPSHOT/tutti-persistence-3.1-SNAPSHOT.pom
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-persistence/target/tu…> to fr.ifremer.tutti/tutti-persistence/3.1-SNAPSHOT/tutti-persistence-3.1-SNAPSHOT.jar
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/tutti-service/pom.xml> to fr.ifremer.tutti/tutti-service/3.1-SNAPSHOT/tutti-service-3.1-SNAPSHOT.pom
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/pom.xml> to fr.ifremer/tutti/3.1-SNAPSHOT/tutti-3.1-SNAPSHOT.pom
[JENKINS] Archiving <http://ci.nuiton.org/jenkins/job/tutti/ws/trunk/target/tutti-3.1-SNAPSHOT-s…> to fr.ifremer/tutti/3.1-SNAPSHOT/tutti-3.1-SNAPSHOT-site_fr.xml
Sending e-mails to: tutti-commits(a)list.forge.codelutin.com chemit(a)codelutin.com
channel stopped
1
2
Jan. 17, 2014
See <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/1152/…>
Changes:
[Tony Chemit] refs #4135: [EXPORT GENERIQUE] demande d'évolutions
------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Tutti :: Service 3.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ tutti-service ---
[INFO] Deleting <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/ta…>
[INFO]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (check-project-files) @ tutti-service ---
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:parserJava (scan-sources) @ tutti-service ---
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:parserValidation (scan-sources) @ tutti-service ---
[INFO] Load rules file validation.rules
[INFO]
[INFO] >>> i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service >>>
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:get (get) @ tutti-service ---
[INFO] Copying tutti-service.properties to <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/ta…>
[INFO] Copying tutti-service.properties to <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/ta…>
[INFO]
[INFO] <<< i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service <<<
[INFO]
[INFO] --- i18n-maven-plugin:2.5.2:gen (scan-sources) @ tutti-service ---
[WARNING] bundle fr_FR contains 1/234 empty entries! (use -Di18n.showEmpty to see these entries)
[WARNING] bundle en_GB contains 234/234 empty entries! (use -Di18n.showEmpty to see these entries)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ tutti-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 18 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tutti-service ---
[INFO] Compiling 89 source files to <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/ta…>
[INFO] -------------------------------------------------------------
[WARNING] COMPILATION WARNING :
[INFO] -------------------------------------------------------------
[WARNING] <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/sr…>: Some input files use unchecked or unsafe operations.
[WARNING] <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/sr…>: Recompile with -Xlint:unchecked for details.
[INFO] 2 warnings
[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] <http://ci.nuiton.org/jenkins/job/tutti/fr.ifremer.tutti$tutti-service/ws/sr…>:[798,21] constructor OperationExportModel in class fr.ifremer.tutti.service.export.generic.OperationExportModel cannot be applied to given types;
required: char,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
found: char,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,fr.ifremer.tutti.persistence.entities.referential.Caracteristic,org.nuiton.decorator.Decorator<fr.ifremer.tutti.persistence.entities.referential.Vessel>
reason: actual and formal argument lists differ in length
[INFO] 1 error
[INFO] -------------------------------------------------------------
1
2
r1501 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing
by tchemit@users.forge.codelutin.com Jan. 17, 2014
by tchemit@users.forge.codelutin.com Jan. 17, 2014
Jan. 17, 2014
Author: tchemit
Date: 2014-01-17 17:31:44 +0100 (Fri, 17 Jan 2014)
New Revision: 1501
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1501
Log:
refs #4135: [EXPORT GENERIQUE] demande d'?\195?\169volutions (update tests)
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/TuttiExportService.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-17 14:58:15 UTC (rev 1500)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-17 16:31:44 UTC (rev 1501)
@@ -98,6 +98,8 @@
private static final Log log =
LogFactory.getLog(TuttiPersistenceImpl.class);
+ public static Boolean CHECK = false;
+
@Autowired
protected ReferentialPersistenceService referentialService;
@@ -232,8 +234,11 @@
batchVracPredicate = TuttiEntities.newSpeciesAbleBatchCategoryPredicate(enumerationFile.PMFM_ID_SORTED_UNSORTED, enumerationFile.QUALITATIVE_VRAC_ID);
- // check database is sane
- databaseCheckPersistenceService.check();
+ if (CHECK) {
+
+ // check database is sane
+ databaseCheckPersistenceService.check();
+ }
}
protected boolean close;
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/TuttiExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/TuttiExportService.java 2014-01-17 14:58:15 UTC (rev 1500)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/TuttiExportService.java 2014-01-17 16:31:44 UTC (rev 1501)
@@ -295,9 +295,6 @@
basedir,
csvSeparator,
decoratorService,
- verticalOpeningCaracteristic,
- horizontalOpeningWingCaracteristic,
- horizontalOpeningDoorCaracteristic,
weightMeasuredCaracteristic,
deadOrAliveCaracteristic,
genderCaracteristic,
@@ -743,9 +740,6 @@
ExportContext(File basedir,
char csvSeparator,
DecoratorService decoratorService,
- Caracteristic verticalOpeningCaracteristic,
- Caracteristic horizontalOpeningWingCaracteristic,
- Caracteristic horizontalOpeningDoorCaracteristic,
Caracteristic weightMeasuredCaracteristic,
Caracteristic deadOrAliveCaracteristic,
Caracteristic genderCaracteristic,
@@ -797,9 +791,6 @@
operationModel =
new OperationExportModel(
csvSeparator,
- verticalOpeningCaracteristic,
- horizontalOpeningWingCaracteristic,
- horizontalOpeningDoorCaracteristic,
decoratorService.getDecoratorByType(Vessel.class));
parameterModel = new ParameterExportModel(
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java 2014-01-17 14:58:15 UTC (rev 1500)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java 2014-01-17 16:31:44 UTC (rev 1501)
@@ -157,20 +157,20 @@
URL url = new URL(urlPrefix + "operation.csv");
ServiceDbResource.assertFileContent("operation export:\n",
url,
- "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
- "2013;test elevation;1;B;2;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;\"Commentaire sur le trait B-2-1\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2013;test elevation;1;B;2;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;-9.0;;;\"Commentaire sur le trait B-2-1\n" +
"\n" +
"avec\n" +
"saut\n" +
"de \n" +
- "ligne\";1000.0;Y;280.0;Y;20.0;Y;700.0;N;;?;;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;100.0;Y;100.0;N;50.0;Y;0.0;Y;2.0;N;0.0;Y;100.0;N;\n" +
- "2013;test elevation;1;A;1;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;\"commentaire trait A-1-1\n" +
+ "ligne\";1000.0;Y;280.0;Y;20.0;Y;700.0;N;-9.0;?;-9.0;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;100.0;Y;100.0;N;50.0;Y;0.0;Y;2.0;N;0.0;Y;100.0;N;\n" +
+ "2013;test elevation;1;A;1;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;-9.0;;;\"commentaire trait A-1-1\n" +
"Avec \n" +
"saut\n" +
"de\n" +
"ligne\n" +
- "...\";1000.0;Y;180.0;Y;20.0;Y;800.0;N;;?;;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;\n" +
- "2013;test elevation;1;C;3;1;;278970;25/09/2013 00:00:00;;;25/09/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;");
+ "...\";1000.0;Y;180.0;Y;20.0;Y;800.0;N;-9.0;?;-9.0;?;200.0;Y;180.0;Y;180.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;\n" +
+ "2013;test elevation;1;C;3;1;;278970;25/09/2013 00:00:00;;;25/09/2013 00:00:00;;;00;NA;NA;NA;?;N;-9.0;;;;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;");
}
@@ -201,29 +201,29 @@
URL url = new URL("jar:" + exportFile.toURI().toURL() + "!/exportCruise-" + CRUISE_ID + "/catch.csv");
ServiceDbResource.assertFileContent("Catch export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-horsvrac 20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;4622;Abietinaria abietina;\"Trait B-2-1 Benthos ABIEABI Vrac 30\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Code_Espece_Campagne;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;;Agonus cataphractus;Trait B-2-1 AGONCAT-horsvrac 20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;4622;;Abietinaria abietina;\"Trait B-2-1 Benthos ABIEABI Vrac 30\n" +
"\n" +
"avec \n" +
"\n" +
"commentaire...\";Vrac;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;7.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;380;Acanthocardia echinata;\"Trait B-2-1 Benthos ACANECH Vrac 18\n" +
+ "2013;test elevation;1;OTB 20/28.10;B;2;1;278970;380;;Acanthocardia echinata;\"Trait B-2-1 Benthos ACANECH Vrac 18\n" +
"\n" +
"avec \n" +
"\n" +
"commentaire...\";Vrac;2;18.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;18.0;7.0;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-vrac-80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;5.4444447;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;9.074075;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;5.0;1;0.6;cm;1.0;4;0.6;907.4074;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;6.0;2;0.4;cm;1.0;10;0.4;1361.1111;\n" +
- "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-horsvrac-20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
- "2013;test elevation;1;;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;0.0;\n" +
- "2013;test elevation;1;;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Mâle;2;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;0.0;\n" +
- "2013;test elevation;1;;C;3;1;278970;11183;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Femelle;3;;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;;1.0;");
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;;Agonus cataphractus;AGONCAT-vrac-80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;5.4444447;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;9.074075;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;5.0;1;0.6;cm;1.0;4;0.6;907.4074;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;6.0;2;0.4;cm;1.0;10;0.4;1361.1111;\n" +
+ "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;;Agonus cataphractus;AGONCAT-horsvrac-20;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;1.0;\n" +
+ "2013;test elevation;1;;C;3;1;278970;11183;;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;30.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;30.0;0.0;\n" +
+ "2013;test elevation;1;;C;3;1;278970;11183;;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Mâle;2;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;20.0;0.0;\n" +
+ "2013;test elevation;1;;C;3;1;278970;11183;;Brissopsis atlantica;|;Vrac;1;;;Poids;kg;NA;;;;;kg;Femelle;3;;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;;1.0;");
}
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java 2014-01-17 14:58:15 UTC (rev 1500)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java 2014-01-17 16:31:44 UTC (rev 1501)
@@ -76,17 +76,17 @@
"2013;Campagne CGFS;;ScientificGear;287;Volet dépresseur (drague) - engin - totale - Déclaration d'un professionnel;Oui;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
- "2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;;;avarie - chalut annulé completement à poil;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT_AND_NO_GEAR =
- "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
- "2010;Campagne CGFS;;65;65;1;;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2010;Campagne CGFS;;65;65;1;;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;;;avarie - chalut annulé completement à poil;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;-9.0;?;";
public static final String OPERATION_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
- "2013;Campagne CGFS;;A;1;1;GOV 19.7/25.9;278970;01/05/2013 00:00:00;;;01/05/2013 00:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Vincent AURECHE;;op1;120.0;Y;100.0;Y;20.0;Y;0.0;Y;;?;;?;120.0;Y;100.0;Y;100.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;6.0;Y;\n" +
- "2013;Campagne CGFS;;A;2;1;GOV 19.7/25.9;278970;11/05/2013 08:00:00;;;11/05/2013 08:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Robert BELLAIL|Herve BARONE;;OP2;0.0;Y;0.0;Y;0.0;Y;0.0;Y;;?;;?;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;";
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "2013;Campagne CGFS;;A;1;1;GOV 19.7/25.9;278970;01/05/2013 00:00:00;;;01/05/2013 00:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;-9.0;Vincent AURECHE;;op1;120.0;Y;100.0;Y;20.0;Y;0.0;Y;-9.0;?;-9.0;?;120.0;Y;100.0;Y;100.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;6.0;Y;\n" +
+ "2013;Campagne CGFS;;A;2;1;GOV 19.7/25.9;278970;11/05/2013 08:00:00;;;11/05/2013 08:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;-9.0;Robert BELLAIL|Herve BARONE;;OP2;0.0;Y;0.0;Y;0.0;Y;0.0;Y;-9.0;?;-9.0;?;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;";
public static final String PARAMETER_CONTENT =
"Annee;Serie;Serie_Partielle;Code_station;Id_Operation;Poche;Code_PMFM;Libelle_PMFm;Valeur\n" +
@@ -99,48 +99,48 @@
"2013;Campagne CGFS;;A;2;1;308;Nombre d'engin - engin - totale - Déclaration d'un professionnel;2.0;";
public static final String CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.0;1;;cm;0.5;5;5.0;20.0;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;2;;cm;0.5;2;5.0;20.0;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;3;;cm;0.5;1;5.0;20.0;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;1;;cm;0.5;5;10.0;10.0;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;10.0;1;;cm;;5;30.0;3.3333333;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;11.0;2;;cm;;6;30.0;3.3333333;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;12.0;3;;cm;;7;30.0;3.3333333;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|;Vrac;1;100.0;;Poids;kg;M - Moyen;2;20.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;;;;;;;;;20.0;5.0;\n" +
- "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;2;20.0;1.0;";
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Code_Espece_Campagne;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.0;1;;cm;0.5;5;5.0;20.0;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;2;;cm;0.5;2;5.0;20.0;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;3;;cm;0.5;1;5.0;20.0;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;1;;cm;0.5;5;10.0;10.0;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;10.0;1;;cm;;5;30.0;3.3333333;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;11.0;2;;cm;;6;30.0;3.3333333;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;1425;Longueur totale (LT) - individu - queue - Mesure au cm par un observateur;12.0;3;;cm;;7;30.0;3.3333333;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;|;Vrac;1;100.0;;Poids;kg;M - Moyen;2;20.0;;Poids;kg;Femelle;2;50.0;30.0;Poids;kg;3 - Stade 3;3;10.0;;Poids;kg;NA;;;;;kg;;;;;;;;;20.0;5.0;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;;Aaptos;;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;2;20.0;1.0;";
public static final String CATCH_CONTENT_2 =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;365;Aequipecten opercularis;taxon;Vrac;1;0.005;0.005;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.005;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;491;Alloteuthis;taxon;Vrac;2;0.004;0.004;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.004;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;300;Buccinum undatum;taxon;Vrac;3;0.015;0.015;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.015;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1811;Callionymus lyra;taxon;Vrac;4;0.07;0.07;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.07;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1644;Dicentrarchus labrax;taxon;Vrac;5;1.06;1.06;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;36.0;1;;cm;1.0;1;1.06;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1644;Dicentrarchus labrax;taxon;Vrac;5;1.06;1.06;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;38.0;2;;cm;1.0;1;1.06;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;1;;cm;0.5;2;0.038;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;12.5;2;;cm;0.5;1;0.038;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;13.0;3;;cm;0.5;1;0.038;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;25.0;1;;cm;1.0;1;0.66;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;28.0;2;;cm;1.0;1;0.66;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;30.0;3;;cm;1.0;1;0.66;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;9.0;1;;cm;1.0;1;0.28;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;10.0;2;;cm;1.0;3;0.28;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;11.0;3;;cm;1.0;2;0.28;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1988;Microstomus kitt;taxon;Vrac;9;0.152;0.152;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;15.0;1;;cm;1.0;1;0.152;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1988;Microstomus kitt;taxon;Vrac;9;0.152;0.152;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;18.0;2;;cm;1.0;1;0.152;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1690;Mullus surmuletus;taxon;Vrac;10;0.036;0.036;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;11.0;1;;cm;1.0;1;0.036;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1978;Pleuronectes platessa;taxon;Vrac;11;0.852;0.852;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;26.0;1;;cm;1.0;1;0.852;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1978;Pleuronectes platessa;taxon;Vrac;11;0.852;0.852;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;30.0;2;;cm;1.0;1;0.852;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1351;Sardina pilchardus;taxon;Vrac;12;0.022;0.022;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;1;;cm;0.5;1;0.022;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1772;Scomber scombrus;taxon;Vrac;13;0.18;0.18;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;27.0;1;;cm;1.0;1;0.18;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1242;Scyliorhinus canicula;taxon|categorie_individu;Vrac;14;;;Poids;kg;NA;;;;;kg;Femelle;1;1.0;1.0;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;51.0;1;;cm;1.0;1;1.0;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1242;Scyliorhinus canicula;taxon|categorie_individu;Vrac;14;;;Poids;kg;NA;;;;;kg;Femelle;1;1.0;1.0;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;55.0;2;;cm;1.0;1;1.0;1.0001919;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;8.0;1;;cm;1.0;1;0.96;136.69289;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;9.0;2;;cm;1.0;20;0.96;136.69289;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;10.0;3;;cm;1.0;89;0.96;136.69289;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;11.0;4;;cm;1.0;5;0.96;136.69289;\n" +
- "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;G - Gros;2;0.13;0.13;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;23.0;1;;cm;1.0;1;0.13;1009.42444;";
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Code_Espece_Campagne;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;365;;Aequipecten opercularis;taxon;Vrac;1;0.005;0.005;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.005;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;491;ALLOSPP;Alloteuthis;taxon;Vrac;2;0.004;0.004;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.004;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;300;;Buccinum undatum;taxon;Vrac;3;0.015;0.015;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.015;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1811;CALMLYR;Callionymus lyra;taxon;Vrac;4;0.07;0.07;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.07;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1644;DICELAB;Dicentrarchus labrax;taxon;Vrac;5;1.06;1.06;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;36.0;1;;cm;1.0;1;1.06;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1644;DICELAB;Dicentrarchus labrax;taxon;Vrac;5;1.06;1.06;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;38.0;2;;cm;1.0;1;1.06;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;ENGRENC;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;1;;cm;0.5;2;0.038;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;ENGRENC;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;12.5;2;;cm;0.5;1;0.038;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1362;ENGRENC;Engraulis encrasicolus;taxon;Vrac;6;0.038;0.038;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;13.0;3;;cm;0.5;1;0.038;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;25.0;1;;cm;1.0;1;0.66;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;28.0;2;;cm;1.0;1;0.66;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1986;;Limanda limanda;taxon;Vrac;7;0.66;0.66;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;30.0;3;;cm;1.0;1;0.66;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;LOLIVUL;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;9.0;1;;cm;1.0;1;0.28;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;LOLIVUL;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;10.0;2;;cm;1.0;3;0.28;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;489;LOLIVUL;Loligo vulgaris;taxon;Vrac;8;0.28;0.28;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;302;Longueur du manteau (LM) - individu - manteau - Mesure au cm par un observateur;11.0;3;;cm;1.0;2;0.28;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1988;;Microstomus kitt;taxon;Vrac;9;0.152;0.152;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;15.0;1;;cm;1.0;1;0.152;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1988;;Microstomus kitt;taxon;Vrac;9;0.152;0.152;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;18.0;2;;cm;1.0;1;0.152;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1690;MULLSUR;Mullus surmuletus;taxon;Vrac;10;0.036;0.036;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;11.0;1;;cm;1.0;1;0.036;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1978;;Pleuronectes platessa;taxon;Vrac;11;0.852;0.852;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;26.0;1;;cm;1.0;1;0.852;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1978;;Pleuronectes platessa;taxon;Vrac;11;0.852;0.852;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;30.0;2;;cm;1.0;1;0.852;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1351;SARDPIL;Sardina pilchardus;taxon;Vrac;12;0.022;0.022;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;1;;cm;0.5;1;0.022;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1772;SCOMSCO;Scomber scombrus;taxon;Vrac;13;0.18;0.18;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;27.0;1;;cm;1.0;1;0.18;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1242;SCYOCAN;Scyliorhinus canicula;taxon|categorie_individu;Vrac;14;;;Poids;kg;NA;;;;;kg;Femelle;1;1.0;1.0;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;51.0;1;;cm;1.0;1;1.0;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1242;SCYOCAN;Scyliorhinus canicula;taxon|categorie_individu;Vrac;14;;;Poids;kg;NA;;;;;kg;Femelle;1;1.0;1.0;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;55.0;2;;cm;1.0;1;1.0;1.0001919;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;TRACTRA;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;8.0;1;;cm;1.0;1;0.96;136.69289;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;TRACTRA;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;9.0;2;;cm;1.0;20;0.96;136.69289;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;TRACTRA;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;10.0;3;;cm;1.0;89;0.96;136.69289;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;TRACTRA;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;P - Petit;1;131.12;0.96;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;11.0;4;;cm;1.0;5;0.96;136.69289;\n" +
+ "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;TRACTRA;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;G - Gros;2;0.13;0.13;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;23.0;1;;cm;1.0;1;0.13;1009.42444;";
public static final String MARINE_LITTER_CONTENT =
"Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2014-01-17 14:58:15 UTC (rev 1500)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2014-01-17 16:31:44 UTC (rev 1501)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.TuttiConfiguration;
+import fr.ifremer.tutti.persistence.TuttiPersistenceImpl;
import fr.ifremer.tutti.ui.swing.action.StartAction;
import fr.ifremer.tutti.ui.swing.action.UpdateApplicationAction;
import fr.ifremer.tutti.ui.swing.action.UpdateReportAction;
@@ -60,6 +61,8 @@
public static void main(String... args) {
+ TuttiPersistenceImpl.CHECK = true;
+
if (log.isInfoEnabled()) {
log.info("Starting Tutti with arguments: " + Arrays.toString(args));
}
1
0
r1500 - in trunk/tutti-service/src: main/java/fr/ifremer/tutti/service main/java/fr/ifremer/tutti/service/export/generic test/java/fr/ifremer/tutti/service/export/generic test/resources/report/2013.12.05/allegro-tutti/reports test/resources/report/exportCruise
by tchemit@users.forge.codelutin.com Jan. 17, 2014
by tchemit@users.forge.codelutin.com Jan. 17, 2014
Jan. 17, 2014
Author: tchemit
Date: 2014-01-17 15:58:15 +0100 (Fri, 17 Jan 2014)
New Revision: 1500
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1500
Log:
refs #4135: [EXPORT GENERIQUE] demande d'?\195?\169volutions
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/AccidentalCatchExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/IndividualObservationExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/MarineLitterExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/ParameterExportModel.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java
trunk/tutti-service/src/test/resources/report/2013.12.05/allegro-tutti/reports/controle_data_allegro_campagne.rptdesign
trunk/tutti-service/src/test/resources/report/exportCruise/accidentalCatch.csv
trunk/tutti-service/src/test/resources/report/exportCruise/catch.csv
trunk/tutti-service/src/test/resources/report/exportCruise/individualObservation.csv
trunk/tutti-service/src/test/resources/report/exportCruise/marineLitter.csv
trunk/tutti-service/src/test/resources/report/exportCruise/operation.csv
trunk/tutti-service/src/test/resources/report/exportCruise/parameter.csv
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -74,6 +74,28 @@
*/
public class TuttiCsvUtil extends Common {
+ public static final ValueParserFormatter<Float> FLOAT_NULL_TO_9 =
+ new FloatParserFormatter(-9f, true) {
+ @Override
+ public String format(Float value) {
+ if (value == null) {
+ // if value is null then use the default value
+ value = defaultValue;
+ }
+ return super.format(value);
+ }
+
+ @Override
+ protected Float parseNoneEmptyValue(String value) {
+ Float aFloat = super.parseNoneEmptyValue(value);
+ if (defaultValue.equals(aFloat)) {
+ // if having -9, then value is null
+ aFloat = null;
+ }
+ return aFloat;
+ }
+ };
+
public static final ValueFormatter<Caracteristic> CARACTERISTIC_ID_FORMATTER = new ValueFormatter<Caracteristic>() {
@Override
public String format(Caracteristic value) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/AccidentalCatchExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/AccidentalCatchExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/AccidentalCatchExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -75,7 +75,7 @@
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME);
newColumnForExport("Code_station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, TuttiCsvUtil.VESSEL_VALUE_FORMATTER);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -69,12 +69,14 @@
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME);
newColumnForExport("Code_station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, TuttiCsvUtil.VESSEL_VALUE_FORMATTER);
- newColumnForExport("Taxon", SpeciesBatch.PROPERTY_SPECIES + "." + Species.PROPERTY_REFERENCE_TAXON_ID, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Code_Taxon", SpeciesBatch.PROPERTY_SPECIES + "." + Species.PROPERTY_REFERENCE_TAXON_ID, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Code_Espece_Campagne", SpeciesBatch.PROPERTY_SPECIES + "." + Species.PROPERTY_SURVEY_CODE);
newColumnForExport("Nom_scientifique", SpeciesBatch.PROPERTY_SPECIES + "." + Species.PROPERTY_NAME);
newColumnForExport("Commentaire", SpeciesBatch.PROPERTY_COMMENT);
+ //FIXME Use me newColumnForExport("Coef_Final_Elevation", CatchExportRow.FINAL_RAISING_FACTOR);
for (SampleCategoryModelEntry entry : sampleCategoryModel.getCategory()) {
addSampleCategory(entry.getCanonicalLabel(), entry.getOrder());
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportRow.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/CatchExportRow.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -76,6 +76,8 @@
public static final String BATCH_WEIGHT_UNIT = "batchWeightUnit";
+ public static final String FINAL_RAISING_FACTOR = "finalRaisingFactor";
+
protected Cruise cruise;
protected FishingOperation fishingOperation;
@@ -92,6 +94,8 @@
protected float raisingFactor;
+ protected float finalRaisingFactor;
+
protected Integer batchNumber;
protected String batchWeightUnit;
@@ -138,6 +142,14 @@
this.batchNumber = benthosFrequency.getNumber();
}
+ public float getFinalRaisingFactor() {
+ return finalRaisingFactor;
+ }
+
+ public void setFinalRaisingFactor(float finalRaisingFactor) {
+ this.finalRaisingFactor = finalRaisingFactor;
+ }
+
public Date getBeginDate() {
return cruise.getBeginDate();
}
@@ -224,6 +236,7 @@
result.setBatchNumber(batchNumber);
result.setBatchWeightUnit(batchWeightUnit);
result.comment.addAll(comment);
+ result.setFinalRaisingFactor(finalRaisingFactor);
return result;
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/IndividualObservationExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/IndividualObservationExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/IndividualObservationExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -75,7 +75,7 @@
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME);
newColumnForExport("Code_station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, TuttiCsvUtil.VESSEL_VALUE_FORMATTER);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/MarineLitterExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/MarineLitterExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/MarineLitterExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -52,7 +52,7 @@
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME);
newColumnForExport("Code_station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, TuttiCsvUtil.VESSEL_VALUE_FORMATTER);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -28,7 +28,6 @@
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.Program;
-import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
@@ -45,27 +44,13 @@
*/
public class OperationExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<OperationExportRow> {
-
- protected final Caracteristic verticalOpeningCaracteristic;
-
- protected final Caracteristic horizontalOpeningWingCaracteristic;
-
- protected final Caracteristic horizontalOpeningDoorCaracteristic;
-
- public OperationExportModel(char separator,
- Caracteristic verticalOpeningCaracteristic,
- Caracteristic horizontalOpeningWingCaracteristic,
- Caracteristic horizontalOpeningDoorCaracteristic,
- Decorator<Vessel> vesselDecorator) {
+ public OperationExportModel(char separator, Decorator<Vessel> vesselDecorator) {
super(separator);
- this.verticalOpeningCaracteristic = verticalOpeningCaracteristic;
- this.horizontalOpeningWingCaracteristic = horizontalOpeningWingCaracteristic;
- this.horizontalOpeningDoorCaracteristic = horizontalOpeningDoorCaracteristic;
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newColumnForExport("Code_Station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newNullableColumnForExport("Engin", FishingOperation.PROPERTY_GEAR + "." + Gear.PROPERTY_NAME);
@@ -82,69 +67,66 @@
newColumnForExport("Localite", FishingOperation.PROPERTY_LOCATION, TuttiLocation.PROPERTY_NAME, "NA");
newColumnForExport("Validite_OP", FishingOperation.PROPERTY_FISHING_OPERATION_VALID, TuttiCsvUtil.BOOLEAN);
newColumnForExport("Rectiligne", FishingOperation.PROPERTY_FISHING_OPERATION_RECTILIGNE, TuttiCsvUtil.BOOLEAN);
- newColumnForExport("Distance", FishingOperation.PROPERTY_TRAWL_DISTANCE, TuttiCsvUtil.FLOAT);
- newColumnForExport("Ouv_Verticale", OperationExportRow.PROPERTY_VERTICAL_OPENING_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
- newColumnForExport("Ouv_Horizontale_Ailes", OperationExportRow.PROPERTY_HORIZONTAL_OPENING_WING_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
- newColumnForExport("Ouv_Horizontale_Panneaux", OperationExportRow.PROPERTY_HORIZONTAL_OPENING_DOOR_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
+ newColumnForExport("Distance", FishingOperation.PROPERTY_TRAWL_DISTANCE, TuttiCsvUtil.FLOAT_NULL_TO_9);
newColumnForExport("Saisisseur", FishingOperation.PROPERTY_RECORDER_PERSON, TuttiCsvUtil.LIST_PERSON_FORMATTER);
newColumnForExport("NavireAssocie", FishingOperation.PROPERTY_SECONDARY_VESSEL, TuttiCsvUtil.newListVesselFormatter(vesselDecorator));
newColumnForExport("Commentaire", FishingOperation.PROPERTY_COMMENT);
- newNullableColumnForExport("Poids_Total", OperationExportRow.PROPERTY_CATCH_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total", OperationExportRow.PROPERTY_CATCH_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Vrac", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Vrac", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Vrac_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_HorsVrac", OperationExportRow.PROPERTY_CATCH_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_HorsVrac", OperationExportRow.PROPERTY_CATCH_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_HorsVrac_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_UNSORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Non_Trie", OperationExportRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Non_Trie", OperationExportRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Non_Trie_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Tremis", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_TREMIS_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Tremis", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_TREMIS_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Tremis_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_TREMIS_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Carroussel", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_CAROUSSEL_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Carroussel", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_CAROUSSEL_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Carroussel_Calcule", OperationExportRow.PROPERTY_CATCH_TOTAL_SORTED_CAROUSSEL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece", OperationExportRow.PROPERTY_SPECIES_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece", OperationExportRow.PROPERTY_SPECIES_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece_Vrac", OperationExportRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece_Vrac", OperationExportRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_Vrac_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece_Vrac_Trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_SAMPLE_SORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece_Vrac_Trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_SAMPLE_SORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_Vrac_Trie_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_SAMPLE_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece_HorsVrac", OperationExportRow.PROPERTY_SPECIES_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece_HorsVrac", OperationExportRow.PROPERTY_SPECIES_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_HorsVrac_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_UNSORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece_Inerte_Trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece_Inerte_Trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_Inerte_Trie_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Espece_Vivant_non_detaille_trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Espece_Vivant_non_detaille_trie", OperationExportRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", OperationExportRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos", OperationExportRow.PROPERTY_BENTHOS_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos", OperationExportRow.PROPERTY_BENTHOS_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos_Vrac", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos_Vrac", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_Vrac_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos_Vrac_Trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SAMPLE_SORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos_Vrac_Trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SAMPLE_SORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_Vrac_Trie_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_SAMPLE_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos_HorsVrac", OperationExportRow.PROPERTY_BENTHOS_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos_HorsVrac", OperationExportRow.PROPERTY_BENTHOS_TOTAL_UNSORTED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_HorsVrac_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_UNSORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos_Inerte_Trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos_Inerte_Trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_Inerte_Trie_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Benthos_Vivant_non_detaille_trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Benthos_Vivant_non_detaille_trie", OperationExportRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", OperationExportRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
- newNullableColumnForExport("Poids_Total_Macro_Dechet", OperationExportRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Poids_Total_Macro_Dechet", OperationExportRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT_NULL_TO_9);
newNullableColumnForExport("Poids_Total_Macro_Dechet_Calcule", OperationExportRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN);
}
@@ -153,10 +135,7 @@
FishingOperation operation,
CatchBatch catchBatch) {
- OperationExportRow row = new OperationExportRow(
- verticalOpeningCaracteristic,
- horizontalOpeningWingCaracteristic,
- horizontalOpeningDoorCaracteristic);
+ OperationExportRow row = new OperationExportRow();
row.setCruise(cruise);
row.setFishingOperation(operation);
row.setCatchBatch(catchBatch);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportRow.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/OperationExportRow.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -50,12 +50,6 @@
public static final String PROPERTY_DURATION = "duration";
- public static final String PROPERTY_VERTICAL_OPENING_GEAR_USE_FEATURE = "verticalOpeningGearUseFeature";
-
- public static final String PROPERTY_HORIZONTAL_OPENING_WING_GEAR_USE_FEATURE = "horizontalOpeningWingGearUseFeature";
-
- public static final String PROPERTY_HORIZONTAL_OPENING_DOOR_GEAR_USE_FEATURE = "horizontalOpeningDoorGearUseFeature";
-
public static final String PROPERTY_CATCH_TOTAL_WEIGHT = "catchTotalWeight";
public static final String PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED = "catchTotalWeightComputed";
@@ -141,21 +135,6 @@
protected CatchBatch catchBatch;
- private Caracteristic verticalOpeningCaracteristic;
-
- private Caracteristic horizontalOpeningWingCaracteristic;
-
- private Caracteristic horizontalOpeningDoorCaracteristic;
-
- public OperationExportRow(Caracteristic verticalOpeningCaracteristic,
- Caracteristic horizontalOpeningWingCaracteristic,
- Caracteristic horizontalOpeningDoorCaracteristic) {
-
- this.verticalOpeningCaracteristic = verticalOpeningCaracteristic;
- this.horizontalOpeningWingCaracteristic = horizontalOpeningWingCaracteristic;
- this.horizontalOpeningDoorCaracteristic = horizontalOpeningDoorCaracteristic;
- }
-
public void setCruise(Cruise cruise) {
this.cruise = cruise;
}
@@ -267,21 +246,6 @@
"mm");
}
- public Serializable getVerticalOpeningGearUseFeature() {
- Serializable result = getGearUseFeature(verticalOpeningCaracteristic);
- return result;
- }
-
- public Serializable getHorizontalOpeningWingGearUseFeature() {
- Serializable result = getGearUseFeature(horizontalOpeningWingCaracteristic);
- return result;
- }
-
- public Serializable getHorizontalOpeningDoorGearUseFeature() {
- Serializable result = getGearUseFeature(horizontalOpeningDoorCaracteristic);
- return result;
- }
-
public Float getCatchTotalWeight() {
return TuttiEntities.getValueOrComputedValue(
catchBatch.getCatchTotalWeight(),
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/ParameterExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/ParameterExportModel.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/generic/ParameterExportModel.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -51,7 +51,7 @@
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART);
newColumnForExport("Code_station", FishingOperation.PROPERTY_STATION_NUMBER);
- newColumnForExport("Numero_Trait", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
+ newColumnForExport("Id_Operation", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Poche", FishingOperation.PROPERTY_MULTIRIG_AGGREGATION);
newColumnForExport("Code_PMFM", ParameterExportRow.PROPERTY_CARACTERISTIC, Caracteristic.PROPERTY_ID);
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportService2Test.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -147,7 +147,7 @@
URL url = new URL(urlPrefix + "accidentalCatch.csv");
ServiceDbResource.assertFileContent("accidentalCatch export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
}
@@ -157,7 +157,7 @@
URL url = new URL(urlPrefix + "operation.csv");
ServiceDbResource.assertFileContent("operation export:\n",
url,
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2013;test elevation;1;B;2;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;\"Commentaire sur le trait B-2-1\n" +
"\n" +
"avec\n" +
@@ -191,7 +191,7 @@
URL url = new URL(urlPrefix + "individualObservation.csv");
ServiceDbResource.assertFileContent("individualObservation export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue");
}
@@ -201,7 +201,7 @@
URL url = new URL("jar:" + exportFile.toURI().toURL() + "!/exportCruise-" + CRUISE_ID + "/catch.csv");
ServiceDbResource.assertFileContent("Catch export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
@@ -243,7 +243,7 @@
URL url = new URL(urlPrefix + "marineLitter.csv");
ServiceDbResource.assertFileContent("marineLitter export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;L1 PLASTIQUE;A: <5*5 cm= 25 cm2;10;;\"Trait B-2-1 Macro dechet L1 Plastique (nb 10)\n" +
"\n" +
"avec \n" +
@@ -257,7 +257,7 @@
URL url = new URL(urlPrefix + "parameter.csv");
ServiceDbResource.assertFileContent("parameter export:\n",
url,
- "Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur");
+ "Annee;Serie;Serie_Partielle;Code_station;Id_Operation;Poche;Code_PMFM;Libelle_PMFm;Valeur");
}
}
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/generic/TuttiExportServiceTest.java 2014-01-17 14:58:15 UTC (rev 1500)
@@ -76,20 +76,20 @@
"2013;Campagne CGFS;;ScientificGear;287;Volet dépresseur (drague) - engin - totale - Déclaration d'un professionnel;Oui;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT_AND_NO_GEAR =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2010;Campagne CGFS;;65;65;1;;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
public static final String OPERATION_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2013;Campagne CGFS;;A;1;1;GOV 19.7/25.9;278970;01/05/2013 00:00:00;;;01/05/2013 00:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Vincent AURECHE;;op1;120.0;Y;100.0;Y;20.0;Y;0.0;Y;;?;;?;120.0;Y;100.0;Y;100.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;6.0;Y;\n" +
"2013;Campagne CGFS;;A;2;1;GOV 19.7/25.9;278970;11/05/2013 08:00:00;;;11/05/2013 08:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Robert BELLAIL|Herve BARONE;;OP2;0.0;Y;0.0;Y;0.0;Y;0.0;Y;;?;;?;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;";
public static final String PARAMETER_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur\n" +
+ "Annee;Serie;Serie_Partielle;Code_station;Id_Operation;Poche;Code_PMFM;Libelle_PMFm;Valeur\n" +
"2013;Campagne CGFS;;A;1;1;1164;Catégorie UE - produit/lot - totale - Diffusion par une Halle à marée;Cat UE10;\n" +
"2013;Campagne CGFS;;A;1;1;1302;(Gross Tonnage) : augmentation de tonnage accordée pour des raisons de sécurité - navire - totale - Déclaration d'un professionnel;10.0;\n" +
"2013;Campagne CGFS;;A;1;1;194;\"Etat de la mer - masse d'eau, eau brute - totale - Observation par un observateur\";\"2 - belle, vagues de 0.1 à 0.5 mètres\";\n" +
@@ -99,7 +99,7 @@
"2013;Campagne CGFS;;A;2;1;308;Nombre d'engin - engin - totale - Déclaration d'un professionnel;2.0;";
public static final String CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.0;1;;cm;0.5;5;5.0;20.0;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;2;;cm;0.5;2;5.0;20.0;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;3;;cm;0.5;1;5.0;20.0;\n" +
@@ -111,7 +111,7 @@
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;2;20.0;1.0;";
public static final String CATCH_CONTENT_2 =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;365;Aequipecten opercularis;taxon;Vrac;1;0.005;0.005;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.005;1.0001919;\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;491;Alloteuthis;taxon;Vrac;2;0.004;0.004;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.004;1.0001919;\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;300;Buccinum undatum;taxon;Vrac;3;0.015;0.015;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.015;1.0001919;\n" +
@@ -143,12 +143,12 @@
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;1662;Trachurus trachurus;taxon|categorie_individu;Vrac;15;;;Poids;kg;G - Gros;2;0.13;0.13;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;23.0;1;;cm;1.0;1;0.13;1009.42444;";
public static final String MARINE_LITTER_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;L1 PLASTIQUE;A: <5*5 cm= 25 cm2;2;5.0;S1;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;L1a Sacs;B: <10*10 cm= 100 cm2;3;1.0;S2;";
public static final String INDIVIDUAL_OBSERVATION_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100000;11242;Aaptos;P1;220;0.1;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100000;11242;Aaptos;P1;1433;307;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100000;11242;Aaptos;P1;307;10.0;\n" +
@@ -159,7 +159,7 @@
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100000;11242;Aaptos;P1;1388;5.0;";
public static final String ACCIDENTAL_CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100001;3835;Abalistes;;1393;Rejet mort;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100001;3835;Abalistes;;196;Femelle;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;100001;3835;Abalistes;;220;10.0;\n" +
Modified: trunk/tutti-service/src/test/resources/report/2013.12.05/allegro-tutti/reports/controle_data_allegro_campagne.rptdesign
===================================================================
--- trunk/tutti-service/src/test/resources/report/2013.12.05/allegro-tutti/reports/controle_data_allegro_campagne.rptdesign 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/2013.12.05/allegro-tutti/reports/controle_data_allegro_campagne.rptdesign 2014-01-17 14:58:15 UTC (rev 1500)
@@ -127,9 +127,9 @@
<text-property name="heading">Code_Station</text-property>
</structure>
<structure>
- <property name="columnName">Numero_Trait</property>
+ <property name="columnName">Id_Operation</property>
<property name="analysis">measure</property>
- <text-property name="heading">Numero_Trait</text-property>
+ <text-property name="heading">Id_Operation</text-property>
</structure>
<structure>
<property name="columnName">Poche</property>
@@ -450,7 +450,7 @@
<expression name="expr" type="javascript">if (params["rpt-param_numerotrait"].value==0) {
0;
} else {
-row["Numero_Trait"]
+row["Id_Operation"]
}</expression>
<simple-property-list name="value1">
<value>params["rpt-param_numerotrait"].value</value>
@@ -483,7 +483,7 @@
</structure>
<structure>
<property name="position">5</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -820,8 +820,8 @@
</structure>
<structure>
<property name="position">5</property>
- <property name="name">Numero_Trait</property>
- <property name="nativeName">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
+ <property name="nativeName">Id_Operation</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -1246,7 +1246,7 @@
<property name="nativeDataType">12</property>
</structure>
</list-property>
- <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Code_Station", "Numero_Trait", "Poche", "Engin", "Navire", "DateDeb_Op", "LatDeb", "LongDeb", "DateFin_Op", "LatFin", "LongFin", "Duree", "Strate", "Sous-Strate", "Localite", "Validite_OP", "Rectiligne", "Distance", "Ouv_Verticale", "Ouv_Horizontale_Ailes", "Ouv_Horizontale_Panneaux", "Saisisseur", "NavireAssocie", "Commentaire", "Poids_Total", "Poids_Total_Calcule", "Poids_Total_Vrac", "Poids_Total_Vrac_Calcule", "Poids_Total_HorsVrac", "Poids_Total_HorsVrac_Calcule", "Poids_Total_Non_Trie", "Poids_Total_Non_Trie_Calcule", "Poids_Total_Tremis", "Poids_Total_Tremis_Calcule", "Poids_Total_Carroussel", "Poids_Total_Carroussel_Calcule", "Poids_Total_Espece", "Poids_Total_Espece_Calcule", "Poids_Total_Espece_Vrac", "Poids_Total_Espece_Vrac_Calcule", "Poids_Total_Espece_Vrac_Trie", "Poids_Total_Espece_Vrac_Trie_Calcule", "Poids_Total_Espece_HorsVrac", "Poids_Total_Espece_HorsVrac_Calcule", "Poids_Total_Espece_Inerte_Trie", "Poids_Total_Espece_Inerte_Trie_Calcule", "Poids_Total_Espece_Vivant_non_detaille_trie", "Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", "Poids_Total_Benthos", "Poids_Total_Benthos_Calcule", "Poids_Total_Benthos_Vrac", "Poids_Total_Benthos_Vrac_Calcule", "Poids_Total_Benthos_Vrac_Trie", "Poids_Total_Benthos_Vrac_Trie_Calcule", "Poids_Total_Benthos_HorsVrac", "Poids_Total_Benthos_HorsVrac_Calcule", "Poids_Total_Benthos_Inerte_Trie", "Poids_Total_Benthos_Inerte_Trie_Calcule", "Poids_Total_Benthos_Vivant_non_detaille_trie", "Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", "Poids_Total_Macro_Dechet", "Poids_Total_Macro_Dechet_Calcule" from "operation.csv" : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Code_Station","Code_Station",STRING;"Numero_Trait","Numero_Trait",INT;"Poche","Poche",STRING;"Engin","Engin",STRING;"Navire","Navire",STRING;"DateDeb_Op","DateDeb_Op",STRING;"LatDeb","LatDeb",STRING;"LongDeb","LongDeb",STRING;"DateFin_Op","DateFin_Op",STRING;"LatFin","LatFin",STRING;"LongFin","LongFin",STRING;"Duree","Duree",STRING;"Strate","Strate",STRING;"Sous-Strate","Sous-Strate",STRING;"Localite","Localite",STRING;"Validite_OP","Validite_OP",STRING;"Rectiligne","Rectiligne",STRING;"Distance","Distance",BIGDECIMAL;"Ouv_Verticale","Ouv_Verticale",STRING;"Ouv_Horizontale_Ailes","Ouv_Horizontale_Ailes",STRING;"Ouv_Horizontale_Panneaux","Ouv_Horizontale_Panneaux",STRING;"Saisisseur","Saisisseur",STRING;"NavireAssocie","NavireAssocie",STRING;"Commentaire","Commentaire",STRING;"Poids_Total","Poids_Total",BIGDECIMAL;"Poids_Total_Calcule","Poids_Total_Calcule",STRING;"Poids_Total_Vrac","Poids_Total_Vrac",BIGDECIMAL;"Poids_Total_Vrac_Calcule","Poids_Total_Vrac_Calcule",STRING;"Poids_Total_HorsVrac","Poids_Total_HorsVrac",BIGDECIMAL;"Poids_Total_HorsVrac_Calcule","Poids_Total_HorsVrac_Calcule",STRING;"Poids_Total_Non_Trie","Poids_Total_Non_Trie",BIGDECIMAL;"Poids_Total_Non_Trie_Calcule","Poids_Total_Non_Trie_Calcule",STRING;"Poids_Total_Tremis","Poids_Total_Tremis",BIGDECIMAL;"Poids_Total_Tremis_Calcule","Poids_Total_Tremis_Calcule",STRING;"Poids_Total_Carroussel","Poids_Total_Carroussel",BIGDECIMAL;"Poids_Total_Carroussel_Calcule","Poids_Total_Carroussel_Calcule",STRING;"Poids_Total_Espece","Poids_Total_Espece",BIGDECIMAL;"Poids_Total_Espece_Calcule","Poids_Total_Espece_Calcule",STRING;"Poids_Total_Espece_Vrac","Poids_Total_Espece_Vrac",BIGDECIMAL;"Poids_Total_Espece_Vrac_Calcule","Poids_Total_Espece_Vrac_Calcule",STRING;"Poids_Total_Espece_Vrac_Trie","Poids_Total_Espece_Vrac_Trie",BIGDECIMAL;"Poids_Total_Espece_Vrac_Trie_Calcule","Poids_Total_Espece_Vrac_Trie_Calcule",STRING;"Poids_Total_Espece_HorsVrac","Poids_Total_Espece_HorsVrac",BIGDECIMAL;"Poids_Total_Espece_HorsVrac_Calcule","Poids_Total_Espece_HorsVrac_Calcule",STRING;"Poids_Total_Espece_Inerte_Trie","Poids_Total_Espece_Inerte_Trie",BIGDECIMAL;"Poids_Total_Espece_Inerte_Trie_Calcule","Poids_Total_Espece_Inerte_Trie_Calcule",STRING;"Poids_Total_Espece_Vivant_non_detaille_trie","Poids_Total_Espece_Vivant_non_detaille_trie",BIGDECIMAL;"Poids_Total_Espece_Vivant_non_detaille_trie_Calcule","Poids_Total_Espece_Vivant_non_detaille_trie_Calcule",STRING;"Poids_Total_Benthos","Poids_Total_Benthos",BIGDECIMAL;"Poids_Total_Benthos_Calcule","Poids_Total_Benthos_Calcule",STRING;"Poids_Total_Benthos_Vrac","Poids_Total_Benthos_Vrac",BIGDECIMAL;"Poids_Total_Benthos_Vrac_Calcule","Poids_Total_Benthos_Vrac_Calcule",STRING;"Poids_Total_Benthos_Vrac_Trie","Poids_Total_Benthos_Vrac_Trie",BIGDECIMAL;"Poids_Total_Benthos_Vrac_Trie_Calcule","Poids_Total_Benthos_Vrac_Trie_Calcule",STRING;"Poids_Total_Benthos_HorsVrac","Poids_Total_Benthos_HorsVrac",BIGDECIMAL;"Poids_Total_Benthos_HorsVrac_Calcule","Poids_Total_Benthos_HorsVrac_Calcule",STRING;"Poids_Total_Benthos_Inerte_Trie","Poids_Total_Benthos_Inerte_Trie",BIGDECIMAL;"Poids_Total_Benthos_Inerte_Trie_Calcule","Poids_Total_Benthos_Inerte_Trie_Calcule",STRING;"Poids_Total_Benthos_Vivant_non_detaille_trie","Poids_Total_Benthos_Vivant_non_detaille_trie",BIGDECIMAL;"Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule","Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule",STRING;"Poids_Total_Macro_Dechet","Poids_Total_Macro_Dechet",BIGDECIMAL;"Poids_Total_Macro_Dechet_Calcule","Poids_Total_Macro_Dechet_Calcule",STRING}]]></xml-property>
+ <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Code_Station", "Id_Operation", "Poche", "Engin", "Navire", "DateDeb_Op", "LatDeb", "LongDeb", "DateFin_Op", "LatFin", "LongFin", "Duree", "Strate", "Sous-Strate", "Localite", "Validite_OP", "Rectiligne", "Distance", "Ouv_Verticale", "Ouv_Horizontale_Ailes", "Ouv_Horizontale_Panneaux", "Saisisseur", "NavireAssocie", "Commentaire", "Poids_Total", "Poids_Total_Calcule", "Poids_Total_Vrac", "Poids_Total_Vrac_Calcule", "Poids_Total_HorsVrac", "Poids_Total_HorsVrac_Calcule", "Poids_Total_Non_Trie", "Poids_Total_Non_Trie_Calcule", "Poids_Total_Tremis", "Poids_Total_Tremis_Calcule", "Poids_Total_Carroussel", "Poids_Total_Carroussel_Calcule", "Poids_Total_Espece", "Poids_Total_Espece_Calcule", "Poids_Total_Espece_Vrac", "Poids_Total_Espece_Vrac_Calcule", "Poids_Total_Espece_Vrac_Trie", "Poids_Total_Espece_Vrac_Trie_Calcule", "Poids_Total_Espece_HorsVrac", "Poids_Total_Espece_HorsVrac_Calcule", "Poids_Total_Espece_Inerte_Trie", "Poids_Total_Espece_Inerte_Trie_Calcule", "Poids_Total_Espece_Vivant_non_detaille_trie", "Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", "Poids_Total_Benthos", "Poids_Total_Benthos_Calcule", "Poids_Total_Benthos_Vrac", "Poids_Total_Benthos_Vrac_Calcule", "Poids_Total_Benthos_Vrac_Trie", "Poids_Total_Benthos_Vrac_Trie_Calcule", "Poids_Total_Benthos_HorsVrac", "Poids_Total_Benthos_HorsVrac_Calcule", "Poids_Total_Benthos_Inerte_Trie", "Poids_Total_Benthos_Inerte_Trie_Calcule", "Poids_Total_Benthos_Vivant_non_detaille_trie", "Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", "Poids_Total_Macro_Dechet", "Poids_Total_Macro_Dechet_Calcule" from "operation.csv" : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Code_Station","Code_Station",STRING;"Id_Operation","Id_Operation",INT;"Poche","Poche",STRING;"Engin","Engin",STRING;"Navire","Navire",STRING;"DateDeb_Op","DateDeb_Op",STRING;"LatDeb","LatDeb",STRING;"LongDeb","LongDeb",STRING;"DateFin_Op","DateFin_Op",STRING;"LatFin","LatFin",STRING;"LongFin","LongFin",STRING;"Duree","Duree",STRING;"Strate","Strate",STRING;"Sous-Strate","Sous-Strate",STRING;"Localite","Localite",STRING;"Validite_OP","Validite_OP",STRING;"Rectiligne","Rectiligne",STRING;"Distance","Distance",BIGDECIMAL;"Ouv_Verticale","Ouv_Verticale",STRING;"Ouv_Horizontale_Ailes","Ouv_Horizontale_Ailes",STRING;"Ouv_Horizontale_Panneaux","Ouv_Horizontale_Panneaux",STRING;"Saisisseur","Saisisseur",STRING;"NavireAssocie","NavireAssocie",STRING;"Commentaire","Commentaire",STRING;"Poids_Total","Poids_Total",BIGDECIMAL;"Poids_Total_Calcule","Poids_Total_Calcule",STRING;"Poids_Total_Vrac","Poids_Total_Vrac",BIGDECIMAL;"Poids_Total_Vrac_Calcule","Poids_Total_Vrac_Calcule",STRING;"Poids_Total_HorsVrac","Poids_Total_HorsVrac",BIGDECIMAL;"Poids_Total_HorsVrac_Calcule","Poids_Total_HorsVrac_Calcule",STRING;"Poids_Total_Non_Trie","Poids_Total_Non_Trie",BIGDECIMAL;"Poids_Total_Non_Trie_Calcule","Poids_Total_Non_Trie_Calcule",STRING;"Poids_Total_Tremis","Poids_Total_Tremis",BIGDECIMAL;"Poids_Total_Tremis_Calcule","Poids_Total_Tremis_Calcule",STRING;"Poids_Total_Carroussel","Poids_Total_Carroussel",BIGDECIMAL;"Poids_Total_Carroussel_Calcule","Poids_Total_Carroussel_Calcule",STRING;"Poids_Total_Espece","Poids_Total_Espece",BIGDECIMAL;"Poids_Total_Espece_Calcule","Poids_Total_Espece_Calcule",STRING;"Poids_Total_Espece_Vrac","Poids_Total_Espece_Vrac",BIGDECIMAL;"Poids_Total_Espece_Vrac_Calcule","Poids_Total_Espece_Vrac_Calcule",STRING;"Poids_Total_Espece_Vrac_Trie","Poids_Total_Espece_Vrac_Trie",BIGDECIMAL;"Poids_Total_Espece_Vrac_Trie_Calcule","Poids_Total_Espece_Vrac_Trie_Calcule",STRING;"Poids_Total_Espece_HorsVrac","Poids_Total_Espece_HorsVrac",BIGDECIMAL;"Poids_Total_Espece_HorsVrac_Calcule","Poids_Total_Espece_HorsVrac_Calcule",STRING;"Poids_Total_Espece_Inerte_Trie","Poids_Total_Espece_Inerte_Trie",BIGDECIMAL;"Poids_Total_Espece_Inerte_Trie_Calcule","Poids_Total_Espece_Inerte_Trie_Calcule",STRING;"Poids_Total_Espece_Vivant_non_detaille_trie","Poids_Total_Espece_Vivant_non_detaille_trie",BIGDECIMAL;"Poids_Total_Espece_Vivant_non_detaille_trie_Calcule","Poids_Total_Espece_Vivant_non_detaille_trie_Calcule",STRING;"Poids_Total_Benthos","Poids_Total_Benthos",BIGDECIMAL;"Poids_Total_Benthos_Calcule","Poids_Total_Benthos_Calcule",STRING;"Poids_Total_Benthos_Vrac","Poids_Total_Benthos_Vrac",BIGDECIMAL;"Poids_Total_Benthos_Vrac_Calcule","Poids_Total_Benthos_Vrac_Calcule",STRING;"Poids_Total_Benthos_Vrac_Trie","Poids_Total_Benthos_Vrac_Trie",BIGDECIMAL;"Poids_Total_Benthos_Vrac_Trie_Calcule","Poids_Total_Benthos_Vrac_Trie_Calcule",STRING;"Poids_Total_Benthos_HorsVrac","Poids_Total_Benthos_HorsVrac",BIGDECIMAL;"Poids_Total_Benthos_HorsVrac_Calcule","Poids_Total_Benthos_HorsVrac_Calcule",STRING;"Poids_Total_Benthos_Inerte_Trie","Poids_Total_Benthos_Inerte_Trie",BIGDECIMAL;"Poids_Total_Benthos_Inerte_Trie_Calcule","Poids_Total_Benthos_Inerte_Trie_Calcule",STRING;"Poids_Total_Benthos_Vivant_non_detaille_trie","Poids_Total_Benthos_Vivant_non_detaille_trie",BIGDECIMAL;"Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule","Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule",STRING;"Poids_Total_Macro_Dechet","Poids_Total_Macro_Dechet",BIGDECIMAL;"Poids_Total_Macro_Dechet_Calcule","Poids_Total_Macro_Dechet_Calcule",STRING}]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<model:DesignValues xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>2.0</Version>
@@ -1320,7 +1320,7 @@
<design:resultColumnDefinitions>
<design:attributes>
<design:identifier>
- <design:name>Numero_Trait</design:name>
+ <design:name>Id_Operation</design:name>
<design:position>5</design:position>
</design:identifier>
<design:nativeDataTypeCode>12</design:nativeDataTypeCode>
@@ -1329,7 +1329,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Numero_Trait</design:label>
+ <design:label>Id_Operation</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -2733,7 +2733,7 @@
</structure>
<structure>
<property name="position">5</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -2790,8 +2790,8 @@
</structure>
<structure>
<property name="position">5</property>
- <property name="name">Numero_Trait</property>
- <property name="nativeName">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
+ <property name="nativeName">Id_Operation</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -2824,7 +2824,7 @@
<property name="nativeDataType">2</property>
</structure>
</list-property>
- <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Code_Station", "Numero_Trait", "Poche", "Code_PMFM", "Libelle_PMFm", "Valeur" from parameter.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Code_Station","Code_Station",STRING;"Numero_Trait","Numero_Trait",INT;"Poche","Poche",STRING;"Code_PMFM","Code_PMFM",STRING;"Libelle_PMFm","Libelle_PMFm",STRING;"Valeur","Valeur",BIGDECIMAL}]]></xml-property>
+ <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Code_Station", "Id_Operation", "Poche", "Code_PMFM", "Libelle_PMFm", "Valeur" from parameter.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Code_Station","Code_Station",STRING;"Id_Operation","Id_Operation",INT;"Poche","Poche",STRING;"Code_PMFM","Code_PMFM",STRING;"Libelle_PMFm","Libelle_PMFm",STRING;"Valeur","Valeur",BIGDECIMAL}]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<model:DesignValues xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>1.0</Version>
@@ -2889,7 +2889,7 @@
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
- <design:name>Numero_Trait</design:name>
+ <design:name>Id_Operation</design:name>
<design:position>5</design:position>
<design:nativeDataTypeCode>12</design:nativeDataTypeCode>
<design:precision>-1</design:precision>
@@ -2897,7 +2897,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Numero_Trait</design:label>
+ <design:label>Id_Operation</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -2992,7 +2992,7 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -3071,8 +3071,8 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
- <property name="nativeName">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
+ <property name="nativeName">Id_Operation</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -3126,7 +3126,7 @@
<property name="nativeDataType">12</property>
</structure>
</list-property>
- <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Numero_Trait", "Poche", "Navire", "MarineLitterCategory", "MarineLitterSizeCategory", "Number", "Weight", "Commentaire" from marineLitter.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Numero_Trait","Numero_Trait",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"MarineLitterCategory","MarineLitterCategory",STRING;"MarineLitterSizeCategory","MarineLitterSizeCategory",STRING;"Number","Number",INT;"Weight","Weight",BIGDECIMAL;"Commentaire","Commentaire",STRING}]]></xml-property>
+ <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Id_Operation", "Poche", "Navire", "MarineLitterCategory", "MarineLitterSizeCategory", "Number", "Weight", "Commentaire" from marineLitter.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Id_Operation","Id_Operation",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"MarineLitterCategory","MarineLitterCategory",STRING;"MarineLitterSizeCategory","MarineLitterSizeCategory",STRING;"Number","Number",INT;"Weight","Weight",BIGDECIMAL;"Commentaire","Commentaire",STRING}]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<model:DesignValues xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>1.0</Version>
@@ -3205,7 +3205,7 @@
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
- <design:name>Numero_Trait</design:name>
+ <design:name>Id_Operation</design:name>
<design:position>6</design:position>
<design:nativeDataTypeCode>12</design:nativeDataTypeCode>
<design:precision>-1</design:precision>
@@ -3213,7 +3213,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Numero_Trait</design:label>
+ <design:label>Id_Operation</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -3388,9 +3388,9 @@
<text-property name="heading">Code_Station</text-property>
</structure>
<structure>
- <property name="columnName">Numero_Trait</property>
+ <property name="columnName">Id_Operation</property>
<property name="analysis">measure</property>
- <text-property name="heading">Numero_Trait</text-property>
+ <text-property name="heading">Id_Operation</text-property>
</structure>
<structure>
<property name="columnName">Poche</property>
@@ -3403,9 +3403,9 @@
<text-property name="heading">Navire</text-property>
</structure>
<structure>
- <property name="columnName">Taxon</property>
+ <property name="columnName">Code_Taxon</property>
<property name="analysis">measure</property>
- <text-property name="heading">Taxon</text-property>
+ <text-property name="heading">Code_Taxon</text-property>
</structure>
<structure>
<property name="columnName">Nom_scientifique</property>
@@ -3648,7 +3648,7 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -3663,7 +3663,7 @@
</structure>
<structure>
<property name="position">9</property>
- <property name="name">Taxon</property>
+ <property name="name">Code_Taxon</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -3922,8 +3922,8 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
- <property name="nativeName">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
+ <property name="nativeName">Id_Operation</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -3943,8 +3943,8 @@
</structure>
<structure>
<property name="position">9</property>
- <property name="name">Taxon</property>
- <property name="nativeName">Taxon</property>
+ <property name="name">Code_Taxon</property>
+ <property name="nativeName">Code_Taxon</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -4243,7 +4243,7 @@
<property name="nativeDataType">2</property>
</structure>
</list-property>
- <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Numero_Trait", "Poche", "Navire", "Taxon", "Nom_scientifique", "Commentaire", "V_HV", "Num_Ordre_V_HV_H2", "Tot_V_HV", "Ech_V_HV", "Type_Volume_Poids_V_HV", "Unite_Volume_Poids_V_HV", "Class_Tri_", "Num_Ordre_Class_Tri__H2", "Tot_Class_Tri_", "Ech_Class_Tri_", "Type_Volume_Poids_Class_Tri_", "Unite_Volume_Poids_Class_Tri_", "Sexe", "Num_Ordre_Sexe_H2", "Tot_Sexe", "Ech_Sexe", "Type_Volume_Poids_Sexe", "Unite_Volume_Poids_Sexe", "Maturité", "Num_Ordre_Maturité_H2", "Tot_Maturité", "Ech_Maturité", "Type_Volume_Poids_Maturité", "Unite_Volume_Poids_Maturité", "Age", "Num_Ordre_Age_H2", "Tot_Age", "Ech_Age", "Type_Volume_Poids_Age", "Unite_Volume_Poids_Age", "Code_Longueur", "Libelle_Longueur", "Taille", "NumOrdre_Taille_H2", "Poids_Classe_Taille", "Unite_Taille", "Precision_Mesure", "Nbr", "Poids_Reference", "Coef_Elev_Espece_Capture" from "catch.csv" : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Numero_Trait","Numero_Trait",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"Taxon","Taxon",INT;"Nom_scientifique","Nom_scientifique",STRING;"Commentaire","Commentaire",STRING;"V_HV","V_HV",STRING;"Num_Ordre_V_HV_H2","Num_Ordre_V_HV_H2",INT;"Tot_V_HV","Tot_V_HV",BIGDECIMAL;"Ech_V_HV","Ech_V_HV",BIGDECIMAL;"Type_Volume_Poids_V_HV","Type_Volume_Poids_V_HV",STRING;"Unite_Volume_Poids_V_HV","Unite_Volume_Poids_V_HV",STRING;"Class_Tri_","Class_Tri_",STRING;"Num_Ordre_Class_Tri__H2","Num_Ordre_Class_Tri__H2",INT;"Tot_Class_Tri_","Tot_Class_Tri_",BIGDECIMAL;"Ech_Class_Tri_","Ech_Class_Tri_",BIGDECIMAL;"Type_Volume_Poids_Class_Tri_","Type_Volume_Poids_Class_Tri_",STRING;"Unite_Volume_Poids_Class_Tri_","Unite_Volume_Poids_Class_Tri_",STRING;"Sexe","Sexe",STRING;"Num_Ordre_Sexe_H2","Num_Ordre_Sexe_H2",INT;"Tot_Sexe","Tot_Sexe",BIGDECIMAL;"Ech_Sexe","Ech_Sexe",BIGDECIMAL;"Type_Volume_Poids_Sexe","Type_Volume_Poids_Sexe",STRING;"Unite_Volume_Poids_Sexe","Unite_Volume_Poids_Sexe",STRING;"Maturité","Maturité",STRING;"Num_Ordre_Maturité_H2","Num_Ordre_Maturité_H2",INT;"Tot_Maturité","Tot_Maturité",BIGDECIMAL;"Ech_Maturité","Ech_Maturité",BIGDECIMAL;"Type_Volume_Poids_Maturité","Type_Volume_Poids_Maturité",STRING;"Unite_Volume_Poids_Maturité","Unite_Volume_Poids_Maturité",STRING;"Age","Age",STRING;"Num_Ordre_Age_H2","Num_Ordre_Age_H2",INT;"Tot_Age","Tot_Age",BIGDECIMAL;"Ech_Age","Ech_Age",BIGDECIMAL;"Type_Volume_Poids_Age","Type_Volume_Poids_Age",STRING;"Unite_Volume_Poids_Age","Unite_Volume_Poids_Age",STRING;"Code_Longueur","Code_Longueur",INT;"Libelle_Longueur","Libelle_Longueur",STRING;"Taille","Taille",BIGDECIMAL;"NumOrdre_Taille_H2","NumOrdre_Taille_H2",INT;"Poids_Classe_Taille","Poids_Classe_Taille",BIGDECIMAL;"Unite_Taille","Unite_Taille",STRING;"Precision_Mesure","Precision_Mesure",BIGDECIMAL;"Nbr","Nbr",INT;"Poids_Reference","Poids_Reference",BIGDECIMAL;"Coef_Elev_Espece_Capture","Coef_Elev_Espece_Capture",BIGDECIMAL}]]></xml-property>
+ <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Id_Operation", "Poche", "Navire", "Code_Taxon", "Nom_scientifique", "Commentaire", "V_HV", "Num_Ordre_V_HV_H2", "Tot_V_HV", "Ech_V_HV", "Type_Volume_Poids_V_HV", "Unite_Volume_Poids_V_HV", "Class_Tri_", "Num_Ordre_Class_Tri__H2", "Tot_Class_Tri_", "Ech_Class_Tri_", "Type_Volume_Poids_Class_Tri_", "Unite_Volume_Poids_Class_Tri_", "Sexe", "Num_Ordre_Sexe_H2", "Tot_Sexe", "Ech_Sexe", "Type_Volume_Poids_Sexe", "Unite_Volume_Poids_Sexe", "Maturité", "Num_Ordre_Maturité_H2", "Tot_Maturité", "Ech_Maturité", "Type_Volume_Poids_Maturité", "Unite_Volume_Poids_Maturité", "Age", "Num_Ordre_Age_H2", "Tot_Age", "Ech_Age", "Type_Volume_Poids_Age", "Unite_Volume_Poids_Age", "Code_Longueur", "Libelle_Longueur", "Taille", "NumOrdre_Taille_H2", "Poids_Classe_Taille", "Unite_Taille", "Precision_Mesure", "Nbr", "Poids_Reference", "Coef_Elev_Espece_Capture" from "catch.csv" : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Id_Operation","Id_Operation",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"Code_Taxon","Code_Taxon",INT;"Nom_scientifique","Nom_scientifique",STRING;"Commentaire","Commentaire",STRING;"V_HV","V_HV",STRING;"Num_Ordre_V_HV_H2","Num_Ordre_V_HV_H2",INT;"Tot_V_HV","Tot_V_HV",BIGDECIMAL;"Ech_V_HV","Ech_V_HV",BIGDECIMAL;"Type_Volume_Poids_V_HV","Type_Volume_Poids_V_HV",STRING;"Unite_Volume_Poids_V_HV","Unite_Volume_Poids_V_HV",STRING;"Class_Tri_","Class_Tri_",STRING;"Num_Ordre_Class_Tri__H2","Num_Ordre_Class_Tri__H2",INT;"Tot_Class_Tri_","Tot_Class_Tri_",BIGDECIMAL;"Ech_Class_Tri_","Ech_Class_Tri_",BIGDECIMAL;"Type_Volume_Poids_Class_Tri_","Type_Volume_Poids_Class_Tri_",STRING;"Unite_Volume_Poids_Class_Tri_","Unite_Volume_Poids_Class_Tri_",STRING;"Sexe","Sexe",STRING;"Num_Ordre_Sexe_H2","Num_Ordre_Sexe_H2",INT;"Tot_Sexe","Tot_Sexe",BIGDECIMAL;"Ech_Sexe","Ech_Sexe",BIGDECIMAL;"Type_Volume_Poids_Sexe","Type_Volume_Poids_Sexe",STRING;"Unite_Volume_Poids_Sexe","Unite_Volume_Poids_Sexe",STRING;"Maturité","Maturité",STRING;"Num_Ordre_Maturité_H2","Num_Ordre_Maturité_H2",INT;"Tot_Maturité","Tot_Maturité",BIGDECIMAL;"Ech_Maturité","Ech_Maturité",BIGDECIMAL;"Type_Volume_Poids_Maturité","Type_Volume_Poids_Maturité",STRING;"Unite_Volume_Poids_Maturité","Unite_Volume_Poids_Maturité",STRING;"Age","Age",STRING;"Num_Ordre_Age_H2","Num_Ordre_Age_H2",INT;"Tot_Age","Tot_Age",BIGDECIMAL;"Ech_Age","Ech_Age",BIGDECIMAL;"Type_Volume_Poids_Age","Type_Volume_Poids_Age",STRING;"Unite_Volume_Poids_Age","Unite_Volume_Poids_Age",STRING;"Code_Longueur","Code_Longueur",INT;"Libelle_Longueur","Libelle_Longueur",STRING;"Taille","Taille",BIGDECIMAL;"NumOrdre_Taille_H2","NumOrdre_Taille_H2",INT;"Poids_Classe_Taille","Poids_Classe_Taille",BIGDECIMAL;"Unite_Taille","Unite_Taille",STRING;"Precision_Mesure","Precision_Mesure",BIGDECIMAL;"Nbr","Nbr",INT;"Poids_Reference","Poids_Reference",BIGDECIMAL;"Coef_Elev_Espece_Capture","Coef_Elev_Espece_Capture",BIGDECIMAL}]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<model:DesignValues xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>2.0</Version>
@@ -4333,7 +4333,7 @@
<design:resultColumnDefinitions>
<design:attributes>
<design:identifier>
- <design:name>Numero_Trait</design:name>
+ <design:name>Id_Operation</design:name>
<design:position>6</design:position>
</design:identifier>
<design:nativeDataTypeCode>4</design:nativeDataTypeCode>
@@ -4342,7 +4342,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Numero_Trait</design:label>
+ <design:label>Id_Operation</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -4381,7 +4381,7 @@
<design:resultColumnDefinitions>
<design:attributes>
<design:identifier>
- <design:name>Taxon</design:name>
+ <design:name>Code_Taxon</design:name>
<design:position>9</design:position>
</design:identifier>
<design:nativeDataTypeCode>4</design:nativeDataTypeCode>
@@ -4390,7 +4390,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Taxon</design:label>
+ <design:label>Code_Taxon</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -5237,7 +5237,7 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -5322,8 +5322,8 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
- <property name="nativeName">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
+ <property name="nativeName">Id_Operation</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
@@ -5384,7 +5384,7 @@
<property name="nativeDataType">12</property>
</structure>
</list-property>
- <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Numero_Trait", "Poche", "Navire", "BatchId", "ReferenceTaxonId", "ReferenceTaxonName", "Commentaire", "CaracteristicId", "CaracteristicValue" from accidentalCatch.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Numero_Trait","Numero_Trait",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"BatchId","BatchId",INT;"ReferenceTaxonId","ReferenceTaxonId",INT;"ReferenceTaxonName","ReferenceTaxonName",STRING;"Commentaire","Commentaire",STRING;"CaracteristicId","CaracteristicId",INT;"CaracteristicValue","CaracteristicValue",STRING}]]></xml-property>
+ <xml-property name="queryText"><![CDATA[select "Annee", "Serie", "Serie_Partielle", "Engin", "Code_Station", "Id_Operation", "Poche", "Navire", "BatchId", "ReferenceTaxonId", "ReferenceTaxonName", "Commentaire", "CaracteristicId", "CaracteristicValue" from accidentalCatch.csv : {"Annee","Annee",INT;"Serie","Serie",STRING;"Serie_Partielle","Serie_Partielle",STRING;"Engin","Engin",STRING;"Code_Station","Code_Station",STRING;"Id_Operation","Id_Operation",INT;"Poche","Poche",STRING;"Navire","Navire",STRING;"BatchId","BatchId",INT;"ReferenceTaxonId","ReferenceTaxonId",INT;"ReferenceTaxonName","ReferenceTaxonName",STRING;"Commentaire","Commentaire",STRING;"CaracteristicId","CaracteristicId",INT;"CaracteristicValue","CaracteristicValue",STRING}]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<model:DesignValues xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>1.0</Version>
@@ -5463,7 +5463,7 @@
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
- <design:name>Numero_Trait</design:name>
+ <design:name>Id_Operation</design:name>
<design:position>6</design:position>
<design:nativeDataTypeCode>4</design:nativeDataTypeCode>
<design:precision>-1</design:precision>
@@ -5471,7 +5471,7 @@
<design:nullability>Unknown</design:nullability>
</design:attributes>
<design:usageHints>
- <design:label>Numero_Trait</design:label>
+ <design:label>Id_Operation</design:label>
<design:formattingHints/>
</design:usageHints>
</design:resultColumnDefinitions>
@@ -5615,8 +5615,8 @@
<property name="alias">Code_Station</property>
</structure>
<structure>
- <property name="columnName">catch::Numero_Trait</property>
- <property name="alias">Numero_Trait</property>
+ <property name="columnName">catch::Id_Operation</property>
+ <property name="alias">Id_Operation</property>
</structure>
<structure>
<property name="columnName">catch::Poche</property>
@@ -5627,8 +5627,8 @@
<property name="alias">Navire</property>
</structure>
<structure>
- <property name="columnName">catch::Taxon</property>
- <property name="alias">Taxon</property>
+ <property name="columnName">catch::Code_Taxon</property>
+ <property name="alias">Code_Taxon</property>
</structure>
<structure>
<property name="columnName">catch::Nom_scientifique</property>
@@ -5852,7 +5852,7 @@
</structure>
<structure>
<property name="position">6</property>
- <property name="name">Numero_Trait</property>
+ <property name="name">Id_Operation</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -5867,7 +5867,7 @@
</structure>
<structure>
<property name="position">9</property>
- <property name="name">Taxon</property>
+ <property name="name">Code_Taxon</property>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -6122,7 +6122,7 @@
<property name="joinOperator">eq</property>
<property name="leftDataSet">catch</property>
<property name="rightDataSet">species</property>
- <expression name="leftExpression">dataSetRow["Taxon"]</expression>
+ <expression name="leftExpression">dataSetRow["Code_Taxon"]</expression>
<expression name="rightExpression">dataSetRow["Id"]</expression>
</structure>
</list-property>
@@ -6414,9 +6414,9 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Numero_Trait</property>
- <text-property name="displayName">Numero_Trait</text-property>
- <expression name="expression" type="javascript">dataSetRow["Numero_Trait"]</expression>
+ <property name="name">Id_Operation</property>
+ <text-property name="displayName">Id_Operation</text-property>
+ <expression name="expression" type="javascript">dataSetRow["Id_Operation"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -6783,7 +6783,7 @@
<detail>
<grid name="general" id="2804">
<structure name="toc">
- <expression name="expressionValue">"Code Station : "+row["Code_Station"]+" - N° trait : "+row["Numero_Trait"]</expression>
+ <expression name="expressionValue">"Code Station : "+row["Code_Station"]+" - N° trait : "+row["Id_Operation"]</expression>
</structure>
<column id="2805"/>
<row id="2806">
@@ -6906,7 +6906,7 @@
<property name="fontWeight">bold</property>
<property name="textAlign">left</property>
<property name="display">inline</property>
- <property name="resultSetColumn">Numero_Trait</property>
+ <property name="resultSetColumn">Id_Operation</property>
</data>
</cell>
</row>
@@ -6950,7 +6950,7 @@
</list-property>
<expression name="valueExpr">var cartouche=(getMessage("serie")+" <b>"+row._outer["Serie"]+"</b>"+" / "+getMessage("campagne")+" <b>"+row._outer["Campagne"]+"</b>"+" / "+getMessage("annee")+" <b>"+row._outer["Annee"]+"</b>"+" / "+getMessage("serie-partielle")+" <b>"+row._outer["Serie_Partielle"]+"</b>"+
"<P>"+
-getMessage("code-station")+" <b>"+row["Code_Station"]+"</b>"+" / "+getMessage("num-trait")+" <b>"+row["Numero_Trait"]+"</b>"+" / "+getMessage("num-poche")+" <b>"+row["Poche"]+"</b>"+" / "+getMessage("date-debut-trait")+" <b>"+row["DateDeb_Op"]+"</b>").replace("<b>null</b>","");</expression>
+getMessage("code-station")+" <b>"+row["Code_Station"]+"</b>"+" / "+getMessage("num-trait")+" <b>"+row["Id_Operation"]+"</b>"+" / "+getMessage("num-poche")+" <b>"+row["Poche"]+"</b>"+" / "+getMessage("date-debut-trait")+" <b>"+row["DateDeb_Op"]+"</b>").replace("<b>null</b>","");</expression>
<property name="contentType">html</property>
</text-data>
</cell>
@@ -7115,7 +7115,7 @@
<data id="2902">
<property name="textAlign">left</property>
<property name="display">inline</property>
- <property name="resultSetColumn">Numero_Trait</property>
+ <property name="resultSetColumn">Id_Operation</property>
</data>
</cell>
</row>
@@ -7469,8 +7469,8 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Numero_Trait</property>
- <expression name="expression">dataSetRow["Numero_Trait"]</expression>
+ <property name="name">Id_Operation</property>
+ <expression name="expression">dataSetRow["Id_Operation"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -7497,9 +7497,9 @@
<list-property name="filter">
<structure>
<property name="operator">eq</property>
- <expression name="expr">row["Numero_Trait"]</expression>
+ <expression name="expr">row["Id_Operation"]</expression>
<simple-property-list name="value1">
- <value>row._outer["Numero_Trait"]</value>
+ <value>row._outer["Id_Operation"]</value>
</simple-property-list>
</structure>
<structure>
@@ -8270,8 +8270,8 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Numero_Trait</property>
- <expression name="expression">dataSetRow["Numero_Trait"]</expression>
+ <property name="name">Id_Operation</property>
+ <expression name="expression">dataSetRow["Id_Operation"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -8285,8 +8285,8 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Taxon</property>
- <expression name="expression">dataSetRow["Taxon"]</expression>
+ <property name="name">Code_Taxon</property>
+ <expression name="expression">dataSetRow["Code_Taxon"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -8644,9 +8644,9 @@
<list-property name="filter">
<structure>
<property name="operator">eq</property>
- <expression name="expr" type="javascript">row["Numero_Trait"]</expression>
+ <expression name="expr" type="javascript">row["Id_Operation"]</expression>
<simple-property-list name="value1">
- <value>row._outer["Numero_Trait"]</value>
+ <value>row._outer["Id_Operation"]</value>
</simple-property-list>
<property name="updateAggregation">true</property>
</structure>
@@ -10435,8 +10435,8 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Numero_Trait</property>
- <expression name="expression">dataSetRow["Numero_Trait"]</expression>
+ <property name="name">Id_Operation</property>
+ <expression name="expression">dataSetRow["Id_Operation"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -10478,9 +10478,9 @@
<list-property name="filter">
<structure>
<property name="operator">eq</property>
- <expression name="expr" type="javascript">row["Numero_Trait"]</expression>
+ <expression name="expr" type="javascript">row["Id_Operation"]</expression>
<simple-property-list name="value1">
- <value>row._outer["Numero_Trait"]</value>
+ <value>row._outer["Id_Operation"]</value>
</simple-property-list>
<property name="updateAggregation">true</property>
</structure>
@@ -10632,8 +10632,8 @@
<property name="dataType">string</property>
</structure>
<structure>
- <property name="name">Numero_Trait</property>
- <expression name="expression">dataSetRow["Numero_Trait"]</expression>
+ <property name="name">Id_Operation</property>
+ <expression name="expression">dataSetRow["Id_Operation"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
@@ -10680,9 +10680,9 @@
<list-property name="filter">
<structure>
<property name="operator">eq</property>
- <expression name="expr" type="javascript">row["Numero_Trait"]</expression>
+ <expression name="expr" type="javascript">row["Id_Operation"]</expression>
<simple-property-list name="value1">
- <value>row._outer["Numero_Trait"]</value>
+ <value>row._outer["Id_Operation"]</value>
</simple-property-list>
<property name="updateAggregation">true</property>
</structure>
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/accidentalCatch.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/accidentalCatch.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/accidentalCatch.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1 +1 @@
-Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
+Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/catch.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/catch.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/catch.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1,4 +1,4 @@
-Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture
+Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;Code_Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture
2013;MEDITS;;GOC73;G101;53;1;;1540;Merluccius merluccius;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;0.11;;Poids;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.5;1;;cm;0.5;1;0.11;2.8810701;
2013;MEDITS;;GOC73;G101;53;1;;1540;Merluccius merluccius;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;0.11;;Poids;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;14.0;2;;cm;0.5;1;0.11;2.8810701;
2013;MEDITS;;GOC73;G101;53;1;;1540;Merluccius merluccius;|;Vrac;1;;;Poids;kg;NA;;;;;kg;UNK - Indéterminé;1;0.11;;Poids;kg;NA;;;;;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;15.0;3;;cm;0.5;2;0.11;2.8810701;
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/individualObservation.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/individualObservation.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/individualObservation.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1,4 +1,4 @@
-Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
+Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
2013;MEDITS;;GOC73;G101;53;1;;100018;1540;Merluccius merluccius;;220;0.11;
2013;MEDITS;;GOC73;G101;53;1;;100018;1540;Merluccius merluccius;;1433;307;
2013;MEDITS;;GOC73;G101;53;1;;100018;1540;Merluccius merluccius;;307;11.5;
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/marineLitter.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/marineLitter.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/marineLitter.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1,4 +1,4 @@
-Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire
+Annee;Serie;Serie_Partielle;Engin;Code_station;Id_Operation;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire
2013;MEDITS;;GOC73;G101;53;1;;L1b Bouteilles;X: UNK - catégorisation non réalisée;3;0.435;;
2013;MEDITS;;GOC73;G101;53;1;;L1c Emballages alimentaires;X: UNK - catégorisation non réalisée;12;0.12;;
2013;MEDITS;;GOC73;G101;53;1;;"L1e Objets en plastique dur - Caisse, récipients, tubes, cendrier, couvercles, etc.";X: UNK - catégorisation non réalisée;4;0.635;;
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/operation.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/operation.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/operation.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1,2 +1,2 @@
-Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule
+Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule
2013;MEDITS;;G101;53;1;GOC73;;13/06/2013 05:32:00;42.975418;3.095972;13/06/2013 06:01:00;42.450695;3.09375;29;NA;NA;NA;Y;N;2778.0;NA;NA;NA;Luisa METRAL;;;203.6;Y;61.05;Y;27.72;Y;114.8;N;;?;;?;65.34;Y;37.77;Y;37.767998;Y;27.57;Y;3.907;N;0.0;Y;23.43;Y;23.282;N;3.142;Y;0.147;Y;0.0;Y;0.0;Y;46.28;Y;
Modified: trunk/tutti-service/src/test/resources/report/exportCruise/parameter.csv
===================================================================
--- trunk/tutti-service/src/test/resources/report/exportCruise/parameter.csv 2014-01-17 09:53:22 UTC (rev 1499)
+++ trunk/tutti-service/src/test/resources/report/exportCruise/parameter.csv 2014-01-17 14:58:15 UTC (rev 1500)
@@ -1,4 +1,4 @@
-Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur
+Annee;Serie;Serie_Partielle;Code_station;Id_Operation;Poche;Code_PMFM;Libelle_PMFm;Valeur
2013;MEDITS;;G101;53;1;826;Longueur des funes - opération - totale - Instrument de bord;220.0;
2013;MEDITS;;G101;53;1;905;Longueur d'un bras - engin - bras - Inconnue;100.0;
2013;MEDITS;;G101;53;1;833;Ouverture verticale (chalut ou drague) - opération - totale - Instrument de bord;1.8;
1
0
r1499 - in trunk/tutti-ui-swing/src/main: help/css help/js java/fr/ifremer/tutti/ui/swing/content/operation/catches
by tchemit@users.forge.codelutin.com Jan. 17, 2014
by tchemit@users.forge.codelutin.com Jan. 17, 2014
Jan. 17, 2014
Author: tchemit
Date: 2014-01-17 10:53:22 +0100 (Fri, 17 Jan 2014)
New Revision: 1499
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1499
Log:
fix license headers
Modified:
trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css
trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesBatchRowHelper.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortMode.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortableRowModel.java
Modified: trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css
===================================================================
--- trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css 2014-01-17 09:45:39 UTC (rev 1498)
+++ trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css 2014-01-17 09:53:22 UTC (rev 1499)
@@ -1,4 +1,4 @@
-/*!
+/*! %%Ignore-License%%
* Bootstrap v3.0.3 (http://getbootstrap.com)
* Copyright 2013 Twitter, Inc.
* Licensed under http://www.apache.org/licenses/LICENSE-2.0
Modified: trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js
===================================================================
--- trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js 2014-01-17 09:45:39 UTC (rev 1498)
+++ trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js 2014-01-17 09:53:22 UTC (rev 1499)
@@ -1,4 +1,4 @@
-/*!
+/*! %%Ignore-License%%
* Bootstrap v3.0.3 (http://getbootstrap.com)
* Copyright 2013 Twitter, Inc.
* Licensed under http://www.apache.org/licenses/LICENSE-2.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesBatchRowHelper.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesBatchRowHelper.java 2014-01-17 09:45:39 UTC (rev 1498)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesBatchRowHelper.java 2014-01-17 09:53:22 UTC (rev 1499)
@@ -1,5 +1,29 @@
package fr.ifremer.tutti.ui.swing.content.operation.catches;
+/*
+ * #%L
+ * Tutti :: UI
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortMode.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortMode.java 2014-01-17 09:45:39 UTC (rev 1498)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortMode.java 2014-01-17 09:53:22 UTC (rev 1499)
@@ -1,5 +1,29 @@
package fr.ifremer.tutti.ui.swing.content.operation.catches;
+/*
+ * #%L
+ * Tutti :: UI
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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%
+ */
+
/**
* Created on 1/7/14.
*
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortableRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortableRowModel.java 2014-01-17 09:45:39 UTC (rev 1498)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SpeciesSortableRowModel.java 2014-01-17 09:53:22 UTC (rev 1499)
@@ -1,5 +1,29 @@
package fr.ifremer.tutti.ui.swing.content.operation.catches;
+/*
+ * #%L
+ * Tutti :: UI
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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%
+ */
+
/**
* Created on 1/8/14.
*
1
0
r1498 - in trunk/tutti-ui-swing/src/main/help: . css export fr js
by tchemit@users.forge.codelutin.com Jan. 17, 2014
by tchemit@users.forge.codelutin.com Jan. 17, 2014
Jan. 17, 2014
Author: tchemit
Date: 2014-01-17 10:45:39 +0100 (Fri, 17 Jan 2014)
New Revision: 1498
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1498
Log:
refs #3939: [SPECS] Fournir la documentation sur le format g?\195?\169n?\195?\169rique
Added:
trunk/tutti-ui-swing/src/main/help/export/
trunk/tutti-ui-swing/src/main/help/export/accidentalCatch.csv
trunk/tutti-ui-swing/src/main/help/export/catch.csv
trunk/tutti-ui-swing/src/main/help/export/gearCaracteristics.csv
trunk/tutti-ui-swing/src/main/help/export/individualObservation.csv
trunk/tutti-ui-swing/src/main/help/export/marineLitter.csv
trunk/tutti-ui-swing/src/main/help/export/operation.csv
trunk/tutti-ui-swing/src/main/help/export/parameter.csv
trunk/tutti-ui-swing/src/main/help/export/species.csv
trunk/tutti-ui-swing/src/main/help/export/survey.csv
Modified:
trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css
trunk/tutti-ui-swing/src/main/help/css/style.css
trunk/tutti-ui-swing/src/main/help/fr/genericExport.html
trunk/tutti-ui-swing/src/main/help/fr/navbar.js
trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js
Modified: trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css
===================================================================
--- trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css 2014-01-16 23:29:24 UTC (rev 1497)
+++ trunk/tutti-ui-swing/src/main/help/css/bootstrap.min.css 2014-01-17 09:45:39 UTC (rev 1498)
@@ -1,874 +1,7 @@
/*!
- * Bootstrap v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- * %%Ignore-License%%
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Bootstrap v3.0.3 (http://getbootstrap.com)
+ * Copyright 2013 Twitter, Inc.
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0
*/
-.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;}
-.clearfix:after{clear:both;}
-.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
-.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
-article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
-audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
-audio:not([controls]){display:none;}
-html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
-a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-a:hover,a:active{outline:0;}
-sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
-sup{top:-0.5em;}
-sub{bottom:-0.25em;}
-img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
-#map_canvas img,.google-maps img{max-width:none;}
-button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
-button,input{*overflow:visible;line-height:normal;}
-button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}
-label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;}
-input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
-input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
-textarea{overflow:auto;vertical-align:top;}
-@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important;} a,a:visited{text-decoration:underline;} a[href]:after{content:" (" attr(href) ")";} abbr[title]:after{content:" (" attr(title) ")";} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:"";} pre,blockquote{border:1px solid #999;page-break-inside:avoid;} thead{display:table-header-group;} tr,img{page-break-inside:avoid;} img{max-width:100% !important;} @page {margin:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;}
-a{color:#0088cc;text-decoration:none;}
-a:hover,a:focus{color:#005580;text-decoration:underline;}
-.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
-.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);}
-.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;}
-.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;}
-.row:after{clear:both;}
-[class*="span"]{float:left;min-height:1px;margin-left:20px;}
-.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
-.span12{width:940px;}
-.span11{width:860px;}
-.span10{width:780px;}
-.span9{width:700px;}
-.span8{width:620px;}
-.span7{width:540px;}
-.span6{width:460px;}
-.span5{width:380px;}
-.span4{width:300px;}
-.span3{width:220px;}
-.span2{width:140px;}
-.span1{width:60px;}
-.offset12{margin-left:980px;}
-.offset11{margin-left:900px;}
-.offset10{margin-left:820px;}
-.offset9{margin-left:740px;}
-.offset8{margin-left:660px;}
-.offset7{margin-left:580px;}
-.offset6{margin-left:500px;}
-.offset5{margin-left:420px;}
-.offset4{margin-left:340px;}
-.offset3{margin-left:260px;}
-.offset2{margin-left:180px;}
-.offset1{margin-left:100px;}
-.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;}
-.row-fluid:after{clear:both;}
-.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;}
-.row-fluid [class*="span"]:first-child{margin-left:0;}
-.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;}
-.row-fluid .span12{width:100%;*width:99.94680851063829%;}
-.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;}
-.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;}
-.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;}
-.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;}
-.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;}
-.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;}
-.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;}
-.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;}
-.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;}
-.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;}
-.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;}
-.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;}
-.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;}
-.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;}
-.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;}
-.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;}
-.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;}
-.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;}
-.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;}
-.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;}
-.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;}
-.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;}
-.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;}
-.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;}
-.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;}
-.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;}
-.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;}
-.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;}
-.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;}
-.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;}
-.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;}
-.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;}
-.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;}
-.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;}
-.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;}
-[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;}
-[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;}
-.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;}
-.container:after{clear:both;}
-.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;}
-.container-fluid:after{clear:both;}
-p{margin:0 0 10px;}
-.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;}
-small{font-size:85%;}
-strong{font-weight:bold;}
-em{font-style:italic;}
-cite{font-style:normal;}
-.muted{color:#999999;}
-a.muted:hover,a.muted:focus{color:#808080;}
-.text-warning{color:#c09853;}
-a.text-warning:hover,a.text-warning:focus{color:#a47e3c;}
-.text-error{color:#b94a48;}
-a.text-error:hover,a.text-error:focus{color:#953b39;}
-.text-info{color:#3a87ad;}
-a.text-info:hover,a.text-info:focus{color:#2d6987;}
-.text-success{color:#468847;}
-a.text-success:hover,a.text-success:focus{color:#356635;}
-.text-left{text-align:left;}
-.text-right{text-align:right;}
-.text-center{text-align:center;}
-h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;}
-h1,h2,h3{line-height:40px;}
-h1{font-size:38.5px;}
-h2{font-size:31.5px;}
-h3{font-size:24.5px;}
-h4{font-size:17.5px;}
-h5{font-size:14px;}
-h6{font-size:11.9px;}
-h1 small{font-size:24.5px;}
-h2 small{font-size:17.5px;}
-h3 small{font-size:14px;}
-h4 small{font-size:14px;}
-.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;}
-ul,ol{padding:0;margin:0 0 10px 25px;}
-ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
-li{line-height:20px;}
-ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
-ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px;}
-dl{margin-bottom:20px;}
-dt,dd{line-height:20px;}
-dt{font-weight:bold;}
-dd{margin-left:10px;}
-.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;}
-.dl-horizontal:after{clear:both;}
-.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
-.dl-horizontal dd{margin-left:180px;}
-hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
-abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;}
-abbr.initialism{font-size:90%;text-transform:uppercase;}
-blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25;}
-blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
-blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
-blockquote.pull-right small:before{content:'';}
-blockquote.pull-right small:after{content:'\00A0 \2014';}
-q:before,q:after,blockquote:before,blockquote:after{content:"";}
-address{display:block;margin-bottom:20px;font-style:normal;line-height:20px;}
-code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;}
-pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;}
-pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;}
-.pre-scrollable{max-height:340px;overflow-y:scroll;}
-.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;}
-.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;}
-.label:empty,.badge:empty{display:none;}
-a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer;}
-.label-important,.badge-important{background-color:#b94a48;}
-.label-important[href],.badge-important[href]{background-color:#953b39;}
-.label-warning,.badge-warning{background-color:#f89406;}
-.label-warning[href],.badge-warning[href]{background-color:#c67605;}
-.label-success,.badge-success{background-color:#468847;}
-.label-success[href],.badge-success[href]{background-color:#356635;}
-.label-info,.badge-info{background-color:#3a87ad;}
-.label-info[href],.badge-info[href]{background-color:#2d6987;}
-.label-inverse,.badge-inverse{background-color:#333333;}
-.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;}
-.btn .label,.btn .badge{position:relative;top:-1px;}
-.btn-mini .label,.btn-mini .badge{top:0;}
-table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;}
-.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
-.table th{font-weight:bold;}
-.table thead th{vertical-align:bottom;}
-.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;}
-.table tbody+tbody{border-top:2px solid #dddddd;}
-.table .table{background-color:#ffffff;}
-.table-condensed th,.table-condensed td{padding:4px 5px;}
-.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
-.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
-.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;}
-.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;}
-.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
-.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
-.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;}
-.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;}
-.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;}
-.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;}
-.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9;}
-.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5;}
-table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;}
-.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;}
-.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;}
-.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;}
-.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;}
-.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;}
-.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;}
-.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;}
-.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;}
-.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;}
-.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;}
-.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;}
-.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;}
-.table tbody tr.success>td{background-color:#dff0d8;}
-.table tbody tr.error>td{background-color:#f2dede;}
-.table tbody tr.warning>td{background-color:#fcf8e3;}
-.table tbody tr.info>td{background-color:#d9edf7;}
-.table-hover tbody tr.success:hover>td{background-color:#d0e9c6;}
-.table-hover tbody tr.error:hover>td{background-color:#ebcccc;}
-.table-hover tbody tr.warning:hover>td{background-color:#faf2cc;}
-.table-hover tbody tr.info:hover>td{background-color:#c4e3f3;}
-form{margin:0 0 20px;}
-fieldset{padding:0;margin:0;border:0;}
-legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;}
-label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;}
-input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}
-label{display:block;margin-bottom:5px;}
-select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;}
-input,textarea,.uneditable-input{width:206px;}
-textarea{height:auto;}
-textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);}
-input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;}
-input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;}
-select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;}
-select{width:220px;border:1px solid #cccccc;background-color:#ffffff;}
-select[multiple],select[size]{height:auto;}
-select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
-.uneditable-input{overflow:hidden;white-space:nowrap;}
-.uneditable-textarea{width:auto;height:auto;}
-input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;}
-input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;}
-input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;}
-.radio,.checkbox{min-height:20px;padding-left:20px;}
-.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;}
-.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;}
-.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;}
-.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;}
-.input-mini{width:60px;}
-.input-small{width:90px;}
-.input-medium{width:150px;}
-.input-large{width:210px;}
-.input-xlarge{width:270px;}
-.input-xxlarge{width:530px;}
-input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;}
-.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;}
-input,textarea,.uneditable-input{margin-left:0;}
-.controls-row [class*="span"]+[class*="span"]{margin-left:20px;}
-input.span12,textarea.span12,.uneditable-input.span12{width:926px;}
-input.span11,textarea.span11,.uneditable-input.span11{width:846px;}
-input.span10,textarea.span10,.uneditable-input.span10{width:766px;}
-input.span9,textarea.span9,.uneditable-input.span9{width:686px;}
-input.span8,textarea.span8,.uneditable-input.span8{width:606px;}
-input.span7,textarea.span7,.uneditable-input.span7{width:526px;}
-input.span6,textarea.span6,.uneditable-input.span6{width:446px;}
-input.span5,textarea.span5,.uneditable-input.span5{width:366px;}
-input.span4,textarea.span4,.uneditable-input.span4{width:286px;}
-input.span3,textarea.span3,.uneditable-input.span3{width:206px;}
-input.span2,textarea.span2,.uneditable-input.span2{width:126px;}
-input.span1,textarea.span1,.uneditable-input.span1{width:46px;}
-.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;}
-.controls-row:after{clear:both;}
-.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;}
-.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;}
-input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;}
-input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;}
-.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;}
-.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;}
-.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;}
-.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;}
-.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;}
-.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;}
-.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;}
-.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;}
-.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}
-.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;}
-.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;}
-.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;}
-.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;}
-.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;}
-.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;}
-.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;}
-input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
-.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;}
-.form-actions:after{clear:both;}
-.help-block,.help-inline{color:#595959;}
-.help-block{display:block;margin-bottom:10px;}
-.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;}
-.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px;}
-.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;}
-.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;}
-.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;}
-.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;}
-.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
-.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;}
-.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
-.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.input-prepend.input-append .btn-group:first-child{margin-left:0;}
-input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
-.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;}
-.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
-.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
-.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;}
-.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;}
-.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;}
-.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;}
-.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;}
-.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;}
-.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;}
-.control-group{margin-bottom:10px;}
-legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;}
-.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;}
-.form-horizontal .control-group:after{clear:both;}
-.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;}
-.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;}
-.form-horizontal .help-block{margin-bottom:0;}
-.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;}
-.form-horizontal .form-actions{padding-left:180px;}
-.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #cccccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;}
-.btn:active,.btn.active{background-color:#cccccc \9;}
-.btn:first-child{*margin-left:0;}
-.btn:hover,.btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
-.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
-.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
-.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
-.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
-.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;}
-.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;}
-.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;}
-.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
-.btn-block+.btn-block{margin-top:5px;}
-input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;}
-.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);}
-.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;}
-.btn-primary:active,.btn-primary.active{background-color:#003399 \9;}
-.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;}
-.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
-.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;}
-.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
-.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;}
-.btn-success:active,.btn-success.active{background-color:#408140 \9;}
-.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;}
-.btn-info:active,.btn-info.active{background-color:#24748c \9;}
-.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;}
-.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
-button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
-button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;}
-button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;}
-button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;}
-.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
-.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent;}
-.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333333;text-decoration:none;}
-[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;}
-.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png");}
-.icon-glass{background-position:0 0;}
-.icon-music{background-position:-24px 0;}
-.icon-search{background-position:-48px 0;}
-.icon-envelope{background-position:-72px 0;}
-.icon-heart{background-position:-96px 0;}
-.icon-star{background-position:-120px 0;}
-.icon-star-empty{background-position:-144px 0;}
-.icon-user{background-position:-168px 0;}
-.icon-film{background-position:-192px 0;}
-.icon-th-large{background-position:-216px 0;}
-.icon-th{background-position:-240px 0;}
-.icon-th-list{background-position:-264px 0;}
-.icon-ok{background-position:-288px 0;}
-.icon-remove{background-position:-312px 0;}
-.icon-zoom-in{background-position:-336px 0;}
-.icon-zoom-out{background-position:-360px 0;}
-.icon-off{background-position:-384px 0;}
-.icon-signal{background-position:-408px 0;}
-.icon-cog{background-position:-432px 0;}
-.icon-trash{background-position:-456px 0;}
-.icon-home{background-position:0 -24px;}
-.icon-file{background-position:-24px -24px;}
-.icon-time{background-position:-48px -24px;}
-.icon-road{background-position:-72px -24px;}
-.icon-download-alt{background-position:-96px -24px;}
-.icon-download{background-position:-120px -24px;}
-.icon-upload{background-position:-144px -24px;}
-.icon-inbox{background-position:-168px -24px;}
-.icon-play-circle{background-position:-192px -24px;}
-.icon-repeat{background-position:-216px -24px;}
-.icon-refresh{background-position:-240px -24px;}
-.icon-list-alt{background-position:-264px -24px;}
-.icon-lock{background-position:-287px -24px;}
-.icon-flag{background-position:-312px -24px;}
-.icon-headphones{background-position:-336px -24px;}
-.icon-volume-off{background-position:-360px -24px;}
-.icon-volume-down{background-position:-384px -24px;}
-.icon-volume-up{background-position:-408px -24px;}
-.icon-qrcode{background-position:-432px -24px;}
-.icon-barcode{background-position:-456px -24px;}
-.icon-tag{background-position:0 -48px;}
-.icon-tags{background-position:-25px -48px;}
-.icon-book{background-position:-48px -48px;}
-.icon-bookmark{background-position:-72px -48px;}
-.icon-print{background-position:-96px -48px;}
-.icon-camera{background-position:-120px -48px;}
-.icon-font{background-position:-144px -48px;}
-.icon-bold{background-position:-167px -48px;}
-.icon-italic{background-position:-192px -48px;}
-.icon-text-height{background-position:-216px -48px;}
-.icon-text-width{background-position:-240px -48px;}
-.icon-align-left{background-position:-264px -48px;}
-.icon-align-center{background-position:-288px -48px;}
-.icon-align-right{background-position:-312px -48px;}
-.icon-align-justify{background-position:-336px -48px;}
-.icon-list{background-position:-360px -48px;}
-.icon-indent-left{background-position:-384px -48px;}
-.icon-indent-right{background-position:-408px -48px;}
-.icon-facetime-video{background-position:-432px -48px;}
-.icon-picture{background-position:-456px -48px;}
-.icon-pencil{background-position:0 -72px;}
-.icon-map-marker{background-position:-24px -72px;}
-.icon-adjust{background-position:-48px -72px;}
-.icon-tint{background-position:-72px -72px;}
-.icon-edit{background-position:-96px -72px;}
-.icon-share{background-position:-120px -72px;}
-.icon-check{background-position:-144px -72px;}
-.icon-move{background-position:-168px -72px;}
-.icon-step-backward{background-position:-192px -72px;}
-.icon-fast-backward{background-position:-216px -72px;}
-.icon-backward{background-position:-240px -72px;}
-.icon-play{background-position:-264px -72px;}
-.icon-pause{background-position:-288px -72px;}
-.icon-stop{background-position:-312px -72px;}
-.icon-forward{background-position:-336px -72px;}
-.icon-fast-forward{background-position:-360px -72px;}
-.icon-step-forward{background-position:-384px -72px;}
-.icon-eject{background-position:-408px -72px;}
-.icon-chevron-left{background-position:-432px -72px;}
-.icon-chevron-right{background-position:-456px -72px;}
-.icon-plus-sign{background-position:0 -96px;}
-.icon-minus-sign{background-position:-24px -96px;}
-.icon-remove-sign{background-position:-48px -96px;}
-.icon-ok-sign{background-position:-72px -96px;}
-.icon-question-sign{background-position:-96px -96px;}
-.icon-info-sign{background-position:-120px -96px;}
-.icon-screenshot{background-position:-144px -96px;}
-.icon-remove-circle{background-position:-168px -96px;}
-.icon-ok-circle{background-position:-192px -96px;}
-.icon-ban-circle{background-position:-216px -96px;}
-.icon-arrow-left{background-position:-240px -96px;}
-.icon-arrow-right{background-position:-264px -96px;}
-.icon-arrow-up{background-position:-289px -96px;}
-.icon-arrow-down{background-position:-312px -96px;}
-.icon-share-alt{background-position:-336px -96px;}
-.icon-resize-full{background-position:-360px -96px;}
-.icon-resize-small{background-position:-384px -96px;}
-.icon-plus{background-position:-408px -96px;}
-.icon-minus{background-position:-433px -96px;}
-.icon-asterisk{background-position:-456px -96px;}
-.icon-exclamation-sign{background-position:0 -120px;}
-.icon-gift{background-position:-24px -120px;}
-.icon-leaf{background-position:-48px -120px;}
-.icon-fire{background-position:-72px -120px;}
-.icon-eye-open{background-position:-96px -120px;}
-.icon-eye-close{background-position:-120px -120px;}
-.icon-warning-sign{background-position:-144px -120px;}
-.icon-plane{background-position:-168px -120px;}
-.icon-calendar{background-position:-192px -120px;}
-.icon-random{background-position:-216px -120px;width:16px;}
-.icon-comment{background-position:-240px -120px;}
-.icon-magnet{background-position:-264px -120px;}
-.icon-chevron-up{background-position:-288px -120px;}
-.icon-chevron-down{background-position:-313px -119px;}
-.icon-retweet{background-position:-336px -120px;}
-.icon-shopping-cart{background-position:-360px -120px;}
-.icon-folder-close{background-position:-384px -120px;width:16px;}
-.icon-folder-open{background-position:-408px -120px;width:16px;}
-.icon-resize-vertical{background-position:-432px -119px;}
-.icon-resize-horizontal{background-position:-456px -118px;}
-.icon-hdd{background-position:0 -144px;}
-.icon-bullhorn{background-position:-24px -144px;}
-.icon-bell{background-position:-48px -144px;}
-.icon-certificate{background-position:-72px -144px;}
-.icon-thumbs-up{background-position:-96px -144px;}
-.icon-thumbs-down{background-position:-120px -144px;}
-.icon-hand-right{background-position:-144px -144px;}
-.icon-hand-left{background-position:-168px -144px;}
-.icon-hand-up{background-position:-192px -144px;}
-.icon-hand-down{background-position:-216px -144px;}
-.icon-circle-arrow-right{background-position:-240px -144px;}
-.icon-circle-arrow-left{background-position:-264px -144px;}
-.icon-circle-arrow-up{background-position:-288px -144px;}
-.icon-circle-arrow-down{background-position:-312px -144px;}
-.icon-globe{background-position:-336px -144px;}
-.icon-wrench{background-position:-360px -144px;}
-.icon-tasks{background-position:-384px -144px;}
-.icon-filter{background-position:-408px -144px;}
-.icon-briefcase{background-position:-432px -144px;}
-.icon-fullscreen{background-position:-456px -144px;}
-.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;}
-.btn-group+.btn-group{margin-left:5px;}
-.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;}
-.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.btn-group>.btn+.btn{margin-left:-1px;}
-.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;}
-.btn-group>.btn-mini{font-size:10.5px;}
-.btn-group>.btn-small{font-size:11.9px;}
-.btn-group>.btn-large{font-size:17.5px;}
-.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
-.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
-.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
-.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
-.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;}
-.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
-.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;}
-.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;}
-.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;}
-.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;}
-.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);}
-.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;}
-.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;}
-.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;}
-.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;}
-.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;}
-.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;}
-.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;}
-.btn .caret{margin-top:8px;margin-left:0;}
-.btn-large .caret{margin-top:6px;}
-.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;}
-.btn-mini .caret,.btn-small .caret{margin-top:8px;}
-.dropup .btn-large .caret{border-bottom-width:5px;}
-.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
-.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;}
-.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;}
-.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
-.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
-.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;}
-.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;}
-.nav{margin-left:0;margin-bottom:20px;list-style:none;}
-.nav>li>a{display:block;}
-.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee;}
-.nav>li>a>img{max-width:none;}
-.nav>.pull-right{float:right;}
-.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;}
-.nav li+.nav-header{margin-top:9px;}
-.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;}
-.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
-.nav-list>li>a{padding:3px 15px;}
-.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;}
-.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;}
-.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
-.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;}
-.nav-tabs:after,.nav-pills:after{clear:both;}
-.nav-tabs>li,.nav-pills>li{float:left;}
-.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
-.nav-tabs{border-bottom:1px solid #ddd;}
-.nav-tabs>li{margin-bottom:-1px;}
-.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #dddddd;}
-.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
-.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
-.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#ffffff;background-color:#0088cc;}
-.nav-stacked>li{float:none;}
-.nav-stacked>li>a{margin-right:0;}
-.nav-tabs.nav-stacked{border-bottom:0;}
-.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;}
-.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
-.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2;}
-.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
-.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
-.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;}
-.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
-.nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;}
-.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580;}
-.nav-tabs .dropdown-toggle .caret{margin-top:8px;}
-.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;}
-.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;}
-.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer;}
-.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#ffffff;background-color:#999999;border-color:#999999;}
-.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);}
-.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999999;}
-.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;}
-.tabbable:after{clear:both;}
-.tab-content{overflow:auto;}
-.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;}
-.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
-.tab-content>.active,.pill-content>.active{display:block;}
-.tabs-below>.nav-tabs{border-top:1px solid #ddd;}
-.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;}
-.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd;}
-.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd;}
-.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;}
-.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
-.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
-.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
-.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
-.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
-.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
-.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
-.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
-.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
-.nav>.disabled>a{color:#999999;}
-.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default;}
-.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;}
-.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;}
-.navbar-inner:after{clear:both;}
-.navbar .container{width:auto;}
-.nav-collapse.collapse{height:auto;overflow:visible;}
-.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none;}
-.navbar-text{margin-bottom:0;line-height:40px;color:#777777;}
-.navbar-link{color:#777777;}.navbar-link:hover,.navbar-link:focus{color:#333333;}
-.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;}
-.navbar .btn,.navbar .btn-group{margin-top:5px;}
-.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0;}
-.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;}
-.navbar-form:after{clear:both;}
-.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;}
-.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;}
-.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
-.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;}
-.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
-.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;}
-.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;}
-.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;}
-.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
-.navbar-fixed-top{top:0;}
-.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);}
-.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);}
-.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
-.navbar .nav.pull-right{float:right;margin-right:0;}
-.navbar .nav>li{float:left;}
-.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;}
-.navbar .nav .dropdown-toggle .caret{margin-top:8px;}
-.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;}
-.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);}
-.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;}
-.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;}
-.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
-.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
-.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
-.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
-.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;}
-.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;}
-.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333333;border-bottom-color:#333333;}
-.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;}
-.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;}
-.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;}
-.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;}
-.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;}
-.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;}
-.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;}
-.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#ffffff;}
-.navbar-inverse .brand{color:#999999;}
-.navbar-inverse .navbar-text{color:#999999;}
-.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;}
-.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;}
-.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#ffffff;}
-.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;}
-.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;}
-.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
-.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;}
-.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
-.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;}
-.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;}
-.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
-.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
-.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;}
-.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;}
-.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;}
-.breadcrumb>.active{color:#999999;}
-.pagination{margin:20px 0;}
-.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
-.pagination ul>li{display:inline;}
-.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;}
-.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;}
-.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;}
-.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999999;background-color:transparent;cursor:default;}
-.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
-.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
-.pagination-centered{text-align:center;}
-.pagination-right{text-align:right;}
-.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;}
-.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
-.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
-.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;}
-.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;}
-.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;}
-.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;}
-.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;}
-.pager:after{clear:both;}
-.pager li{display:inline;}
-.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
-.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5;}
-.pager .next>a,.pager .next>span{float:right;}
-.pager .previous>a,.pager .previous>span{float:left;}
-.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:#fff;cursor:default;}
-.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;}
-.thumbnails:after{clear:both;}
-.row-fluid .thumbnails{margin-left:0;}
-.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;}
-.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;}
-a.thumbnail:hover,a.thumbnail:focus{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
-.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;}
-.thumbnail .caption{padding:9px;color:#555555;}
-.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.alert,.alert h4{color:#c09853;}
-.alert h4{margin:0;}
-.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;}
-.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;}
-.alert-success h4{color:#468847;}
-.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;}
-.alert-danger h4,.alert-error h4{color:#b94a48;}
-.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;}
-.alert-info h4{color:#3a87ad;}
-.alert-block{padding-top:14px;padding-bottom:14px;}
-.alert-block>p,.alert-block>ul{margin-bottom:0;}
-.alert-block p+p{margin-top:5px;}
-@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-o-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
-.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);}
-.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
-.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;}
-.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);}
-.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
-.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);}
-.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
-.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);}
-.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
-.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);}
-.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);}
-.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;}
-.hero-unit li{line-height:30px;}
-.media,.media-body{overflow:hidden;*overflow:visible;zoom:1;}
-.media,.media .media{margin-top:15px;}
-.media:first-child{margin-top:0;}
-.media-object{display:block;}
-.media-heading{margin:0 0 5px;}
-.media>.pull-left{margin-right:10px;}
-.media>.pull-right{margin-left:10px;}
-.media-list{margin-left:0;list-style:none;}
-.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
-.tooltip.top{margin-top:-3px;padding:5px 0;}
-.tooltip.right{margin-left:3px;padding:0 5px;}
-.tooltip.bottom{margin-top:3px;padding:5px 0;}
-.tooltip.left{margin-left:-3px;padding:0 5px;}
-.tooltip-inner{max-width:200px;padding:8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;}
-.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000;}
-.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;}
-.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;}
-.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;}
-.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;}
-.popover.right{margin-left:10px;}
-.popover.bottom{margin-top:10px;}
-.popover.left{margin-left:-10px;}
-.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}.popover-title:empty{display:none;}
-.popover-content{padding:9px 14px;}
-.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;}
-.popover .arrow{border-width:11px;}
-.popover .arrow:after{border-width:10px;content:"";}
-.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;}
-.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;}
-.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;}
-.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;}
-.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
-.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);}
-.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
-.modal.fade.in{top:10%;}
-.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
-.modal-header h3{margin:0;line-height:30px;}
-.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;}
-.modal-form{margin-bottom:0;}
-.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;}
-.modal-footer:after{clear:both;}
-.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;}
-.modal-footer .btn-group .btn+.btn{margin-left:-1px;}
-.modal-footer .btn-block+.btn-block{margin-left:0;}
-.dropup,.dropdown{position:relative;}
-.dropdown-toggle{*margin-bottom:-3px;}
-.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
-.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";}
-.dropdown .caret{margin-top:8px;margin-left:2px;}
-.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;}
-.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
-.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333333;white-space:nowrap;}
-.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#ffffff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);}
-.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);}
-.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999;}
-.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;}
-.open{*z-index:1000;}.open>.dropdown-menu{display:block;}
-.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990;}
-.pull-right>.dropdown-menu{right:0;left:auto;}
-.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";}
-.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
-.dropdown-submenu{position:relative;}
-.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
-.dropdown-submenu:hover>.dropdown-menu{display:block;}
-.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;}
-.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}
-.dropdown-submenu:hover>a:after{border-left-color:#ffffff;}
-.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;}
-.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;}
-.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.accordion{margin-bottom:20px;}
-.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
-.accordion-heading{border-bottom:0;}
-.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
-.accordion-toggle{cursor:pointer;}
-.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
-.carousel{position:relative;margin-bottom:20px;line-height:1;}
-.carousel-inner{overflow:hidden;width:100%;position:relative;}
-.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1;}
-.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block;}
-.carousel-inner>.active{left:0;}
-.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%;}
-.carousel-inner>.next{left:100%;}
-.carousel-inner>.prev{left:-100%;}
-.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0;}
-.carousel-inner>.active.left{left:-100%;}
-.carousel-inner>.active.right{left:100%;}
-.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
-.carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);}
-.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none;}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255, 255, 255, 0.25);border-radius:5px;}
-.carousel-indicators .active{background-color:#fff;}
-.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);}
-.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;}
-.carousel-caption h4{margin:0 0 5px;}
-.carousel-caption p{margin-bottom:0;}
-.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
-.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
-.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
-.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);}
-button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}
-.pull-right{float:right;}
-.pull-left{float:left;}
-.hide{display:none;}
-.show{display:block;}
-.invisible{visibility:hidden;}
-.affix{position:fixed;}
-.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;}
-.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;}
-@-ms-viewport{width:device-width;}.hidden{display:none;visibility:hidden;}
-.visible-phone{display:none !important;}
-.visible-tablet{display:none !important;}
-.hidden-desktop{display:none !important;}
-.visible-desktop{display:inherit !important;}
-@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}.visible-print{display:none !important;}
-@media print{.visible-print{display:inherit !important;} .hidden-print{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12,textarea.span12,.uneditable-input.span12{width:710px;} input.span11,textarea.span11,.uneditable-input.span11{width:648px;} input.span10,textarea.span10,.uneditable-input.span10{width:586px;} input.span9,textarea.span9,.uneditable-input.span9{width:524px;} input.span8,textarea.span8,.uneditable-input.span8{width:462px;} input.span7,textarea.span7,.uneditable-input.span7{width:400px;} input.span6,textarea.span6,.uneditable-input.span6{width:338px;} input.span5,textarea.span5,.uneditable-input.span5{width:276px;} input.span4,textarea.span4,.uneditable-input.span4{width:214px;} input.span3,textarea.span3,.uneditable-input.span3{width:152px;} input.span2,textarea.span2,.uneditable-input.span2{width:90px;} input.span1,textarea.span1,.uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12,textarea.span12,.uneditable-input.span12{width:1156px;} input.span11,textarea.span11,.uneditable-input.span11{width:1056px;} input.span10,textarea.span10,.uneditable-input.span10{width:956px;} input.span9,textarea.span9,.uneditable-input.span9{width:856px;} input.span8,textarea.span8,.uneditable-input.span8{width:756px;} input.span7,textarea.span7,.uneditable-input.span7{width:656px;} input.span6,textarea.span6,.uneditable-input.span6{width:556px;} input.span5,textarea.span5,.uneditable-input.span5{width:456px;} input.span4,textarea.span4,.uneditable-input.span4{width:356px;} input.span3,textarea.span3,.uneditable-input.span3{width:256px;} input.span2,textarea.span2,.uneditable-input.span2{width:156px;} input.span1,textarea.span1,.uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}
+
+/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small,h1 .small,h2 .small,h3 .small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small,h4 .small,h5 .small,h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3071a9}.text-warning{color:#8a6d3b}.text-warning:hover{color:#66512c}.text-danger{color:#a94442}.text-danger:hover{color:#843534}.text-success{color:#3c763d}.text-success:hover{color:#2b542c}.text-info{color:#31708f}.text-info:hover{color:#245269}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.list-inline>li:first-child{padding-left:0}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small,blockquote .small{display:block;line-height:1.428571429;color:#999}blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small,blockquote.pull-right .small{text-align:right}blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}@media(min-width:768px){.container{width:750px}}@media(min-width:992px){.container{width:970px}}@media(min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666666666666%}.col-xs-10{width:83.33333333333334%}.col-xs-9{width:75%}.col-xs-8{width:66.66666666666666%}.col-xs-7{width:58.333333333333336%}.col-xs-6{width:50%}.col-xs-5{width:41.66666666666667%}.col-xs-4{width:33.33333333333333%}.col-xs-3{width:25%}.col-xs-2{width:16.666666666666664%}.col-xs-1{width:8.333333333333332%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666666666666%}.col-xs-pull-10{right:83.33333333333334%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666666666666%}.col-xs-pull-7{right:58.333333333333336%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666666666667%}.col-xs-pull-4{right:33.33333333333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.666666666666664%}.col-xs-pull-1{right:8.333333333333332%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666666666666%}.col-xs-push-10{left:83.33333333333334%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666666666666%}.col-xs-push-7{left:58.333333333333336%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666666666667%}.col-xs-push-4{left:33.33333333333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.666666666666664%}.col-xs-push-1{left:8.333333333333332%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666666666666%}.col-xs-offset-10{margin-left:83.33333333333334%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666666666666%}.col-xs-offset-7{margin-left:58.333333333333336%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666666666667%}.col-xs-offset-4{margin-left:33.33333333333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.666666666666664%}.col-xs-offset-1{margin-left:8.333333333333332%}.col-xs-offset-0{margin-left:0}@media(min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media(min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media(min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>.active,.table>tbody>tr>.active,.table>tfoot>tr>.active,.table>thead>.active>td,.table>tbody>.active>td,.table>tfoot>.active>td,.table>thead>.active>th,.table>tbody>.active>th,.table>tfoot>.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>.active:hover,.table-hover>tbody>.active:hover>td,.table-hover>tbody>.active:hover>th{background-color:#e8e8e8}.table>thead>tr>.success,.table>tbody>tr>.success,.table>tfoot>tr>.success,.table>thead>.success>td,.table>tbody>.success>td,.table>tfoot>.success>td,.table>thead>.success>th,.table>tbody>.success>th,.table>tfoot>.success>th{background-color:#dff0d8}.table-hover>tbody>tr>.success:hover,.table-hover>tbody>.success:hover>td,.table-hover>tbody>.success:hover>th{background-color:#d0e9c6}.table>thead>tr>.danger,.table>tbody>tr>.danger,.table>tfoot>tr>.danger,.table>thead>.danger>td,.table>tbody>.danger>td,.table>tfoot>.danger>td,.table>thead>.danger>th,.table>tbody>.danger>th,.table>tfoot>.danger>th{background-color:#f2dede}.table-hover>tbody>tr>.danger:hover,.table-hover>tbody>.danger:hover>td,.table-hover>tbody>.danger:hover>th{background-color:#ebcccc}.table>thead>tr>.warning,.table>tbody>tr>.warning,.table>tfoot>tr>.warning,.table>thead>.warning>td,.table>tbody>.warning>td,.table>tfoot>.warning>td,.table>thead>.warning>th,.table>tbody>.warning>th,.table>tfoot>.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>.warning:hover,.table-hover>tbody>.warning:hover>td,.table-hover>tbody>.warning:hover>th{background-color:#faf2cc}@media(max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#fff}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;-moz-osx-font-smoothing:grayscale}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn:first-child>.btn{margin-right:-1px}.input-group-btn:last-child>.btn{margin-left:-1px}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child th,.panel>.table>tbody:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,tr.visible-xs,th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm,tr.visible-sm,th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md,tr.visible-md,th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg,tr.visible-lg,th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}table.hidden-xs{display:table}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs,tr.hidden-xs,th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,tr.hidden-xs.hidden-md,th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}table.hidden-sm{display:table}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm,tr.hidden-sm,th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,tr.hidden-sm.hidden-md,th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}table.hidden-md{display:table}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs,tr.hidden-md.hidden-xs,th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,tr.hidden-md.hidden-sm,th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md,tr.hidden-md,th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg,tr.hidden-md.hidden-lg,th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}table.hidden-lg{display:table}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md,tr.hidden-lg.hidden-md,th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg,tr.hidden-lg,th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print,tr.visible-print,th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print,tr.hidden-print,th.hidden-print,td.hidden-print{display:none!important}}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/help/css/style.css
===================================================================
--- trunk/tutti-ui-swing/src/main/help/css/style.css 2014-01-16 23:29:24 UTC (rev 1497)
+++ trunk/tutti-ui-swing/src/main/help/css/style.css 2014-01-17 09:45:39 UTC (rev 1498)
@@ -37,4 +37,11 @@
.brand {
padding-left: 40px !important;
background: url('../img/allegro_32.png') center left no-repeat;
-}
\ No newline at end of file
+}
+
+.dropdown-submenu{position:relative;}
+.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
+.dropdown-submenu:hover>.dropdown-menu{display:block;}
+.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}
+.dropdown-submenu:hover>a:after{border-left-color:#ffffff;}
+.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;}
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/help/export/accidentalCatch.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/accidentalCatch.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/accidentalCatch.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,7 @@
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;1393;Rejet mort;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;196;Femelle;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;220;10.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;299;1.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100007;11183;Brissopsis atlantica;;101;10.0;
Added: trunk/tutti-ui-swing/src/main/help/export/catch.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/catch.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/catch.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,7 @@
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;495;Abralia veranyi;|Commentaire Espèce Très gros;Vrac;1;;;Poids;kg;TG - Très gros;1;50.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;299;Longueur céphalothoracique (LC) - individu - céphalothorax - Mesure au mm par un observateur;10.0;1;10.0;mm;1.0;3;10.0;6.4942336;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;495;Abralia veranyi;|Commentaire Espèce Très gros;Vrac;1;;;Poids;kg;TG - Très gros;1;50.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;299;Longueur céphalothoracique (LC) - individu - céphalothorax - Mesure au mm par un observateur;11.0;2;3.0;mm;1.0;2;3.0;21.647446;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;495;Abralia veranyi;|;Vrac;1;;;Poids;kg;G - Gros;2;10.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;10.0;6.4942336;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;495;Abralia veranyi;;Hors Vrac;1;5.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;5.0;1.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;4626;Adamsia carciniopados;Commentaires benthos|;Vrac;1;;;Poids;kg;TG - Très gros;1;0.5;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;0.5;1.5153213;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;4626;Adamsia carciniopados;Commentaires benthos|;Vrac;1;;;Poids;kg;G - Gros;2;0.2;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;0.2;3.7883031;
Added: trunk/tutti-ui-swing/src/main/help/export/gearCaracteristics.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/gearCaracteristics.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/gearCaracteristics.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1 @@
+Annee;Serie;Serie_Partielle;Engin;Code_PMFM;Libelle_PMFM;Valeur
Added: trunk/tutti-ui-swing/src/main/help/export/individualObservation.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/individualObservation.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/individualObservation.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,17 @@
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100001;495;Abralia veranyi;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100001;495;Abralia veranyi;;299;10.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100001;495;Abralia veranyi;;198;TG - Très gros;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100002;495;Abralia veranyi;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100002;495;Abralia veranyi;;299;10.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100002;495;Abralia veranyi;;198;TG - Très gros;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100003;495;Abralia veranyi;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100003;495;Abralia veranyi;;299;10.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100003;495;Abralia veranyi;;198;TG - Très gros;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100004;495;Abralia veranyi;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100004;495;Abralia veranyi;;299;11.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100004;495;Abralia veranyi;;198;TG - Très gros;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100005;495;Abralia veranyi;;1433;299;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100005;495;Abralia veranyi;;299;11.0;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100005;495;Abralia veranyi;;198;TG - Très gros;
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;100006;495;Abralia veranyi;;220;5.0;
Added: trunk/tutti-ui-swing/src/main/help/export/marineLitter.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/marineLitter.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/marineLitter.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,2 @@
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire
+2014;Export Générique;1;SENSOR Micrel/NKE TPS 100;A;1;1;278970;"L3d Objets métalliques de grande taille - Barils, pièces de machinerie, appareils électriques, etc.";A: <5*5 cm= 25 cm2;2;10.0;Grille pains;
Added: trunk/tutti-ui-swing/src/main/help/export/operation.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/operation.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/operation.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,2 @@
+Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule
+2014;Export Générique;1;A;1;1;SENSOR Micrel/NKE TPS 100;278970;17/01/2014 00:00:00;41.3;1.5;17/01/2014 01:00:00;41.3;1.6;60;Strate 1D;NA;Localité 1D1;Y;Y;8363.0;NA;NA;NA;Ching-Maria VILLANUEVA|Joel VIGNEAU;005-07 (nat.) - NAVIRE OFIMER|FRA000868095 - THALASSA;;70.7;Y;60.7;Y;5.0;Y;5.0;N;;?;;?;65.0;Y;60.0;Y;60.0;Y;5.0;Y;0.0;Y;0.0;Y;0.7;Y;0.7;Y;0.7;Y;0.0;Y;0.0;Y;0.0;Y;10.0;Y;
Added: trunk/tutti-ui-swing/src/main/help/export/parameter.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/parameter.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/parameter.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,8 @@
+Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur
+2014;Export Générique;1;A;1;1;833;Ouverture verticale (chalut ou drague) - opération - totale - Instrument de bord;2.0;
+2014;Export Générique;1;A;1;1;828;Ouverture Horizontale aux pointes d'ailes - opération - totale - Instrument de bord;3.0;
+2014;Export Générique;1;A;1;1;905;Longueur d'un bras - engin - bras - Inconnue;5.0;
+2014;Export Générique;1;A;1;1;826;Longueur des funes - opération - totale - Instrument de bord;6.0;
+2014;Export Générique;1;A;1;1;863;"Température - masse d'eau, eau brute - Fond début de pêche - Instrument de bord";10.0;
+2014;Export Générique;1;A;1;1;862;"Température - masse d'eau, eau brute - Fond fin de pêche - Instrument de bord";9.0;
+2014;Export Générique;1;A;1;1;173;"Profondeur fond - masse d'eau, eau brute - totale - Inconnue";100.0;
Added: trunk/tutti-ui-swing/src/main/help/export/species.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/species.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/species.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,4 @@
+Id;Code_Rubin;Nom Scientifique;Code campagne
+495;ABRLVER;Abralia veranyi;ABRAVER;
+4626;ADAMCAR;Adamsia carciniopados;;
+11183;;Brissopsis atlantica;;
Added: trunk/tutti-ui-swing/src/main/help/export/survey.csv
===================================================================
--- trunk/tutti-ui-swing/src/main/help/export/survey.csv (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/export/survey.csv 2014-01-17 09:45:39 UTC (rev 1498)
@@ -0,0 +1,2 @@
+Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire
+2014;Export Générique;1;278970;FRA;CGFS - Manche Est / Sud Mer du Nord;Export Générique_2014_1;;14/01/2014 00:00:00;La Barbotière (Gujan-Mestras);29/01/2014 00:00:00;Etang de Palo;Adrian LEVREL|Alain BISEAU;Alain BISEAU|Alain TETARD;;
Modified: trunk/tutti-ui-swing/src/main/help/fr/genericExport.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/genericExport.html 2014-01-16 23:29:24 UTC (rev 1497)
+++ trunk/tutti-ui-swing/src/main/help/fr/genericExport.html 2014-01-17 09:45:39 UTC (rev 1498)
@@ -66,15 +66,15 @@
└── survey.csv</pre>
<h2>Fichier accidentalCatch.csv</h2>
<p>
- Ce fichier contient les données de <strong>Captures accidentelles</strong>.
+ Ce fichier contient les <strong>Captures accidentelles</strong>.
</p>
<h3>Entête du fichier</h3>
<pre>
Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/accidentalCatch.csv" target="export">accidentalCatch.csv</a> </p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -84,23 +84,24 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
<tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
<tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
<tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
- <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
- <tr><td>BatchId</td><td>Opération > Observation individuelles</td><td>Id technique</td><td></td></tr>
- <tr><td>ReferenceTaxonId</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
- <tr><td>ReferenceTaxonName</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
- <tr><td>Commentaire</td><td>Opération > Observation individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
- <tr><td>CaracteristicId</td><td>Opération > Observation individuelles</td><td>Tableau > Caractéristique</td><td></td></tr>
- <tr><td>CaracteristicValue</td><td>Opération > Observation individuelles</td><td>Tableau > Valeur</td><td></td></tr>
+ <tr class='danger'><td>Navire</td><td>Opération</td><td>Navire</td><td><strong>A supprimer?</strong></td></tr>
+ <tr class='active'><td>BatchId</td><td>Opération > Capture</td><td>Numéro de lôt de capture</td><td>Id technique non visible à l'écran</td></tr>
+ <tr><td>ReferenceTaxonId</td><td>Opération > Observations individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>ReferenceTaxonName</td><td>Opération > Observations individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Observations individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
+ <tr><td>CaracteristicId</td><td>Opération > Observations individuelles</td><td>Tableau > Autres Caractéristiques > Caractéristique</td><td>(1)</td></tr>
+ <tr><td>CaracteristicValue</td><td>Opération > Observations individuelles</td><td>Tableau > Autres Caractéristiques > Valeur</td><td>(1)</td></tr>
</tbody>
</table>
+ <p><strong>(1)</strong> On retrouve aussi les caractéristiques définies dans le protocole > Caractéristiques > Observations individuelles qui sont des colonnes du tableau</p>
<h2>Fichier catch.csv</h2>
<p>
Ce fichier contient les données des <strong>Captures espèces et benthos</strong>.
@@ -109,9 +110,9 @@
<pre>
Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/catch.csv" target="export">catch.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -121,7 +122,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -129,7 +130,7 @@
<tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
<tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
- <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr class='danger'><td>Navire</td><td>Opération</td><td>Navire</td><td><strong>A supprimer?</strong></td></tr>
<tr><td>Taxon</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Espèce</td><td></td></tr>
<tr><td>Nom_scientifique</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Espèce</td><td></td></tr>
<tr><td>Commentaire</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Commentaire</td><td></td></tr>
@@ -161,9 +162,9 @@
<pre>
Annee;Serie;Serie_Partielle;Engin;Code_PMFM;Libelle_PMFM;Valeur</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/gearCaracteristics.csv" target="export">gearCaracteristics.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -173,7 +174,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -191,9 +192,9 @@
<pre>
Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/individualObservation.csv" target="export">individualObservation.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -203,7 +204,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -211,13 +212,13 @@
<tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
<tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
- <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
- <tr><td>BatchId</td><td>Opération > Observation individuelles</td><td>Id technique</td><td></td></tr>
- <tr><td>ReferenceTaxonId</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
- <tr><td>ReferenceTaxonName</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
- <tr><td>Commentaire</td><td>Opération > Observation individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
- <tr><td>CaracteristicId</td><td>Opération > Observation individuelles</td><td>Tableau > Caractéristique</td><td></td></tr>
- <tr><td>CaracteristicValue</td><td>Opération > Observation individuelles</td><td>Tableau > Valeur</td><td></td></tr>
+ <tr class='danger'><td>Navire</td><td>Opération</td><td>Navire</td><td><strong>A supprimer?</strong></td></tr>
+ <tr><td>BatchId</td><td>Opération > Observations individuelles</td><td>Id technique</td><td></td></tr>
+ <tr><td>ReferenceTaxonId</td><td>Opération > Observations individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>ReferenceTaxonName</td><td>Opération > Observations individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Observations individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
+ <tr><td>CaracteristicId</td><td>Opération > Observations individuelles</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>CaracteristicValue</td><td>Opération > Observations individuelles</td><td>Tableau > Valeur</td><td></td></tr>
</tbody>
</table>
@@ -229,9 +230,9 @@
<pre>
Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/marineLitter.csv" target="export">marineLitter.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -241,7 +242,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -249,7 +250,7 @@
<tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
<tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
- <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr class='danger'><td>Navire</td><td>Opération</td><td>Navire</td><td><strong>A supprimer?</strong></td></tr>
<tr><td>MarineLitterCategory</td><td>Opération > Macro-déchet</td><td>Tableau > Catégorie</td><td></td></tr>
<tr><td>MarineLitterSizeCategory</td><td>Opération > Macro-déchet</td><td>Tableau > Catégorie de taille</td><td></td></tr>
<tr><td>Number</td><td>Opération > Macro-déchet</td><td>Tableau > Nombre</td><td></td></tr>
@@ -266,9 +267,9 @@
<pre>
Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/operation.csv" target="export">operation.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -278,7 +279,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -354,9 +355,9 @@
<h3>Entête du fichier</h3>
<pre>Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/parameter.csv" target="export">parameter.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -366,7 +367,7 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
<tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
<tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
@@ -386,9 +387,9 @@
<h3>Entête du fichier</h3>
<pre>Id;Code_Rubin;Nom Scientifique;Code campagne</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/species.csv" target="export">species.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -413,9 +414,9 @@
<pre>
Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire</pre>
<h3>Exemple</h3>
- <strong>TODO</strong>
+ <p>Voir le fichier <a href="../export/survey.csv" target="export">survey.csv</a></p>
<h3>Description des colonnes</h3>
- <table class='table table-bordered table-hover table-striped'>
+ <table class='table table-bordered table-striped table-hover table-condensed'>
<thead>
<tr>
<th>Nom de colonne</th>
@@ -425,24 +426,23 @@
</tr>
</thead>
<tbody>
- <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
- <tr><td>Serie</td><td>Campagne</td><td>Nom série</td><td></td></tr>
+ <tr><td>Annee</td><td>Campagne</td><td>Date de début</td><td>format YYYY</td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
<tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
- <tr><td>Navire</td><td>Campagne</td><td>Navire</td><td></td></tr>
+ <tr><td>Navire</td><td>Campagne</td><td>Navire</td><td>Code</td></tr>
<tr><td>Pays</td><td>Campagne</td><td>Pays</td><td>Provient de la configuration</td></tr>
- <tr><td>Zone_Etude</td><td>Campagne</td><td>Zone d'étude</td><td></td></tr>
- <tr><td>Campagne</td><td>Campagne</td><td>TODO</td><td></td></tr>
+ <tr><td>Zone_Etude</td><td>Série de Campagne</td><td>Zone</td><td></td></tr>
+ <tr><td>Campagne</td><td>Campagne</td><td>Nom</td><td></td></tr>
<tr><td>Id_Sismer</td><td>Campagne</td><td>TODO</td><td></td></tr>
- <tr><td>Date_Deb_Campagne</td><td>Campagne</td><td>Date de début</td><td></td></tr>
- <tr><td>Port_Deb_Campagne</td><td>Campagne</td><td>Port de début</td><td></td></tr>
- <tr><td>Date_Fin_Campagne</td><td>Campagne</td><td>Date de fin</td><td></td></tr>
- <tr><td>Port_Fin_Campagne</td><td>Campagne</td><td>Port de fin</td><td></td></tr>
- <tr><td>Chef_Mission</td><td>Campagne</td><td>Chef de mission</td><td></td></tr>
- <tr><td>Resp_Salle_Tri</td><td>Campagne</td><td>Responsable salle de tri</td><td></td></tr>
+ <tr><td>Date_Deb_Campagne</td><td>Campagne</td><td>Date de début</td><td>format JJ/MM/YYYY HH:MM:ss</td></tr>
+ <tr><td>Port_Deb_Campagne</td><td>Campagne</td><td>Port de départ</td><td></td></tr>
+ <tr><td>Date_Fin_Campagne</td><td>Campagne</td><td>Date de fin</td><td>format JJ/MM/YYYY HH:MM:ss</td></tr>
+ <tr><td>Port_Fin_Campagne</td><td>Campagne</td><td>Port d'arrivée</td><td></td></tr>
+ <tr><td>Chef_Mission</td><td>Campagne</td><td>Chef(s) de mission</td><td>Liste (séparateur <strong>|</strong>)</td></tr>
+ <tr><td>Resp_Salle_Tri</td><td>Campagne</td><td>Responsable(s) de salle de tri</td><td>Liste (séparateur <strong>|</strong>)</td></tr>
<tr><td>Commentaire</td><td>Campagne</td><td>Commentaire</td><td></td></tr>
</tbody>
</table>
-
</div>
</body>
</html>
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/help/fr/navbar.js
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/navbar.js 2014-01-16 23:29:24 UTC (rev 1497)
+++ trunk/tutti-ui-swing/src/main/help/fr/navbar.js 2014-01-17 09:45:39 UTC (rev 1498)
@@ -21,10 +21,10 @@
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
-document.write('<div class="navbar navbar-inverse navbar-fixed-top">');
+document.write('<div class="navbar navbar-default navbar-inverse navbar-fixed-top">');
document.write(' <div class="navbar-inner">');
-document.write(' <div class="container" id="menu"><a class="brand" href="index.html">Allegro Campagne</a>');
-document.write(' <ul class="nav">');
+document.write(' <div class="container" id="menu"><a class="navbar-brand" href="index.html">Allegro Campagne</a>');
+document.write(' <ul class="nav navbar-nav">');
document.write(' <li class="dropdown">');
document.write(' <a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">');
document.write(' Table des matières <strong class="caret"></strong>');
Modified: trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js
===================================================================
--- trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js 2014-01-16 23:29:24 UTC (rev 1497)
+++ trunk/tutti-ui-swing/src/main/help/js/bootstrap.min.js 2014-01-17 09:45:39 UTC (rev 1498)
@@ -1,7 +1,7 @@
-/** %%Ignore-License%%
-* Bootstrap.js by @fat & @mdo
-* plugins: bootstrap-transition.js, bootstrap-modal.js, bootstrap-dropdown.js, bootstrap-scrollspy.js, bootstrap-tab.js, bootstrap-tooltip.js, bootstrap-popover.js, bootstrap-affix.js, bootstrap-alert.js, bootstrap-button.js, bootstrap-collapse.js, bootstrap-carousel.js, bootstrap-typeahead.js
-* Copyright 2012 Twitter, Inc.
-* http://www.apache.org/licenses/LICENSE-2.0.txt
-*/
-!function(a){a(function(){a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in").attr("aria-hidden",!1),b.enforceFocus(),c?b.$element.one(a.support.transition.end,function(){b.$element.focus().trigger("shown")}):b.$element.focus().trigger("shown")})},hide:function(b){b&&b.preventDefault();var c=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,this.escape(),a(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),a.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var b=this;a(document).on("focusin.modal",function(a){b.$element[0]!==a.target&&!b.$element.has(a.target).length&&b.$element.focus()})},escape:function(){var a=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(b){b.which==27&&a.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),b.hideModal()},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),b.hideModal()})},hideModal:function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?a.proxy(this.$element[0].focus,this.$element[0]):a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!b)return;e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b):b()):b&&b()}};var c=a.fn.modal;a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f).one("hide",function(){c.focus()})})}(window.jQuery),!function(a){function d(){a(".dropdown-backdrop").remove(),a(b).each(function(){e(a(this)).removeClass("open")})}function e(b){var c=b.attr("data-target"),d;c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,"")),d=c&&a(c);if(!d||!d.length)d=b.parent();return d}var b="[data-toggle=dropdown]",c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),f,g;if(c.is(".disabled, :disabled"))return;return f=e(c),g=f.hasClass("open"),d(),g||("ontouchstart"in document.documentElement&&a('<div class="dropdown-backdrop"/>').insertBefore(a(this)).on("click",d),f.toggleClass("open")),c.focus(),!1},keydown:function(c){var d,f,g,h,i,j;if(!/(38|40|27)/.test(c.keyCode))return;d=a(this),c.preventDefault(),c.stopPropagation();if(d.is(".disabled, :disabled"))return;h=e(d),i=h.hasClass("open");if(!i||i&&c.keyCode==27)return c.which==27&&h.find(b).focus(),d.click();f=a("[role=menu] li:not(.divider):visible a",h);if(!f.length)return;j=f.index(f.filter(":focus")),c.keyCode==38&&j>0&&j--,c.keyCode==40&&j<f.length-1&&j++,~j||(j=0),f.eq(j).focus()}};var f=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=f,this},a(document).on("click.dropdown.data-api",d).on("click.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle).on("keydown.dropdown.data-api",b+", [role=menu]",c.prototype.keydown)}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll-spy.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var c=a(this),d=c.data("target")||c.attr("href"),e=/^#\w/.test(d)&&a(d);return e&&e.length&&[[e.position().top+(!a.isWindow(b.$scrollElement.get(0))&&b.$scrollElement.scrollTop()),d]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu").length&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active:last a")[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),!function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f,g,h,i;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,g=this.options.trigger.split(" ");for(i=g.length;i--;)h=g[i],h=="click"?this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this)):h!="manual"&&(e=h=="hover"?"mouseenter":"focus",f=h=="hover"?"mouseleave":"blur",this.$element.on(e+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f+"."+this.type,this.options.selector,a.proxy(this.leave,this)));this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,this.$element.data(),b),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a.fn[this.type].defaults,d={},e;this._options&&a.each(this._options,function(a,b){c[a]!=b&&(d[a]=b)},this),e=a(b.currentTarget)[this.type](d).data(this.type);if(!e.options.delay||!e.options.delay.show)return e.show();clearTimeout(this.timeout),e.hoverState="in",this.timeout=setTimeout(function(){e.hoverState=="in"&&e.show()},e.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var b,c,d,e,f,g,h=a.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(h);if(h.isDefaultPrevented())return;b=this.tip(),this.setContent(),this.options.animation&&b.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,b[0],this.$element[0]):this.options.placement,b.detach().css({top:0,left:0,display:"block"}),this.options.container?b.appendTo(this.options.container):b.insertAfter(this.$element),c=this.getPosition(),d=b[0].offsetWidth,e=b[0].offsetHeight;switch(f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}this.applyPlacement(g,f),this.$element.trigger("shown")}},applyPlacement:function(a,b){var c=this.tip(),d=c[0].offsetWidth,e=c[0].offsetHeight,f,g,h,i;c.offset(a).addClass(b).addClass("in"),f=c[0].offsetWidth,g=c[0].offsetHeight,b=="top"&&g!=e&&(a.top=a.top+e-g,i=!0),b=="bottom"||b=="top"?(h=0,a.left<0&&(h=a.left*-2,a.left=0,c.offset(a),f=c[0].offsetWidth,g=c[0].offsetHeight),this.replaceArrow(h-d+f,f,"left")):this.replaceArrow(g-e,g,"top"),i&&c.offset(a)},replaceArrow:function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function e(){var b=setTimeout(function(){c.off(a.support.transition.end).detach()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.detach()})}var b=this,c=this.tip(),d=a.Event("hide");this.$element.trigger(d);if(d.isDefaultPrevented())return;return c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?e():c.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var b=this.$element[0];return a.extend({},typeof b.getBoundingClientRect=="function"?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(b){var c=b?a(b.currentTarget)[this.type](this._options).data(this.type):this;c.tip().hasClass("in")?c.hide():c.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),!function(a){var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=(typeof c.content=="function"?c.content.call(b[0]):c.content)||b.attr("data-content"),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),!function(a){var b=function(b,c){this.options=a.extend({},a.fn.affix.defaults,c),this.$window=a(window).on("scroll.affix.data-api",a.proxy(this.checkPosition,this)).on("click.affix.data-api",a.proxy(function(){setTimeout(a.proxy(this.checkPosition,this),1)},this)),this.$element=a(b),this.checkPosition()};b.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var b=a(document).height(),c=this.$window.scrollTop(),d=this.$element.offset(),e=this.options.offset,f=e.bottom,g=e.top,h="affix affix-top affix-bottom",i;typeof e!="object"&&(f=g=e),typeof g=="function"&&(g=e.top()),typeof f=="function"&&(f=e.bottom()),i=this.unpin!=null&&c+this.unpin<=d.top?!1:f!=null&&d.top+this.$element.height()>=b-f?"bottom":g!=null&&c<=g?"top":!1;if(this.affixed===i)return;this.affixed=i,this.unpin=i=="bottom"?d.top-c:null,this.$element.removeClass(h).addClass("affix"+(i?"-"+i:""))};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("affix"),f=typeof c=="object"&&c;e||d.data("affix",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.defaults={offset:0},a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery),!function(a){var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.alert.data-api",b,c.prototype.close)}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning||this.$element.hasClass("in"))return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),a.support.transition&&this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning||!this.$element.hasClass("in"))return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=a.extend({},a.fn.collapse.defaults,d.data(),typeof c=="object"&&c);e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();c[a(e).hasClass("in")?"addClass":"removeClass"]("collapsed"),a(e).collapse(f)})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(b){var c=this.getActiveIndex(),d=this;if(b>this.$items.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){d.to(b)}):c==b?this.pause().cycle():this.slide(b>c?"next":"prev",a(this.$items[b]))},pause:function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j;this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h](),j=a.Event("slide",{relatedTarget:e[0],direction:g});if(e.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")}));if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c),g=typeof c=="string"?c:f.slide;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),c.data()),g;e.carousel(f),(g=c.attr("data-slide-to"))&&e.data("carousel").pause().to(g).cycle(),b.preventDefault()})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=a(this.options.menu),this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:b.top+b.height,left:b.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(c=a.isFunction(this.source)?this.source(this.query,a.proxy(this.process,this)):this.source,c?this.process(c):this)},process:function(b){var c=this;return b=a.grep(b,function(a){return c.matcher(a)}),b=this.sorter(b),b.length?this.render(b.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("focus",a.proxy(this.focus,this)).on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",a.proxy(this.keydown,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this)).on("mouseleave","li",a.proxy(this.mouseleave,this))},eventSupported:function(a){var b=a in this.$element;return b||(this.$element.setAttribute(a,"return;"),b=typeof this.$element[a]=="function"),b},move:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}a.stopPropagation()},keydown:function(b){this.suppressKeyPressRepeat=~a.inArray(b.keyCode,[40,38,9,13,27]),this.move(b)},keypress:function(a){if(this.suppressKeyPressRepeat)return;this.move(a)},keyup:function(a){switch(a.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},focus:function(a){this.focused=!0},blur:function(a){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(a){a.stopPropagation(),a.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(b){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")},mouseleave:function(a){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var c=a.fn.typeahead;a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},a.fn.typeahead.Constructor=b,a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this},a(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;c.typeahead(c.data())})}(window.jQuery)
\ No newline at end of file
+/*!
+ * Bootstrap v3.0.3 (http://getbootstrap.com)
+ * Copyright 2013 Twitter, Inc.
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
\ No newline at end of file
1
0
Jan. 16, 2014
Author: tchemit
Date: 2014-01-17 00:29:24 +0100 (Fri, 17 Jan 2014)
New Revision: 1497
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1497
Log:
refs #3939: [SPECS] Fournir la documentation sur le format g?\195?\169n?\195?\169rique
Added:
trunk/tutti-ui-swing/src/main/help/fr/genericExport.html
Modified:
trunk/tutti-ui-swing/src/main/help/fr/index.html
trunk/tutti-ui-swing/src/main/help/fr/navbar.js
Added: trunk/tutti-ui-swing/src/main/help/fr/genericExport.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/genericExport.html (rev 0)
+++ trunk/tutti-ui-swing/src/main/help/fr/genericExport.html 2014-01-16 23:29:24 UTC (rev 1497)
@@ -0,0 +1,448 @@
+<!DOCTYPE html>
+<html lang="fr">
+<head><!--
+ #%L
+ Tutti :: UI
+ $Id$
+ $HeadURL: https://svn.forge.codelutin.com/svn/tutti/trunk/tutti-ui-swing/src/main/hel… $
+ %%
+ Copyright (C) 2012 - 2013 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%
+ -->
+ <meta charset="utf-8">
+
+ <title>Allegro Campagne - Export générique</title>
+ <link href="../css/bootstrap.min.css" rel="stylesheet">
+ <link href="../css/style.css" rel="stylesheet">
+ <script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
+ <script type="text/javascript" src="../js/bootstrap.min.js"></script>
+ <script type="text/javascript" src="navbar.js"></script>
+</head>
+<body>
+
+<div class="container">
+
+ <div class="page-header">
+ <h1>Export générique</h1>
+ </div>
+
+ <p>Cette page décrit le format d'export générique.</p>
+
+ <p>
+ Pour chaque fichier et colonne, on expliquera comment retrouver la
+ données dans les écrans de l'application.
+ </p>
+
+ <h2>Présentation du format d'export générique</h2>
+
+ <p>
+ L'export générique est une archive zip composée d'un unique dossier
+ avec les fichiers suivants :
+ </p>
+ <pre>
+exportCruise-100000
+├── accidentalCatch.csv
+├── catch.csv
+├── gearCaracteristics.csv
+├── individualObservation.csv
+├── marineLitter.csv
+├── operation.csv
+├── parameter.csv
+├── species.csv
+└── survey.csv</pre>
+ <h2>Fichier accidentalCatch.csv</h2>
+ <p>
+ Ce fichier contient les données de <strong>Captures accidentelles</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr><td>BatchId</td><td>Opération > Observation individuelles</td><td>Id technique</td><td></td></tr>
+ <tr><td>ReferenceTaxonId</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>ReferenceTaxonName</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Observation individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
+ <tr><td>CaracteristicId</td><td>Opération > Observation individuelles</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>CaracteristicValue</td><td>Opération > Observation individuelles</td><td>Tableau > Valeur</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier catch.csv</h2>
+ <p>
+ Ce fichier contient les données des <strong>Captures espèces et benthos</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr><td>Taxon</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Nom_scientifique</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Commentaire</td><td></td></tr>
+ <tr><td>V_HV</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Poids Vrac</td><td></td></tr>
+ <tr><td>Num_Ordre_V_HV_H2</td><td>Opération > Captures > Espèces ou Benthos</td><td>Numéro ordre du lot</td><td></td></tr>
+ <tr><td>Tot_V_HV</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Vrac (sur le lôt père)</td><td></td></tr>
+ <tr><td>Ech_V_HV</td><td>Opération > Captures > Espèces ou Benthos</td><td>Tableau > Poids sous échantillonné</td><td></td></tr>
+ <tr><td>Type_Volume_Poids_V_HV</td><td>Opération > Captures > Espèces ou Benthos</td><td>TODO</td><td></td></tr>
+ <tr><td>Unite_Volume_Poids_V_HV</td><td>Opération > Captures > Espèces ou Benthos</td><td>TODO</td><td></td></tr>
+ <tr><td>(1)</td><td>Opération > Captures > Espèces ou Benthos</td><td>Catégorisations</td><td></td></tr>
+ <tr><td>Code_Longueur</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>TODO</td><td></td></tr>
+ <tr><td>Libelle_Longueur</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>TODO</td><td></td></tr>
+ <tr><td>Taille</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>TODO</td><td></td></tr>
+ <tr><td>NumOrdre_Taille_H2</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>TODO</td><td></td></tr>
+ <tr><td>Poids_Classe_Taille</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>Poids</td><td></td></tr>
+ <tr><td>Unite_Taille</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>Classe de taille</td><td></td></tr>
+ <tr><td>Precision_Mesure</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>Précision</td><td></td></tr>
+ <tr><td>Nbr</td><td>Opération > Captures > Espèces ou Benthos > Mensurations</td><td>Nombre d'individus</td><td></td></tr>
+ <tr><td>Poids_Reference</td><td>Opération > Captures > Espèces ou Benthos</td><td>Poids de référence</td><td></td></tr>
+ <tr><td>Coef_Elev_Espece_Capture</td><td>Opération > Captures > Espèces ou Benthos</td><td>coefficient d'élévation à la capture totale</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier gearCaracteristics.csv</h2>
+ <p>
+ Ce fichier contient les données de <strong>mises en oeuvre de l'engin</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Engin;Code_PMFM;Libelle_PMFM;Valeur</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_PMFM</td><td>Opération > Mise en oeuvre de l'engin</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>Libelle_PMFM</td><td>Opération > Mise en oeuvre de l'engin</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>Valeur</td><td>Opération > Mise en oeuvre de l'engin</td><td>Tableau > Valeur</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier individualObservation.csv</h2>
+ <p>
+ Ce fichier contient les données de <strong>Observations individuelles</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Commentaire;CaracteristicId;CaracteristicValue</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr><td>BatchId</td><td>Opération > Observation individuelles</td><td>Id technique</td><td></td></tr>
+ <tr><td>ReferenceTaxonId</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>ReferenceTaxonName</td><td>Opération > Observation individuelles</td><td>Tableau > Espèce</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Observation individuelles</td><td>Tableau > Commentaire</td><td></td></tr>
+ <tr><td>CaracteristicId</td><td>Opération > Observation individuelles</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>CaracteristicValue</td><td>Opération > Observation individuelles</td><td>Tableau > Valeur</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier marineLitter.csv</h2>
+ <p>
+ Ce fichier contient les données de <strong>Macro dechêts</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Engin;Code_station;Numero_Trait;Poche;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Commentaire</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr><td>MarineLitterCategory</td><td>Opération > Macro-déchet</td><td>Tableau > Catégorie</td><td></td></tr>
+ <tr><td>MarineLitterSizeCategory</td><td>Opération > Macro-déchet</td><td>Tableau > Catégorie de taille</td><td></td></tr>
+ <tr><td>Number</td><td>Opération > Macro-déchet</td><td>Tableau > Nombre</td><td></td></tr>
+ <tr><td>Weight</td><td>Opération > Macro-déchet</td><td>Tableau > Poids</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération > Macro-déchet</td><td>Tableau > Commentaire</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier operation.csv</h2>
+ <p>
+ Ce fichier contient les données du <strong>Trait</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Navire</td><td>Opération</td><td>Navire</td><td></td></tr>
+ <tr><td>DateDeb_Op</td><td>Opération</td><td>Date début</td><td></td></tr>
+ <tr><td>LatDeb</td><td>Opération</td><td>Latitude début</td><td></td></tr>
+ <tr><td>LongDeb</td><td>Opération</td><td>Longitude début</td><td></td></tr>
+ <tr><td>DateFin_Op</td><td>Opération</td><td>Date fin</td><td></td></tr>
+ <tr><td>LatFin</td><td>Opération</td><td>Latitude fin</td><td></td></tr>
+ <tr><td>LongFin</td><td>Opération</td><td>Longitude fin</td><td></td></tr>
+ <tr><td>Duree</td><td>Opération</td><td>Durée du trait</td><td></td></tr>
+ <tr><td>Strate</td><td>Opération</td><td>Strate</td><td></td></tr>
+ <tr><td>Sous-Strate</td><td>Opération</td><td>Sous strate</td><td></td></tr>
+ <tr><td>Localite</td><td>Opération</td><td>Localité</td><td></td></tr>
+ <tr><td>Validite_OP</td><td>Opération</td><td>Opération valide</td><td></td></tr>
+ <tr><td>Rectiligne</td><td>Opération</td><td>Opération rectiligne</td><td></td></tr>
+ <tr><td>Distance</td><td>Opération</td><td>Distance</td><td></td></tr>
+ <tr><td>Ouv_Verticale</td><td>Opération</td><td></td><td>TODO A supprimer car c'est une caractéristique du trait</td></tr>
+ <tr><td>Ouv_Horizontale_Ailes</td><td>Opération</td><td></td><td>TODO A supprimer car c'est une caractéristique du trait</td></tr>
+ <tr><td>Ouv_Horizontale_Panneaux</td><td>Opération</td><td></td><td>TODO A supprimer car c'est une caractéristique du trait</td></tr>
+ <tr><td>Saisisseur</td><td>Opération</td><td>Saisisseur</td><td></td></tr>
+ <tr><td>NavireAssocie</td><td>Opération</td><td>Navire associé</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Opération</td><td>Commentaire</td><td></td></tr>
+ <tr><td>Poids_Total</td><td>Opération > Capture > Résumé</td><td>Poids total capture</td><td></td></tr>
+ <tr><td>Poids_Total_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Vrac</td><td>Opération > Capture > Résumé</td><td>Poids total Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_Vrac_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_HorsVrac</td><td>Opération > Capture > Résumé</td><td>Poids total Hors Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_HorsVrac_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total Hors Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Non_Trie</td><td>Opération > Capture > Résumé</td><td>Poids total Non trié</td><td></td></tr>
+ <tr><td>Poids_Total_Non_Trie_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total Non trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Tremis</td><td>Opération > Capture > Résumé</td><td>Poids total Trémis</td><td></td></tr>
+ <tr><td>Poids_Total_Tremis_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total Trémis calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Carroussel</td><td>Opération > Capture > Résumé</td><td>Poids total Carroussel</td><td></td></tr>
+ <tr><td>Poids_Total_Carroussel_Calcule</td><td>Opération > Capture > Résumé</td><td>Poids total Carroussel calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece</td><td>Opération > Capture > Espèce</td><td>Poids total</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vrac</td><td>Opération > Capture > Espèce</td><td>Poids total Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vrac_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vrac_Trie</td><td>Opération > Capture > Espèce</td><td>Poids total Vrac trié</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vrac_Trie_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total Vrac trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_HorsVrac</td><td>Opération > Capture > Espèce</td><td>Poids total Hors Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_HorsVrac_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total Hors Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Inerte_Trie</td><td>Opération > Capture > Espèce</td><td>Poids total interte trié</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Inerte_Trie_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total interte trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vivant_non_detaille_trie</td><td>Opération > Capture > Espèce</td><td>Poids total no détaillé trié</td><td></td></tr>
+ <tr><td>Poids_Total_Espece_Vivant_non_detaille_trie_Calcule</td><td>Opération > Capture > Espèce</td><td>Poids total no détaillé trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos</td><td>Opération > Capture > Benthos</td><td>Poids total</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vrac</td><td>Opération > Capture > Benthos</td><td>Poids total Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vrac_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vrac_Trie</td><td>Opération > Capture > Benthos</td><td>Poids total Vrac trié</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vrac_Trie_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total Vrac trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_HorsVrac</td><td>Opération > Capture > Benthos</td><td>Poids total Hors Vrac</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_HorsVrac_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total Hors Vrac calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Inerte_Trie</td><td>Opération > Capture > Benthos</td><td>Poids total interte trié</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Inerte_Trie_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total interte trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vivant_non_detaille_trie</td><td>Opération > Capture > Benthos</td><td>Poids total no détaillé trié</td><td></td></tr>
+ <tr><td>Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule</td><td>Opération > Capture > Benthos</td><td>Poids total no détaillé trié calculé</td><td></td></tr>
+ <tr><td>Poids_Total_Macro_Dechet</td><td>Opération > Capture > Macro déchêt</td><td>Poids total</td><td></td></tr>
+ <tr><td>Poids_Total_Macro_Dechet_Calcule</td><td>Opération > Capture > Macro déchêt</td><td>Poids total calculé</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier parameter.csv</h2>
+ <p>
+ Ce fichier contient les des <strong>Caractéristiques du trait</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>Annee;Serie;Serie_Partielle;Code_station;Numero_Trait;Poche;Code_PMFM;Libelle_PMFm;Valeur</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Engin</td><td>Opération</td><td>Engin</td><td></td></tr>
+ <tr><td>Code_station</td><td>Opération</td><td>Code station</td><td></td></tr>
+ <tr><td>Numero_Trait</td><td>Opération</td><td>Numéro de trait</td><td></td></tr>
+ <tr><td>Poche</td><td>Opération</td><td>Numéro de pôche</td><td></td></tr>
+ <tr><td>Code_PMFM</td><td>Code du pmfm</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>Libelle_PMFm</td><td>Libellé du psfm</td><td>Tableau > Caractéristique</td><td></td></tr>
+ <tr><td>Valeur</td><td>Valeur</td><td>Tableau > Valeur</td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier species.csv</h2>
+ <p>
+ Ce fichier contient l'ensemble des espèces rencontrées dans les captures du trait.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>Id;Code_Rubin;Nom Scientifique;Code campagne</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Ecran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Id</td><td>Identifiant du taxon</td><td></td><td></td></tr>
+ <tr><td>Code_Rubin</td><td>RefTaxon</td><td></td><td></td></tr>
+ <tr><td>Nom Scientifique</td><td></td><td></td><td></td></tr>
+ <tr><td>Code campagne</td><td>Code campagne renseigné dans le protocole</td><td></td><td></td></tr>
+ </tbody>
+ </table>
+
+ <h2>Fichier survey.csv</h2>
+ <p>
+ Ce fichier contient les données de la <strong>Campagne</strong>.
+ </p>
+ <h3>Entête du fichier</h3>
+ <pre>
+Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire</pre>
+ <h3>Exemple</h3>
+ <strong>TODO</strong>
+ <h3>Description des colonnes</h3>
+ <table class='table table-bordered table-hover table-striped'>
+ <thead>
+ <tr>
+ <th>Nom de colonne</th>
+ <th>Écran</th>
+ <th>Champs</th>
+ <th>Commentaire</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Annee</td><td>Campagne</td><td>Année</td><td></td></tr>
+ <tr><td>Serie</td><td>Campagne</td><td>Nom série</td><td></td></tr>
+ <tr><td>Serie_Partielle</td><td>Campagne</td><td>Série partielle</td><td></td></tr>
+ <tr><td>Navire</td><td>Campagne</td><td>Navire</td><td></td></tr>
+ <tr><td>Pays</td><td>Campagne</td><td>Pays</td><td>Provient de la configuration</td></tr>
+ <tr><td>Zone_Etude</td><td>Campagne</td><td>Zone d'étude</td><td></td></tr>
+ <tr><td>Campagne</td><td>Campagne</td><td>TODO</td><td></td></tr>
+ <tr><td>Id_Sismer</td><td>Campagne</td><td>TODO</td><td></td></tr>
+ <tr><td>Date_Deb_Campagne</td><td>Campagne</td><td>Date de début</td><td></td></tr>
+ <tr><td>Port_Deb_Campagne</td><td>Campagne</td><td>Port de début</td><td></td></tr>
+ <tr><td>Date_Fin_Campagne</td><td>Campagne</td><td>Date de fin</td><td></td></tr>
+ <tr><td>Port_Fin_Campagne</td><td>Campagne</td><td>Port de fin</td><td></td></tr>
+ <tr><td>Chef_Mission</td><td>Campagne</td><td>Chef de mission</td><td></td></tr>
+ <tr><td>Resp_Salle_Tri</td><td>Campagne</td><td>Responsable salle de tri</td><td></td></tr>
+ <tr><td>Commentaire</td><td>Campagne</td><td>Commentaire</td><td></td></tr>
+ </tbody>
+ </table>
+
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: trunk/tutti-ui-swing/src/main/help/fr/genericExport.html
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/tutti-ui-swing/src/main/help/fr/index.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/index.html 2014-01-16 17:22:59 UTC (rev 1496)
+++ trunk/tutti-ui-swing/src/main/help/fr/index.html 2014-01-16 23:29:24 UTC (rev 1497)
@@ -146,6 +146,7 @@
<li><a href="manageTemporaryReferential.html">Gestionnaire de
référentiels temporaires</a></li>
<li><a href="report.html">Générer des rapports</a></li>
+ <li><a href="genericExport.html">Export générique</a></li>
</ul>
</li>
<li>
Modified: trunk/tutti-ui-swing/src/main/help/fr/navbar.js
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/navbar.js 2014-01-16 17:22:59 UTC (rev 1496)
+++ trunk/tutti-ui-swing/src/main/help/fr/navbar.js 2014-01-16 23:29:24 UTC (rev 1497)
@@ -99,6 +99,7 @@
document.write(' <li><a href="config.html">Configuration</a></li>');
document.write(' <li><a href="manageTemporaryReferential.html">Gestionnaire de référentiels temporaires</a></li>');
document.write(' <li><a href="report.html">Générer des rapports</a></li>');
+document.write(' <li><a href="genericExport.html">Export générique</a></li>');
document.write(' </ul>');
document.write(' </li>');
document.write(' <li class="dropdown-submenu">');
1
0
The Tutti team is pleased to announce the tutti-3.0 release!
Outil de saisie de données d'opérations et de captures au
cours des campagnes halieutiques.
Documentation of the project can be found here:
http://forge.codelutin.com/projects/tutti
Changes
-------
Changes in this version include:
New features:
o [TECH] Améliorer les temps d'éxecution Issue: 2865. Thanks to Tony Chemit. Resolved by vbadts.
o [EXPORT SUMATRA] le nombre d'individus dans la capture est faux Issue: 3320. Thanks to Tony Chemit. Resolved by tchemit.
o [CAPTURE] pouvoir choisir dans la configuration l'unité de saisie des poids (espèces benthos macro déchets) kg ou g et donc adapter les intitulés des colonnes Issue: 2619. Thanks to Vincent BADTS. Resolved by tchemit.
o [ERGO] Permettre à l'utilisateur d'ordonner les attributs à afficher, et pas seulement le premier à afficher Issue: 2455. Thanks to Vincent BADTS. Resolved by tchemit.
o [PROTOCOLE] tableau espèces : impossible de sélectionner plusieurs lignes d'espèces pour supprimer Issue: 2458. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAPTURE] gestion des poids dans le tableau Issue: 2537. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAPTURE] à la création d'un lot, scanner le protocole et proposer la catégorisation du protocole Issue: 2843. Thanks to Vincent BADTS. Resolved by tchemit.
o [MENSURATION] ajouter bouton "réinitialiser" dans l'écran pour effacer toutes les classes de tailles et les nombres Issue: 2852. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAPTURE] pouvoir modifier la valeur de la catégorisation d'un lot Issue: 2621. Thanks to Vincent BADTS. Resolved by tchemit.
o [MENSURATION] - Renseigner le champ "Type de mesure" à la saisie des mensuration avec la valeur du lot frère Issue: 2260. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAPTURE] pouvoir saisir aussi le nombre dès la création d'un lot Issue: 2714. Thanks to Vincent BADTS. Resolved by tchemit.
o [ESPECES] pouvoir saisir plusieurs lots pères sans refermer le formulaire Issue: 2172. Thanks to Vincent BADTS. Resolved by tchemit.
o [TECH] Modification de l'url de mise à jour des données Issue: 4125. Thanks to Christian BONNET. Resolved by cbonnet.
o [TECH] Faciliter l'import d'une nouvelle base Issue: 2840. Thanks to Kevin Morin. Resolved by tchemit.
o [ERGO] - Lisibilité des tableaux (captures, protocole) Issue: 2545. Thanks to Christian BONNET. Resolved by tchemit.
o [DONNEES INDIVIDUELLES] liste des espèces possibles. Saisie au km Issue: 2443. Thanks to Vincent BADTS. Resolved by tchemit.
o [DONNEES INDIVIDUELLES] gérer les colonnes du tableau dans le protocole Issue: 2330. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAPTURES] - Ajouter une décimale aux poids (4 décimales pour les poids en kg et une décimale pour les grammes) Issue: 2476. Thanks to Vincent BADTS. Resolved by tchemit.
o [MENSURATION] manque information sur l'espèce en cours de saisie Issue: 2435. Thanks to Vincent BADTS. Resolved by tchemit.
o Compléter l'aide en ligne Issue: 3878. Thanks to Tony Chemit. Resolved by tchemit.
o [MACRO-DECHETS] Permettre la saisie de plusieurs macro-déchets sans avoir à fermer l'écran de création Issue: 3295. Thanks to Tony Chemit. Resolved by tchemit.
o [CAPTURES ACCIDENTELLES] Permettre la saisie de plusieurs captures accidentelles sans avoir à fermer l'écran de création Issue: 3296. Thanks to Tony Chemit. Resolved by tchemit.
o [RAPPORT] ajouter sur onglet "Résumé" un bouton pour obtenir la composition de la capture Issue: 2853. Thanks to Vincent BADTS. Resolved by tchemit.
o [TECH] - Mise à jour de la base de données : pas de vérification au lancement Issue: 2382. Thanks to Christian BONNET. Resolved by tchemit.
o [DONNEES INDIVIDUELLES] pouvoir copier les mensurations depuis la page ESPECES Issue: 2838. Thanks to Vincent BADTS. Resolved by tchemit.
o [TECH] Import de base : Structure autorisée pour le zip contenant la base à importer Issue: 3604. Thanks to Christian BONNET. Resolved by cbonnet.
o [CAPTURE] ne pas calculer les poids totaux espèces ou benthos quand il y a échantillonage de la capture avant trie Issue: 3839. Thanks to Vincent BADTS. Resolved by vbadts.
o [CAMPAGNE] pouvoir ajouter plusieur engins professionnels de même type à une campagne Issue: 2335. Thanks to Vincent BADTS. Resolved by tchemit.
o [CAMPAGNE] gestion des navires asocié (ex. chalutage en boeuf) Issue: 2338. Thanks to Vincent BADTS. Resolved by tchemit.
o [ESPECES] Catégorisation des lots : on ne peut plus ajouter une catégorie une fois la catégorisation effectuée Issue: 2478. Thanks to Vincent BADTS. Resolved by tchemit.
o [MENSURATION] ajout bouton "enregistrer et passer à l'espèce suivante" dans écran mensurations Issue: 2436. Thanks to Vincent BADTS. Resolved by tchemit.
o [MENSURATION] Pouvoir choisir un PSFM de classe de taille non renseigné au niveau du protocole Issue: 2449. Thanks to Vincent BADTS. Resolved by tchemit.
o [ERGO] améliorer saisie lat et long Issue: 2717. Thanks to Vincent BADTS. Resolved by tchemit.
o [EXPORT GENERIQUE] erreur à l'export si pas d'engin affecté sur l'opération Issue: 2878. Thanks to Vincent BADTS. Resolved by tchemit.
o [TECH] - Prise en compte de nouvelles catégories dans l'applicatif Issue: 2121. Thanks to Christian BONNET. Resolved by tchemit.
o [Rapport] Intégration de rapports générés par Birt Issue: 3430. Thanks to Christian BONNET. Resolved by tchemit.
o [EXPORT GENERIQUE] Ne pas bloquer l'export en cas de problème sur l'élévation Issue: 2873. Thanks to Christian BONNET. Resolved by tchemit.
o [ERGO] Tri du tableau des espèces Issue: 2459. Thanks to Vincent BADTS. Resolved by tchemit.
Fixed Bugs:
o [PROTOCOLE] Gestion des caractéristiques "Classe de taille" sur les imports de protocole Issue: 2442. Thanks to Vincent BADTS. Resolved by tchemit.
o [AIDE] L'aide contextuelle ne fonctionne pas sur certains boutons Issue: 4047. Thanks to Tony Chemit. Resolved by tchemit.
o Erreur lors d'un export Sumatra Issue: 3880. Thanks to Léo Kaufmann. Resolved by tchemit.
o [TECH] Mise à jour de référentiel - Erreur sur les données suite à la mise à jour Issue: 4124. Thanks to Christian BONNET. Resolved by tchemit.
Changes:
o [DONNES INDIVIDUELLES] Validation de la date de création Issue: 3305. Thanks to Tony Chemit. Resolved by cbonnet.
o [CAPTURES ACCIDENTELLES] Validation de la date de création Issue: 3307. Thanks to Tony Chemit. Resolved by cbonnet.
o [TECH] - Vérification de la version utilisée par rapport à la BDD Issue: 1894. Thanks to Benoit Wilcox. Resolved by tchemit.
o [ERGO] Alignement des cellules contenant les chiffres Issue: 2447. Thanks to Vincent BADTS. Resolved by tchemit.
o [TECH] Intégration de l'aide en ligne dans le site généré Issue: 4136. Thanks to Tony Chemit. Resolved by tchemit.
o [TECH] Amélioration des logs au démarrage Issue: 4126. Thanks to Tony Chemit. Resolved by tchemit.
o [REFERENTIEL] - Stades oeuf ; larve ; juvénile et adulte ; non précisé Issue: 1826. Thanks to Benoit Wilcox. Resolved by vbadts.
Downloads
---------
For a manual installation, you can download files here:
http://forge.codelutin.com/projects/tutti/files
* tutti-3.0-full-linux-i586.zip - http://forge.codelutin.com/attachments/download/1349
* tutti-3.0-full-windows-i586.zip - http://forge.codelutin.com/attachments/download/1350
Maven artifacts
---------------
Artifacts are deployed in nuiton maven repository
http://maven.nuiton.org/other-releases/
Have fun!
-Tutti team
1
0
r1496 - in trunk: . tutti-persistence tutti-service tutti-ui-swing
by tchemit@users.forge.codelutin.com Jan. 16, 2014
by tchemit@users.forge.codelutin.com Jan. 16, 2014
Jan. 16, 2014
Author: tchemit
Date: 2014-01-16 18:22:59 +0100 (Thu, 16 Jan 2014)
New Revision: 1496
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1496
Log:
[maven-release-plugin] prepare for next development iteration
Modified:
trunk/pom.xml
trunk/tutti-persistence/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-01-16 17:22:49 UTC (rev 1495)
+++ trunk/pom.xml 2014-01-16 17:22:59 UTC (rev 1496)
@@ -32,7 +32,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0</version>
+ <version>3.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Tutti</name>
@@ -97,12 +97,12 @@
</modules>
<scm>
- <url>http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0</url>
+ <url>http://svn.forge.codelutin.com/svn/tutti/trunk</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
</developerConnection>
</scm>
<distributionManagement>
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2014-01-16 17:22:49 UTC (rev 1495)
+++ trunk/tutti-persistence/pom.xml 2014-01-16 17:22:59 UTC (rev 1496)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0</version>
+ <version>3.1-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2014-01-16 17:22:49 UTC (rev 1495)
+++ trunk/tutti-service/pom.xml 2014-01-16 17:22:59 UTC (rev 1496)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0</version>
+ <version>3.1-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2014-01-16 17:22:49 UTC (rev 1495)
+++ trunk/tutti-ui-swing/pom.xml 2014-01-16 17:22:59 UTC (rev 1496)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0</version>
+ <version>3.1-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
1
0
Author: tchemit
Date: 2014-01-16 18:22:49 +0100 (Thu, 16 Jan 2014)
New Revision: 1495
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1495
Log:
[maven-release-plugin] copy for tag tutti-3.0
Added:
tags/tutti-3.0/
1
0
r1494 - in trunk: . tutti-persistence tutti-service tutti-ui-swing
by tchemit@users.forge.codelutin.com Jan. 16, 2014
by tchemit@users.forge.codelutin.com Jan. 16, 2014
Jan. 16, 2014
Author: tchemit
Date: 2014-01-16 18:22:40 +0100 (Thu, 16 Jan 2014)
New Revision: 1494
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1494
Log:
[maven-release-plugin] prepare release tutti-3.0
Modified:
trunk/pom.xml
trunk/tutti-persistence/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-01-16 17:19:38 UTC (rev 1493)
+++ trunk/pom.xml 2014-01-16 17:22:40 UTC (rev 1494)
@@ -32,7 +32,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0-SNAPSHOT</version>
+ <version>3.0</version>
<packaging>pom</packaging>
<name>Tutti</name>
@@ -97,12 +97,12 @@
</modules>
<scm>
- <url>http://svn.forge.codelutin.com/svn/tutti/trunk</url>
+ <url>http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-3.0
</developerConnection>
</scm>
<distributionManagement>
@@ -744,10 +744,7 @@
<configuration>
<tasks>
<echo message="Copy help to site" />
- <copy verbose="${maven.verbose}"
- failonerror="false"
- overwrite="true"
- todir="${project.reporting.outputDirectory}/help">
+ <copy verbose="${maven.verbose}" failonerror="false" overwrite="true" todir="${project.reporting.outputDirectory}/help">
<fileset dir="${project.basedir}/tutti-ui-swing/src/main/help">
<include name="**/*" />
</fileset>
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2014-01-16 17:19:38 UTC (rev 1493)
+++ trunk/tutti-persistence/pom.xml 2014-01-16 17:22:40 UTC (rev 1494)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0-SNAPSHOT</version>
+ <version>3.0</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2014-01-16 17:19:38 UTC (rev 1493)
+++ trunk/tutti-service/pom.xml 2014-01-16 17:22:40 UTC (rev 1494)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0-SNAPSHOT</version>
+ <version>3.0</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2014-01-16 17:19:38 UTC (rev 1493)
+++ trunk/tutti-ui-swing/pom.xml 2014-01-16 17:22:40 UTC (rev 1494)
@@ -27,7 +27,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>3.0-SNAPSHOT</version>
+ <version>3.0</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
1
0
Author: tchemit
Date: 2014-01-16 18:19:38 +0100 (Thu, 16 Jan 2014)
New Revision: 1493
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1493
Log:
update doc
Modified:
trunk/src/site/rst/dbversions.rst
Modified: trunk/src/site/rst/dbversions.rst
===================================================================
--- trunk/src/site/rst/dbversions.rst 2014-01-16 15:08:54 UTC (rev 1492)
+++ trunk/src/site/rst/dbversions.rst 2014-01-16 17:19:38 UTC (rev 1493)
@@ -52,6 +52,8 @@
+---------------------+------------+---------------------------+
+ 3.0-rc-2 + 2013.11.29 + 3.4.1 +
+---------------------+------------+---------------------------+
++ 3.0 + 2014.01.10 + 3.4.1 +
++---------------------+------------+---------------------------+
Légende :
1
0
Author: tchemit
Date: 2014-01-16 16:08:54 +0100 (Thu, 16 Jan 2014)
New Revision: 1492
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1492
Log:
fixes #4136: [TECH] Int?\195?\169gration de l'aide en ligne dans le site g?\195?\169n?\195?\169r?\195?\169
Modified:
trunk/pom.xml
trunk/src/site/site_fr.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-01-16 14:36:24 UTC (rev 1491)
+++ trunk/pom.xml 2014-01-16 15:08:54 UTC (rev 1492)
@@ -159,12 +159,6 @@
<!-- Last JRE version to use -->
<jreVersion>1.7.45</jreVersion>
- <!-- Last tutti db version -->
- <dbVersion>2013.12.19</dbVersion>
-
- <!-- Last tutti report version -->
- <reportVersion>2013.12.05</reportVersion>
-
</properties>
<repositories>
@@ -499,6 +493,11 @@
<artifactId>hibernate-core</artifactId>
<version>${hibernateVersion}</version>
</dependency>
+ <dependency>
+ <groupId>fr.ifremer.shared</groupId>
+ <artifactId>application</artifactId>
+ <version>${ifremerApplicationVersion}</version>
+ </dependency>
</dependencies>
</plugin>
@@ -602,14 +601,6 @@
<property>jreVersion</property>
<message>You must set a jreVersion property!</message>
</requireProperty>
- <requireProperty>
- <property>dbVersion</property>
- <message>You must set a dbVersion property!</message>
- </requireProperty>
- <requireProperty>
- <property>reportVersion</property>
- <message>You must set a reportVersion property!</message>
- </requireProperty>
</rules>
<ignoreCache>true</ignoreCache>
<failFast>true</failFast>
@@ -733,7 +724,7 @@
</profile>
<profile>
- <id>deploy-tutti-data-update</id>
+ <id>reporting</id>
<activation>
<property>
<name>performRelease</name>
@@ -742,25 +733,23 @@
</activation>
<build>
- <defaultGoal>deploy</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
- <id>copy tutti-data.properties to site</id>
- <phase>package</phase>
+ <id>Copy help site</id>
+ <phase>pre-site</phase>
<inherited>false</inherited>
<configuration>
<tasks>
- <echo message="copy tutti-db.properties to site" />
- <copy verbose="true" failonerror="false" overwrite="true" filtering="true" todir="${project.build.directory}/update">
- <filterset>
- <filter value="${dbVersion}" token="dbVersion" />
- <filter value="${reportVersion}" token="reportVersion" />
- </filterset>
- <fileset dir="${basedir}/src/update/">
- <include name="tutti-data.properties" />
+ <echo message="Copy help to site" />
+ <copy verbose="${maven.verbose}"
+ failonerror="false"
+ overwrite="true"
+ todir="${project.reporting.outputDirectory}/help">
+ <fileset dir="${project.basedir}/tutti-ui-swing/src/main/help">
+ <include name="**/*" />
</fileset>
</copy>
</tasks>
@@ -771,46 +760,8 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>wagon-maven-plugin</artifactId>
- <version>1.0-beta-4</version>
- <executions>
- <execution>
- <id>deploy tutti-db.properties</id>
- <phase>deploy</phase>
- <inherited>false</inherited>
- <goals>
- <goal>upload-single</goal>
- </goals>
- <configuration>
- <serverId>forge.codelutin.com</serverId>
- <fromFile>
- ${project.build.directory}/update/tutti-data.properties
- </fromFile>
- <url>
- scpexe://forge.codelutin.com/var/www/ApplicationUpdate/http/tutti
- </url>
- </configuration>
- </execution>
- </executions>
-
- </plugin>
</plugins>
</build>
-
- </profile>
-
- <profile>
- <id>reporting</id>
- <activation>
- <property>
- <name>performRelease</name>
- <value>true</value>
- </property>
- </activation>
-
<reporting>
<plugins>
Modified: trunk/src/site/site_fr.xml
===================================================================
--- trunk/src/site/site_fr.xml 2014-01-16 14:36:24 UTC (rev 1491)
+++ trunk/src/site/site_fr.xml 2014-01-16 15:08:54 UTC (rev 1492)
@@ -23,7 +23,10 @@
#L%
-->
-<project name="${project.name}">
+<project name="${project.name}"
+ xmlns="http://maven.apache.org/DECORATION/1.4.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd">
<skin>
<groupId>org.apache.maven.skins</groupId>
@@ -97,13 +100,20 @@
<menu name="Tutti">
<item name="Accueil" href="index.html"/>
<item name="Fonctionnalités" href="./features.html"/>
- <item name="Téléchargement"
+ <item name="Téléchargement" target="forge"
href="http://forge.codelutin.com/projects/tutti/files"/>
- <item name="Roadmap"
+ <item name="Roadmap" target="forge"
href="http://forge.codelutin.com/projects/tutti/roadmap"/>
<item name="Historique des versions" href="changes-report.html"/>
</menu>
+ <menu name="Documentation utilisateur">
+ <item name="Aide en ligne (FR)" href="./help/fr/index.html"
+ target="help"/>
+ <item name="Aide en ligne (EN)" href="./help/en/index.html"
+ target="help"/>
+ </menu>
+
<menu name="Documentation Technique">
<item name="Configuration" href="./application-config-report.html"/>
<item name="Référentiel" href="./referential.html"/>
1
0
r1491 - in trunk/tutti-ui-swing/src/main: help/fr java/fr/ifremer/tutti/ui/swing/content/operation/catches resources/i18n
by tchemit@users.forge.codelutin.com Jan. 16, 2014
by tchemit@users.forge.codelutin.com Jan. 16, 2014
Jan. 16, 2014
Author: tchemit
Date: 2014-01-16 15:36:24 +0100 (Thu, 16 Jan 2014)
New Revision: 1491
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1491
Log:
fixes #3839: [CAPTURE] ne pas calculer les poids totaux esp?\195?\168ces ou benthos quand il y a ?\195?\169chantillonage de la capture avant trie
Modified:
trunk/tutti-ui-swing/src/main/help/fr/editFishingOperation.html
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-ui-swing/src/main/help/fr/editFishingOperation.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/editFishingOperation.html 2014-01-16 14:35:57 UTC (rev 1490)
+++ trunk/tutti-ui-swing/src/main/help/fr/editFishingOperation.html 2014-01-16 14:36:24 UTC (rev 1491)
@@ -279,9 +279,9 @@
: si la valeur du Poids total NON TRIE est non nulle, la valeur
calculée dans ce champ n'a aucune signification car l'application va
sommer un VRAC qui doit être élevé avec un HORS VRAC qui n'est par
- définition pas élevé. Cette anomalie de la 3.0 sera corrigée dans une
- version
- ultérieure.
+ définition pas élevé.
+ <br/>
+ Dans ce cas un message remplace la valeur calculée.
</dd>
<dt>Poids total VRAC</dt>
<dd>
@@ -306,8 +306,9 @@
style="font-weight: bold;">ATTENTION</span> : si la valeur du
Poids total NON TRIE est non nulle, la valeur calculée dans ce champ
n'a aucune signification car l'application va sommer un vrac qui doit
- être élevé avec un hrs vrac qui n'est par définition pas élevé. Cette
- anomalie sera corrigée dans une version ultérieure.
+ être élevé avec un hrs vrac qui n'est par définition pas élevé.
+ <br/>
+ Dans ce cas un message remplace la valeur calculée.
</dd>
<dt>Poids total VRAC</dt>
<dd>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2014-01-16 14:35:57 UTC (rev 1490)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2014-01-16 14:36:24 UTC (rev 1491)
@@ -191,7 +191,8 @@
}
#speciesTotalWeightField {
- text: {getWeightStringValue(model.getSpeciesTotalComputedWeight())};
+ text: {handler.getWeightStringValueForTotalWeight(model.getCatchTotalRejectedWeight(), model.getSpeciesTotalComputedWeight())};
+ disabledTextColor: {handler.getWeightColorForTotalWeight(model.getCatchTotalRejectedWeight(), model.getSpeciesTotalComputedWeight())};
_computed: true;
_help: {"tutti.editCatchBatch.field.speciesTotalWeight.help"};
}
@@ -256,7 +257,8 @@
}
#benthosTotalWeightField {
- text: {getWeightStringValue(model.getBenthosTotalComputedWeight())};
+ text: {handler.getWeightStringValueForTotalWeight(model.getCatchTotalRejectedWeight(), model.getBenthosTotalComputedWeight())};
+ disabledTextColor: {handler.getWeightColorForTotalWeight(model.getCatchTotalRejectedWeight(), model.getBenthosTotalComputedWeight())};
_computed: true;
_help: {"tutti.editCatchBatch.field.benthosTotalWeight.help"};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-01-16 14:35:57 UTC (rev 1490)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-01-16 14:36:24 UTC (rev 1491)
@@ -26,9 +26,8 @@
import com.google.common.collect.Sets;
import fr.ifremer.shared.application.swing.tab.TabHandler;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI;
-import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIHandler;
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchRowModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency.BenthosFrequencyCellComponent;
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency.BenthosFrequencyUI;
@@ -40,7 +39,6 @@
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
-import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.CardLayout2Ext;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.logging.Log;
@@ -51,7 +49,7 @@
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
-import java.awt.Container;
+import java.awt.Color;
import java.util.Set;
import static org.nuiton.i18n.I18n._;
@@ -589,22 +587,28 @@
}
}
-// public String buildReminderLabelTitle(Species species,
-// Iterable<SampleCategory<?>> categories,
-// String prefix,
-// String suffix) {
-// StringBuilder title = new StringBuilder(prefix);
-//
-// title.append(" - [").append(decorate(species)).append("]");
-//
-// for (SampleCategory<?> sampleCategory : categories) {
-// if (sampleCategory.getCategoryValue() != null) {
-// title.append(" - ");
-// title.append(decorate(sampleCategory.getCategoryValue()));
-// }
-// }
-//
-// title.append(" - ").append(suffix);
-// return title.toString();
-// }
+ public String getWeightStringValueForTotalWeight(Float rejectWeight, Float totalWeight) {
+ String result;
+ if (rejectWeight == null || totalWeight == null) {
+
+ // no reject weight, so can let this weight
+ result = TuttiEntities.getWeightStringValue(totalWeight);
+ } else {
+ result = _("tutti.editCatchBatch.field.speciesOrBenthosTotalWeight.not.computed");
+ }
+ return result;
+ }
+
+ public Color getWeightColorForTotalWeight(Float rejectWeight, Float totalWeight) {
+ //jTextField.setDisabledTextColor(
+ Color result;
+ if (rejectWeight == null || totalWeight == null) {
+
+ // no reject weight, so can let this weight
+ result = getConfig().getColorComputedWeights();
+ } else {
+ result = Color.RED;
+ }
+ return result;
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-16 14:35:57 UTC (rev 1490)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-01-16 14:36:24 UTC (rev 1491)
@@ -564,6 +564,7 @@
tutti.editCatchBatch.field.catchTotalWeight.tip=
tutti.editCatchBatch.field.marineLitterTotalWeight=
tutti.editCatchBatch.field.marineLitterTotalWeight.tip=
+tutti.editCatchBatch.field.speciesOrBenthosTotalWeight.not.computed=
tutti.editCatchBatch.field.speciesTotalSampleSortedWeight=
tutti.editCatchBatch.field.speciesTotalSampleSortedWeight.tip=
tutti.editCatchBatch.field.speciesTotalSortedWeight=
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 2014-01-16 14:35:57 UTC (rev 1490)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-16 14:36:24 UTC (rev 1491)
@@ -557,6 +557,7 @@
tutti.editCatchBatch.field.catchTotalWeight.tip=Poids total de la capture (sauf macro déchets et captures accidentelles)
tutti.editCatchBatch.field.marineLitterTotalWeight=Poids TOTAL
tutti.editCatchBatch.field.marineLitterTotalWeight.tip=Poids total des macro déchets dans la capture
+tutti.editCatchBatch.field.speciesOrBenthosTotalWeight.not.computed=poids non calculable dans ce contexte
tutti.editCatchBatch.field.speciesTotalSampleSortedWeight=Poids VRAC trié
tutti.editCatchBatch.field.speciesTotalSampleSortedWeight.tip=Poids total des espèces triées (poissons, crustacés etc.)
tutti.editCatchBatch.field.speciesTotalSortedWeight=Poids total VRAC
1
0
Author: tchemit
Date: 2014-01-16 15:35:57 +0100 (Thu, 16 Jan 2014)
New Revision: 1490
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1490
Log:
add L?\195?\169o as commiter
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-01-15 17:10:23 UTC (rev 1489)
+++ trunk/pom.xml 2014-01-16 14:35:57 UTC (rev 1490)
@@ -77,6 +77,17 @@
</roles>
<timezone>Europe/Paris</timezone>
</developer>
+ <developer>
+ <id>lkaufmann</id>
+ <name>Léo Kaufmann</name>
+ <email>morin at codelutin dot com</email>
+ <organization>CodeLutin</organization>
+ <organizationUrl>http://www.codelutin.com</organizationUrl>
+ <roles>
+ <role>Technical writer</role>
+ </roles>
+ <timezone>Europe/Paris</timezone>
+ </developer>
</developers>
<modules>
1
0
r1489 - in trunk: . tutti-persistence/src/main/java/fr/ifremer/tutti
by tchemit@users.forge.codelutin.com Jan. 15, 2014
by tchemit@users.forge.codelutin.com Jan. 15, 2014
Jan. 15, 2014
Author: tchemit
Date: 2014-01-15 18:10:23 +0100 (Wed, 15 Jan 2014)
New Revision: 1489
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1489
Log:
fixes #4125: [TECH] Modification de l'url de mise ?\195?\160 jour des donn?\195?\169es
Modified:
trunk/README.txt
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java
Modified: trunk/README.txt
===================================================================
--- trunk/README.txt 2014-01-15 16:34:18 UTC (rev 1488)
+++ trunk/README.txt 2014-01-15 17:10:23 UTC (rev 1489)
@@ -30,5 +30,5 @@
+---------------------+------------+---------------------------+
+ 3.0-rc-2 + 2013.11.29 + 3.4.1 +
+---------------------+------------+---------------------------+
-+ 3.0 + 2013.12.19 + 3.4.1 +
++ 3.0 + 2014.01.10 + 3.4.1 +
+---------------------+------------+---------------------------+
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java 2014-01-15 16:34:18 UTC (rev 1488)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java 2014-01-15 17:10:23 UTC (rev 1489)
@@ -329,7 +329,7 @@
UPDATE_DATA_URL(
"tutti.update.data.url",
n_("tutti.config.option.update.data.url.description"),
- "http://appup.forge.codelutin.com/tutti/tutti-data.properties",
+ "https://www.ifremer.fr/sih-resource-private/tutti/tutti-data.properties",
String.class,
false
),
1
0
r1488 - in trunk/tutti-persistence/src: main/java/fr/ifremer/adagio/core/service/technical/synchro main/java/fr/ifremer/adagio/core/service/technical/synchro/specific main/java/fr/ifremer/tutti/persistence main/java/fr/ifremer/tutti/persistence/service main/resources/META-INF/services test/java/fr/ifremer/adagio/core/service/technical/synchro
by tchemit@users.forge.codelutin.com Jan. 15, 2014
by tchemit@users.forge.codelutin.com Jan. 15, 2014
Jan. 15, 2014
Author: tchemit
Date: 2014-01-15 17:34:18 +0100 (Wed, 15 Jan 2014)
New Revision: 1488
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1488
Log:
refs #4124: [TECH] Mise ?\195?\160 jour de r?\195?\169f?\195?\169rentiel - Erreur sur les donn?\195?\169es suite ?\195?\160 la mise ?\195?\160 jour
Added:
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/ReferentialSynchroSpecificTableTask.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselFeaturesReferentialSynchroSpecificTableTaskImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java
trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.synchro.specific.ReferentialSynchroSpecificTableTask
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java 2014-01-15 12:45:59 UTC (rev 1487)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -27,6 +27,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.google.common.io.Closeables;
+import fr.ifremer.adagio.core.service.technical.synchro.specific.ReferentialSynchroSpecificTableTask;
import fr.ifremer.tutti.persistence.ProgressionModel;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.logging.Log;
@@ -50,9 +51,11 @@
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
+import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.ServiceLoader;
import java.util.Set;
import static org.nuiton.i18n.I18n._;
@@ -83,6 +86,8 @@
protected Properties dbconnexionProperties;
+ protected EnumMap<ReferentialSynchroTable, ReferentialSynchroSpecificTableTask> extraTasks;
+
@Override
public Properties getLocalConnectionProperties() {
if (dbconnexionProperties == null) {
@@ -103,6 +108,20 @@
return localDialect;
}
+ public EnumMap<ReferentialSynchroTable, ReferentialSynchroSpecificTableTask> getExtraTasks() {
+ if (extraTasks == null) {
+
+ extraTasks = Maps.newEnumMap(ReferentialSynchroTable.class);
+
+ ServiceLoader<ReferentialSynchroSpecificTableTask> loader = ServiceLoader.load(ReferentialSynchroSpecificTableTask.class);
+ for (ReferentialSynchroSpecificTableTask task : loader) {
+ extraTasks.put(task.getTable(), task);
+ }
+
+ }
+ return extraTasks;
+ }
+
@Override
public void prepare(Properties remoteConnectionProperties, ReferentialSynchroResult result) {
Preconditions.checkNotNull(result);
@@ -114,6 +133,7 @@
dbconnexionProperties = null;
localDialect = null;
+ extraTasks = null;
Connection localConnection = null;
Connection remoteConnection = null;
@@ -209,7 +229,7 @@
remoteConnection = createConnection(remoteConnectionProperties);
// load metas
- ReferentialSynchroDatabaseMetadata remoteMeta =
+ ReferentialSynchroDatabaseMetadata dbMetas =
ReferentialSynchroDatabaseMetadata.loadDatabaseMetadata(remoteConnection, getLocalDialect());
// set total in progression model
@@ -229,7 +249,7 @@
progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.synchronize.step1", tableName));
- ReferentialSynchroTableMetadata table = remoteMeta.getTable(tableName);
+ ReferentialSynchroTableMetadata table = dbMetas.getTable(tableName);
if (log.isInfoEnabled()) {
log.info("Synchronize table: " + tableName);
@@ -238,9 +258,13 @@
if (countToUpdate > 0) {
- synchronizeTable(table,
+ ReferentialSynchroSpecificTableTask extraTask = getExtraTasks().get(tuttiTable);
+
+ synchronizeTable(dbMetas,
+ table,
localConnection,
remoteConnection,
+ extraTask,
result);
}
@@ -346,7 +370,7 @@
ReferentialSynchroTableTool remoteDao = new ReferentialSynchroTableTool(remoteConnection, table);
- long countToUpdate = remoteDao.getCountDataToUpdate(updateDate);
+ long countToUpdate = remoteDao.countDataToUpdate(updateDate);
if (log.isInfoEnabled()) {
log.info(String.format("%s nb rows to update: %s", tablePrefix, countToUpdate));
@@ -356,9 +380,11 @@
result.addRows(tableName, (int) countToUpdate);
}
- protected void synchronizeTable(ReferentialSynchroTableMetadata table,
+ protected void synchronizeTable(ReferentialSynchroDatabaseMetadata dbMetas,
+ ReferentialSynchroTableMetadata table,
Connection localConnection,
Connection remoteConnection,
+ ReferentialSynchroSpecificTableTask extraTask,
ReferentialSynchroResult result) throws SQLException {
String tableName = table.getName();
@@ -367,6 +393,9 @@
String tablePrefix = table.getTableLogPrefix();
+ if (extraTask != null && log.isInfoEnabled()) {
+ log.info(tablePrefix + " Will use specific task: " + extraTask);
+ }
ReferentialSynchroTableTool localDao = new ReferentialSynchroTableTool(localConnection, table);
ReferentialSynchroTableTool remoteDao = new ReferentialSynchroTableTool(remoteConnection, table);
@@ -394,16 +423,16 @@
if (bigTable) {
// big table update strategy
- updateBigTable(localDao,
+ updateBigTable(dbMetas,
+ localDao,
remoteDao,
- table,
dataToUpdate,
+ extraTask,
result);
} else {
// small table update strategy
updateTable(localDao,
- table,
dataToUpdate,
result);
}
@@ -428,16 +457,16 @@
* method instead.
*
* @param localDao connection on the local db
- * @param table table to update
* @param incomingData data to update from the remote db
* @param result where to store operation results
* @throws SQLException if any sql errors
*/
protected void updateTable(ReferentialSynchroTableTool localDao,
- ReferentialSynchroTableMetadata table,
ResultSet incomingData,
ReferentialSynchroResult result) throws SQLException {
+ ReferentialSynchroTableMetadata table = localDao.getTable();
+
// get existing ids in the local db
Set<String> existingIds = localDao.getExistingPrimaryKeys();
@@ -504,20 +533,22 @@
* </ul>
* In that way we will only perform some insert queries.
*
+ * @param dbMetas
* @param localDao connection on the local db
* @param remoteDao connection on the local db
- * @param table table to update
* @param incomingData data to update from the remote db
- * @param result where to store operation results
- * @throws SQLException if any sql errors
+ * @param extraTask
+ * @param result where to store operation results @throws SQLException if any sql errors
*/
- protected void updateBigTable(ReferentialSynchroTableTool localDao,
+ protected void updateBigTable(ReferentialSynchroDatabaseMetadata dbMetas,
+ ReferentialSynchroTableTool localDao,
ReferentialSynchroTableTool remoteDao,
- ReferentialSynchroTableMetadata table,
ResultSet incomingData,
+ ReferentialSynchroSpecificTableTask extraTask,
ReferentialSynchroResult result) throws SQLException {
- String tableName = table.getName();
+ ReferentialSynchroTableMetadata table = localDao.getTable();
+ String tableName = localDao.table.getName();
result.addTableName(tableName);
@@ -539,10 +570,14 @@
existingIds.removeAll(remoteExistingIds);
if (log.isDebugEnabled()) {
- log.debug(tablePrefix + " local data existingIds not in remote: " + existingIds);
+ log.debug(tablePrefix + " local data existingIds not in remote: " + existingIds.size());
}
+ if (log.isTraceEnabled()) {
+ for (String existingId : existingIds) {
+ log.trace("- " + existingId);
+ }
+ }
-
// copy extra rows from local
Map<List<Object>, Object[]> extraRows = Maps.newLinkedHashMap();
@@ -556,6 +591,20 @@
extraRows.put(pk, extraRow);
}
+ // remove obsolete extra rows
+
+ if (extraTask != null) {
+ extraRows = extraTask.transformExtraLocalData(dbMetas,
+ localDao,
+ remoteDao,
+ extraRows);
+
+ if (log.isDebugEnabled()) {
+ log.debug(tablePrefix + " local data existingIds not in remote (after apply task): " + extraRows.size());
+ }
+ }
+
+
// delete table
localDao.deleteAll();
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java 2014-01-15 12:45:59 UTC (rev 1487)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -24,10 +24,10 @@
* #L%
*/
-import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ifremer.shared.application.ApplicationTechnicalException;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
@@ -41,10 +41,11 @@
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.Collections;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedSet;
import static org.nuiton.i18n.I18n._;
@@ -72,28 +73,20 @@
*/
public class ReferentialSynchroTableMetadata {
- protected static final String QUERY_SELECT_MAX_UPDATE = "SELECT max(update_date) FROM %s";
+ public static final String PK_SEPARATOR = "~~";
- protected static final String QUERY_INSERT = "INSERT INTO %s (%s) VALUES (%s)";
+ protected final String selectPrimaryKeysQuery;
- protected static final String QUERY_UPDATE = "UPDATE %s SET %s WHERE %s";
+ protected final String selectMaxUpdateDateQuery;
- protected static final String QUERY_SELECT = "SELECT %s FROM %s WHERE %s";
-
- protected static final String QUERY_SELECT_PRIMARY_KEYS = "SELECT %s FROM %s";
-
- protected static final String QUERY_SELECT_COUNT = "SELECT count(*) FROM %s";
-
- protected final String existingPrimaryKeysQuery;
-
- protected final String maxUpdateDateQuery;
-
protected final String countQuery;
protected final TableMetadata delegate;
protected final Map<String, ColumnMetadata> columns;
+ protected final List<String> columnNames;
+
protected final Set<String> pkNames;
protected final int[] pkIndexs;
@@ -106,16 +99,12 @@
protected final String countDataToUpdateQuery;
- protected final String countDataToUpdateQueryWithNull;
+ protected final String selectDataToUpdateQuery;
- protected final String dataToUpdateQuery;
+ protected final String selectAllQuery;
- protected final String dataToUpdateQueryWithNull;
-
protected final String selectDataQueryFromPk;
- protected final boolean simpleKey;
-
public ReferentialSynchroTableMetadata(TableMetadata delegate,
DatabaseMetaData meta) {
@@ -125,73 +114,46 @@
try {
Field field = TableMetadata.class.getDeclaredField("columns");
field.setAccessible(true);
- this.columns = (Map) field.get(delegate);
+ this.columns = Maps.<String, ColumnMetadata>newLinkedHashMap((Map) field.get(delegate));
this.withUpdateDateColumn = columns.containsKey("update_date");
+ this.columnNames = initColumnNames(columns);
this.pkNames = initPrimaryKeys(meta);
Preconditions.checkNotNull(pkNames);
- this.pkIndexs = createPkIndex();
- this.simpleKey = this.pkIndexs.length == 1;
-
- this.insertQuery = createInsertQuery();
- this.updateQuery = createUpdateQuery();
- this.maxUpdateDateQuery = String.format(QUERY_SELECT_MAX_UPDATE, getName());
- this.existingPrimaryKeysQuery = String.format(QUERY_SELECT_PRIMARY_KEYS, Joiner.on(',').join(pkNames), getName());
- this.countQuery = String.format(QUERY_SELECT_COUNT, getName());
} catch (Exception e) {
throw new ApplicationTechnicalException(_("tutti.persistence.tableMetadata.instanciation.error", this), e);
}
- dataToUpdateQueryWithNull = "SELECT " + createSelectParams() + " FROM " + getName();
- countDataToUpdateQueryWithNull = "SELECT count(*) FROM " + getName();
-
- this.selectDataQueryFromPk = createSelectQuery();
- String whereClause;
-
- if (isWithUpdateDateColumn()) {
-
- // add a filter
- whereClause = " WHERE (update_date IS NULL OR update_date > ?)";
- } else {
- whereClause = "";
- }
- dataToUpdateQuery = dataToUpdateQueryWithNull + whereClause;
- countDataToUpdateQuery = countDataToUpdateQueryWithNull + whereClause;
+ this.pkIndexs = createPkIndex();
+ this.insertQuery = createInsertQuery();
+ this.updateQuery = createUpdateQuery();
+ this.selectMaxUpdateDateQuery = createSelectMaxUpdateDateQuery();
+ this.selectPrimaryKeysQuery = createSelectPrimaryKeysQuery();
+ this.selectAllQuery = createSelectAllQuery();
+ this.selectDataQueryFromPk = createSelectDataFromPkQuery();
+ this.selectDataToUpdateQuery = createSelectDataToUpdateQuery();
+ this.countQuery = createCountQuery();
+ this.countDataToUpdateQuery = createCountDataToUpdateQuery();
}
// for tests purposes
ReferentialSynchroTableMetadata() {
- existingPrimaryKeysQuery = null;
-
- maxUpdateDateQuery = null;
-
- countQuery = null;
-
delegate = null;
-
columns = null;
-
+ columnNames = null;
pkNames = null;
-
pkIndexs = null;
-
+ withUpdateDateColumn = false;
insertQuery = null;
-
updateQuery = null;
-
- withUpdateDateColumn = false;
-
+ countQuery = null;
countDataToUpdateQuery = null;
-
- countDataToUpdateQueryWithNull = null;
-
- dataToUpdateQuery = null;
-
- dataToUpdateQueryWithNull = null;
-
+ selectPrimaryKeysQuery = null;
+ selectMaxUpdateDateQuery = null;
+ selectDataToUpdateQuery = null;
+ selectAllQuery = null;
selectDataQueryFromPk = null;
- simpleKey = false;
}
public Set<String> getPkNames() {
@@ -206,10 +168,15 @@
return columns.size();
}
- public SortedSet<String> getColumnNames() {
- return Sets.newTreeSet(columns.keySet());
+ public Set<String> getColumnNames() {
+ return ImmutableSet.copyOf(columnNames);
}
+ public int getColumnIndex(String name) {
+ int result = columnNames.indexOf(name);
+ return result;
+ }
+
public String getName() {
return delegate.getName();
}
@@ -238,6 +205,10 @@
return delegate.getIndexMetadata(indexName);
}
+ //------------------------------------------------------------------------//
+ //-- queries methods --//
+ //------------------------------------------------------------------------//
+
public String getInsertQuery() {
return insertQuery;
}
@@ -246,44 +217,46 @@
return updateQuery;
}
- public String getExistingPrimaryKeysQuery() {
- return existingPrimaryKeysQuery;
+ public String getSelectPrimaryKeysQuery() {
+ return selectPrimaryKeysQuery;
}
- public String getMaxUpdateDateQuery() {
- return maxUpdateDateQuery;
+ public String getSelectMaxUpdateDateQuery() {
+ return selectMaxUpdateDateQuery;
}
- public String getCountQuery() {
- return countQuery;
- }
-
public String getSelectDataQueryFromPk() {
return selectDataQueryFromPk;
}
- public int[] getPkIndexs() {
- return pkIndexs;
+ public String getSelectDataToUpdateQuery(Date fromDate) {
+ String sql = fromDate == null ?
+ selectAllQuery :
+ selectDataToUpdateQuery;
+ return sql;
}
- public String getDataToUpdateQuery() {
- return dataToUpdateQuery;
+ public String getCountQuery() {
+ return countQuery;
}
- public String getDataToUpdateQueryWithNull() {
- return dataToUpdateQueryWithNull;
+ public String getCountDataToUpdateQuery(Date fromDate) {
+ String sql = fromDate == null ?
+ countQuery :
+ countDataToUpdateQuery;
+ return sql;
}
- public String getCountDataToUpdateQuery() {
- return countDataToUpdateQuery;
- }
+ //------------------------------------------------------------------------//
+ //-- PK methods --//
+ //------------------------------------------------------------------------//
- public String getCountDataToUpdateQueryWithNull() {
- return countDataToUpdateQueryWithNull;
+ public int[] getPkIndexs() {
+ return pkIndexs;
}
public boolean isSimpleKey() {
- return simpleKey;
+ return pkIndexs.length == 1;
}
public List<Object> getPk(ResultSet incomingData) throws SQLException {
@@ -298,27 +271,38 @@
public String toPkStr(List<Object> pkList) {
StringBuilder sb = new StringBuilder();
for (Object pk : pkList) {
- sb.append("~|").append(pk);
+ sb.append(PK_SEPARATOR).append(pk);
}
- return sb.toString();
+ return sb.substring(PK_SEPARATOR.length());
}
public List<Object> fromPkStr(String pk) {
List<Object> pkList = Lists.newArrayList();
- String[] split = pk.split("~\\|");
+ String[] split = pk.split(PK_SEPARATOR);
for (String s : split) {
if ("null".equals(s)) {
s = null;
}
pkList.add(s);
}
- pkList.remove(0);
return pkList;
}
+ //------------------------------------------------------------------------//
+ //-- Protected methods --//
+ //------------------------------------------------------------------------//
+
+ protected List<String> initColumnNames(Map<String, ColumnMetadata> columns) {
+ List<String> result = Lists.newArrayListWithCapacity(columns.size());
+ for (String name : columns.keySet()) {
+ result.add(name);
+ }
+ return Collections.unmodifiableList(result);
+ }
+
protected Set<String> initPrimaryKeys(DatabaseMetaData meta) throws SQLException {
- Set<String> result = Sets.newHashSet();
+ Set<String> result = Sets.newLinkedHashSet();
ResultSet rs = meta.getPrimaryKeys(getCatalog(), getSchema(), getName());
try {
@@ -343,7 +327,7 @@
int i = 1;
int index = -1;
- for (String columnName : getColumnNames()) {
+ for (String columnName : columnNames) {
if (pkColumnName.equals(columnName)) {
index = i;
} else {
@@ -355,18 +339,17 @@
return result;
}
-
protected String createInsertQuery() {
StringBuilder queryParams = new StringBuilder();
StringBuilder valueParams = new StringBuilder();
- for (String columnName : getColumnNames()) {
+ for (String columnName : columnNames) {
queryParams.append(", ").append(columnName);
valueParams.append(", ?");
}
- String result = String.format(QUERY_INSERT,
+ String result = String.format("INSERT INTO %s (%s) VALUES (%s)",
getName(),
queryParams.substring(2),
valueParams.substring(2));
@@ -377,42 +360,89 @@
StringBuilder updateParams = new StringBuilder();
- for (String columnName : getColumnNames()) {
+ for (String columnName : columnNames) {
updateParams.append(", ").append(columnName).append(" = ?");
}
- String result = String.format(QUERY_UPDATE,
+ String result = String.format("UPDATE %s SET %s WHERE %s",
getName(),
updateParams.substring(2),
createPkWhereClause());
return result;
}
- protected String createSelectQuery() {
+ protected String createSelectDataFromPkQuery() {
- String result = String.format(QUERY_SELECT,
+ String result = String.format("SELECT %s FROM %s WHERE %s",
createSelectParams(),
getName(),
createPkWhereClause());
return result;
}
+ protected String createSelectPrimaryKeysQuery() {
+
+ String prefix = " || '" + PK_SEPARATOR + "' || ";
+ StringBuilder pkParams = new StringBuilder();
+ for (String columnName : pkNames) {
+ pkParams.append(prefix).append(columnName);
+ }
+ return String.format("SELECT %s FROM %s",
+ pkParams.substring(prefix.length()),
+ getName());
+ }
+
+ protected String createSelectAllQuery() {
+ return "SELECT " + createSelectParams() + " FROM " + getName();
+ }
+
+ protected String createSelectMaxUpdateDateQuery() {
+ return String.format("SELECT max(update_date) FROM %s", getName());
+ }
+
+ protected String createSelectDataToUpdateQuery() {
+ String whereClause = createWithUpdateDateWhereClause();
+ return "SELECT " + createSelectParams() + " FROM " + getName() + whereClause;
+ }
+
+ protected String createCountQuery() {
+ return String.format("SELECT count(*) FROM %s", getName());
+ }
+
+ protected String createCountDataToUpdateQuery() {
+ String whereClause = createWithUpdateDateWhereClause();
+ return "SELECT count(*) FROM " + getName() + whereClause;
+ }
+
protected String createPkWhereClause() {
StringBuilder pkParams = new StringBuilder();
- for (String columnName : getPkNames()) {
+ for (String columnName : pkNames) {
pkParams.append("AND ").append(columnName).append(" = ?");
}
return pkParams.substring(4);
}
+ protected String createWithUpdateDateWhereClause() {
+ String whereClause;
+
+ if (isWithUpdateDateColumn()) {
+
+ // add a filter
+ whereClause = " WHERE (update_date IS NULL OR update_date > ?)";
+ } else {
+ whereClause = "";
+ }
+ return whereClause;
+ }
+
protected String createSelectParams() {
StringBuilder queryParams = new StringBuilder();
- for (String columnName : getColumnNames()) {
+ for (String columnName : columnNames) {
queryParams.append(", ").append(columnName);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java 2014-01-15 12:45:59 UTC (rev 1487)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -72,6 +72,11 @@
protected boolean debug;
+ public ReferentialSynchroTableTool(ReferentialSynchroTableTool tool,
+ ReferentialSynchroTableMetadata table) throws SQLException {
+ this(tool.connection, table);
+ }
+
public ReferentialSynchroTableTool(Connection connection,
ReferentialSynchroTableMetadata table) throws SQLException {
this.connection = connection;
@@ -123,24 +128,15 @@
public Set<String> getExistingPrimaryKeys() throws SQLException {
- Set<String> pkNames = table.getPkNames();
- int pkCount = pkNames.size();
- String sql = table.getExistingPrimaryKeysQuery();
+ String sql = table.getSelectPrimaryKeysQuery();
PreparedStatement statement = connection.prepareStatement(sql);
Set<String> result = Sets.newHashSet();
try {
ResultSet resultSet = statement.executeQuery();
-
-
while (resultSet.next()) {
- List<Object> pkList = Lists.newArrayListWithCapacity(pkNames.size());
- for (int i = 1; i <= pkCount; i++) {
- Object pk = resultSet.getObject(i);
- pkList.add(pk);
- }
- String pk = table.toPkStr(pkList);
+ String pk = resultSet.getString(1);
result.add(pk);
}
statement.close();
@@ -152,9 +148,7 @@
public ResultSet getDataToUpdate(Date fromDate) throws SQLException {
- String sql = fromDate == null ?
- table.getDataToUpdateQueryWithNull() :
- table.getDataToUpdateQuery();
+ String sql = table.getSelectDataToUpdateQuery(fromDate);
PreparedStatement statement = connection.prepareStatement(sql);
if (table.isWithUpdateDateColumn() &&
@@ -164,8 +158,6 @@
statement.setFetchSize(1000);
ResultSet result = statement.executeQuery();
-// // to be able to reward on resultSet
-// ((RowSet)result).setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
return result;
}
@@ -291,7 +283,7 @@
if (table.isWithUpdateDateColumn()) {
- String sql = table.getMaxUpdateDateQuery();
+ String sql = table.getSelectMaxUpdateDateQuery();
PreparedStatement statement = connection.prepareStatement(sql);
try {
@@ -307,11 +299,9 @@
return result;
}
- public long getCountDataToUpdate(Date fromDate) throws SQLException {
+ public long countDataToUpdate(Date fromDate) throws SQLException {
- String sql = fromDate == null ?
- table.getCountDataToUpdateQueryWithNull() :
- table.getCountDataToUpdateQuery();
+ String sql = table.getCountDataToUpdateQuery(fromDate);
PreparedStatement statement = connection.prepareStatement(sql);
if (table.isWithUpdateDateColumn() &&
@@ -362,4 +352,8 @@
}
}
}
+
+ public ReferentialSynchroTableMetadata getTable() {
+ return table;
+ }
}
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/ReferentialSynchroSpecificTableTask.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/ReferentialSynchroSpecificTableTask.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/ReferentialSynchroSpecificTableTask.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,63 @@
+package fr.ifremer.adagio.core.service.technical.synchro.specific;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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.adagio.core.service.technical.synchro.ReferentialSynchroDatabaseMetadata;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTable;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableTool;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created on 1/15/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public interface ReferentialSynchroSpecificTableTask {
+
+ /**
+ * @return the table on which the task can be apply.
+ */
+ ReferentialSynchroTable getTable();
+
+ /**
+ * Given the extra rows of the local db, transform them to reinject them
+ * after in the current table.
+ *
+ * @param dbMetas
+ * @param localDao dao of the local db
+ * @param remoteDao dao of the remote db
+ * @param extraRows extra rows of the local db to transform
+ * @return transformed extra rows of the local db
+ */
+ Map<List<Object>, Object[]> transformExtraLocalData(ReferentialSynchroDatabaseMetadata dbMetas,
+ ReferentialSynchroTableTool localDao,
+ ReferentialSynchroTableTool remoteDao,
+ Map<List<Object>, Object[]> extraRows) throws SQLException;
+
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/ReferentialSynchroSpecificTableTask.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselFeaturesReferentialSynchroSpecificTableTaskImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselFeaturesReferentialSynchroSpecificTableTaskImpl.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselFeaturesReferentialSynchroSpecificTableTaskImpl.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,83 @@
+package fr.ifremer.adagio.core.service.technical.synchro.specific;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Maps;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroDatabaseMetadata;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTable;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableMetadata;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableTool;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created on 1/15/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class VesselFeaturesReferentialSynchroSpecificTableTaskImpl implements ReferentialSynchroSpecificTableTask {
+ @Override
+ public ReferentialSynchroTable getTable() {
+ return ReferentialSynchroTable.VESSEL_FEATURES;
+ }
+
+ @Override
+ public Map<List<Object>, Object[]> transformExtraLocalData(ReferentialSynchroDatabaseMetadata dbMetas,
+ ReferentialSynchroTableTool localDao,
+ ReferentialSynchroTableTool remoteDao,
+ Map<List<Object>, Object[]> extraRows) throws SQLException {
+
+ // get all vessel codes already existing in remove db
+
+ ReferentialSynchroTableMetadata vesselTable =
+ dbMetas.getTable(ReferentialSynchroTable.VESSEL.name());
+
+ ReferentialSynchroTableTool remoteVesselDao =
+ new ReferentialSynchroTableTool(remoteDao, vesselTable);
+
+ Set<String> existingVesselCodes = remoteVesselDao.getExistingPrimaryKeys();
+
+ ReferentialSynchroTableMetadata table = localDao.getTable();
+
+ int columnIndex = table.getColumnIndex("vessel_fk");
+
+ Map<List<Object>, Object[]> result = Maps.newHashMap();
+
+ for (Map.Entry<List<Object>, Object[]> entry : extraRows.entrySet()) {
+ Object[] row = entry.getValue();
+ Object vesselCode = row[columnIndex];
+ if (!existingVesselCodes.contains(String.valueOf(vesselCode))) {
+
+ // really a features from a the local db (temporary data for example, keep it)
+ result.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return result;
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselFeaturesReferentialSynchroSpecificTableTaskImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,83 @@
+package fr.ifremer.adagio.core.service.technical.synchro.specific;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Maps;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroDatabaseMetadata;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTable;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableMetadata;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableTool;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created on 1/15/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl implements ReferentialSynchroSpecificTableTask {
+ @Override
+ public ReferentialSynchroTable getTable() {
+ return ReferentialSynchroTable.VESSEL_REGISTRATION_PERIOD;
+ }
+
+ @Override
+ public Map<List<Object>, Object[]> transformExtraLocalData(ReferentialSynchroDatabaseMetadata dbMetas,
+ ReferentialSynchroTableTool localDao,
+ ReferentialSynchroTableTool remoteDao,
+ Map<List<Object>, Object[]> extraRows) throws SQLException {
+
+ // get all vessel codes already existing in remove db
+
+ ReferentialSynchroTableMetadata vesselTable =
+ dbMetas.getTable(ReferentialSynchroTable.VESSEL.name());
+
+ ReferentialSynchroTableTool remoteVesselDao =
+ new ReferentialSynchroTableTool(remoteDao, vesselTable);
+
+ Set<String> existingVesselCodes = remoteVesselDao.getExistingPrimaryKeys();
+
+ ReferentialSynchroTableMetadata table = localDao.getTable();
+
+ int columnIndex = table.getColumnIndex("vessel_fk");
+
+ Map<List<Object>, Object[]> result = Maps.newHashMap();
+
+ for (Map.Entry<List<Object>, Object[]> entry : extraRows.entrySet()) {
+ Object[] row = entry.getValue();
+ Object vesselCode = row[columnIndex];
+ if (!existingVesselCodes.contains(String.valueOf(vesselCode))) {
+
+ // really a features from a the local db (temporary data for example, keep it)
+ result.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return result;
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/specific/VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-15 12:45:59 UTC (rev 1487)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -64,6 +64,7 @@
import fr.ifremer.tutti.persistence.service.BenthosBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.CatchBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.CruisePersistenceService;
+import fr.ifremer.tutti.persistence.service.DatabaseCheckPersistenceService;
import fr.ifremer.tutti.persistence.service.FishingOperationPersistenceService;
import fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceService;
import fr.ifremer.tutti.persistence.service.MarineLitterBatchPersistenceService;
@@ -134,6 +135,9 @@
protected AttachmentPersistenceService attachmentService;
@Autowired
+ protected DatabaseCheckPersistenceService databaseCheckPersistenceService;
+
+ @Autowired
protected CacheService cacheService;
@Autowired
@@ -222,10 +226,14 @@
individualObservationBatchService.init();
protocolService.init();
attachmentService.init();
+ databaseCheckPersistenceService.init();
TuttiEnumerationFile enumerationFile = getEnumerationFile();
batchVracPredicate = TuttiEntities.newSpeciesAbleBatchCategoryPredicate(enumerationFile.PMFM_ID_SORTED_UNSORTED, enumerationFile.QUALITATIVE_VRAC_ID);
+
+ // check database is sane
+ databaseCheckPersistenceService.check();
}
protected boolean close;
@@ -252,6 +260,7 @@
individualObservationBatchService.close();
protocolService.close();
attachmentService.close();
+ databaseCheckPersistenceService.close();
TuttiPersistenceServiceLocator.close();
}
}
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,44 @@
+package fr.ifremer.tutti.persistence.service;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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.TuttiPersistenceServiceImplementor;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * To fix some errors in db.
+ *
+ * Created on 1/15/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+@Transactional(readOnly = true)
+public interface DatabaseCheckPersistenceService extends TuttiPersistenceServiceImplementor {
+
+ @Transactional(readOnly = false)
+ public void check();
+
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,98 @@
+package fr.ifremer.tutti.persistence.service;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
+import fr.ifremer.adagio.core.dao.data.vessel.feature.physical.VesselFeaturesImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.FlushMode;
+import org.hibernate.Query;
+import org.hibernate.classic.Session;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * To fix some errors in db.
+ * <p/>
+ * Created on 1/15/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+@Service("databaseCheckPersistenceService")
+public class DatabaseCheckPersistenceServiceImpl extends AbstractPersistenceService
+ implements DatabaseCheckPersistenceService {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(DatabaseCheckPersistenceServiceImpl.class);
+
+ @Override
+ public void check() {
+ checkVesselFeatures();
+ }
+
+ public void checkVesselFeatures() {
+
+ // get all VESSEL_FEATURES with more than one unclosed period
+ Session currentSession = getCurrentSession();
+
+ Query query = currentSession.createQuery("SELECT vessel.code FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL GROUP BY vessel.code HAVING COUNT(id)>1");
+ List<String> vesselCodes = query.list();
+
+ if (CollectionUtils.isEmpty(vesselCodes)) {
+ if (log.isInfoEnabled()) {
+ log.info("vesselFeatures are sane");
+ }
+ return;
+ }
+
+ for (String vesselCode : vesselCodes) {
+
+ // Get all features having a null endDatetime
+ Query query1 = currentSession.createQuery("SELECT id FROM " + VesselFeaturesImpl.class.getName() + " WHERE endDateTime IS NULL AND vessel.code = :vesselCode ORDER BY startDateTime DESC");
+ query1.setString("vesselCode", vesselCode);
+
+ List<Integer> vesselFeaturesIds = Lists.<Integer>newArrayList(query1.list());
+
+ // remove first id (this one will stay on db)
+ vesselFeaturesIds.remove(0);
+
+ // remove all others ids
+ if (log.isInfoEnabled()) {
+ log.info("Remove vesselFeature with id: " + vesselFeaturesIds);
+ }
+ currentSession.createQuery("DELETE FROM " + VesselFeaturesImpl.class.getName() + " WHERE id in :id").
+ setParameterList("id", vesselFeaturesIds).executeUpdate();
+ }
+
+ getCurrentSession().setFlushMode(FlushMode.COMMIT);
+ getCurrentSession().flush();
+ }
+
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/DatabaseCheckPersistenceServiceImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.synchro.specific.ReferentialSynchroSpecificTableTask
===================================================================
--- trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.synchro.specific.ReferentialSynchroSpecificTableTask (rev 0)
+++ trunk/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.adagio.core.service.technical.synchro.specific.ReferentialSynchroSpecificTableTask 2014-01-15 16:34:18 UTC (rev 1488)
@@ -0,0 +1,2 @@
+fr.ifremer.adagio.core.service.technical.synchro.specific.VesselFeaturesReferentialSynchroSpecificTableTaskImpl
+fr.ifremer.adagio.core.service.technical.synchro.specific.VesselRegistrationPeriodReferentialSynchroSpecificTableTaskImpl
\ No newline at end of file
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java 2014-01-15 12:45:59 UTC (rev 1487)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java 2014-01-15 16:34:18 UTC (rev 1488)
@@ -46,7 +46,7 @@
ReferentialSynchroTableMetadata table = new ReferentialSynchroTableMetadata();
String pkStr = table.toPkStr(pk);
- Assert.assertEquals("~|a~|null~|3", pkStr);
+ Assert.assertEquals("a~~null~~3", pkStr);
List<Object> fromPkStr = table.fromPkStr(pkStr);
1
0
r1487 - in trunk/tutti-ui-swing/src/main/help: en fr
by lkaufmann@users.forge.codelutin.com Jan. 15, 2014
by lkaufmann@users.forge.codelutin.com Jan. 15, 2014
Jan. 15, 2014
Author: lkaufmann
Date: 2014-01-15 13:45:59 +0100 (Wed, 15 Jan 2014)
New Revision: 1487
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1487
Log:
Replace tutti by allegro campagne in help pages
Modified:
trunk/tutti-ui-swing/src/main/help/en/config.html
trunk/tutti-ui-swing/src/main/help/en/dbManager.html
trunk/tutti-ui-swing/src/main/help/en/editCruise.html
trunk/tutti-ui-swing/src/main/help/en/editFishingOperation.html
trunk/tutti-ui-swing/src/main/help/en/editProgram.html
trunk/tutti-ui-swing/src/main/help/en/editProtocol.html
trunk/tutti-ui-swing/src/main/help/en/editSampleCategory.html
trunk/tutti-ui-swing/src/main/help/en/faq.html
trunk/tutti-ui-swing/src/main/help/en/index.html
trunk/tutti-ui-swing/src/main/help/en/manageTemporaryReferential.html
trunk/tutti-ui-swing/src/main/help/en/report.html
trunk/tutti-ui-swing/src/main/help/en/selectCruise.html
trunk/tutti-ui-swing/src/main/help/fr/config.html
trunk/tutti-ui-swing/src/main/help/fr/dbManager.html
trunk/tutti-ui-swing/src/main/help/fr/editCruise.html
trunk/tutti-ui-swing/src/main/help/fr/editProgram.html
trunk/tutti-ui-swing/src/main/help/fr/editProtocol.html
trunk/tutti-ui-swing/src/main/help/fr/editSampleCategory.html
trunk/tutti-ui-swing/src/main/help/fr/faq.html
trunk/tutti-ui-swing/src/main/help/fr/fonctionnalites_transversales.html
trunk/tutti-ui-swing/src/main/help/fr/index.html
trunk/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html
trunk/tutti-ui-swing/src/main/help/fr/menu.html
trunk/tutti-ui-swing/src/main/help/fr/report.html
trunk/tutti-ui-swing/src/main/help/fr/selectCruise.html
Modified: trunk/tutti-ui-swing/src/main/help/en/config.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/config.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/config.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Configuration</title>
+ <title>Allegro Campagne - Configuration</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/dbManager.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/dbManager.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/dbManager.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Gérer la base de données</title>
+ <title>Allegro Campagne - Gérer la base de données</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/editCruise.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/editCruise.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/editCruise.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Créer / Éditer une campagne</title>
+ <title>Allegro Campagne - Créer / Éditer une campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/editFishingOperation.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/editFishingOperation.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/editFishingOperation.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Saisie du trait et de la capture</title>
+ <title>Allegro Campagne - Saisie du trait et de la capture</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/editProgram.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/editProgram.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/editProgram.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8"/>
- <title>Tutti - Éditer une série de campagne</title>
+ <title>Allegro Campagne - Éditer une série de campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/editProtocol.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/editProtocol.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/editProtocol.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Éditer un protocole</title>
+ <title>Allegro Campagne - Éditer un protocole</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/editSampleCategory.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/editSampleCategory.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/editSampleCategory.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Configurer les catégories</title>
+ <title>Allegro Campagne - Configurer les catégories</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/faq.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/faq.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/faq.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Aide en ligne (Foire aux questions)</title>
+ <title>Allegro Campagne - Aide en ligne (Foire aux questions)</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/index.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/index.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/index.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8">
- <title>Tutti - Aide en ligne</title>
+ <title>Allegro Campagne - Aide en ligne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/manageTemporaryReferential.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/manageTemporaryReferential.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/manageTemporaryReferential.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Gérer les référentiels temporaires</title>
+ <title>Allegro Campagne - Gérer les référentiels temporaires</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/report.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/report.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/report.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8"/>
- <title>Tutti - Générer des rapports</title>
+ <title>Allegro Campagne - Générer des rapports</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/en/selectCruise.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/en/selectCruise.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/en/selectCruise.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Choisir la campagne</title>
+ <title>Allegro Campagne - Choisir la campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/config.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/config.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/config.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Configuration</title>
+ <title>Allegro Campagne - Configuration</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/dbManager.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/dbManager.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/dbManager.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Gérer la base de données</title>
+ <title>Allegro Campagne - Gérer la base de données</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/editCruise.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/editCruise.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/editCruise.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Créer / Éditer une campagne</title>
+ <title>Allegro Campagne - Créer / Éditer une campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/editProgram.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/editProgram.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/editProgram.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8"/>
- <title>Tutti - Éditer une série de campagne</title>
+ <title>Allegro Campagne - Éditer une série de campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/editProtocol.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/editProtocol.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/editProtocol.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Éditer un protocole</title>
+ <title>Allegro Campagne - Éditer un protocole</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/editSampleCategory.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/editSampleCategory.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/editSampleCategory.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Configurer les catégories</title>
+ <title>Allegro Campagne - Configurer les catégories</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/faq.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/faq.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/faq.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Aide en ligne (Foire aux questions)</title>
+ <title>Allegro Campagne - Aide en ligne (Foire aux questions)</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/fonctionnalites_transversales.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/fonctionnalites_transversales.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/fonctionnalites_transversales.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Aide en ligne (Fonctionnalités transversales)</title>
+ <title>Allegro Campagne - Aide en ligne (Fonctionnalités transversales)</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/index.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/index.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/index.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8">
- <title>Tutti - Aide en ligne</title>
+ <title>Allegro Campagne - Aide en ligne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Gérer les référentiels temporaires</title>
+ <title>Allegro Campagne - Gérer les référentiels temporaires</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/menu.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/menu.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/menu.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Aide en ligne (Menu)</title>
+ <title>Allegro Campagne - Aide en ligne (Menu)</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
@@ -249,7 +249,7 @@
<h3>Aide<a name="menu_aide_aide"></a></h3>
Permet d'accéder à l'aide sur l'application.
<h3>Site<a name="menu_aide_site"></a></h3>
-En mode connecté, permet d'accéder au site du projet Tutti qui coordonne le
+En mode connecté, permet d'accéder au site du projet Allegro Campagne qui coordonne le
développement de cette application.
<h3>À propos<a name="menu_aide_about"></a></h3>
Permet d'accéder aux informations légales sur l’application, à des
Modified: trunk/tutti-ui-swing/src/main/help/fr/report.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/report.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/report.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -26,7 +26,7 @@
<head>
<meta charset="utf-8"/>
- <title>Tutti - Générer des rapports</title>
+ <title>Allegro Campagne - Générer des rapports</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
Modified: trunk/tutti-ui-swing/src/main/help/fr/selectCruise.html
===================================================================
--- trunk/tutti-ui-swing/src/main/help/fr/selectCruise.html 2014-01-15 08:43:26 UTC (rev 1486)
+++ trunk/tutti-ui-swing/src/main/help/fr/selectCruise.html 2014-01-15 12:45:59 UTC (rev 1487)
@@ -25,7 +25,7 @@
-->
<meta charset="utf-8">
- <title>Tutti - Choisir la campagne</title>
+ <title>Allegro Campagne - Choisir la campagne</title>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script>
1
0
Jan. 15, 2014
Author: tchemit
Date: 2014-01-15 09:43:26 +0100 (Wed, 15 Jan 2014)
New Revision: 1486
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1486
Log:
refs #4124: [TECH] Mise ?\195?\160 jour de r?\195?\169f?\195?\169rentiel - Erreur sur les donn?\195?\169es suite ?\195?\160 la mise ?\195?\160 jour (rewrite synchro service)
Added:
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroDatabaseMetadata.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroResult.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTable.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java
trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/
trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java
Removed:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java
trunk/tutti-service/src/license/THIRD-PARTY.properties
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java
trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiDbUpdaterCallBack.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroDatabaseMetadata.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroDatabaseMetadata.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroDatabaseMetadata.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,136 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import fr.ifremer.shared.application.ApplicationTechnicalException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.HibernateException;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.mapping.Table;
+import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
+import org.hibernate.tool.hbm2ddl.TableMetadata;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.Map;
+import java.util.Set;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class ReferentialSynchroDatabaseMetadata {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ReferentialSynchroDatabaseMetadata.class);
+
+ /**
+ * Load the datasource schema for the given connection and dialect.
+ *
+ * @param connection connection of the data source
+ * @param dialect dialect to use
+ * @return the datasource schema
+ */
+ public static ReferentialSynchroDatabaseMetadata loadDatabaseMetadata(Connection connection,
+ Dialect dialect) {
+ ReferentialSynchroDatabaseMetadata result = new ReferentialSynchroDatabaseMetadata(connection, dialect);
+ for (ReferentialSynchroTable tuttiTable : ReferentialSynchroTable.values()) {
+
+ String tableName = tuttiTable.name();
+ if (log.isDebugEnabled()) {
+ log.debug("Load metas of table: " + tableName);
+ }
+ result.getTable(tableName);
+ }
+ return result;
+ }
+
+ protected final DatabaseMetadata delegate;
+
+ protected final Map<String, ReferentialSynchroTableMetadata> tables;
+
+ protected final DatabaseMetaData meta;
+
+ public ReferentialSynchroDatabaseMetadata(Connection connection, Dialect dialect) {
+ Preconditions.checkNotNull(connection);
+ Preconditions.checkNotNull(dialect);
+ try {
+ this.delegate = new DatabaseMetadata(connection, dialect, true);
+ this.meta = connection.getMetaData();
+ } catch (SQLException e) {
+ throw new ApplicationTechnicalException(_("tutti.persistence.dbMetadata.instanciation.error", connection), e);
+ }
+ tables = Maps.newTreeMap();
+ }
+
+ public ReferentialSynchroTableMetadata getTable(String name) throws HibernateException {
+ return getTable(name, "PUBLIC", null, false);
+ }
+
+ public int getTableCount() {
+ return tables.size();
+ }
+
+ public Set<String> getTableNames() {
+ Set<String> result = Sets.newHashSet();
+ for (ReferentialSynchroTableMetadata tableMetadata : tables.values()) {
+ result.add(tableMetadata.getName());
+ }
+ return result;
+ }
+
+ protected ReferentialSynchroTableMetadata getTable(String name,
+ String schema,
+ String catalog,
+ boolean isQuoted) throws HibernateException {
+ String key = Table.qualify(catalog, schema, name);
+ ReferentialSynchroTableMetadata tuttiTableMetadata = tables.get(key);
+ if (tuttiTableMetadata == null) {
+
+ TableMetadata tableMetadata = delegate.getTableMetadata(
+ name, schema, catalog, isQuoted);
+ Preconditions.checkNotNull(tableMetadata,
+ "Could not find db table " + name);
+ ReferentialSynchroTable tuttiTable = ReferentialSynchroTable.valueOf(name);
+ Preconditions.checkNotNull(tuttiTable,
+ "Could not find db table " + tuttiTable);
+ tuttiTableMetadata = new ReferentialSynchroTableMetadata(tableMetadata, meta);
+ Preconditions.checkNotNull(tuttiTableMetadata,
+ "Could not find db table " + name);
+ tables.put(key, tuttiTableMetadata);
+ }
+ return tuttiTableMetadata;
+ }
+}
\ No newline at end of file
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroDatabaseMetadata.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroResult.java (from rev 1477, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeResult.java)
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroResult.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroResult.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,208 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence API
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 - 2013 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 com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import fr.ifremer.tutti.persistence.ProgressionModel;
+
+import java.sql.Timestamp;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Result of a referential synchronize operation.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.0
+ */
+public class ReferentialSynchroResult {
+
+ protected Exception error;
+
+ /**
+ * Number of rows detected to update (per table).
+ *
+ * @since 1.0
+ */
+ protected final Map<String, Integer> rowHits = Maps.newTreeMap();
+
+ /**
+ * Number of insert done (per table).
+ *
+ * @since 1.0
+ */
+ protected final Map<String, Integer> insertHits = Maps.newTreeMap();
+
+ /**
+ * Number of update done (per table).
+ *
+ * @since 1.0
+ */
+ protected final Map<String, Integer> updateHits = Maps.newTreeMap();
+
+ /**
+ * timestamp of last update date (per table).
+ *
+ * @since 1.0
+ */
+ protected final Map<String, Timestamp> updateDateHits = Maps.newTreeMap();
+
+ /**
+ * All table treated.
+ *
+ * @since 1.0
+ */
+ protected final Set<String> tableNames = Sets.newHashSet();
+
+ protected String localUrl;
+
+ protected String remoteUrl;
+
+ protected final ProgressionModel progressionModel = new ProgressionModel();
+
+ public ReferentialSynchroResult() {
+ }
+
+ public ReferentialSynchroResult(String localUrl, String remoteUrl) {
+ this.localUrl = localUrl;
+ this.remoteUrl = remoteUrl;
+ }
+
+ public void setLocalUrl(String localUrl) {
+ this.localUrl = localUrl;
+ }
+
+ public void setRemoteUrl(String remoteUrl) {
+ this.remoteUrl = remoteUrl;
+ }
+
+ public boolean isSuccess() {
+ return error == null;
+ }
+
+ public Exception getError() {
+ return error;
+ }
+
+ public void setError(Exception error) {
+ this.error = error;
+ }
+
+ public ProgressionModel getProgressionModel() {
+ return progressionModel;
+ }
+
+ public Set<String> getTableNames() {
+ return ImmutableSet.copyOf(tableNames);
+ }
+
+ public int getTotalRows() {
+ int result = 0;
+ for (Integer nb : rowHits.values()) {
+ result += nb;
+ }
+ return result;
+ }
+
+ public int getTotalInserts() {
+ int result = 0;
+ for (Integer nb : insertHits.values()) {
+ result += nb;
+ }
+ return result;
+ }
+
+ public int getTotalUpdates() {
+ int result = 0;
+ for (Integer nb : updateHits.values()) {
+ result += nb;
+ }
+ return result;
+ }
+
+ public int getNbRows(String tableName) {
+ Integer result = rowHits.get(tableName);
+ if (result == null) {
+ result = 0;
+ }
+ return result;
+ }
+
+ public int getNbInserts(String tableName) {
+ Integer result = insertHits.get(tableName);
+ if (result == null) {
+ result = 0;
+ }
+ return result;
+ }
+
+ public int getNbUpdates(String tableName) {
+ Integer result = updateHits.get(tableName);
+ if (result == null) {
+ result = 0;
+ }
+ return result;
+ }
+
+ public void addRows(String tableName, int nb) {
+ if (nb > 0) {
+ rowHits.put(tableName, getNbRows(tableName) + nb);
+ }
+ }
+
+ public void addUpdates(String tableName, int nb) {
+ if (nb > 0) {
+ updateHits.put(tableName, getNbUpdates(tableName) + nb);
+ }
+ }
+
+ public void addInserts(String tableName, int nb) {
+ if (nb > 0) {
+ insertHits.put(tableName, getNbInserts(tableName) + nb);
+ }
+ }
+
+ public Timestamp getUpdateDate(String tableName) {
+ return updateDateHits.get(tableName);
+ }
+
+ public void setUpdateDate(String tableName, Timestamp t) {
+ updateDateHits.put(tableName, t);
+ }
+
+ public void addTableName(String tableName) {
+ tableNames.add(tableName);
+ }
+
+ public String getLocalUrl() {
+ return localUrl;
+ }
+
+ public String getRemoteUrl() {
+ return remoteUrl;
+ }
+}
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroService.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroService.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,78 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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.hibernate.dialect.Dialect;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Properties;
+
+/**
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
+public interface ReferentialSynchroService {
+
+ /**
+ * Get the db connexion informations for the internal data source.
+ *
+ * @return the db connexion for the internal data source
+ */
+ Properties getLocalConnectionProperties();
+
+ /**
+ * Gets the dialect used by the local database.
+ *
+ * @return the dialect used by the local database.
+ */
+ Dialect getLocalDialect();
+
+ /**
+ * Prepare the synchronize operation from the local data database supported
+ * by this service, says just compute nb rows to update for each table and
+ * update the result model.
+ *
+ * @param remoteConnectionProperties connection properties of the remote
+ * database used to synchronize referential
+ * @param result result of the operation
+ */
+ void prepare(Properties remoteConnectionProperties,
+ ReferentialSynchroResult result);
+
+ /**
+ * Launch the synchronize operation from the local data database supported
+ * by this service.
+ *
+ * @param remoteConnectionProperties connection properties of the remote
+ * database used to synchronize referential
+ * @param result model
+ */
+ void synchronize(Properties remoteConnectionProperties,
+ ReferentialSynchroResult result);
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,646 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
+import com.google.common.io.Closeables;
+import fr.ifremer.tutti.persistence.ProgressionModel;
+import org.apache.commons.lang3.time.DateUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.tool.hbm2ddl.ColumnMetadata;
+import org.nuiton.util.TimeLog;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataRetrievalFailureException;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.jdbc.support.JdbcUtils;
+import org.springframework.stereotype.Service;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+@Service("referentialSynchroService")
+public class ReferentialSynchroServiceImpl implements ReferentialSynchroService {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ReferentialSynchroServiceImpl.class);
+
+ private static final TimeLog TIME =
+ new TimeLog(ReferentialSynchroServiceImpl.class);
+
+ @Autowired
+ protected DriverManagerDataSource dataSource;
+
+ @Autowired
+ protected SessionFactory sessionFactory;
+
+ protected Dialect localDialect;
+
+ protected Properties dbconnexionProperties;
+
+ @Override
+ public Properties getLocalConnectionProperties() {
+ if (dbconnexionProperties == null) {
+ dbconnexionProperties = new Properties();
+
+ dbconnexionProperties.put(Environment.URL, dataSource.getUrl());
+ dbconnexionProperties.put(Environment.USER, dataSource.getUsername());
+ dbconnexionProperties.put(Environment.PASS, dataSource.getPassword());
+ }
+ return dbconnexionProperties;
+ }
+
+ @Override
+ public Dialect getLocalDialect() {
+ if (localDialect == null) {
+ localDialect = ((SessionFactoryImplementor) sessionFactory).getSettings().getDialect();
+ }
+ return localDialect;
+ }
+
+ @Override
+ public void prepare(Properties remoteConnectionProperties, ReferentialSynchroResult result) {
+ Preconditions.checkNotNull(result);
+ Preconditions.checkNotNull(remoteConnectionProperties);
+
+
+ result.setLocalUrl(getUrl(getLocalConnectionProperties()));
+ result.setRemoteUrl(getUrl(remoteConnectionProperties));
+
+ dbconnexionProperties = null;
+ localDialect = null;
+
+ Connection localConnection = null;
+ Connection remoteConnection = null;
+ try {
+
+ ProgressionModel progressionModel = result.getProgressionModel();
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.prepare.step1"));
+
+ // create local connection
+ localConnection = createConnection(getLocalConnectionProperties());
+
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.prepare.step2"));
+
+ // create remote Connection
+ remoteConnection = createConnection(remoteConnectionProperties);
+
+ // load metas
+ ReferentialSynchroDatabaseMetadata localMeta =
+ ReferentialSynchroDatabaseMetadata.loadDatabaseMetadata(localConnection, getLocalDialect());
+
+ ReferentialSynchroDatabaseMetadata remoteMeta =
+ ReferentialSynchroDatabaseMetadata.loadDatabaseMetadata(remoteConnection, getLocalDialect());
+
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.prepare.step3"));
+
+ // check schema
+ try {
+ checkSchemas(localMeta, remoteMeta);
+ } catch (DataRetrievalFailureException e) {
+ result.setError(e);
+ }
+
+ if (result.isSuccess()) {
+
+ // prepare model (compute update date, count rows to update,...)
+
+ for (ReferentialSynchroTable tuttiTable : ReferentialSynchroTable.values()) {
+
+ long t0 = TimeLog.getTime();
+
+ String tableName = tuttiTable.name();
+
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.prepare.step4", tableName));
+
+ ReferentialSynchroTableMetadata table = remoteMeta.getTable(tableName);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Prepare table: " + tableName);
+ }
+ prepareTable(table,
+ localConnection,
+ remoteConnection,
+ result);
+
+ TIME.log(t0, "prepare table " + tableName);
+ }
+
+ long totalRows = result.getTotalRows();
+ if (log.isInfoEnabled()) {
+ log.info("Total rows to update: " + totalRows);
+ }
+ localConnection.rollback();
+ }
+ } catch (SQLException e) {
+ try {
+ if (localConnection != null) {
+ localConnection.rollback();
+ }
+ } catch (SQLException e1) {
+
+ // ignore the rolback error
+ }
+ result.setError(e);
+ } finally {
+ JdbcUtils.closeConnection(remoteConnection);
+ JdbcUtils.closeConnection(localConnection);
+ }
+ }
+
+ @Override
+ public void synchronize(Properties remoteConnectionProperties, ReferentialSynchroResult result) {
+ Preconditions.checkNotNull(result);
+ Preconditions.checkNotNull(remoteConnectionProperties);
+
+ Connection localConnection = null;
+ Connection remoteConnection = null;
+ try {
+
+ // create local connection
+ localConnection = createConnection(getLocalConnectionProperties());
+
+ // create remote Connection
+ remoteConnection = createConnection(remoteConnectionProperties);
+
+ // load metas
+ ReferentialSynchroDatabaseMetadata remoteMeta =
+ ReferentialSynchroDatabaseMetadata.loadDatabaseMetadata(remoteConnection, getLocalDialect());
+
+ // set total in progression model
+ ProgressionModel progressionModel = result.getProgressionModel();
+ progressionModel.setTotal(result.getTotalRows());
+
+ // prepare target (desactivate constraints)
+ prepareSynch(localConnection);
+
+ try {
+
+ for (ReferentialSynchroTable tuttiTable : ReferentialSynchroTable.values()) {
+
+ long t0 = TimeLog.getTime();
+
+ String tableName = tuttiTable.name();
+
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.synchronize.step1", tableName));
+
+ ReferentialSynchroTableMetadata table = remoteMeta.getTable(tableName);
+
+ if (log.isInfoEnabled()) {
+ log.info("Synchronize table: " + tableName);
+ }
+ long countToUpdate = result.getNbRows(tableName);
+
+ if (countToUpdate > 0) {
+
+ synchronizeTable(table,
+ localConnection,
+ remoteConnection,
+ result);
+ }
+
+ TIME.log(t0, "synchronize table " + tableName);
+ }
+ if (log.isInfoEnabled()) {
+ long totalInserts = result.getTotalInserts();
+ long totalUpdates = result.getTotalUpdates();
+ log.info("Total rows to treat: " + result.getTotalRows());
+ log.info("Total rows inserted: " + totalInserts);
+ log.info("Total rows updated: " + totalUpdates);
+ log.info("Total rows treated: " + (totalInserts + totalUpdates));
+ }
+ } finally {
+ releaseSynch(localConnection);
+ }
+
+ progressionModel.setMessage(_("tutti.persistence.synchronizeReferential.synchronize.step2"));
+
+ localConnection.commit();
+
+ } catch (SQLException e) {
+ try {
+ if (localConnection != null) {
+ localConnection.rollback();
+ }
+ } catch (SQLException e1) {
+
+ // ignore the rolback error
+ }
+ result.setError(e);
+ } finally {
+ JdbcUtils.closeConnection(remoteConnection);
+ JdbcUtils.closeConnection(localConnection);
+ }
+ }
+
+ /**
+ * Check that the tow given datasource shemas are compatible for a
+ * synchronize operation (same tables with same columns).
+ * <p/>
+ * If schemas are incompatible, then a
+ * {@link DataRetrievalFailureException} exception will be thrown.
+ *
+ * @param schema1 schema 1 to check
+ * @param schema2 schema 2 to check
+ */
+ protected void checkSchemas(ReferentialSynchroDatabaseMetadata schema1,
+ ReferentialSynchroDatabaseMetadata schema2) {
+ Set<String> internalSchemaTableNames = schema1.getTableNames();
+ Set<String> externalSchemaTableNames = schema2.getTableNames();
+ if (!internalSchemaTableNames.equals(externalSchemaTableNames)) {
+ throw new DataRetrievalFailureException("Incompatible schemas");
+ }
+ for (String tableName : internalSchemaTableNames) {
+ ReferentialSynchroTableMetadata internalTable = schema1.getTable(tableName);
+ ReferentialSynchroTableMetadata externalTable = schema2.getTable(tableName);
+ Set<String> internalColumnNames = internalTable.getColumnNames();
+ Set<String> externalColumnNames = externalTable.getColumnNames();
+ if (!internalColumnNames.equals(externalColumnNames)) {
+ throw new DataRetrievalFailureException("Incompatible schema of table: " + tableName);
+ }
+ for (String columnName : internalColumnNames) {
+ ColumnMetadata internalColumn = internalTable.getColumnMetadata(columnName);
+ ColumnMetadata externalColumn = externalTable.getColumnMetadata(columnName);
+ String internalColumnTypeName = internalColumn.getTypeName();
+ String externalColumnTypeName = externalColumn.getTypeName();
+ if (!internalColumnTypeName.equals(externalColumnTypeName)) {
+ throw new DataRetrievalFailureException("Incompatible column type of table / column: " + tableName + " / " + columnName);
+ }
+ }
+ }
+ }
+
+ protected void prepareTable(ReferentialSynchroTableMetadata table,
+ Connection localConnection,
+ Connection remoteConnection,
+ ReferentialSynchroResult result) throws SQLException {
+
+ String tablePrefix = table.getTableLogPrefix();
+
+ String tableName = table.getName();
+
+ ReferentialSynchroTableTool localDao = new ReferentialSynchroTableTool(localConnection, table);
+
+ long localCount = localDao.count();
+
+ // get last updateDate used by local db
+ Timestamp updateDate = null;
+
+ if (localCount < 50000) {
+
+ // only use the update date on small table, for big table we will re-insert all the table content
+ updateDate = localDao.getLastUpdateDate();
+
+ if (updateDate != null) {
+
+ // just inscrements of 1 milisecond to not having same
+ updateDate = new Timestamp(DateUtils.setMilliseconds(updateDate, 0).getTime());
+ updateDate = new Timestamp(DateUtils.addSeconds(updateDate, 1).getTime());
+ }
+ }
+
+ ReferentialSynchroTableTool remoteDao = new ReferentialSynchroTableTool(remoteConnection, table);
+
+ long countToUpdate = remoteDao.getCountDataToUpdate(updateDate);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("%s nb rows to update: %s", tablePrefix, countToUpdate));
+ }
+
+ result.setUpdateDate(tableName, updateDate);
+ result.addRows(tableName, (int) countToUpdate);
+ }
+
+ protected void synchronizeTable(ReferentialSynchroTableMetadata table,
+ Connection localConnection,
+ Connection remoteConnection,
+ ReferentialSynchroResult result) throws SQLException {
+
+ String tableName = table.getName();
+
+ result.getProgressionModel().setMessage(_("tutti.persistence.synchronizeReferential.synchronizeTable", tableName));
+
+ String tablePrefix = table.getTableLogPrefix();
+
+ ReferentialSynchroTableTool localDao = new ReferentialSynchroTableTool(localConnection, table);
+ ReferentialSynchroTableTool remoteDao = new ReferentialSynchroTableTool(remoteConnection, table);
+
+ // get last updateDate used by local db
+ Date updateDate = result.getUpdateDate(tableName);
+
+ // get table count
+ long count = localDao.count();
+
+ // get existing ids in the local db
+ Set<String> existingIds = localDao.getExistingPrimaryKeys();
+
+ if (log.isDebugEnabled()) {
+ log.debug(tablePrefix + " existingIds: " + existingIds.size());
+ }
+
+ boolean bigTable = count > 50000;
+
+ // get data to update from remote db
+ ResultSet dataToUpdate = remoteDao.getDataToUpdate(
+ bigTable ? null : updateDate);
+
+ try {
+
+ if (bigTable) {
+
+ // big table update strategy
+ updateBigTable(localDao,
+ remoteDao,
+ table,
+ dataToUpdate,
+ result);
+ } else {
+
+ // small table update strategy
+ updateTable(localDao,
+ table,
+ dataToUpdate,
+ result);
+ }
+ dataToUpdate.close();
+ } finally {
+
+ Closeables.closeQuietly(localDao);
+ Closeables.closeQuietly(remoteDao);
+ JdbcUtils.closeResultSet(dataToUpdate);
+ }
+ }
+
+ /**
+ * To update the content of the given {@code table} on the local db,
+ * from the given {@code incomingData} of the remote db.
+ * <p/>
+ * The algorithm is pretty simple, for each row of the {@code incomingData},
+ * if exists on local table, then do an update, otherwise do a insert.
+ * <p/>
+ * As an update query is more expensive, we won't use this method for table
+ * with a lot of rows, we will prefer to use the {@code updateBigTable}
+ * method instead.
+ *
+ * @param localDao connection on the local db
+ * @param table table to update
+ * @param incomingData data to update from the remote db
+ * @param result where to store operation results
+ * @throws SQLException if any sql errors
+ */
+ protected void updateTable(ReferentialSynchroTableTool localDao,
+ ReferentialSynchroTableMetadata table,
+ ResultSet incomingData,
+ ReferentialSynchroResult result) throws SQLException {
+
+ // get existing ids in the local db
+ Set<String> existingIds = localDao.getExistingPrimaryKeys();
+
+ String tableName = table.getName();
+ String tablePrefix = table.getTableLogPrefix() + " - " + result.getNbRows(tableName);
+
+ result.addTableName(tableName);
+
+ int countR = 0;
+
+ while (incomingData.next()) {
+
+ List<Object> pk = table.getPk(incomingData);
+ String pkStr = table.toPkStr(pk);
+
+ boolean doUpdate = existingIds.contains(pkStr);
+
+ if (doUpdate) {
+
+ localDao.executeUpdate(pk, incomingData);
+
+ } else {
+
+ localDao.executeInsert(pk, incomingData);
+ }
+
+ countR++;
+
+ reportProgress(result, localDao, countR, tablePrefix);
+ }
+
+ localDao.flushQueries();
+
+ int insertCount = localDao.getInsertCount();
+ int updateCount = localDao.getUpdateCount();
+
+ result.addInserts(tableName, insertCount);
+ result.addUpdates(tableName, updateCount);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("%s done: %s (inserts: %s, updates: %s)", tablePrefix, countR, insertCount, updateCount));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("%s INSERT count: %s", tablePrefix, result.getNbInserts(tableName)));
+ log.debug(String.format("%s UPDATE count: %s", tablePrefix, result.getNbUpdates(tableName)));
+ }
+
+ result.getProgressionModel().increments(countR % 1000);
+ }
+
+ /**
+ * To update the content of the given {@code table} (with a lot of rows) on
+ * the local db, from the given {@code incomingData} of the remote db.
+ * <p/>
+ * We can't use the simple algorithm, since update queries cost too much
+ * and is not acceptable when talking on huge numbers of rows.
+ * <p/>
+ * Here is what to do :
+ * <ul>
+ * <li>Get form the local db the data which are not in remote db, keep them</li>
+ * <li>Delete local table content</li>
+ * <li>Insert remote table in local table</li>
+ * <li>Insert the saved extra rows from original table</li>
+ * </ul>
+ * In that way we will only perform some insert queries.
+ *
+ * @param localDao connection on the local db
+ * @param remoteDao connection on the local db
+ * @param table table to update
+ * @param incomingData data to update from the remote db
+ * @param result where to store operation results
+ * @throws SQLException if any sql errors
+ */
+ protected void updateBigTable(ReferentialSynchroTableTool localDao,
+ ReferentialSynchroTableTool remoteDao,
+ ReferentialSynchroTableMetadata table,
+ ResultSet incomingData,
+ ReferentialSynchroResult result) throws SQLException {
+
+ String tableName = table.getName();
+
+ result.addTableName(tableName);
+
+ String tablePrefix = table.getTableLogPrefix() + " - " + result.getNbRows(tableName);
+
+ // get existing ids in the local db
+ Set<String> existingIds = localDao.getExistingPrimaryKeys();
+
+ if (log.isDebugEnabled()) {
+ log.debug(tablePrefix + " local existingIds: " + existingIds.size());
+ }
+
+ Set<String> remoteExistingIds = remoteDao.getExistingPrimaryKeys();
+
+ if (log.isDebugEnabled()) {
+ log.debug(tablePrefix + " remote existingIds: " + existingIds.size());
+ }
+
+ existingIds.removeAll(remoteExistingIds);
+
+ if (log.isDebugEnabled()) {
+ log.debug(tablePrefix + " local data existingIds not in remote: " + existingIds);
+ }
+
+
+ // copy extra rows from local
+
+ Map<List<Object>, Object[]> extraRows = Maps.newLinkedHashMap();
+
+ for (String pkStr : existingIds) {
+
+ List<Object> pk = table.fromPkStr(pkStr);
+
+ Object[] extraRow = localDao.findByPk(pk);
+
+ extraRows.put(pk, extraRow);
+ }
+
+ // delete table
+ localDao.deleteAll();
+
+ int countR = 0;
+
+ // add all data from remote
+ while (incomingData.next()) {
+
+ List<Object> pk = table.getPk(incomingData);
+
+ localDao.executeInsert(pk, incomingData);
+
+ countR++;
+
+ reportProgress(result, localDao, countR, tablePrefix);
+ }
+
+ // re-add extra local rows
+ for (Map.Entry<List<Object>, Object[]> entry : extraRows.entrySet()) {
+
+ List<Object> pk = entry.getKey();
+ Object[] row = entry.getValue();
+ localDao.executeInsert(pk, row);
+
+ countR++;
+
+ reportProgress(result, localDao, countR, tablePrefix);
+ }
+
+ localDao.flushQueries();
+
+ int insertCount = localDao.getInsertCount();
+ result.addInserts(tableName, insertCount);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("%s done: %s (inserts: %s)", tablePrefix, countR, insertCount));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("%s INSERT count: %s", tablePrefix, result.getNbInserts(tableName)));
+ }
+
+ result.getProgressionModel().increments(countR % 1000);
+ }
+
+ protected void reportProgress(ReferentialSynchroResult result, ReferentialSynchroTableTool dao, int countR, String tablePrefix) {
+ if (countR % 1000 == 0) {
+ result.getProgressionModel().increments(1000);
+ }
+
+ if (countR % 10000 == 0) {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("%s Done: %s (inserts: %s, updates: %s)", tablePrefix, countR, dao.getInsertCount(), dao.getUpdateCount()));
+ }
+ }
+ }
+
+ Connection createConnection(Properties connectionProperties) throws SQLException {
+ return createConnection(
+ connectionProperties.getProperty(Environment.URL),
+ connectionProperties.getProperty(Environment.USER),
+ connectionProperties.getProperty(Environment.PASS)
+ );
+ }
+
+ String getUrl(Properties connectionProperties) {
+ return connectionProperties.getProperty(Environment.URL);
+ }
+
+ Connection createConnection(String jdbcUrl,
+ String user,
+ String password) throws SQLException {
+ Connection connection = DriverManager.getConnection(jdbcUrl,
+ user,
+ password);
+ connection.setAutoCommit(false);
+ return connection;
+ }
+
+ void prepareSynch(Connection connection) throws SQLException {
+ PreparedStatement statement = connection.prepareStatement("SET REFERENTIAL_INTEGRITY FALSE;");
+ statement.executeUpdate();
+ }
+
+ void releaseSynch(Connection connection) throws SQLException {
+ PreparedStatement statement = connection.prepareStatement("SET REFERENTIAL_INTEGRITY TRUE;");
+ statement.executeUpdate();
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroServiceImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTable.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTable.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTable.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,116 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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%
+ */
+
+/**
+ * List of all tables we want to synchronize.
+ * <p/>
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public enum ReferentialSynchroTable {
+
+ STATUS,
+ QUALITY_FLAG,
+
+ // PMFM
+ UNIT,
+ AGGREGATION_LEVEL,
+ PARAMETER_GROUP,
+ QUALITATIVE_VALUE,
+ PARAMETER,
+ MATRIX,
+ FRACTION,
+ FRACTION2MATRIX,
+ METHOD,
+ PMFM,
+ PMFM2QUALITATIVE_VALUE,
+
+ // GEAR
+ GEAR_CLASSIFICATION,
+ GEAR_CLASSIFICATION_ASSOCIATIO,
+ GEAR,
+ GEAR_ASSOCIATION,
+
+ // LOCATION
+ LOCATION_CLASSIFICATION,
+ LOCATION_LEVEL,
+ LOCATION_ASSOCIATION,
+ LOCATION,
+ LOCATION_HIERARCHY,
+ LOCATION_HIERARCHY_EXCEPTION,
+
+ // TAXON
+ TAXONOMIC_LEVEL,
+ REFERENCE_TAXON,
+ TAXON_NAME,
+ TAXON_INFORMATION,
+ TAXON_INFORMATION_HISTORY,
+ VIRTUAL_COMPONENT,
+ TAXON_NAME_HISTORY,
+ REFERENCE_DOCUMENT,
+ AUTHOR,
+ CITATION,
+
+ // TAXON GROUP
+ TAXON_GROUP_TYPE,
+ TAXON_GROUP,
+ TAXON_GROUP_HISTORICAL_RECORD,
+ TAXON_GROUP_INFORMATION,
+
+ // CONVERSION
+ ROUND_WEIGHT_CONVERSION,
+ WEIGHT_LENGTH_CONVERSION,
+ UNIT_CONVERSION,
+
+ // VESSEL
+ VESSEL_TYPE,
+ VESSEL_REGISTRATION_PERIOD,
+ VESSEL_FEATURES,
+ VESSEL,
+
+ // PERSON
+ USER_PROFIL,
+ DEPARTMENT,
+ PERSON,
+ PERSON2USER_PROFIL,
+
+ // VESSEL_PERSON_ROLE
+ VESSEL_PERSON_ROLE,
+ VESSEL_PERSON,
+
+ //ORDER
+ ORDER_ITEM,
+
+ //OTHER
+ PRECISION_TYPE,
+ NUMERICAL_PRECISION,
+ PHOTO_TYPE,
+ OBJECT_TYPE,
+ ORDER_TYPE,
+ ANALYSIS_INSTRUMENT
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTable.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,425 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import fr.ifremer.shared.application.ApplicationTechnicalException;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import org.hibernate.mapping.ForeignKey;
+import org.hibernate.tool.hbm2ddl.ColumnMetadata;
+import org.hibernate.tool.hbm2ddl.ForeignKeyMetadata;
+import org.hibernate.tool.hbm2ddl.IndexMetadata;
+import org.hibernate.tool.hbm2ddl.TableMetadata;
+
+import java.lang.reflect.Field;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Overrides of the {@link TableMetadata} with some improvements:
+ * <ul>
+ * <li>Obtains number of columns via {@link #getColumnsCount()}</li>
+ * <li>Obtains all columns names available via {@link #getColumnNames()}</li>
+ * <li>Obtains primary key column names via {@link #getPkNames()}</li>
+ * </ul>
+ * <p/>
+ * And others methods used to synchronize referentials:
+ * <ul>
+ * <li>Obtains query to update a row of the table (column names order is the
+ * one introduced by method {@link #getColumnNames()}: {@link #getUpdateQuery()}
+ * </li>
+ * <li>Obtains query to insert a row in the table (column names order is the
+ * one introduced by method {@link #getColumnNames()}: {@link #getInsertQuery()}
+ * </li>
+ * </ul>
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class ReferentialSynchroTableMetadata {
+
+ protected static final String QUERY_SELECT_MAX_UPDATE = "SELECT max(update_date) FROM %s";
+
+ protected static final String QUERY_INSERT = "INSERT INTO %s (%s) VALUES (%s)";
+
+ protected static final String QUERY_UPDATE = "UPDATE %s SET %s WHERE %s";
+
+ protected static final String QUERY_SELECT = "SELECT %s FROM %s WHERE %s";
+
+ protected static final String QUERY_SELECT_PRIMARY_KEYS = "SELECT %s FROM %s";
+
+ protected static final String QUERY_SELECT_COUNT = "SELECT count(*) FROM %s";
+
+ protected final String existingPrimaryKeysQuery;
+
+ protected final String maxUpdateDateQuery;
+
+ protected final String countQuery;
+
+ protected final TableMetadata delegate;
+
+ protected final Map<String, ColumnMetadata> columns;
+
+ protected final Set<String> pkNames;
+
+ protected final int[] pkIndexs;
+
+ protected final String insertQuery;
+
+ protected final String updateQuery;
+
+ protected final boolean withUpdateDateColumn;
+
+ protected final String countDataToUpdateQuery;
+
+ protected final String countDataToUpdateQueryWithNull;
+
+ protected final String dataToUpdateQuery;
+
+ protected final String dataToUpdateQueryWithNull;
+
+ protected final String selectDataQueryFromPk;
+
+ protected final boolean simpleKey;
+
+ public ReferentialSynchroTableMetadata(TableMetadata delegate,
+ DatabaseMetaData meta) {
+
+ Preconditions.checkNotNull(delegate);
+ this.delegate = delegate;
+
+ try {
+ Field field = TableMetadata.class.getDeclaredField("columns");
+ field.setAccessible(true);
+ this.columns = (Map) field.get(delegate);
+ this.withUpdateDateColumn = columns.containsKey("update_date");
+ this.pkNames = initPrimaryKeys(meta);
+ Preconditions.checkNotNull(pkNames);
+ this.pkIndexs = createPkIndex();
+
+ this.simpleKey = this.pkIndexs.length == 1;
+
+ this.insertQuery = createInsertQuery();
+ this.updateQuery = createUpdateQuery();
+ this.maxUpdateDateQuery = String.format(QUERY_SELECT_MAX_UPDATE, getName());
+ this.existingPrimaryKeysQuery = String.format(QUERY_SELECT_PRIMARY_KEYS, Joiner.on(',').join(pkNames), getName());
+ this.countQuery = String.format(QUERY_SELECT_COUNT, getName());
+ } catch (Exception e) {
+ throw new ApplicationTechnicalException(_("tutti.persistence.tableMetadata.instanciation.error", this), e);
+ }
+
+ dataToUpdateQueryWithNull = "SELECT " + createSelectParams() + " FROM " + getName();
+ countDataToUpdateQueryWithNull = "SELECT count(*) FROM " + getName();
+
+ this.selectDataQueryFromPk = createSelectQuery();
+ String whereClause;
+
+ if (isWithUpdateDateColumn()) {
+
+ // add a filter
+ whereClause = " WHERE (update_date IS NULL OR update_date > ?)";
+ } else {
+ whereClause = "";
+ }
+ dataToUpdateQuery = dataToUpdateQueryWithNull + whereClause;
+ countDataToUpdateQuery = countDataToUpdateQueryWithNull + whereClause;
+ }
+
+ // for tests purposes
+ ReferentialSynchroTableMetadata() {
+
+ existingPrimaryKeysQuery = null;
+
+ maxUpdateDateQuery = null;
+
+ countQuery = null;
+
+ delegate = null;
+
+ columns = null;
+
+ pkNames = null;
+
+ pkIndexs = null;
+
+ insertQuery = null;
+
+ updateQuery = null;
+
+ withUpdateDateColumn = false;
+
+ countDataToUpdateQuery = null;
+
+ countDataToUpdateQueryWithNull = null;
+
+ dataToUpdateQuery = null;
+
+ dataToUpdateQueryWithNull = null;
+
+ selectDataQueryFromPk = null;
+ simpleKey = false;
+ }
+
+ public Set<String> getPkNames() {
+ return pkNames;
+ }
+
+ public boolean isWithUpdateDateColumn() {
+ return withUpdateDateColumn;
+ }
+
+ public int getColumnsCount() {
+ return columns.size();
+ }
+
+ public SortedSet<String> getColumnNames() {
+ return Sets.newTreeSet(columns.keySet());
+ }
+
+ public String getName() {
+ return delegate.getName();
+ }
+
+ public ForeignKeyMetadata getForeignKeyMetadata(ForeignKey fk) {
+ return delegate.getForeignKeyMetadata(fk);
+ }
+
+ public ColumnMetadata getColumnMetadata(String columnName) {
+ return delegate.getColumnMetadata(columnName);
+ }
+
+ public String getSchema() {
+ return delegate.getSchema();
+ }
+
+ public String getCatalog() {
+ return delegate.getCatalog();
+ }
+
+ public ForeignKeyMetadata getForeignKeyMetadata(String keyName) {
+ return delegate.getForeignKeyMetadata(keyName);
+ }
+
+ public IndexMetadata getIndexMetadata(String indexName) {
+ return delegate.getIndexMetadata(indexName);
+ }
+
+ public String getInsertQuery() {
+ return insertQuery;
+ }
+
+ public String getUpdateQuery() {
+ return updateQuery;
+ }
+
+ public String getExistingPrimaryKeysQuery() {
+ return existingPrimaryKeysQuery;
+ }
+
+ public String getMaxUpdateDateQuery() {
+ return maxUpdateDateQuery;
+ }
+
+ public String getCountQuery() {
+ return countQuery;
+ }
+
+ public String getSelectDataQueryFromPk() {
+ return selectDataQueryFromPk;
+ }
+
+ public int[] getPkIndexs() {
+ return pkIndexs;
+ }
+
+ public String getDataToUpdateQuery() {
+ return dataToUpdateQuery;
+ }
+
+ public String getDataToUpdateQueryWithNull() {
+ return dataToUpdateQueryWithNull;
+ }
+
+ public String getCountDataToUpdateQuery() {
+ return countDataToUpdateQuery;
+ }
+
+ public String getCountDataToUpdateQueryWithNull() {
+ return countDataToUpdateQueryWithNull;
+ }
+
+ public boolean isSimpleKey() {
+ return simpleKey;
+ }
+
+ public List<Object> getPk(ResultSet incomingData) throws SQLException {
+ List<Object> result = Lists.newArrayListWithCapacity(pkIndexs.length);
+ for (int pkIndex : pkIndexs) {
+ Object pk = incomingData.getObject(pkIndex);
+ result.add(pk);
+ }
+ return result;
+ }
+
+ public String toPkStr(List<Object> pkList) {
+ StringBuilder sb = new StringBuilder();
+ for (Object pk : pkList) {
+ sb.append("~|").append(pk);
+ }
+ return sb.toString();
+ }
+
+ public List<Object> fromPkStr(String pk) {
+ List<Object> pkList = Lists.newArrayList();
+ String[] split = pk.split("~\\|");
+ for (String s : split) {
+ if ("null".equals(s)) {
+ s = null;
+ }
+ pkList.add(s);
+ }
+ pkList.remove(0);
+ return pkList;
+ }
+
+ protected Set<String> initPrimaryKeys(DatabaseMetaData meta) throws SQLException {
+
+ Set<String> result = Sets.newHashSet();
+ ResultSet rs = meta.getPrimaryKeys(getCatalog(), getSchema(), getName());
+ try {
+
+ while (rs.next()) {
+ result.add(rs.getString("COLUMN_NAME"));
+ }
+ rs.close();
+ return ImmutableSet.copyOf(result);
+ } finally {
+ TuttiEntities.closeSilently(rs);
+ }
+ }
+
+ protected int[] createPkIndex() {
+
+ int[] result = new int[pkNames.size()];
+
+ int pkI = 0;
+ for (String pkName : pkNames) {
+ String pkColumnName = pkName.toLowerCase();
+
+ int i = 1;
+
+ int index = -1;
+ for (String columnName : getColumnNames()) {
+ if (pkColumnName.equals(columnName)) {
+ index = i;
+ } else {
+ i++;
+ }
+ }
+ result[pkI++] = index;
+ }
+ return result;
+ }
+
+
+ protected String createInsertQuery() {
+
+ StringBuilder queryParams = new StringBuilder();
+ StringBuilder valueParams = new StringBuilder();
+
+ for (String columnName : getColumnNames()) {
+ queryParams.append(", ").append(columnName);
+ valueParams.append(", ?");
+ }
+
+ String result = String.format(QUERY_INSERT,
+ getName(),
+ queryParams.substring(2),
+ valueParams.substring(2));
+ return result;
+ }
+
+ protected String createUpdateQuery() {
+
+ StringBuilder updateParams = new StringBuilder();
+
+ for (String columnName : getColumnNames()) {
+ updateParams.append(", ").append(columnName).append(" = ?");
+ }
+
+ String result = String.format(QUERY_UPDATE,
+ getName(),
+ updateParams.substring(2),
+ createPkWhereClause());
+ return result;
+ }
+
+ protected String createSelectQuery() {
+
+ String result = String.format(QUERY_SELECT,
+ createSelectParams(),
+ getName(),
+ createPkWhereClause());
+ return result;
+ }
+
+ protected String createPkWhereClause() {
+
+ StringBuilder pkParams = new StringBuilder();
+
+ for (String columnName : getPkNames()) {
+ pkParams.append("AND ").append(columnName).append(" = ?");
+ }
+
+ return pkParams.substring(4);
+ }
+
+ protected String createSelectParams() {
+
+ StringBuilder queryParams = new StringBuilder();
+
+ for (String columnName : getColumnNames()) {
+ queryParams.append(", ").append(columnName);
+ }
+
+ return queryParams.substring(2);
+ }
+
+ public String getTableLogPrefix() {
+ return "[" + getName() + "]";
+ }
+}
\ No newline at end of file
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadata.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java (rev 0)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,365 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class ReferentialSynchroTableTool implements Closeable {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ReferentialSynchroTableTool.class);
+
+ protected final Connection connection;
+
+ protected final ReferentialSynchroTableMetadata table;
+
+ protected final PreparedStatement insertStatement;
+
+ protected final PreparedStatement updateStatement;
+
+ protected final int columnCount;
+
+ protected final String tableName;
+
+ protected int insertCount = 0;
+
+ protected int updateCount = 0;
+
+ protected boolean debug;
+
+ public ReferentialSynchroTableTool(Connection connection,
+ ReferentialSynchroTableMetadata table) throws SQLException {
+ this.connection = connection;
+ this.table = table;
+ this.columnCount = table.getColumnsCount();
+ this.tableName = table.getName();
+
+ String insertSql = table.getInsertQuery();
+ String updateSql = table.getUpdateQuery();
+
+ insertStatement = connection.prepareStatement(insertSql);
+ updateStatement = connection.prepareStatement(updateSql);
+
+ debug = log.isTraceEnabled();
+ }
+
+
+ public void deleteAll() throws SQLException {
+ PreparedStatement deleteStatement =
+ connection.prepareStatement(
+ "DELETE FROM " + table.getName());
+ deleteStatement.execute();
+ }
+
+ public Object[] findByPk(List<Object> pk) throws SQLException {
+ String selectDataSql = table.getSelectDataQueryFromPk();
+
+ PreparedStatement selectStatement =
+ connection.prepareStatement(selectDataSql);
+
+ int columnCountIndex = 1;
+
+ for (Object pkColumn : pk) {
+ selectStatement.setObject(columnCountIndex++, pkColumn);
+ }
+
+ int columnsCount = table.getColumnsCount();
+ ResultSet resultSet = selectStatement.executeQuery();
+ resultSet.next();
+
+ Object[] result = new Object[columnsCount];
+
+ for (int i = 1; i <= columnsCount; i++) {
+
+ result[i - 1] = resultSet.getObject(i);
+ }
+ return result;
+ }
+
+ public Set<String> getExistingPrimaryKeys() throws SQLException {
+
+ Set<String> pkNames = table.getPkNames();
+ int pkCount = pkNames.size();
+ String sql = table.getExistingPrimaryKeysQuery();
+
+ PreparedStatement statement = connection.prepareStatement(sql);
+
+ Set<String> result = Sets.newHashSet();
+ try {
+ ResultSet resultSet = statement.executeQuery();
+
+
+ while (resultSet.next()) {
+ List<Object> pkList = Lists.newArrayListWithCapacity(pkNames.size());
+ for (int i = 1; i <= pkCount; i++) {
+ Object pk = resultSet.getObject(i);
+ pkList.add(pk);
+ }
+ String pk = table.toPkStr(pkList);
+ result.add(pk);
+ }
+ statement.close();
+ return result;
+ } finally {
+ closeSilently(statement);
+ }
+ }
+
+ public ResultSet getDataToUpdate(Date fromDate) throws SQLException {
+
+ String sql = fromDate == null ?
+ table.getDataToUpdateQueryWithNull() :
+ table.getDataToUpdateQuery();
+
+ PreparedStatement statement = connection.prepareStatement(sql);
+ if (table.isWithUpdateDateColumn() &&
+ fromDate != null) {
+ statement.setTimestamp(1, new Timestamp(fromDate.getTime()));
+ }
+ statement.setFetchSize(1000);
+
+ ResultSet result = statement.executeQuery();
+// // to be able to reward on resultSet
+// ((RowSet)result).setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
+ return result;
+ }
+
+ @Override
+ public void close() throws IOException {
+ closeSilently(insertStatement);
+ closeSilently(updateStatement);
+ }
+
+ public void executeInsert(List<Object> pk, ResultSet incomingData) throws SQLException {
+
+ List<Object> params = null;
+
+ if (debug) {
+ params = Lists.newArrayList();
+ }
+
+ for (int c = 1; c <= columnCount; c++) {
+ Object object = incomingData.getObject(c);
+ insertStatement.setObject(c, object);
+ if (debug) {
+ params.add(object);
+ }
+ }
+ insertCount++;
+
+ insertStatement.addBatch();
+
+ if (debug) {
+ log.debug(String.format("%s Execute insert query (pk:%s), params: %s", tableName, pk, params));
+ }
+
+ if (insertCount > 0 && insertCount % 1000 == 0) {
+ insertStatement.executeBatch();
+ insertStatement.clearBatch();
+ }
+ }
+
+ public void executeInsert(List<Object> pk, Object[] incomingData) throws SQLException {
+
+ for (int c = 1; c <= columnCount; c++) {
+ Object object = incomingData[c - 1];
+ insertStatement.setObject(c, object);
+ }
+ insertCount++;
+
+ insertStatement.addBatch();
+
+ if (debug) {
+ log.debug(String.format("%s Execute insert query (pk:%s), params: %s", tableName, pk, Arrays.toString(incomingData)));
+ }
+
+ if (insertCount > 0 && insertCount % 1000 == 0) {
+ insertStatement.executeBatch();
+ insertStatement.clearBatch();
+ }
+ }
+
+ public void executeUpdate(List<Object> pk, ResultSet incomingData) throws SQLException {
+
+ List<Object> params = null;
+
+ if (debug) {
+ params = Lists.newArrayList();
+ }
+
+ for (int c = 1; c <= columnCount; c++) {
+ Object object = incomingData.getObject(c);
+ updateStatement.setObject(c, object);
+ if (debug) {
+ params.add(object);
+ }
+ }
+
+ int columnCountIndex = columnCount + 1;
+
+ for (Object pkColumn : pk) {
+ updateStatement.setObject(columnCountIndex++, pkColumn);
+ }
+
+ updateCount++;
+
+ updateStatement.addBatch();
+
+ if (debug) {
+ log.debug(String.format("%s Execute update query (pk:%s), params: %s", tableName, pk, params));
+ }
+
+ if (updateCount > 0 && updateCount % 1000 == 0) {
+ updateStatement.executeBatch();
+ updateStatement.clearBatch();
+ }
+ }
+
+ public int getInsertCount() {
+ return insertCount;
+ }
+
+ public int getUpdateCount() {
+ return updateCount;
+ }
+
+ public void flushQueries() throws SQLException {
+
+ if (insertCount > 0 && insertCount % 1000 != 0) {
+ insertStatement.executeBatch();
+ }
+ if (updateCount > 0 && updateCount % 1000 != 0) {
+ updateStatement.executeBatch();
+ }
+ }
+
+ /**
+ * Gets the last updateDate for the given {@code table} using
+ * the given datasource.
+ *
+ * @return the last update date of the given table, or {@code null}
+ * if table does not use a updateDate columns or if there
+ * is no data in table.
+ */
+ public Timestamp getLastUpdateDate() throws SQLException {
+ Timestamp result = null;
+
+ if (table.isWithUpdateDateColumn()) {
+
+ String sql = table.getMaxUpdateDateQuery();
+
+ PreparedStatement statement = connection.prepareStatement(sql);
+ try {
+ ResultSet resultSet = statement.executeQuery();
+ if (resultSet.next()) {
+ result = resultSet.getTimestamp(1);
+ }
+ statement.close();
+ } finally {
+ closeSilently(statement);
+ }
+ }
+ return result;
+ }
+
+ public long getCountDataToUpdate(Date fromDate) throws SQLException {
+
+ String sql = fromDate == null ?
+ table.getCountDataToUpdateQueryWithNull() :
+ table.getCountDataToUpdateQuery();
+
+ PreparedStatement statement = connection.prepareStatement(sql);
+ if (table.isWithUpdateDateColumn() &&
+ fromDate != null) {
+ statement.setTimestamp(1, new Timestamp(fromDate.getTime()));
+ }
+
+ ResultSet queryResult = statement.executeQuery();
+ queryResult.next();
+ long result = queryResult.getLong(1);
+ return result;
+ }
+
+ public long count() throws SQLException {
+
+ String sql = table.getCountQuery();
+
+ PreparedStatement statement = connection.prepareStatement(sql);
+
+ try {
+ ResultSet resultSet = statement.executeQuery();
+ resultSet.next();
+ long result = resultSet.getLong(1);
+ statement.close();
+ return result;
+ } finally {
+ closeSilently(statement);
+ }
+ }
+
+ void closeSilently(Statement statement) {
+ try {
+ if (statement != null && !statement.isClosed()) {
+
+ statement.close();
+ }
+ } catch (AbstractMethodError e) {
+ if (log.isDebugEnabled()) {
+ log.debug("Fix this linkage error, damned hsqlsb 1.8.0.7:(");
+ }
+ } catch (IllegalAccessError e) {
+ if (log.isDebugEnabled()) {
+ log.debug("Fix this IllegalAccessError error, damned hsqlsb 1.8.0.7:(");
+ }
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Could not close statement, but do not care", e);
+ }
+ }
+ }
+}
Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableTool.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -25,9 +25,9 @@
*/
import fr.ifremer.adagio.core.service.ServiceLocator;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroService;
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor;
-import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeService;
/**
* To obtain services from spring context.
@@ -115,9 +115,11 @@
ProtocolPersistenceService.class);
}
- public static ReferentialSynchronizeService getReferentialSynchronizeService() {
- return getPersistenceService("referentialSynchronizeService",
- ReferentialSynchronizeService.class);
+ //TODO Move this to adagio
+ public static ReferentialSynchroService getReferentialSynchroService() {
+ ReferentialSynchroService service = instance().getService(
+ "referentialSynchroService", ReferentialSynchroService.class);
+ return service;
}
public static AttachmentPersistenceService getAttachmentPersistenceService() {
Added: trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java (rev 0)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -0,0 +1,56 @@
+package fr.ifremer.adagio.core.service.technical.synchro;
+
+/*
+ * #%L
+ * Tutti :: Persistence
+ * $Id$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2012 - 2014 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 com.google.common.collect.Lists;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * Created on 1/14/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 3.0
+ */
+public class ReferentialSynchroTableMetadataTest {
+
+ @Test
+ public void getPkStr() {
+
+ List<Object> pk = Lists.<Object>newArrayList("a", null, 3);
+
+ ReferentialSynchroTableMetadata table = new ReferentialSynchroTableMetadata();
+
+ String pkStr = table.toPkStr(pk);
+ Assert.assertEquals("~|a~|null~|3", pkStr);
+
+ List<Object> fromPkStr = table.fromPkStr(pkStr);
+
+ Assert.assertEquals(Lists.<Object>newArrayList("a", null, "3"), fromPkStr);
+ }
+
+}
Property changes on: trunk/tutti-persistence/src/test/java/fr/ifremer/adagio/core/service/technical/synchro/ReferentialSynchroTableMetadataTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/tutti-service/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/tutti-service/src/license/THIRD-PARTY.properties 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-service/src/license/THIRD-PARTY.properties 2014-01-15 08:43:26 UTC (rev 1486)
@@ -20,7 +20,6 @@
# - Lesser General Public License (LPGL)
# - Lesser General Public License (LPGL) v 2.1
# - MIT License
-# - MPL 1.1
# - Mozilla Public License
# - New BSD License
# - Public Domain
@@ -31,7 +30,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Sun Dec 08 20:03:42 CET 2013
+#Wed Jan 15 09:00:37 CET 2014
antlr--antlr--2.7.6=BSD License
batik--batik-awt-util--1.6=The Apache Software License, Version 2.0
batik--batik-bridge--1.6=The Apache Software License, Version 2.0
@@ -48,4 +47,5 @@
batik--batik-xml--1.6=The Apache Software License, Version 2.0
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
dom4j--dom4j--1.6.1=BSD License
+javassist--javassist--3.11.0.GA=The Apache Software License, Version 2.0
javax.transaction--jta--1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -120,8 +120,6 @@
protected Cruise cruise;
-// protected TuttiProtocol protocol;
-
protected FishingOperation fishingOperation;
protected List<Caracteristic> caracteristics;
@@ -211,6 +209,7 @@
resetPersons();
resetSpecies();
resetValidationDataContext();
+ resetCaracteristics();
}
public void checkDbContext() {
@@ -777,10 +776,14 @@
referentSpecies = null;
referentSpeciesWithSurveyCode = null;
referentBenthosWithSurveyCode = null;
+
}
public void resetCaracteristics() {
caracteristics = null;
+ caracteristicsWithProtected = null;
+ genderValues = null;
+ deadOrAliveValues = null;
}
public void loadSampleCategoryModel(SampleCategoryModel sampleCategoryModel) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -24,11 +24,11 @@
* #L%
*/
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroResult;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroService;
import fr.ifremer.tutti.TuttiConfiguration;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator;
-import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeResult;
-import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeService;
import fr.ifremer.tutti.service.AbstractTuttiService;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.service.TuttiServiceContext;
@@ -44,22 +44,22 @@
protected PersistenceService persistenceService;
- protected ReferentialSynchronizeService synchroService;
+ protected ReferentialSynchroService synchroService;
@Override
public void setServiceContext(TuttiServiceContext context) {
super.setServiceContext(context);
- synchroService = TuttiPersistenceServiceLocator.getReferentialSynchronizeService();
+ synchroService = TuttiPersistenceServiceLocator.getReferentialSynchroService();
persistenceService = getService(PersistenceService.class);
}
- public void prepare(File dbDirectory, ReferentialSynchronizeResult result) {
+ public void prepare(File dbDirectory, ReferentialSynchroResult result) {
Properties remoteConnectionProperties = getRemoteProperties(dbDirectory);
synchroService.prepare(remoteConnectionProperties, result);
}
public void synchronize(File dbDirectory,
- ReferentialSynchronizeResult result) {
+ ReferentialSynchroResult result) {
Properties remoteConnectionProperties = getRemoteProperties(dbDirectory);
synchroService.synchronize(remoteConnectionProperties, result);
}
Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2014-01-15 08:43:26 UTC (rev 1486)
@@ -30,7 +30,7 @@
# Please fill the missing licenses for dependencies :
#
#
-#Mon Dec 09 13:48:21 CET 2013
+#Wed Jan 15 09:38:43 CET 2014
antlr--antlr--2.7.6=BSD License
batik--batik-awt-util--1.6=The Apache Software License, Version 2.0
batik--batik-bridge--1.6=The Apache Software License, Version 2.0
Modified: trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2014-01-15 08:43:26 UTC (rev 1486)
@@ -34,6 +34,7 @@
#See https://forum.hibernate.org/viewtopic.php?p=2404391
log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR
+log4j.logger.fr.ifremer.adagio.core.service.technical.synchro=DEBUG
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.file=${tutti.log.file}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -230,7 +230,7 @@
File cacheDirectory = config.getCacheDirectory();
ApplicationIOUtil.forceDeleteOnExit(
cacheDirectory,
- _("tutti.applicationUpdater.updateDone.deleteDirectory.caches.error", i18nDirectory)
+ _("tutti.applicationUpdater.updateDone.deleteDirectory.caches.error", cacheDirectory)
);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiDbUpdaterCallBack.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiDbUpdaterCallBack.java 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiDbUpdaterCallBack.java 2014-01-15 08:43:26 UTC (rev 1486)
@@ -26,12 +26,13 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
+import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroResult;
import fr.ifremer.shared.application.ApplicationTechnicalException;
import fr.ifremer.shared.application.swing.action.ApplicationActionException;
import fr.ifremer.shared.application.swing.action.ApplicationActionUI;
import fr.ifremer.tutti.TuttiConfiguration;
import fr.ifremer.tutti.persistence.ProgressionModel;
-import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeResult;
+import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService;
import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction;
@@ -227,7 +228,7 @@
log.info(String.format("A database update was downloaded (oldVersion: %s, newVersion: %s), will launch a referential synchronize operation ", info.oldVersion, info.newVersion));
}
TuttiReferentialSynchronizeService service = context.getTuttiReferentialSynchronizeService();
- ReferentialSynchronizeResult result = new ReferentialSynchronizeResult();
+ ReferentialSynchroResult result = new ReferentialSynchroResult();
File dbDirectory = getDbDirectory(info);
ApplicationActionUI actionUI = context.getActionUI();
@@ -251,6 +252,15 @@
PersistenceService persistence = context.getPersistenceService();
persistence.clearAllCaches();
+ // clean data context
+ if (log.isInfoEnabled()) {
+ log.info("Clean data context.");
+ }
+ SampleCategoryModel sampleCategoryModel =
+ context.getDataContext().getSampleCategoryModel();
+ context.getDataContext().clearContext();
+ context.getDataContext().loadSampleCategoryModel(sampleCategoryModel);
+
// replace the version.appup file content
File target = context.getConfig().getDbDirectory();
File versionFile = ApplicationUpdater.getVersionFile(target);
@@ -260,7 +270,8 @@
try {
ApplicationUpdater.storeVersionFile(target, info.newVersion);
} catch (IOException e) {
- throw new ApplicationTechnicalException(_("tutti.applicationUpdater.synchroDB.writeVersion.error", versionFile));
+ throw new ApplicationTechnicalException(
+ _("tutti.applicationUpdater.synchroDB.writeVersion.error", versionFile));
}
}
}
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 2014-01-13 15:19:06 UTC (rev 1485)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-01-15 08:43:26 UTC (rev 1486)
@@ -301,7 +301,7 @@
tutti.dbManager.action.upgradeDb=Mettre à jour les référentiels
tutti.dbManager.action.upgradeDb.check=Recherche des mises à jour de la base
tutti.dbManager.action.upgradeDb.done=La mise à jour des référentiel en version <strong>%s</strong> est terminée.
-tutti.dbManager.action.upgradeDb.mnemonic=V
+tutti.dbManager.action.upgradeDb.mnemonic=M
tutti.dbManager.action.upgradeDb.no.backup.db.choosen=La base ne sera pas migrée (vous avez annulé la sauvegarde avant migration).
tutti.dbManager.action.upgradeDb.opening=Ouverture de la base de données
tutti.dbManager.action.upgradeDb.reloading=Rechargement de la base de données
@@ -313,7 +313,7 @@
tutti.dbManager.action.upgradeDb.schema.version.not.found=L'application n'a pas pu déterminer la version de la base de données à importer. L'import ne peut pas être réalisé, veuillez contacter les administrateurs de l'application.
tutti.dbManager.action.upgradeDb.tip=Mettre à jour les référentiels
tutti.dbManager.action.upgradeDb.upToDate=<strong>Aucune mise à jour de base détectée</strong>
-tutti.dbManager.caracteristic.lastReferentialVersion=Version du référentiel disponible en mis à jour
+tutti.dbManager.caracteristic.lastReferentialVersion=Version du référentiel disponible en mise à jour
tutti.dbManager.caracteristic.referentialVersion=Version du référentiel utilisé
tutti.dbManager.caracteristic.schemaVersion=Version du schema
tutti.dbManager.caracteristic.url=Url de connexion
@@ -1472,6 +1472,8 @@
tutti.updateReport.message.success=La mise à jour des rapports nécessite le redémarrage de l'application
tutti.updateReport.noUpdate=<strong>Aucune mise à jour de rapports détectée.</strong>
tutti.updateReport.title.success=Redémarrage de l'application nécessaire...
+tutti.upgradeDb.message.success=La mise à jour des référentiels nécessite le redémarrage de l'application
+tutti.upgradeDb.title.success=Redémarrage de l'application nécessaire...
tutti.validateCruise.action.export.all.chooseFile.label=Choisir le fichier d'export
tutti.validateCruise.action.export.all.chooseFile.title=Exporter les messages de validation de la campagne
tutti.validateCruise.action.export.all.success=Les messages de validation des captures ont correctement été exporté dans le fichier %s
1
0
r1485 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra tutti-service/src/main/resources/i18n tutti-service/src/test/java/fr/ifremer/tutti/service/export/sumatra tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action
by tchemit@users.forge.codelutin.com Jan. 13, 2014
by tchemit@users.forge.codelutin.com Jan. 13, 2014
Jan. 13, 2014
Author: tchemit
Date: 2014-01-13 16:19:06 +0100 (Mon, 13 Jan 2014)
New Revision: 1485
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1485
Log:
fixes #3880: Erreur lors d'un export Sumatra
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportService.java
trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportServiceTest.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportCruiseForSumatraAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportFishingOperationForSumatraAction.java
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportService.java 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportService.java 2014-01-13 15:19:06 UTC (rev 1485)
@@ -29,6 +29,7 @@
import com.google.common.collect.Lists;
import com.google.common.io.Files;
import fr.ifremer.shared.application.ApplicationTechnicalException;
+import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.service.AbstractTuttiService;
@@ -76,7 +77,8 @@
* @since 2.0
*/
public void exportCruiseForSumatra(File file,
- String cruiseId) {
+ String cruiseId,
+ ProgressionModel progressionModel) {
Preconditions.checkNotNull(cruiseId, "Cannot export a null cruise");
Preconditions.checkNotNull(file, "Cannot export to a null file");
@@ -85,13 +87,23 @@
log.info("Will export cruise " + cruiseId + " to file: " + file);
}
+ progressionModel.increments(_("tutti.service.sumatra.export.step.load.cruise", cruiseId));
+
Cruise cruise = persistenceService.getCruise(cruiseId);
Preconditions.checkNotNull(cruise, "Cruise [" + cruiseId + "] not found");
+ progressionModel.increments(_("tutti.service.sumatra.export.step.load.fishingOperationIds"));
+
List<String> operations =
persistenceService.getAllFishingOperationIds(cruiseId);
- prepareOperationsAndExport(file, operations);
+ if (log.isInfoEnabled()) {
+ log.info(operations.size() + " operations found for cruise: " + cruiseId);
+ }
+
+ progressionModel.adaptTotal(operations.size() + 3);
+
+ prepareOperationsAndExport(file, operations, progressionModel);
}
/**
@@ -104,7 +116,8 @@
*/
public void exportFishingOperationForSumatra(File file,
String cruiseId,
- String fishingOperationId) {
+ String fishingOperationId,
+ ProgressionModel progressionModel) {
Preconditions.checkNotNull(file, "Cannot export to a null file");
Preconditions.checkNotNull(cruiseId, "Cannot export a null cruise");
@@ -115,26 +128,39 @@
fishingOperationId + " to file: " + file);
}
+ progressionModel.increments(_("tutti.service.sumatra.export.step.load.cruise", cruiseId));
+
Cruise cruise = persistenceService.getCruise(cruiseId);
Preconditions.checkNotNull(cruise, "Cruise [" + cruiseId + "] not found");
List<String> operations = Lists.newArrayList(fishingOperationId);
- prepareOperationsAndExport(file, operations);
+ prepareOperationsAndExport(file, operations, progressionModel);
}
protected void prepareOperationsAndExport(File file,
- List<String> operations) {
+ List<String> operations,
+ ProgressionModel progressionModel) {
List<CatchRow> rows = Lists.newArrayList();
if (operations != null) {
for (String operationId : operations) {
+ progressionModel.increments(_("tutti.service.sumatra.export.step.load.fishingOperation", operationId));
+ if (!persistenceService.isFishingOperationWithCatchBatch(operationId)) {
+
+ if (log.isWarnEnabled()) {
+ log.warn("No catch for operation with id: " + operationId);
+ }
+ break;
+ }
+
prepareFishingOperation(rows, operationId);
}
}
+ progressionModel.increments(_("tutti.service.sumatra.export.step.export", file));
CatchRowModel csvModel =
new CatchRowModel(context.getConfig().getCsvSeparator());
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2014-01-13 15:19:06 UTC (rev 1485)
@@ -161,6 +161,10 @@
tutti.service.referential.import.vessels.error=
tutti.service.referential.import.vessels.existingValue.error=
tutti.service.sumatra.export.error=
+tutti.service.sumatra.export.step.export=
+tutti.service.sumatra.export.step.load.cruise=
+tutti.service.sumatra.export.step.load.fishingOperation=
+tutti.service.sumatra.export.step.load.fishingOperationIds=
tutti.service.validateCruise.exportResult.error=
tutti.service.validateCruise.operations.progress=
tutti.validator.error.accidental.species.required=
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 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2014-01-13 15:19:06 UTC (rev 1485)
@@ -161,6 +161,10 @@
tutti.service.referential.import.vessels.error=Erreur lors de l'import des navires du fichier %s
tutti.service.referential.import.vessels.existingValue.error=Un navire avec le nom %1s et l'immatriculation %2s existe déjà dans le référentiel
tutti.service.sumatra.export.error=Erreur lors de l'export Sumatra dans le fichier %s
+tutti.service.sumatra.export.step.export=Export dans le fichier %s
+tutti.service.sumatra.export.step.load.cruise=Chargement de la campagne %s
+tutti.service.sumatra.export.step.load.fishingOperation=Chargement du trait %s
+tutti.service.sumatra.export.step.load.fishingOperationIds=Recherche des opérations
tutti.service.validateCruise.exportResult.error=Erreur lors de l'export des résultats de validation de la campagne dans le fichier %s
tutti.service.validateCruise.operations.progress=Vérification du trait %s
tutti.validator.error.accidental.species.required=L'espèce est obligatoire
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportServiceTest.java 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/sumatra/CatchesSumatraExportServiceTest.java 2014-01-13 15:19:06 UTC (rev 1485)
@@ -24,6 +24,7 @@
* #L%
*/
+import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.service.ServiceDbResource;
import fr.ifremer.tutti.service.TuttiServiceContext;
import fr.ifremer.tutti.service.catches.TuttiWeightComputingException;
@@ -91,7 +92,9 @@
File exportFile = new File(dataDirectory, "exportSumatra.csv");
- service.exportCruiseForSumatra(exportFile, CRUISE_BAD_ID);
+ ProgressionModel progressionModel = new ProgressionModel();
+ progressionModel.setTotal(3);
+ service.exportCruiseForSumatra(exportFile, CRUISE_BAD_ID, progressionModel);
}
@Test
@@ -102,7 +105,9 @@
File exportFile = new File(dataDirectory, "exportSumatra.csv");
- service.exportCruiseForSumatra(exportFile, CRUISE_ID);
+ ProgressionModel progressionModel = new ProgressionModel();
+ progressionModel.setTotal(3);
+ service.exportCruiseForSumatra(exportFile, CRUISE_ID, progressionModel);
ServiceDbResource.assertFileContent("Sumatra export file:\n",
exportFile,
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportCruiseForSumatraAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportCruiseForSumatraAction.java 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportCruiseForSumatraAction.java 2014-01-13 15:19:06 UTC (rev 1485)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.service.export.sumatra.CatchesSumatraExportService;
import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
@@ -92,11 +93,14 @@
log.info("Will export cruise " + cruise.getId() +
" to file: " + file);
}
+ ProgressionModel pm = new ProgressionModel();
+ pm.setTotal(3); // loading cruise + loading fishing operationIds + export
+ setProgressionModel(pm);
// export catches
CatchesSumatraExportService service =
getContext().getCatchesSumatraExportService();
- service.exportCruiseForSumatra(file, cruise.getId());
+ service.exportCruiseForSumatra(file, cruise.getId(), pm);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportFishingOperationForSumatraAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportFishingOperationForSumatraAction.java 2014-01-13 15:18:31 UTC (rev 1484)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportFishingOperationForSumatraAction.java 2014-01-13 15:19:06 UTC (rev 1485)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.service.export.sumatra.CatchesSumatraExportService;
@@ -100,12 +101,17 @@
" to file: " + file);
}
+ ProgressionModel pm = new ProgressionModel();
+ pm.setTotal(3); // loading cruise + loading fishing operationIds + export
+ setProgressionModel(pm);
+
// export catches
CatchesSumatraExportService service =
getContext().getCatchesSumatraExportService();
service.exportFishingOperationForSumatra(file,
cruise.getId(),
- fishingOperation.getId());
+ fishingOperation.getId(),
+ pm);
}
1
0