From: <de...@us...> - 2015-11-05 22:02:13
|
Revision: 9192 http://sourceforge.net/p/fudaa/svn/9192 Author: deniger Date: 2015-11-05 22:02:10 +0000 (Thu, 05 Nov 2015) Log Message: ----------- CRUE-644 Modified Paths: -------------- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsProgressRunnable.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopComponent.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopExportImportPopupBuilder.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportValue.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImporter.java trunk/soft/fudaa-crue/ui-modelling/src/main/resources/org/fudaa/fudaa/crue/modelling/calcul/importer/Bundle.properties trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonCLimMLineBuilder.java trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonClimMTableModel.java Added Paths: ----------- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportData.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLine.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLinesBuilder.java Removed Paths: ------------- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKey.java trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKeyFromArray.java Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsProgressRunnable.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsProgressRunnable.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsProgressRunnable.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -22,6 +22,7 @@ import org.apache.poi.ss.usermodel.WorkbookFactory; import org.fudaa.ctulu.CtuluLibFile; import org.fudaa.fudaa.crue.modelling.calcul.importer.CLimMsImporter; +import org.fudaa.fudaa.crue.views.DonClimMTableModel; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressRunnable; import org.openide.util.Exceptions; @@ -30,7 +31,7 @@ * * @author Frederic Deniger */ -public class ModellingListCLimMsProgressRunnable implements ProgressRunnable<Object> { +public class ModellingListCLimMsProgressRunnable implements ProgressRunnable<DonClimMTableModel> { private File file; private final ModellingListCLimMsTopComponent topComponent; @@ -47,8 +48,7 @@ } @Override - public Object run(ProgressHandle handle) { - Reader reader = null; + public DonClimMTableModel run(ProgressHandle handle) { String[][] values = null; if (initValues != null) { char sep = '\t'; @@ -62,10 +62,9 @@ if (values == null) { return null; } - CLimMsImporter importer = new CLimMsImporter(topComponent.getCcm(), topComponent.getScenario().getLoiConteneur(), values); + CLimMsImporter importer = new CLimMsImporter(topComponent.getCcm(), topComponent.getScenario(), values); importer.setTableModel(topComponent.tableModel); - importer.importData(); - return null; + return importer.importData(); } protected String getValue(Cell cell) { Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopComponent.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopComponent.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopComponent.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -70,9 +70,34 @@ @Override public ExplorerManager getExplorerManager() { return null; -// return helper.getExplorerManager(); } + protected void rebuildCenterFor(DonClimMTableModel newModel) { + JComponent oldCenter = CtuluLibSwing.findChildByName(this, CENTER_NAME); + remove(oldCenter); + setDoubleBuffered(false); + final ModellingOpenDLHYAction loiDisplayer = new ModellingOpenDLHYAction(); + final ModellingListCLimMsTopExportImportPopupBuilder popupReceiver = new ModellingListCLimMsTopExportImportPopupBuilder( + this, loiDisplayer); + Pair<JScrollPane, DonClimMTableModel> createScrollPane = new DonCLimMLineBuilder().createScrollPane(newModel, getCcm(), getScenario(), true, + loiDisplayer, + popupReceiver); + tableModel = createScrollPane.second; + final JScrollPane newCenter = createScrollPane.first; + popupReceiver.install(newCenter); + tableModel.addTableModelListener(new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + setModified(true); + } + }); + add(newCenter); + revalidate(); + repaint(); + newCenter.revalidate(); + newCenter.repaint(); + } + @Override protected void scenarioUnloaded() { super.scenarioUnloaded(); Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopExportImportPopupBuilder.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopExportImportPopupBuilder.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/ModellingListCLimMsTopExportImportPopupBuilder.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -16,6 +16,7 @@ import org.fudaa.ctulu.gui.CtuluTableSimpleExporter; import org.fudaa.fudaa.crue.common.helper.CrueProgressUtils; import org.fudaa.fudaa.crue.common.helper.CtuluUIForNetbeans; +import org.fudaa.fudaa.crue.views.DonClimMTableModel; import org.fudaa.fudaa.crue.views.LoiDisplayer; import org.fudaa.fudaa.crue.views.LoiDisplayerInstaller; import org.fudaa.fudaa.crue.views.export.DonClimMExportTableModel; @@ -70,8 +71,12 @@ ModellingListCLimMsTopExportImportPopupBuilder.class, "button.import.name")); if (res == JFileChooser.APPROVE_OPTION) { - CrueProgressUtils.showProgressDialogAndRun(new ModellingListCLimMsProgressRunnable(fileChooser.getSelectedFile(), tc), NbBundle. + final DonClimMTableModel result = CrueProgressUtils.showProgressDialogAndRun(new ModellingListCLimMsProgressRunnable(fileChooser. + getSelectedFile(), tc), NbBundle. getMessage(ModellingListCLimMsTopExportImportPopupBuilder.class, "button.import.name")); + if (result != null) { + tc.rebuildCenterFor(result); + } } } Added: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportData.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportData.java (rev 0) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportData.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -0,0 +1,27 @@ +/* + GPL 2 + */ +package org.fudaa.fudaa.crue.modelling.calcul.importer; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author Frederic Deniger + */ +public class CLimMsImportData { + + private final List<CLimMsImportLine> calculs = new ArrayList<>(); + private final List<String> emhs = new ArrayList<>(); + + public List<CLimMsImportLine> getCalculs() { + return calculs; + } + + public List<String> getEmhs() { + return emhs; + } + + +} Deleted: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKey.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKey.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKey.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -1,58 +0,0 @@ -/* - GPL 2 - */ -package org.fudaa.fudaa.crue.modelling.calcul.importer; - -/** - * - * @author Frederic Deniger - */ -public class CLimMsImportKey { - - private final String emh; - private final String calculId; - - public CLimMsImportKey(String emhId, String calculId) { - this.emh = emhId; - this.calculId = calculId; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 59 * hash + (this.emh != null ? this.emh.hashCode() : 0); - hash = 59 * hash + (this.calculId != null ? this.calculId.hashCode() : 0); - return hash; - } - - public String getEmh() { - return emh; - } - - public String getCalculId() { - return calculId; - } - - @Override - public String toString() { - return calculId + ", " + emh; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final CLimMsImportKey other = (CLimMsImportKey) obj; - if ((this.emh == null) ? (other.emh != null) : !this.emh.equals(other.emh)) { - return false; - } - if ((this.calculId == null) ? (other.calculId != null) : !this.calculId.equals(other.calculId)) { - return false; - } - return true; - } -} Deleted: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKeyFromArray.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKeyFromArray.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKeyFromArray.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -1,72 +0,0 @@ -/* - GPL 2 - */ -package org.fudaa.fudaa.crue.modelling.calcul.importer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.apache.commons.lang.StringUtils; -import org.fudaa.ctulu.CtuluLog; -import org.fudaa.dodico.crue.common.io.CrueIOResu; -import org.openide.util.NbBundle; - -/** - * - * @author Frederic Deniger - */ -public class CLimMsImportKeyFromArray { - - public CLimMsImportKeyFromArray() { - } - - public CrueIOResu<Map<CLimMsImportKey, CLimMsImportValue>> extract(String[][] values) { - CrueIOResu<Map<CLimMsImportKey, CLimMsImportValue>> ioRes = new CrueIOResu<Map<CLimMsImportKey, CLimMsImportValue>>(); - Map<CLimMsImportKey, CLimMsImportValue> res = new HashMap<CLimMsImportKey, CLimMsImportValue>(); - CtuluLog log = new CtuluLog(); - //on parse les colonne - //calcul;EMH 1 (; - ioRes.setAnalyse(log); - ioRes.setMetier(res); - if (values.length == 0) { - return ioRes; - } - final int nbColumns = values[0].length; - if (nbColumns % 2 == 0) { - log.addSevereError(NbBundle.getMessage(CLimMsImportKeyFromArray.class, "climImport.wrongColumnsNumber")); - return ioRes; - } - List<String> emhs = new ArrayList<String>(); - for (int i = 1; i < nbColumns; i += 2) { - String emh1 = StringUtils.substringBeforeLast(values[0][i], "(").trim(); - String emh2 = StringUtils.substringBeforeLast(values[0][i + 1], "(").trim(); - if (!StringUtils.equals(emh1, emh2)) { - log.addSevereError(NbBundle.getMessage(CLimMsImportKeyFromArray.class, "climImport.wrongColumnsOrganization")); - } else { - emhs.add(emh1); - } - } - final int nbEmhs = emhs.size(); - for (int row = 1; row < values.length; row++) { - String[] val = values[row]; - if (val.length != nbColumns) { - log.addSevereError(NbBundle.getMessage(CLimMsImportKeyFromArray.class, "climImport.ligneWithWrongColumnsNumber"), Integer. - toString(row + 1)); - return ioRes; - } - String calcId = val[0]; - for (int i = 0; i < nbEmhs; i++) { - CLimMsImportKey key = new CLimMsImportKey(emhs.get(i), calcId); - CLimMsImportValue value = new CLimMsImportValue(val[1 + 2 * i], val[2 + 2 * i]); - res.put(key, value); - } - } - if (log.containsErrorOrSevereError()) { - return ioRes; - } - - - return ioRes; - } -} Copied: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLine.java (from rev 9158, trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKey.java) =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLine.java (rev 0) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLine.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -0,0 +1,65 @@ +/* + GPL 2 + */ +package org.fudaa.fudaa.crue.modelling.calcul.importer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import org.fudaa.dodico.crue.metier.factory.CruePrefix; + +/** + * + * @author Frederic Deniger + */ +public class CLimMsImportLine { + + private final String calculId; + private final List<CLimMsImportValue> values = new ArrayList<>(); + + public CLimMsImportLine(String calculId) { + this.calculId = calculId; + } + + public String getCalculId() { + return calculId; + } + + public List<CLimMsImportValue> getValues() { + return values; + } + + public boolean isNameValide() { + return calculId.startsWith(CruePrefix.P_CALCUL_PSEUDOPERMANENT) || calculId.startsWith(CruePrefix.P_CALCUL_TRANSITOIRE); + } + + public boolean isTransitoire() { + return calculId.startsWith(CruePrefix.P_CALCUL_TRANSITOIRE); + } + public boolean isPermanent() { + return calculId.startsWith(CruePrefix.P_CALCUL_PSEUDOPERMANENT); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 97 * hash + Objects.hashCode(this.calculId); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final CLimMsImportLine other = (CLimMsImportLine) obj; + if (!Objects.equals(this.calculId, other.calculId)) { + return false; + } + return true; + } + +} Copied: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLinesBuilder.java (from rev 9158, trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportKeyFromArray.java) =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLinesBuilder.java (rev 0) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportLinesBuilder.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -0,0 +1,87 @@ +/* + GPL 2 + */ +package org.fudaa.fudaa.crue.modelling.calcul.importer; + +import java.util.HashSet; +import java.util.Set; +import org.apache.commons.lang.StringUtils; +import org.fudaa.ctulu.CtuluLog; +import org.fudaa.dodico.crue.common.io.CrueIOResu; +import org.openide.util.NbBundle; + +/** + * Permet simplement de lire les données. Ne fait pas de tests métiers sur les données. Test uniquement si doublons dans les données + * + * @author Frederic Deniger + */ +public class CLimMsImportLinesBuilder { + + public CLimMsImportLinesBuilder() { + } + + public CrueIOResu<CLimMsImportData> extract(String[][] values) { + CrueIOResu<CLimMsImportData> ioRes = new CrueIOResu<>(); + CLimMsImportData res = new CLimMsImportData(); + CtuluLog log = new CtuluLog(); + //on parse les colonne + //calcul;EMH 1 (; + ioRes.setAnalyse(log); + ioRes.setMetier(res); + if (values.length == 0) { + return ioRes; + } + final int nbColumns = values[0].length; + if (nbColumns % 2 == 0) { + log.addSevereError(NbBundle.getMessage(CLimMsImportLinesBuilder.class, "climImport.wrongColumnsNumber")); + return ioRes; + } + for (int i = 1; i < nbColumns; i += 2) { + String emh1 = StringUtils.substringBeforeLast(values[0][i], "(").trim(); + String emh2 = StringUtils.substringBeforeLast(values[0][i + 1], "(").trim(); + if (!StringUtils.equals(emh1, emh2)) { + log.addSevereError(NbBundle.getMessage(CLimMsImportLinesBuilder.class, "climImport.wrongColumnsOrganization")); + } else if (res.getEmhs().contains(emh1)) { + log.addSevereError(NbBundle.getMessage(CLimMsImportLinesBuilder.class, "climImport.doublonEMH", emh1)); + } else { + res.getEmhs().add(emh1); + } + } + final int nbEmhs = res.getEmhs().size(); + Set<String> definedCalcul = new HashSet<>(); + for (int row = 1; row < values.length; row++) { + String[] val = values[row]; + if (val.length > nbColumns) { + log.addSevereError(NbBundle.getMessage(CLimMsImportLinesBuilder.class, "climImport.ligneWithWrongColumnsNumber"), Integer. + toString(row + 1), Integer.toString(nbColumns)); + return ioRes; + } + String calcId = val[0]; + if (definedCalcul.contains(calcId)) { + log.addSevereError(NbBundle.getMessage(CLimMsImportLinesBuilder.class, "climImport.doublonCalcul"), calcId); + } + definedCalcul.add(calcId); + CLimMsImportLine line = new CLimMsImportLine(calcId); + boolean existing = false; + for (int i = 0; i < nbEmhs; i++) { + String emh = res.getEmhs().get(i); + int idxCol = 2 + 2 * i; + if (val.length > idxCol) { + CLimMsImportValue value = new CLimMsImportValue(emh, val[idxCol - 1], val[idxCol]); + if (StringUtils.isNotBlank(value.getTypeClimM()) && StringUtils.isNotBlank(value.getValue())) { + line.getValues().add(value); + existing = true; + } + } + } + if (existing) { + res.getCalculs().add(line); + } + } + if (log.containsErrorOrSevereError()) { + return ioRes; + } + + return ioRes; + } +} Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportValue.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportValue.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImportValue.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -3,28 +3,38 @@ */ package org.fudaa.fudaa.crue.modelling.calcul.importer; +import java.util.Objects; + /** * * @author Frederic Deniger */ public class CLimMsImportValue { + private final String emh; private final String typeClimM; private final String value; - public CLimMsImportValue(String typeClimM, String value) { + public CLimMsImportValue(String emh, String typeClimM, String value) { + this.emh = emh; this.typeClimM = typeClimM; this.value = value; } - @Override - public int hashCode() { - int hash = 7; - hash = 59 * hash + (this.typeClimM != null ? this.typeClimM.hashCode() : 0); - hash = 59 * hash + (this.value != null ? this.value.hashCode() : 0); - return hash; + public String getEmh() { + return emh; } + + public boolean isPermanent() { + try { + Double.parseDouble(value); + return true; + } catch (NumberFormatException numberFormatException) { + } + return false; + } + public String getTypeClimM() { return typeClimM; } @@ -39,6 +49,15 @@ } @Override + public int hashCode() { + int hash = 7; + hash = 59 * hash + Objects.hashCode(this.emh); + hash = 59 * hash + Objects.hashCode(this.typeClimM); + hash = 59 * hash + Objects.hashCode(this.value); + return hash; + } + + @Override public boolean equals(Object obj) { if (obj == null) { return false; @@ -47,12 +66,16 @@ return false; } final CLimMsImportValue other = (CLimMsImportValue) obj; - if ((this.typeClimM == null) ? (other.typeClimM != null) : !this.typeClimM.equals(other.typeClimM)) { + if (!Objects.equals(this.emh, other.emh)) { return false; } - if ((this.value == null) ? (other.value != null) : !this.value.equals(other.value)) { + if (!Objects.equals(this.typeClimM, other.typeClimM)) { return false; } + if (!Objects.equals(this.value, other.value)) { + return false; + } return true; } + } Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImporter.java =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImporter.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/importer/CLimMsImporter.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -3,25 +3,29 @@ */ package org.fudaa.fudaa.crue.modelling.calcul.importer; +import gnu.trove.TLongObjectHashMap; import java.util.ArrayList; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; -import org.apache.commons.lang.StringUtils; +import java.util.MissingResourceException; import org.fudaa.ctulu.CtuluLog; import org.fudaa.dodico.crue.common.io.CrueIOResu; import org.fudaa.dodico.crue.common.transformer.TransformerHelper; import org.fudaa.dodico.crue.config.ccm.CrueConfigMetier; +import org.fudaa.dodico.crue.edition.bean.DonCLimMLineContent; +import org.fudaa.dodico.crue.metier.emh.Calc; +import org.fudaa.dodico.crue.metier.emh.CalcPseudoPerm; import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermBrancheOrificeManoeuvre; import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermItem; +import org.fudaa.dodico.crue.metier.emh.CalcTrans; import org.fudaa.dodico.crue.metier.emh.CalcTransBrancheOrificeManoeuvre; import org.fudaa.dodico.crue.metier.emh.CalcTransItem; import org.fudaa.dodico.crue.metier.emh.DonCLimM; import org.fudaa.dodico.crue.metier.emh.DonCLimMCommonItem; import org.fudaa.dodico.crue.metier.emh.DonLoiHYConteneur; import org.fudaa.dodico.crue.metier.emh.EMH; +import org.fudaa.dodico.crue.metier.emh.EMHScenario; import org.fudaa.dodico.crue.metier.emh.EnumSensOuv; import org.fudaa.dodico.crue.metier.emh.Loi; import org.fudaa.dodico.crue.metier.factory.DclmFactory; @@ -41,115 +45,145 @@ private final String[][] values; private final CrueConfigMetier ccm; private final DonLoiHYConteneur loiConteneur; + private final EMHScenario scenario; - public CLimMsImporter(CrueConfigMetier ccm, DonLoiHYConteneur loiConteneur, String[][] values) { + public CLimMsImporter(CrueConfigMetier ccm, EMHScenario scenario, String[][] values) { this.values = values; this.ccm = ccm; - this.loiConteneur = loiConteneur; + this.scenario = scenario; + this.loiConteneur = scenario.getLoiConteneur(); } DonClimMTableModel model; - public void importData() { - CLimMsImportKeyFromArray fromArray = new CLimMsImportKeyFromArray(); - CrueIOResu<Map<CLimMsImportKey, CLimMsImportValue>> importedData = fromArray.extract(values); + public DonClimMTableModel importData() { + CLimMsImportLinesBuilder fromArray = new CLimMsImportLinesBuilder(); + CrueIOResu<CLimMsImportData> importedData = fromArray.extract(values); final CtuluLog log = importedData.getAnalyse(); if (log.containsErrorOrSevereError()) { LogsDisplayer.displayError(log, NbBundle.getMessage(CLimMsImporter.class, "importCLimMs.bilan")); - return; + return null; } - Map<CLimMsImportKey, CLimMsImportValue> metier = importedData.getMetier(); - Set<CLimMsImportKey> notComputedData = new LinkedHashSet<CLimMsImportKey>(); - notComputedData.addAll(metier.keySet()); + + CLimMsImportData importedValues = importedData.getMetier(); + final Map<String, EMH> emhByNom = scenario.getIdRegistry().getEmhByNom(); + CtuluLog logCheckEMH = valideImportDatas(emhByNom, importedValues); + if (logCheckEMH.containsErrorOrSevereError()) { + LogsDisplayer.displayError(logCheckEMH, NbBundle.getMessage(CLimMsImporter.class, "importCLimMs.bilan")); + return null; + } + List<DonCLimMLineContent> dclimFinal = new ArrayList<>(); + List<EMH> emhsFinal = new ArrayList<>(); + for (String emh : importedValues.getEmhs()) { + emhsFinal.add(emhByNom.get(emh)); + } String versHaut = EnumSensOuv.OUV_VERS_HAUT.geti18n(); String versBas = EnumSensOuv.OUV_VERS_BAS.geti18n(); - for (int col = 0; col < model.getColumnCount(); col++) { - for (int row = 0; row < model.getRowCount(); row++) { - DonCLimM currentCLimM = (DonCLimM) model.getValueAt(row, col); - if (currentCLimM == null) { - continue; + for (CLimMsImportLine imported : importedValues.getCalculs()) { + //pas de lignes: on ignore + if (imported.getValues().isEmpty()) { + continue; + } +// DonCLimM currentCLimM = (DonCLimM) model.getValueAt(row, col); + String calculName = imported.getCalculId(); + boolean transitoire = imported.isTransitoire(); + Calc newCalcul = transitoire ? new CalcTrans() : new CalcPseudoPerm(); + newCalcul.setNom(calculName); + final TLongObjectHashMap<DonCLimM> valueByEmhUid = new TLongObjectHashMap<>(); + dclimFinal.add(new DonCLimMLineContent(newCalcul, valueByEmhUid)); + for (CLimMsImportValue value : imported.getValues()) { + String nom = value.getEmh(); + String typeClimM = value.getTypeClimM(); + EMH emh = emhByNom.get(nom); + Map<String, DclmFactory.CalcBuilder> toMapOfNom = findBuilders(newCalcul, emh); + DclmFactory.CalcBuilder builder = toMapOfNom.get(typeClimM); + DonCLimMCommonItem create = null; + if (builder != null) { + create = builder.create(ccm); + } else if (versHaut.equals(typeClimM) || versBas.equals(typeClimM)) { + final DclmFactory.CalcBuilder<? extends DonCLimMCommonItem> ouvBuilder = transitoire ? new DclmFactory.CalcTransBrancheOrificeManoeuvreCreator() : new DclmFactory.CalcPseudoPermBrancheOrificeManoeuvreCreator(); + if (toMapOfNom.containsKey(ouvBuilder.geti18n())) { + create = ouvBuilder.create(ccm); + EnumSensOuv sens = versHaut.equals(typeClimM) ? EnumSensOuv.OUV_VERS_HAUT : EnumSensOuv.OUV_VERS_BAS; + if (transitoire) { + ((CalcTransBrancheOrificeManoeuvre) create).setSensOuv(sens); + } else { + ((CalcPseudoPermBrancheOrificeManoeuvre) create).setSensOuv(sens); + } + } } - String cal = currentCLimM.getCalculParent().getNom(); - String nom = currentCLimM.getEmh().getNom(); - CLimMsImportKey key = new CLimMsImportKey(nom, cal); - CLimMsImportValue value = metier.get(key); - notComputedData.remove(key); - if (value != null && StringUtils.isNotBlank(value.getValue())) { - String typeClimM = value.getTypeClimM(); - EMH emh = currentCLimM.getEmh(); - Map<String, DclmFactory.CalcBuilder> toMapOfNom = findBuilders(currentCLimM); - DclmFactory.CalcBuilder builder = toMapOfNom.get(typeClimM); - boolean transitoire = currentCLimM.getCalculParent().isTransitoire(); - DonCLimMCommonItem create = null; - if (builder != null) { - create = builder.create(ccm); - } else if (versHaut.equals(typeClimM) || versBas.equals(typeClimM)) { - final DclmFactory.CalcBuilder<? extends DonCLimMCommonItem> ouvBuilder = transitoire ? new DclmFactory.CalcTransBrancheOrificeManoeuvreCreator() : new DclmFactory.CalcPseudoPermBrancheOrificeManoeuvreCreator(); - if (toMapOfNom.containsKey(ouvBuilder.geti18n())) { - create = ouvBuilder.create(ccm); - EnumSensOuv sens = versHaut.equals(typeClimM) ? EnumSensOuv.OUV_VERS_HAUT : EnumSensOuv.OUV_VERS_BAS; - if (transitoire) { - ((CalcTransBrancheOrificeManoeuvre) create).setSensOuv(sens); - } else { - ((CalcPseudoPermBrancheOrificeManoeuvre) create).setSensOuv(sens); - } + if (create == null) { + log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.typeNotValid", typeClimM, emh. + getNom())); + } else { + create.setEmh(emh); + create.setCalculParent(newCalcul); + if (transitoire) { + CalcTransItem permItem = (CalcTransItem) create; + List<Loi> filterDLHY = LoiHelper.filterDLHY(loiConteneur, permItem.getTypeLoi()); + Loi loi = TransformerHelper.toMapOfId(filterDLHY).get(value.getValue().toUpperCase()); + if (loi != null) { + permItem.setLoi(loi); + } else { + create = null; + log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.loiNotValid", value.getValue(), emh.getNom(), calculName)); } - } - if (create == null) { - log.addWarn(org.openide.util.NbBundle.getMessage(CLimMsImporter.class, "importClimMs.typeNotValid", typeClimM, emh. - getNom())); } else { - create.setEmh(emh); - create.setCalculParent(currentCLimM.getCalculParent()); - if (transitoire) { - CalcTransItem permItem = (CalcTransItem) create; - List<Loi> filterDLHY = LoiHelper.filterDLHY(loiConteneur, permItem.getTypeLoi()); - Loi loi = TransformerHelper.toMapOfId(filterDLHY).get(value.getValue().toUpperCase()); - if (loi != null) { - permItem.setLoi(loi); - } else { - create = null; - log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.loiNotValid", value.getValue(), emh.getNom(), currentCLimM. - getCalculParent().getNom())); - } - } else { - try { - ((CalcPseudoPermItem) create).setValue(Double.parseDouble(value.getValue())); - } catch (NumberFormatException numberFormatException) { - create = null; - log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.valueNotValid", value.getValue(), emh.getNom(), currentCLimM. - getCalculParent().getNom())); + try { + ((CalcPseudoPermItem) create).setValue(Double.parseDouble(value.getValue())); + } catch (NumberFormatException numberFormatException) { + create = null; + log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.valueNotValid", value.getValue(), emh.getNom(), calculName)); - } - } - if (create != null) { - model.setValueAt(create, row, col); - } } } } - } - if (!notComputedData.isEmpty()) { - for (CLimMsImportKey cLimMsImportKey : notComputedData) { - log.addWarn(NbBundle.getMessage(CLimMsImporter.class, "importClimMs.skipLine", cLimMsImportKey.toString())); - } - } if (log.isNotEmpty()) { LogsDisplayer.displayError(log, NbBundle.getMessage(CLimMsImporter.class, "importCLimMs.bilan")); } + return new DonClimMTableModel(dclimFinal, emhsFinal); } + private CtuluLog valideImportDatas(Map<String, EMH> emhByNom, CLimMsImportData values) throws MissingResourceException { + CtuluLog logCheckEMH = new CtuluLog(); + for (String emh : values.getEmhs()) { + if (!emhByNom.containsKey(emh)) { + logCheckEMH.addSevereError(NbBundle.getMessage(CLimMsImporter.class, "climImport.unknownEMH"), emh); + } + } + for (CLimMsImportLine calcul : values.getCalculs()) { + if (!calcul.isNameValide()) { + logCheckEMH.addSevereError(NbBundle.getMessage(CLimMsImporter.class, "climImport.nameCalculUnknown"), calcul.getCalculId()); + } else { + boolean ispermanent = calcul.isPermanent(); + for (CLimMsImportValue value : calcul.getValues()) { + if (value.isPermanent() != ispermanent) { + if (ispermanent) { + logCheckEMH.addSevereError(NbBundle.getMessage(CLimMsImporter.class, "climImport.calculPermanentNoPermanentValue"), calcul. + getCalculId(), value.getEmh()); + } else { + logCheckEMH.addSevereError(NbBundle.getMessage(CLimMsImporter.class, "climImport.calculTransitoireNoTransitoireValue"), calcul. + getCalculId(), value.getEmh()); + } + } + } + } + + } + return logCheckEMH; + } + public void setTableModel(DonClimMTableModel tableModel) { this.model = tableModel; } - protected Map<String, DclmFactory.CalcBuilder> findBuilders(DonCLimM clim) { - List<DclmFactory.CalcBuilder> creators = new ArrayList<DclmFactory.CalcBuilder>(DclmFactory.getCreatorsSens(clim.getCalculParent())); + protected Map<String, DclmFactory.CalcBuilder> findBuilders(Calc calcul, EMH emh) { + List<DclmFactory.CalcBuilder> creators = new ArrayList<>(DclmFactory.getCreatorsSens(calcul)); for (Iterator<DclmFactory.CalcBuilder> it = creators.iterator(); it.hasNext();) { DclmFactory.CalcBuilder calcBuilder = it.next(); - if (!calcBuilder.isAccepted(clim.getEmh())) { + if (!calcBuilder.isAccepted(emh)) { it.remove(); } } Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/resources/org/fudaa/fudaa/crue/modelling/calcul/importer/Bundle.properties =================================================================== --- trunk/soft/fudaa-crue/ui-modelling/src/main/resources/org/fudaa/fudaa/crue/modelling/calcul/importer/Bundle.properties 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-modelling/src/main/resources/org/fudaa/fudaa/crue/modelling/calcul/importer/Bundle.properties 2015-11-05 22:02:10 UTC (rev 9192) @@ -4,9 +4,16 @@ import.cini.nbModifiedValue={0} valeurs modifi\u00e9es climImport.wrongColumnsNumber=Le nombre de colonnes du fichier d'import doit \u00eatre impair. Ent\u00eate attendue: colonne 1=nom calcul; colonne 2=emh 1 (type);emh 1 (valeur) climImport.wrongColumnsOrganization=Dans la ligne d'ent\u00eate, il doit y avoir 2 colonnes par EMH: type et valeur. Ent\u00eate attendue: colonne 1=nom calcul; colonne 2=emh 1 (type);emh 1 (valeur) -climImport.ligneWithWrongColumnsNumber=La ligne {0} doit contenir {1} colonnes +climImport.ligneWithWrongColumnsNumber=La ligne {0} doit contenir au maximum {1} colonnes +climImport.doublonCalcul=Le calcul {0} est d\u00e9fini plusieurs fois +climImport.doublonEMH=L''EMH {0} est d\u00e9finie plusieurs fois dans les DCLM importCLimMs.bilan=Import des CLimMs importClimMs.typeNotValid=Le type {0} n''est pas valide pour l''EMH {1} importClimMs.valueNotValid=La valeur {0} pour l''EMH {1} du calcul {2} n''est pas valide importClimMs.loiNotValid=La loi {0} pour l''EMH {1} du calcul {2} n''est pas pr\u00e9sente dans le sc\u00e9nario importClimMs.skipLine=La ligne {0} du fichier d''import a \u00e9t\u00e9 ignor\u00e9e +climImport.unknownEMH=L''EMH {0} n''existe pas +climImport.nameCalculUnknown=Le calcul {0} ne suit pas la convention de nommage: le pr\u00e9fixe doit \u00eatre CC_P pour pseudo-permanent et CC_T pour transitoire. +climImport.NonConsistentDclimValue=Les valeurs du calcul {0} ne sont pas consistentes ( permanentes et transitoire) +climImport.calculPermanentNoPermanentValue=Le calcul {0} de type pseudo-permanent contient une valeur non coh\u00e9rente pour l''EMH {0} +climImport.calculTransitoireNoTransitoireValue=Le calcul {0} de type transitoire contient une valeur non coh\u00e9rente pour l''EMH {0} Modified: trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonCLimMLineBuilder.java =================================================================== --- trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonCLimMLineBuilder.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonCLimMLineBuilder.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -60,7 +60,7 @@ lines.add(new DonCLimMLineContent(ordCalc.getCalc(), dclmsByEMHId)); } List<EMH> allSimpleEMH = HierarchyChildFactory.getEMHInNetworkOrder(null, scenario); - List<EMH> emhToDisplay = new ArrayList<EMH>(); + List<EMH> emhToDisplay = new ArrayList<>(); for (EMH emh : allSimpleEMH) { if (emhs.contains(emh.getUiId())) { emhToDisplay.add(emh); @@ -74,7 +74,12 @@ DonClimMTableModel res = build(scenario, editable); res.setEditable(true); - List<String> rows = new ArrayList<String>(); + return createScrollPane(res, ccm, scenario, editable, loiDisplayer, rowPopupReceiver); + } + + public Pair<JScrollPane, DonClimMTableModel> createScrollPane(DonClimMTableModel res, CrueConfigMetier ccm, + EMHScenario scenario, boolean editable, final LoiDisplayer loiDisplayer, CtuluPopupListener.PopupReceiver rowPopupReceiver) { + List<String> rows = new ArrayList<>(); List<DonCLimMLineContent> dclims = res.getDclims(); for (DonCLimMLineContent donCLimMLine : dclims) { rows.add(donCLimMLine.getCalc().getNom()); @@ -116,7 +121,6 @@ } } - } } }); Modified: trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonClimMTableModel.java =================================================================== --- trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonClimMTableModel.java 2015-11-05 22:01:14 UTC (rev 9191) +++ trunk/soft/fudaa-crue/ui-views/src/main/java/org/fudaa/fudaa/crue/views/DonClimMTableModel.java 2015-11-05 22:02:10 UTC (rev 9192) @@ -5,8 +5,11 @@ import org.fudaa.dodico.crue.edition.bean.DonCLimMLineContent; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.swing.table.AbstractTableModel; +import org.fudaa.dodico.crue.metier.emh.Calc; import org.fudaa.dodico.crue.metier.emh.DonCLimM; import org.fudaa.dodico.crue.metier.emh.EMH; @@ -16,8 +19,8 @@ */ public class DonClimMTableModel extends AbstractTableModel { - private final List<DonCLimMLineContent> dclims; - private final List<EMH> emhs; + private List<DonCLimMLineContent> dclims; + private List<EMH> emhs; private boolean editable; public DonClimMTableModel(List<DonCLimMLineContent> dclims, List<EMH> emhs) { @@ -29,6 +32,14 @@ return editable; } + public Map<String, Calc> getCalcByNom() { + Map<String, Calc> res = new HashMap<>(); + for (DonCLimMLineContent dclim : dclims) { + res.put(dclim.getCalc().getNom(), dclim.getCalc()); + } + return res; + } + public void setEditable(boolean editable) { this.editable = editable; } @@ -78,4 +89,6 @@ public List<EMH> getEmhs() { return emhs; } + + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |