All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fudaa.fudaa.meshviewer.persistence.MvFrontiere3DPersistence Maven / Gradle / Ivy

/*
 * @creation 26 sept. 06
 * @modification $Date: 2007-02-02 11:22:29 $
 * @license GNU General Public License 2
 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
 * @mail [email protected]
 */
package org.fudaa.fudaa.meshviewer.persistence;

import com.memoire.fu.FuLog;
import gnu.trove.TObjectIntHashMap;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.fudaa.ctulu.CsvWriter;
import org.fudaa.ctulu.CtuluArkLoader;
import org.fudaa.ctulu.CtuluArkSaver;
import org.fudaa.ctulu.CtuluLibString;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.collection.CtuluArrayDouble;
import org.fudaa.ctulu.collection.CtuluArrayInteger;
import org.fudaa.ctulu.collection.CtuluCollectionDouble;
import org.fudaa.ctulu.collection.CtuluCollectionInteger;
import org.fudaa.dodico.fortran.FortranReader;
import org.fudaa.ebli.calque.BCalque;
import org.fudaa.ebli.calque.BCalquePersistenceSingle;
import org.fudaa.ebli.calque.BCalqueSaverInterface;
import org.fudaa.ebli.calque.BCalqueSaverSingle;
import org.fudaa.ebli.calque.BCalqueSaverTargetInterface;
import org.fudaa.fudaa.meshviewer.layer.MvFrontierLayerAbstract;
import org.fudaa.fudaa.meshviewer.model.Mv3DFrontierData;

/**
 * @author fred deniger
 * @version $Id: MvFrontiere3DPersistence.java,v 1.5 2007-02-02 11:22:29 deniger Exp $
 */
public class MvFrontiere3DPersistence extends BCalquePersistenceSingle {

  @Override
  public BCalqueSaverInterface saveIn(final BCalque _cqToSave, final CtuluArkSaver _saver,
      final String _parentDirEntry, final String _parentDirIndice) {
    final BCalqueSaverSingle res = (BCalqueSaverSingle) super.saveIn(_cqToSave, _saver, _parentDirEntry,
        _parentDirIndice);
    final MvFrontierLayerAbstract layer = (MvFrontierLayerAbstract) _cqToSave;
    if (layer.getData() != null) {
      final String entry = getEntryBase(_cqToSave, _parentDirEntry, res.getId()) + ".csv";
      try {
        _saver.startEntry(entry);
        final CsvWriter writer = new CsvWriter(_saver.getOutStream());
        writer.setSepChar(' ');
        writer.writeLine("#Nombre de fronti?re interne");
        writer.writeLine("#Number of intern frontier");
        final Mv3DFrontierData data = layer.getData();
        final CtuluCollectionDouble depth = data.getElevation();
        final CtuluCollectionInteger type = data.getType();
        final int size = depth.getSize();
        writer.writeLine(CtuluLibString.getString(size));
        writer.writeLine("#Type de la frontiere;Hauteur b?timent");
        writer.writeLine("#Type of the frontier;Building Depth");
        for (int i = 0; i < size; i++) {
          writer.appendString(Mv3DFrontierData.getFileIdx(type.getValue(i)));
          writer.appendDouble(depth.getValue(i));
          writer.newLine();
        }
        writer.flush();

      } catch (final IOException _evt) {
        FuLog.error(_evt);
      }
    }

    return res;
  }

  @Override
  protected boolean restoreFromSpecific(final BCalqueSaverInterface _saver, final CtuluArkLoader _loader,
      final BCalqueSaverTargetInterface _parentPanel, final BCalque _parentCalque, final String _parentDirEntry,
      final String _entryName, final ProgressionInterface _proj) {

    final BCalque cq = findCalque(_saver, _parentPanel, _parentCalque);
    if (cq == null) { return true; }
    final InputStream str = _loader.getReader(_parentDirEntry, _entryName + ".csv");
    int nbRead = 0;
    int nbFrIntern = 0;
    if (str != null) {
      final FortranReader reader = new FortranReader(new InputStreamReader(str));
      reader.setJumpBlankLine(true);
      reader.setJumpCommentLine(true);
      reader.setCommentInOneField("#");

      try {
        reader.readFields();
        nbFrIntern = reader.intField(0);
        final MvFrontierLayerAbstract layer = (MvFrontierLayerAbstract) cq;
        if (nbFrIntern != layer.getModeleCl().getFr().getNbFrontierIntern()) {
          FuLog.warning("FMV: le nombre de frontiere du fichier csv est incoh?rent lu " + nbFrIntern);
          return true;
        }
        final Mv3DFrontierData data = layer.createData();
        final CtuluArrayDouble depth = data.getElevation();
        final CtuluArrayInteger type = data.getType();
        final TObjectIntHashMap equiv = Mv3DFrontierData.getIdIdxMap();
        reader.readFields();
        String r = reader.getLine();
        while (r != null && nbRead < nbFrIntern) {
          type.set(nbRead, equiv.get(reader.stringField(0)));
          depth.set(nbRead, reader.doubleField(1));
          nbRead++;
          reader.readFields();
          r = reader.getLine();

        }

      } catch (final NumberFormatException _evt) {
        FuLog.error(_evt);
      } catch (final EOFException _evt) {

      } catch (final IOException _evt) {
        FuLog.error(_evt);

      }
    }
    if (nbRead != nbFrIntern) {
      FuLog.warning("FMV: le nombre de frontiere lu dans le  fichier csv est incoh?rent lu " + nbRead + "!= "
          + nbFrIntern);

    }
    return true;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy