/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.gui.util;
import net.codjo.dataprocess.client.RepositoryClientHelper;
import net.codjo.dataprocess.common.codec.TreatmentRootCodec;
import net.codjo.dataprocess.common.exception.RepositoryException;
import net.codjo.dataprocess.common.model.TreatmentModel;
import net.codjo.dataprocess.common.model.TreatmentRoot;
import net.codjo.mad.client.request.RequestException;
import net.codjo.mad.gui.framework.MutableGuiContext;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.DefaultListModel;
/**
* Model de donn�es utilitaire : stock notamment la map repositoryMap qui sert de cache entre l'IHM et la
* BDD.
*/
public class RepositoryWindowModel {
private static final String ENCODING = "ISO-8859-1";
private Map<String, TreatmentRoot> repositoryMap = new HashMap<String, TreatmentRoot>();
public TreatmentRoot getTreatmentRoot(MutableGuiContext ctxt, int repositoryId) throws RequestException {
TreatmentRoot treatmentRoot = repositoryMap.get(Integer.toString(repositoryId));
if (treatmentRoot == null) {
treatmentRoot = TreatmentRootCodec.decode(RepositoryClientHelper.getRepositoryContent(ctxt,
repositoryId));
}
return treatmentRoot;
}
public void addTreatmentRootToMap(int repositoryId, TreatmentRoot treatmentRoot) {
repositoryMap.put(Integer.toString(repositoryId), treatmentRoot);
}
public void deleteTreatmentRootFromMap(int repositoryId) {
repositoryMap.remove(Integer.toString(repositoryId));
}
public void saveRepositoryMap(MutableGuiContext ctxt) throws RepositoryException, RequestException {
for (Entry<String, TreatmentRoot> entry : repositoryMap.entrySet()) {
TreatmentRoot treatmentRoot = entry.getValue();
String content = TreatmentRootCodec.encode(treatmentRoot);
content = content.replace("<?xml version=\"1.0\"?>",
"<?xml version=\"1.0\" encoding=\"" + ENCODING + "\"?>");
String treatmentId =
RepositoryClientHelper.updateRepository(ctxt, Integer.parseInt(entry.getKey()), content);
if (!"OK".equals(treatmentId)) {
throw new RepositoryException(treatmentId
+ " est trop long ! La sauvegarde n'a pas �t� effectu�e.");
}
}
}
public void initTreatmentListModel(MutableGuiContext ctxt,
String repositoryId,
DefaultListModel listModel,
boolean sort) throws RequestException {
TreatmentRoot treatmentRoot = getTreatmentRoot(ctxt, Integer.parseInt(repositoryId));
addTreatmentRootToMap(Integer.parseInt(repositoryId), treatmentRoot);
listModel.clear();
List<TreatmentModel> treatmentList = treatmentRoot.getTreatmentModelList();
if (sort) {
TreatmentModel[] treatmentListAsArray = treatmentList
.toArray(new TreatmentModel[treatmentList.size()]);
Arrays.sort(treatmentListAsArray, TreatmentModel.getIdComparator());
treatmentList = Arrays.asList(treatmentListAsArray);
}
if (treatmentList != null) {
for (TreatmentModel treatmentModel : treatmentList) {
listModel.addElement(treatmentModel);
}
}
}
}